<?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>93758</bug_id>
          
          <creation_ts>2012-08-10 18:05:39 -0700</creation_ts>
          <short_desc>Rename LayoutTestController to TestRunner in DumpRenderTree</short_desc>
          <delta_ts>2012-08-14 00:36:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          <dependson>88210</dependson>
    
    <dependson>93899</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>692998</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 18:05:39 -0700</bug_when>
    <thetext>Rename LayoutTestController to TestRuner in DumpRenderTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693004</commentid>
    <comment_count>1</comment_count>
      <attachid>157847</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 18:11:04 -0700</bug_when>
    <thetext>Created attachment 157847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693005</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 18:12:38 -0700</bug_when>
    <thetext>One is one epic patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693008</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-10 18:16:36 -0700</bug_when>
    <thetext>Attachment 157847 did not pass style-queue:

Tools/DumpRenderTree/qt/TestRunnerQt.cpp:147:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:322:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:329:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:336:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:352:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:358:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:364:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.cpp:515:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.h:52:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Tools/DumpRenderTree/qt/TestRunnerQt.h:134:  Missing space inside { }.  [whitespace/braces] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:147:  Missing space inside { }.  [whitespace/braces] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:154:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:155:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:156:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:163:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:164:  The parameter name &quot;enabled&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:166:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:167:  The parameter name &quot;locale&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:169:  The parameter name &quot;isKey&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:170:  The parameter name &quot;isFirst&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:173:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:174:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:176:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:177:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:178:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:181:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:197:  The parameter name &quot;quota&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:204:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:211:  The parameter name &quot;enabled&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:218:  Missing space inside { }.  [whitespace/braces] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:222:  Missing space inside { }.  [whitespace/braces] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:243:  Missing space inside { }.  [whitespace/braces] [5]
Tools/DumpRenderTree/qt/TestRunnerQt.h:254:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/TestRunner.cpp:659:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1027:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1042:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1151:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1234:  One space before end of line comments  [whitespace/comments] [5]
Tools/DumpRenderTree/TestRunner.cpp:1234:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1235:  One space before end of line comments  [whitespace/comments] [5]
Tools/DumpRenderTree/TestRunner.cpp:1235:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1236:  One space before end of line comments  [whitespace/comments] [5]
Tools/DumpRenderTree/TestRunner.cpp:1236:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1246:  Use 0 instead of NULL.  [readability/null] [5]
Tools/DumpRenderTree/TestRunner.cpp:1814:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Tools/DumpRenderTree/TestRunner.h:46:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:89:  The parameter name &quot;acceptsEditing&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:93:  The parameter name &quot;quota&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:98:  The parameter name &quot;quota&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:101:  The parameter name &quot;iconDatabaseEnabled&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:116:  The parameter name &quot;cycles&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:121:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:123:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:124:  The parameter name &quot;enable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:247:  The parameter name &quot;waitToDump&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:260:  The parameter name &quot;windowIsKey&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:263:  The parameter name &quot;alwaysAcceptCookies&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:323:  The parameter name &quot;locale&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:329:  The parameter name &quot;serialize&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:341:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/DumpRenderTree/TestRunner.h:426:  One space before end of linFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/D...&quot; exit_code: 1
e comments  [whitespace/comments] [5]
Tools/DumpRenderTree/win/TestRunnerBlackWin.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/win/TestRunnerBlackWin.cpp:54:  Use &apos;using namespace std;&apos; instead of &apos;using std::string;&apos;.  [build/using_std] [4]
Tools/DumpRenderTree/win/TestRunnerBlackWin.cpp:55:  Use &apos;using namespace std;&apos; instead of &apos;using std::wstring;&apos;.  [build/using_std] [4]
Tools/DumpRenderTree/win/TestRunnerBlackWin.cpp:275:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Tools/DumpRenderTree/win/TestRunnerBlackWin.cpp:626:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/win/TestRunnerBlackWin.cpp:684:  One space before end of line comments  [whitespace/comments] [5]
Tools/DumpRenderTree/chromium/DumpRenderTreeTestRunner.cpp:1586:  One line control clauses should not use braces.  [whitespace/braces] [4]
Tools/DumpRenderTree/gtk/TestRunnerBlackGtk.cpp:44:  Streams are highly discouraged.  [readability/streams] [3]
Tools/DumpRenderTree/gtk/TestRunnerBlackGtk.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 72 in 60 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>693009</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-10 18:22:37 -0700</bug_when>
    <thetext>1.63MB patch is too large :-&lt;
You don&apos;t need to do everything at once. You can rename file names without renaming class names and instance names.  You can rename one by one for each of ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693013</commentid>
    <comment_count>5</comment_count>
      <attachid>157847</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-10 18:40:46 -0700</bug_when>
    <thetext>Comment on attachment 157847
Patch

Attachment 157847 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13464946</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693023</commentid>
    <comment_count>6</comment_count>
      <attachid>157847</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-10 19:05:52 -0700</bug_when>
    <thetext>Comment on attachment 157847
Patch

Attachment 157847 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13477385</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693025</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 19:11:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 1.63MB patch is too large :-&lt;
&gt; You don&apos;t need to do everything at once. You can rename file names without renaming class names and instance names.  You can rename one by one for each of ports.

Okay. Let&apos;s do file names first then. Unfortunately, splitting the patch per port isn&apos;t easy because class names, etc... are shared among all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693028</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-10 19:19:06 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; 1.63MB patch is too large :-&lt;
&gt; &gt; You don&apos;t need to do everything at once. You can rename file names without renaming class names and instance names.  You can rename one by one for each of ports.
&gt; 
&gt; Unfortunately, splitting the patch per port isn&apos;t easy because class names, etc... are shared among all ports.

Ah, It&apos;s right.
I think  DRT/Chromium doesn&apos;t depend on other DRT files and you can handle Chromium port separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693431</commentid>
    <comment_count>9</comment_count>
      <attachid>157847</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-13 00:36:50 -0700</bug_when>
    <thetext>Comment on attachment 157847
Patch

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

&gt; Tools/ChangeLog:41
&gt; +        * DumpRenderTree/efl/TestRunnerBlackEfl.cpp: Copied from Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp.

It looks TestRunnerEfl.cpp is correct, isn&apos;t it? When I change this to TestRunnerEfl.cpp, there is no build break. :)

&gt; Tools/ChangeLog:45
&gt; +        * DumpRenderTree/gtk/TestRunnerBlackGtk.cpp: Copied from Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp.

ditto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694529</commentid>
    <comment_count>10</comment_count>
      <attachid>158220</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 22:57:48 -0700</bug_when>
    <thetext>Created attachment 158220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694584</commentid>
    <comment_count>11</comment_count>
      <attachid>158220</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-14 00:09:19 -0700</bug_when>
    <thetext>Comment on attachment 158220
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694606</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-14 00:36:48 -0700</bug_when>
    <thetext>Committed r125516: &lt;http://trac.webkit.org/changeset/125516&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157847</attachid>
            <date>2012-08-10 18:11:04 -0700</date>
            <delta_ts>2012-08-13 22:57:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93758-20120810181035.patch</filename>
            <type>text/plain</type>
            <size>1714221</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEyNTM0MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg0IEBACisyMDEyLTA4LTExICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSBMYXlvdXRUZXN0Q29udHJvbGxlciB0byBUZXN0UnVuZXIgaW4gRHVt
cFJlbmRlclRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkzNzU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gs
IHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChP
T1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmg6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmNwcDoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuaDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5k
ZXJUcmVlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRl
c3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvYmxhY2tiZXJyeS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHA6IENvcGllZCBmcm9tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0Jl
cnJ5LmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJl
ZS5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0R1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lci5oOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oLgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNhdGlvblBy
ZXNlbnRlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuY3BwOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBlcm1pc3Npb25zLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvZWZsL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1w
UmVuZGVyVHJlZS5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJU
cmVlQ2hyb21lLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRy
ZWVWaWV3LmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRWRpdGluZ0NhbGxiYWNr
cy5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVy
RWZsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvVGVzdFJ1bm5l
ckJsYWNrRWZsLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91
dFRlc3RDb250cm9sbGVyRWZsLmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvRHVt
cFJlbmRlclRyZWUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9FZGl0aW5nQ2Fs
bGJhY2tzLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9UZXN0
UnVubmVyQmxhY2tHdGsuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWVXaW5kb3cubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0VkaXRpbmdE
ZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0hpc3RvcnlEZWxlZ2F0ZS5tbToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06
IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnRN
YWMubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLmg6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLm1tOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbTogQ29waWVkIGZyb20gVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlLnBybzoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVz
dENvbnRyb2xsZXJRdC5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L1Rl
c3RSdW5uZXJRdC5jcHA6IENvcGllZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L1Rlc3RS
dW5uZXJRdC5oOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERlc2t0b3BO
b3RpZmljYXRpb25QcmVzZW50ZXIuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9E
dW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5k
ZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVn
YXRlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNw
cDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuaDoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyQmxhY2tXaW4uY3BwOiBDb3BpZWQgZnJv
bSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwLgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS93c2NyaXB0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0R1bXBS
ZW5kZXJUcmVlV3guY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L1Rl
c3RSdW5uZXJCbGFja1d4LmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gv
TGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAuCisKIDIwMTItMDgtMTAgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgcnVuLXBlcmYtdGVzdHMgc2hvdWxkIHVwbG9h
ZCBtZW1vcnkgc3RhdGlzdGljcyB0byBwZXJmLW8tbWF0aWMKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNiw4ICs2
LDggQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAnLAogICAg
ICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIu
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vTW9ja0dyYW1tYXJDaGVjay5jcHAnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL01vY2tHcmFtbWFyQ2hlY2suaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vTW9ja1NwZWxsQ2hlY2suY3BwJywKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDEyIEBACiBzdGQ6OndzdHJp
bmcgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGNvbnN0IHN0ZDo6d3N0cmluZyYgdXJsKTsKICNl
bmRpZgogCi1jbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKK2NsYXNzIFRlc3RSdW5uZXI7CiAK
IGV4dGVybiB2b2xhdGlsZSBib29sIGRvbmU7CiAKIC8vIEZJWE1FOiBUaGlzIGlzIGEgYmFkIGFi
c3RyYWN0aW9uLiAgV2Ugc2hvdWxkIGluc3RlZCBwYXNzIHRoaXMgdG8gb3RoZXIgY29udHJvbGxl
ciBvYmplY3RzIHdoaWNoIG5lZWQgYWNjZXNzIHRvIGl0LgotZXh0ZXJuIFJlZlB0cjxMYXlvdXRU
ZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOworZXh0ZXJuIFJlZlB0cjxUZXN0
UnVubmVyPiBnVGVzdFJ1bm5lcjsKIAogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlXZWJWaWV3
KCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjUyMCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAu
b3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxl
ci5oIgotCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5o
IgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0
UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotTGF5b3V0VGVz
dENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0
UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCi0gICAgOiBt
X2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoZmFsc2UpCi0gICAgLCBt
X2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MoZmFsc2UpCi0gICAgLCBtX2R1
bXBBc0F1ZGlvKGZhbHNlKQotICAgICwgbV9kdW1wQXNQREYoZmFsc2UpCi0gICAgLCBtX2R1bXBB
c1RleHQoZmFsc2UpCi0gICAgLCBtX2R1bXBCYWNrRm9yd2FyZExpc3QoZmFsc2UpCi0gICAgLCBt
X2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZhbHNlKQotICAgICwgbV9kdW1wQ2hpbGRG
cmFtZXNBc1RleHQoZmFsc2UpCi0gICAgLCBtX2R1bXBET01Bc1dlYkFyY2hpdmUoZmFsc2UpCi0g
ICAgLCBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrcyhmYWxzZSkKLSAgICAsIG1fZHVtcEVkaXRpbmdD
YWxsYmFja3MoZmFsc2UpCi0gICAgLCBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MoZmFsc2UpCi0g
ICAgLCBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soZmFsc2UpCi0gICAgLCBtX2R1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9kdW1wSGlzdG9y
eURlbGVnYXRlQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKGZhbHNlKQotICAgICwgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhmYWxzZSkK
LSAgICAsIG1fZHVtcFNlbGVjdGlvblJlY3QoZmFsc2UpCi0gICAgLCBtX2R1bXBTb3VyY2VBc1dl
YkFyY2hpdmUoZmFsc2UpCi0gICAgLCBtX2R1bXBTdGF0dXNDYWxsYmFja3MoZmFsc2UpCi0gICAg
LCBtX2R1bXBUaXRsZUNoYW5nZXMoZmFsc2UpCi0gICAgLCBtX2R1bXBJY29uQ2hhbmdlcyhmYWxz
ZSkKLSAgICAsIG1fZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrKGZhbHNlKQotICAgICwgbV9kdW1w
V2lsbENhY2hlUmVzcG9uc2UoZmFsc2UpCi0gICAgLCBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzKHRy
dWUpCi0gICAgLCBtX2NhbGxDbG9zZU9uV2ViVmlld3ModHJ1ZSkKLSAgICAsIG1fY2FuT3Blbldp
bmRvd3MoZmFsc2UpCi0gICAgLCBtX2Nsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSh0
cnVlKQotICAgICwgbV9uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdChmYWxzZSkKLSAgICAs
IG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyhmYWxzZSkKLSAgICAsIG1fdGVzdE9uc2NyZWVu
KGZhbHNlKQotICAgICwgbV90ZXN0UmVwYWludChmYWxzZSkKLSAgICAsIG1fdGVzdFJlcGFpbnRT
d2VlcEhvcml6b250YWxseShmYWxzZSkKLSAgICAsIG1fd2FpdFRvRHVtcChmYWxzZSkKLSAgICAs
IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoZmFsc2UpCi0gICAgLCBtX3dpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChmYWxzZSkKLSAgICAsIG1fd2luZG93SXNLZXkodHJ1
ZSkKLSAgICAsIG1fYWx3YXlzQWNjZXB0Q29va2llcyhmYWxzZSkKLSAgICAsIG1fZ2xvYmFsRmxh
ZyhmYWxzZSkKLSAgICAsIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoZmFsc2UpCi0gICAg
LCBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSkKLSAgICAsIG1faGFuZGxlc0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlcyhmYWxzZSkKLSAgICAsIG1faXNQcmludGluZyhmYWxzZSkKLSAgICAs
IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQotICAgICwgbV91c2VEZWZlcnJlZEZy
YW1lTG9hZGluZyhmYWxzZSkKLSAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQot
ICAgICwgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChmYWxzZSkK
LSAgICAsIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQo
ZmFsc2UpCi0gICAgLCBtX2N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihmYWxzZSkgCi0gICAgLCBt
X3Rlc3RQYXRoT3JVUkwodGVzdFBhdGhPclVSTCkKLSAgICAsIG1fZXhwZWN0ZWRQaXhlbEhhc2go
ZXhwZWN0ZWRQaXhlbEhhc2gpCi0gICAgLCBtX3RpdGxlVGV4dERpcmVjdGlvbigibHRyIikKLXsK
LX0KLQotUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVSTCwgY29uc3Qgc3RkOjpz
dHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5
b3V0VGVzdENvbnRyb2xsZXIodGVzdFBhdGhPclVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpKTsKLX0K
LQotLy8gU3RhdGljIEZ1bmN0aW9ucwotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkaXNhbGxvd0luY3Jl
YXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPnNldERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNh
Y2hlUXVvdGEodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2Fs
bGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldER1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3ModHJ1ZSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wQXNQREZDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0RHVtcEFzUERGKHRydWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZHVtcEFzVGV4dENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRy
dWUpOwotCi0gICAgLy8gT3B0aW9uYWwgcGFyYW1hdGVyLCBkZXNjcmliaW5nIHdoZXRoZXIgaXQn
cyBhbGxvd2VkIHRvIGR1bXAgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUuCi0gICAg
Y29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMoYXJndW1lbnRDb3VudCA+IDAgPyBK
U1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkgOiBmYWxzZSk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVl
UmVmIGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcEJhY2tGb3J3YXJkTGlzdCh0cnVlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVm
IGR1bXBDaGlsZEZyYW1lc0FzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
LSAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hpbGRGcmFtZXNBc1RleHQodHJ1ZSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wRGF0YWJhc2VDYWxsYmFj
a3ModHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRE9NQXNXZWJBcmNoaXZlQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldER1bXBET01Bc1dlYkFyY2hpdmUo
dHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1z
dGF0aWMgSlNWYWx1ZVJlZiBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wRWRpdGluZ0NhbGxiYWNrcyh0
cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIGR1bXBGcmFtZUxvYWRDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNr
cyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2tDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFByb2dyZXNz
RmluaXNoZWRDYWxsYmFjayh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVM
b2FkQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRy
b2xsZXItPnNldER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRy
dWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXNDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXModHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wU2VsZWN0aW9uUmVjdENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wU2VsZWN0
aW9uUmVjdCh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBTb3VyY2VBc1dlYkFyY2hpdmVDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFNvdXJjZUFz
V2ViQXJjaGl2ZSh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBTdGF0dXNDYWxsYmFja3NDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFN0YXR1c0Nh
bGxiYWNrcyh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBUaXRsZUNoYW5nZXNDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFRpdGxlQ2hhbmdlcyh0
cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIGR1bXBJY29uQ2hhbmdlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wSWNvbkNoYW5nZXModHJ1ZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiBkdW1wV2lsbENhY2hlUmVzcG9uc2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RHVtcFdpbGxDYWNoZVJlc3BvbnNlKHRydWUpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgcGF0aFRvTG9jYWxSZXNvdXJjZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsb2Nh
bFBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGNvbnZlcnRlZFBhdGgoQWRvcHQsIGNvbnRyb2xsZXItPnBhdGhUb0xvY2Fs
UmVzb3VyY2UoY29udGV4dCwgbG9jYWxQYXRoLmdldCgpKSk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQ
YXRoKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29udmVydGVkUGF0aC5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUFsbFZpc2l0ZWRMaW5rc0NhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wVmlzaXRlZExp
bmtzQ2FsbGJhY2sodHJ1ZSk7Ci0gICAgY29udHJvbGxlci0+cmVtb3ZlQWxsVmlzaXRlZExpbmtz
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiByZXBhaW50U3dlZXBIb3Jpem9udGFsbHlDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0VGVzdFJlcGFpbnRTd2VlcEhvcml6
b250YWxseSh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldENhbGxDbG9zZU9uV2ViVmlld3NDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5zZXRDYWxsQ2xvc2VPbldlYlZpZXdzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRDYW5PcGVuV2luZG93c0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRDYW5PcGVuV2luZG93cyh0cnVl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRy
b2xsZXItPnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0RW5jb2RlZEF1ZGlvRGF0
YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbmNvZGVkQXVkaW9EYXRhKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICAKLSAgICBzaXplX3QgbWF4TGVuZ3RoID0g
SlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGVuY29kZWRBdWRpb0RhdGEuZ2V0KCkp
OwotICAgIE93bkFycmF5UHRyPGNoYXI+IGVuY29kZWRBdWRpb0RhdGFCdWZmZXIgPSBhZG9wdEFy
cmF5UHRyKG5ldyBjaGFyW21heExlbmd0aCArIDFdKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3Ry
aW5nKGVuY29kZWRBdWRpb0RhdGEuZ2V0KCksIGVuY29kZWRBdWRpb0RhdGFCdWZmZXIuZ2V0KCks
IG1heExlbmd0aCArIDEpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0RW5jb2RlZEF1ZGlvRGF0YShlbmNvZGVk
QXVkaW9EYXRhQnVmZmVyLmdldCgpKTsKLSAgICBjb250cm9sbGVyLT5zZXREdW1wQXNBdWRpbyh0
cnVlKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHRlc3RPbnNjcmVlbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRUZXN0T25zY3JlZW4odHJ1ZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiB0ZXN0UmVwYWludENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBj
b250cm9sbGVyLT5zZXRUZXN0UmVwYWludCh0cnVlKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZERpc2FsbG93ZWRV
UkxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1h
YyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHVybChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5hZGREaXNhbGxvd2VkVVJMKHVybC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZFVSTFRvUmVkaXJl
Y3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3JpZ2luKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0aW5h
dGlvbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBzaXplX3QgbWF4TGVu
Z3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSk7Ci0g
ICAgT3duQXJyYXlQdHI8Y2hhcj4gb3JpZ2luQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hh
clttYXhMZW5ndGggKyAxXSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0
KCksIG9yaWdpbkJ1ZmZlci5nZXQoKSwgbWF4TGVuZ3RoICsgMSk7Ci0KLSAgICBtYXhMZW5ndGgg
PSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoZGVzdGluYXRpb24uZ2V0KCkpOwot
ICAgIE93bkFycmF5UHRyPGNoYXI+IGRlc3RpbmF0aW9uQnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgY2hhclttYXhMZW5ndGggKyAxXSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhkZXN0
aW5hdGlvbi5nZXQoKSwgZGVzdGluYXRpb25CdWZmZXIuZ2V0KCksIG1heExlbmd0aCArIDEpOwot
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkVVJMVG9SZWRpcmVjdChvcmlnaW5CdWZmZXIuZ2V0KCksIGRlc3RpbmF0
aW9uQnVmZmVyLmdldCgpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3Q2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3
aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IGNvbnRyb2xsZXItPmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpKTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxl
ci0+Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFwcGxpY2F0
aW9uQ2FjaGVGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3JpZ2lu
VVJMKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNsZWFyQXBw
bGljYXRpb25DYWNoZUZvck9yaWdpbihvcmlnaW5VUkwuZ2V0KCkpOwotICAgIAotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBvcmlnaW5VUkwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAg
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPmFwcGxpY2F0
aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4ob3JpZ2luVVJMLmdldCgpKSk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gY29udHJvbGxlci0+b3JpZ2luc1dpdGhBcHBs
aWNhdGlvbkNhY2hlKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFsbERh
dGFiYXNlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNsZWFyQWxsRGF0YWJh
c2VzKCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7Ci0KLSAgICBjb250cm9sbGVyLT5zeW5jTG9jYWxTdG9yYWdlKCk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIHVuc2lnbmVkIG51
bU5vdGlmaWNhdGlvbnMgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pOwotCi0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGNvbnRyb2xsZXIt
Pm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMobnVtTm90aWZpY2F0aW9ucyk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGNvbnRyb2xs
ZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbih1cmwuZ2V0KCkpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBs
b2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBvcmlnaW5VUkwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPmxvY2FsU3RvcmFnZURpc2tV
c2FnZUZvck9yaWdpbihvcmlnaW5VUkwuZ2V0KCkpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXItPm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBp
bXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNsZWFyQmFja0ZvcndhcmRMaXN0KCk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVl
UmVmIGNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9u
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
Y29udHJvbGxlci0+Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
ZGVjb2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24p
OwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRlY29kZWRIb3N0TmFtZShBZG9wdCwgY29udHJv
bGxlci0+Y29weURlY29kZWRIb3N0TmFtZShuYW1lLmdldCgpKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlU3RyaW5nKGNvbnRleHQsIGRlY29kZWRIb3N0TmFtZS5nZXQoKSk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIGRpc2FibGVJbWFnZUxvYWRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbiwgbmVlZHMgd2lu
ZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmRpc2FibGVJbWFnZUxvYWRpbmcoKTsKLSAg
ICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0c0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uLCBu
ZWVkcyB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+ZGlzcGF0Y2hQZW5kaW5nTG9h
ZFJlcXVlc3RzKCk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0
aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgY29udHJvbGxlci0+ZGlzcGxheSgpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5SW52YWxpZGF0ZWRS
ZWdpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFz
IG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlz
cGxheSgpIG9ubHkgcmVuZGVycyB0aGUgaW52YWxpZGF0ZWQgcmVnaW9uIHNvCi0gICAgLy8gd2Ug
Y2FuIGp1c3QgdXNlIHRoYXQuCi0gICAgY29udHJvbGxlci0+ZGlzcGxheSgpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
LSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW5jb2RlZEhvc3ROYW1lKEFkb3B0LCBjb250
cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1lKG5hbWUuZ2V0KCkpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZW5jb2RlZEhvc3ROYW1lLmdldCgpKTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRpb25zLgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
LSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgLy8gSWdub3JpbmcgdGhlIHNlY29uZCBw
YXJhbWV0ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51
YWwgYWN0aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlOwotICAgIGlm
IChhcmd1bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFsdWUuYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwotICAgICAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB2YWx1ZS5hZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCi0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5leGVjQ29tbWFuZChu
YW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRh
dGlvbi4KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0
YXJnZXQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgSlNPYmplY3RSZWYg
b3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4o
Y29udGV4dCwgY29udHJvbGxlci0+ZmluZFN0cmluZyhjb250ZXh0LCB0YXJnZXQuZ2V0KCksIG9w
dGlvbnMpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZ29CYWNrQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmdvQmFjaygpOwotICAgIAotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgV2luZG93cyBpbXBsZW1lbnRhdGlvbgot
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7Ci0KLSAgICBjb250cm9sbGVyLT5ncmFudERlc2t0b3BOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uKEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxM
KSk7Ci0gICAgICAgIAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgaXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgTWFjIGltcGxlbWVudGF0aW9uLgot
Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xl
YW4oY29udGV4dCwgY29udHJvbGxlci0+aXNDb21tYW5kRW5hYmxlZChuYW1lLmdldCgpKSk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG92ZXJyaWRlUHJlZmVyZW5jZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBrZXkoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKLSAgICBjb250cm9sbGVyLT5vdmVycmlkZVByZWZlcmVuY2Uoa2V5LmdldCgpLCB2YWx1ZS5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0K
LXN0YXRpYyBKU1ZhbHVlUmVmIGtlZXBXZWJIaXN0b3J5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5rZWVwV2ViSGlzdG9yeSgpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlz
aXRlZEluZm9DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYg
KGFyZ3VtZW50Q291bnQgIT0gMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotICAgIAotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gY29u
dHJvbGxlci0+Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGxheWVyVHJlZUFzVGV4dENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93
cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBjb250cm9s
bGVyLT5sYXllclRyZWVBc1RleHQoKS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG5v
dGlmeURvbmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8g
SGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICAvLyBNYXkgYmUgYWJsZSB0byBi
ZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250
cm9sbGVyLT5ub3RpZnlEb25lKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VQYXJhbWV0ZXJzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBpbnQgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiogYXJndW1lbnRz
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGZsb2F0JiBwYWdlV2lkdGhJblBpeGVscywgZmxvYXQm
IHBhZ2VIZWlnaHRJblBpeGVscykKLXsKLSAgICBwYWdlV2lkdGhJblBpeGVscyA9IExheW91dFRl
c3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgcGFnZUhlaWdodEluUGl4ZWxzID0gTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQ7Ci0gICAgc3dpdGNoIChhcmd1bWVudENv
dW50KSB7Ci0gICAgY2FzZSAyOgotICAgICAgICBwYWdlV2lkdGhJblBpeGVscyA9IHN0YXRpY19j
YXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHBhZ2VIZWlnaHRJblBpeGVscyA9IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICAgICAgaWYg
KCpleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSAwOiAvLyBG
YWxsIHRocm91Z2guCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIENhbGxlciBuZWVkcyB0
byBkZWxldGVbXSBwcm9wZXJ0eU5hbWUuCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VQcm9wZXJ0eVBh
cmFtZXRlcnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIGludCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmKiBhcmd1bWVudHMsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgY2hhciomIHByb3Bl
cnR5TmFtZSwgaW50JiBwYWdlTnVtYmVyKQotewotICAgIHBhZ2VOdW1iZXIgPSAwOwotICAgIHN3
aXRjaCAoYXJndW1lbnRDb3VudCkgewotICAgIGNhc2UgMjoKLSAgICAgICAgcGFnZU51bWJlciA9
IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICBjYXNlIDE6IHsKLSAgICAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZVN0cmluZyhBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAg
ICAgICBpZiAoKmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHBy
b3BlcnR5TmFtZVN0cmluZy5nZXQoKSk7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IG5ldyBjaGFy
W21heExlbmd0aCArIDFdOwotICAgICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHByb3BlcnR5
TmFtZVN0cmluZy5nZXQoKSwgcHJvcGVydHlOYW1lLCBtYXhMZW5ndGggKyAxKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgMDoKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VOdW1iZXJTaXpl
TWFyaW5ncyhKU0NvbnRleHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYqIGFyZ3VtZW50cywgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBpbnQmIHBhZ2VOdW1i
ZXIsIGludCYgd2lkdGgsIGludCYgaGVpZ2h0LCBpbnQmIG1hcmdpblRvcCwgaW50JiBtYXJnaW5S
aWdodCwgaW50JiBtYXJnaW5Cb3R0b20sIGludCYgbWFyZ2luTGVmdCkKLXsKLSAgICBwYWdlTnVt
YmVyID0gMDsKLSAgICB3aWR0aCA9IGhlaWdodCA9IDA7Ci0gICAgbWFyZ2luVG9wID0gbWFyZ2lu
UmlnaHQgPSBtYXJnaW5Cb3R0b20gPSBtYXJnaW5MZWZ0ID0gMDsKLQotICAgIHN3aXRjaCAoYXJn
dW1lbnRDb3VudCkgewotICAgIGNhc2UgNzoKLSAgICAgICAgbWFyZ2luTGVmdCA9IHN0YXRpY19j
YXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1s2XSwgZXhjZXB0aW9u
KSk7Ci0gICAgICAgIGlmICgqZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAvLyBGYWxsIHRocm91Z2guCi0gICAgY2FzZSA2OgotICAgICAgICBtYXJnaW5Cb3R0
b20gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNb
NV0sIGV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoKmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgotICAgIGNhc2UgNToKLSAgICAg
ICAgbWFyZ2luUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbNF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoKmV4Y2VwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgotICAgIGNh
c2UgNDoKLSAgICAgICAgbWFyZ2luVG9wID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKCpleGNl
cHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3Vn
aC4KLSAgICBjYXNlIDM6Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlm
ICgqZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBGYWxs
IHRocm91Z2guCi0gICAgY2FzZSAyOgotICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAg
ICAgIGlmICgqZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAv
LyBGYWxsIHRocm91Z2guCi0gICAgY2FzZSAxOgotICAgICAgICBwYWdlTnVtYmVyID0gc3RhdGlj
X2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKLSAgICAgICAgaWYgKCpleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgbnVtYmVyT2ZQYWdlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBmbG9hdCBwYWdlV2lkdGhJblBpeGVscyA9IDA7Ci0gICAgZmxvYXQgcGFnZUhlaWdodElu
UGl4ZWxzID0gMDsKLSAgICBpZiAoIXBhcnNlUGFnZVBhcmFtZXRlcnMoY29udGV4dCwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVp
Z2h0SW5QaXhlbHMpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVy
T2ZQYWdlcyhwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT5udW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0cygpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcGFnZVByb3Bl
cnR5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGNoYXIqIHBy
b3BlcnR5TmFtZSA9IDA7Ci0gICAgaW50IHBhZ2VOdW1iZXIgPSAwOwotICAgIGlmICghcGFyc2VQ
YWdlUHJvcGVydHlQYXJhbWV0ZXJzKGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
ZXhjZXB0aW9uLCBwcm9wZXJ0eU5hbWUsIHBhZ2VOdW1iZXIpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgY29udHJvbGxlci0+cGFnZVByb3BlcnR5KHByb3BlcnR5TmFtZSwg
cGFnZU51bWJlcikuZ2V0KCkpOwotCi0gICAgZGVsZXRlW10gcHJvcGVydHlOYW1lOwotICAgIHJl
dHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaW50IHBh
Z2VOdW1iZXIgPSAwOwotICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgaW50IG1h
cmdpblRvcCA9IDAsIG1hcmdpblJpZ2h0ID0gMCwgbWFyZ2luQm90dG9tID0gMCwgbWFyZ2luTGVm
dCA9IDA7Ci0gICAgaWYgKCFwYXJzZVBhZ2VOdW1iZXJTaXplTWFyaW5ncyhjb250ZXh0LCBhcmd1
bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgcGFnZU51bWJlciwgd2lkdGgsIGhlaWdo
dCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4
ZWxzKHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1h
cmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkuZ2V0KCkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBx
dWV1ZUJhY2tOYXZpZ2F0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQot
ewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gTWF5IGJl
IGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQgV29y
a1F1ZXVlCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBkb3VibGUgaG93RmFyQmFja0RvdWJsZSA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnF1ZXVlQmFja05hdmlnYXRpb24oc3Rh
dGljX2Nhc3Q8aW50Pihob3dGYXJCYWNrRG91YmxlKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlRm9yd2Fy
ZE5hdmlnYXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
Ly8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICAvLyBNYXkgYmUgYWJsZSB0
byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUK
LSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGRvdWJsZSBob3dGYXJGb3J3YXJkRG91YmxlID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+cXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGF0
aWNfY2FzdDxpbnQ+KGhvd0ZhckZvcndhcmREb3VibGUpKTsKLQotICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2Fk
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMg
JiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gTWF5IGJlIGFibGUgdG8gYmUgbWFkZSBw
bGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQgV29ya1F1ZXVlCi0gICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0YXJnZXQ7
Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikgewotICAgICAgICB0YXJnZXQuYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAg
ICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0YXJnZXQuYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnF1ZXVl
TG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxT
dHJpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFz
IE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb250ZW50KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBiYXNlVVJMOwotICAgIGlmIChh
cmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgYmFzZVVSTC5hZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhc2VVUkwuYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykg
ewotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkw7Ci0gICAg
ICAgIHVucmVhY2hhYmxlVVJMLmFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICAgICAgY29udHJvbGxlci0+cXVldWVMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhjb250ZW50Lmdl
dCgpLCBiYXNlVVJMLmdldCgpLCB1bnJlYWNoYWJsZVVSTC5nZXQoKSk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBjb250cm9sbGVy
LT5xdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnRlbnQuZ2V0KCksIGJhc2VVUkwuZ2V0KCkpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgcXVldWVSZWxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICAvLyBNYXkgYmUg
YWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3Jr
UXVldWUKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIGNvbnRyb2xsZXItPnF1ZXVlUmVsb2FkKCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZGlu
Z1NjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIC8vIE1heSBiZSBhYmxlIHRvIGJl
IG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkgdXNpbmcgc2hhcmVkIFdvcmtRdWV1ZQotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikp
OwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5xdWV1ZUxvYWRpbmdTY3Jp
cHQoc2NyaXB0LmdldCgpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcXVldWVOb25Mb2FkaW5nU2NyaXB0Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5k
b3dzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gTWF5IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9y
bSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQgV29ya1F1ZXVlCi0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChzY3JpcHQu
Z2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRBY2NlcHRzRWRpdGluZ0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0QWNjZXB0c0VkaXRpbmcoSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0QWx3
YXlzQWNjZXB0Q29va2llc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgY29udHJvbGxlci0+c2V0QWx3YXlzQWNjZXB0Q29va2llcyhKU1ZhbHVlVG9Cb29sZWFuKGNv
bnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRBcHBDYWNoZU1heGltdW1TaXpl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMg
aW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAgZG91YmxlIHNpemUgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsKLSAgICBpZiAoIWlzbmFuKHNp
emUpKQotICAgICAgICBjb250cm9sbGVyLT5zZXRBcHBDYWNoZU1heGltdW1TaXplKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSkpOwotICAgICAgICAKLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQot
ICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
TlVMTCk7Ci0gICAgaWYgKCFpc25hbihzaXplKSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0QXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
c2l6ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGlt
cGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gcGFzc3dvcmQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgc2l6
ZV90IG1heExlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShwYXNzd29y
ZC5nZXQoKSk7Ci0gICAgY2hhciogcGFzc3dvcmRCdWZmZXIgPSBuZXcgY2hhclttYXhMZW5ndGgg
KyAxXTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHBhc3N3b3JkLmdldCgpLCBwYXNzd29y
ZEJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7Ci0gICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0QXV0aGVudGljYXRp
b25QYXNzd29yZChwYXNzd29yZEJ1ZmZlcik7Ci0gICAgZGVsZXRlW10gcGFzc3dvcmRCdWZmZXI7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWVDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50
YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1
c2VybmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBzaXplX3QgbWF4
TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHVzZXJuYW1lLmdldCgp
KTsKLSAgICBjaGFyKiB1c2VybmFtZUJ1ZmZlciA9IG5ldyBjaGFyW21heExlbmd0aCArIDFdOwot
ICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcodXNlcm5hbWUuZ2V0KCksIHVzZXJuYW1lQnVmZmVy
LCBtYXhMZW5ndGggKyAxKTsKLSAgICAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRBdXRoZW50aWNhdGlvblVzZXJu
YW1lKHVzZXJuYW1lQnVmZmVyKTsKLSAgICBkZWxldGVbXSB1c2VybmFtZUJ1ZmZlcjsKLQotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRp
b24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVl
UmVmIHNldEF1dG9maWxsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMiB8fCAhYXJndW1lbnRzWzBdKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRBdXRv
ZmlsbGVkKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMV0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2FjaGVNb2RlbENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgTWFjIGltcGxlbWVudGF0aW9uLgot
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaW50IGNhY2hlTW9kZWwgPSBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
LSAgICBjb250cm9sbGVyLT5zZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0g
ICAgCi0gICAgYm9vbCBwZXJtaXNzaXZlID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
Pj0gMikKLSAgICAgICAgcGVybWlzc2l2ZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzFdKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldEN1c3RvbVBvbGljeURlbGVnYXRlKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSwgcGVybWlzc2l2ZSk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVm
IHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBkb3Vi
bGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsK
LSAgICBpZiAoIWlzbmFuKHF1b3RhKSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0RGF0YWJhc2VR
dW90YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHF1b3RhKSk7Ci0gICAgICAgIAot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgTWFjIGFuZCBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIHNldERlZmVyc0xvYWRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXREZWZlcnNMb2FkaW5nKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFVz
ZURlZmVycmVkRnJhbWVMb2FkaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0VXNlRGVmZXJyZWRGcmFtZUxv
YWRpbmcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgTWFjIGFuZCBXaW5kb3dzIGlt
cGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIGJvb2wgZm9yYmlkZGVuID0gSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwotICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBzY2hlbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1l
bnRzWzFdLCAwKSk7Ci0gICAgY29udHJvbGxlci0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHNjaGVtZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldE1v
Y2tEZXZpY2VPcmllbnRhdGlvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDYpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGJvb2wgY2FuUHJvdmlkZUFscGhhID0gSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwotICAgIGRvdWJsZSBhbHBoYSA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLSAgICBib29sIGNhblByb3ZpZGVCZXRhID0gSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0LCBhcmd1bWVudHNbMl0pOwotICAgIGRvdWJsZSBiZXRhID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwgZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoISpl
eGNlcHRpb24pOwotICAgIGJvb2wgY2FuUHJvdmlkZUdhbW1hID0gSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCBhcmd1bWVudHNbNF0pOwotICAgIGRvdWJsZSBnYW1tYSA9IEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNhblByb3Zp
ZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdh
bW1hKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25DYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRy
b2xsZXItPnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMF0sIE5VTEwpLCAgLy8gbGF0aXR1ZGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzFdLCBOVUxMKSwgIC8vIGxvbmdpdHVkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMl0sIE5VTEwp
KTsgIC8vIGFjY3VyYWN5Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50
IDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0g
ICAgaW50IGNvZGUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxM
KTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWVzc2FnZShBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldE1vY2tHZW9sb2NhdGlvbkVycm9y
KGNvZGUsIG1lc3NhZ2UuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBhZGRNb2NrU3BlZWNoSW5wdXRSZXN1
bHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcmVzdWx0KEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGRvdWJsZSBjb25maWRlbmNlID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKLQotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBsYW5ndWFnZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0K
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBj
b250cm9sbGVyLT5hZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQocmVzdWx0LmdldCgpLCBjb25maWRl
bmNlLCBsYW5ndWFnZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tTcGVlY2hJbnB1dER1bXBS
ZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotCi0gICAgYm9vbCBkdW1wUmVjdCA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGR1bXBS
ZWN0KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgc2V0TmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3RDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1l
bnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldE5ld1dpbmRvd3ND
b3B5QmFja0ZvcndhcmRMaXN0KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0SGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRQT1NJWExvY2FsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsb2NhbGUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
LSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIGNvbnRyb2xsZXItPnNldFBPU0lYTG9jYWxl
KGxvY2FsZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEljb25EYXRhYmFzZUVuYWJsZWRDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRv
d3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldEljb25E
YXRhYmFzZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGlj
IEpTVmFsdWVSZWYgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlckNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVy
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNl
dFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYXRoKEFkb3B0LCBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFBlcnNpc3RlbnRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKHBhdGguZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRQcml2YXRlQnJvd3NpbmdF
bmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhh
cyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1h
YyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0WFNTQXVkaXRvckVuYWJsZWRDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRv
d3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFhTU0F1
ZGl0b3JFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uLgotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFBy
aW50aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldElzUHJpbnRpbmcodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJs
ZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1h
YyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVS
THNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1h
YyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFRhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFVzZURhc2hib2FyZENvbXBhdGli
aWxpdHlNb2RlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8v
IEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNl
dFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzBdKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxl
bWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGF0aChBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KHBhdGguZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRWYWx1ZUZvclVzZXJDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgot
ICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZShB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRWYWx1ZUZvclVz
ZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCB2YWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFZp
ZXdNb2RlTWVkaWFGZWF0dXJlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQot
ewotICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtb2RlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIGNvbnRyb2xsZXItPnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKG1vZGUuZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMg
SlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlckNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1l
bnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGhlYWRlcihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBzaXplX3QgbWF4
TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGhlYWRlci5nZXQoKSk7
Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gaGVhZGVyQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcg
Y2hhclttYXhMZW5ndGggKyAxXSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhoZWFkZXIu
Z2V0KCksIGhlYWRlckJ1ZmZlci5nZXQoKSwgbWF4TGVuZ3RoICsgMSk7Ci0KLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5z
ZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcihoZWFkZXJCdWZmZXIuZ2V0KCkpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgY3Jvc3MtcGxhdGZvcm0gaW1wbGVtZW50YXRp
b24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVl
UmVmIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgY3Jvc3MtcGxhdGZvcm0gaW1w
bGVtZW50YXRpb24KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFdpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaW5kb3dJc0tleUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRXaW5kb3dJc0tleShKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB3YWl0VW50aWxEb25lQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5k
b3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0V2FpdFRvRHVtcCh0cnVlKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgd2luZG93Q291bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGludCB3aW5kb3dzID0gY29udHJvbGxlci0+
d2luZG93Q291bnQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgd2lu
ZG93cyk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFBvcHVwQmxvY2tpbmdFbmFibGVkQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3
aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRQ
b3B1cEJsb2NraW5nRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sw
XSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1z
dGF0aWMgSlNWYWx1ZVJlZiBzZXRQbHVnaW5zRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFBsdWdpbnNFbmFibGVkKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0gICAgCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfSAgICAKLQotc3RhdGljIEpTVmFsdWVS
ZWYgc2V0UGFnZVZpc2liaWxpdHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2aXNpYmlsaXR5KEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0g
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIHNpemVfdCBtYXhMZW5ndGggPSBKU1N0cmlu
Z0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUodmlzaWJpbGl0eS5nZXQoKSk7Ci0gICAgY2hhciog
dmlzaWJpbGl0eUJ1ZmZlciA9IG5ldyBjaGFyW21heExlbmd0aCArIDFdOwotICAgIEpTU3RyaW5n
R2V0VVRGOENTdHJpbmcodmlzaWJpbGl0eS5nZXQoKSwgdmlzaWJpbGl0eUJ1ZmZlciwgbWF4TGVu
Z3RoICsgMSk7Ci0gICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0UGFnZVZpc2liaWxpdHkodmlzaWJpbGl0eUJ1
ZmZlcik7Ci0gICAgZGVsZXRlW10gdmlzaWJpbGl0eUJ1ZmZlcjsKLSAgICAKLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19ICAgIAotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiByZXNldFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIGNvbnRyb2xsZXItPnJlc2V0UGFnZVZpc2liaWxpdHkoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19ICAgIAotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRT
bWFydEluc2VydERlbGV0ZUVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRTbWFydEluc2VydERlbGV0
ZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVl
UmVmIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0QXV0
b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBjb250cm9sbGVyLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRTdG9wUHJvdmlz
aW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNv
bnRyb2xsZXItPnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHModHJ1ZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldEFzeW5j
aHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzaG93V2ViSW5zcGVjdG9yQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNob3dXZWJJbnNwZWN0b3IoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIGNsb3NlV2ViSW5zcGVjdG9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIGNvbnRyb2xsZXItPmNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0
ZUluV2ViSW5zcGVjdG9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGRv
dWJsZSBjYWxsSWQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBjb250
cm9sbGVyLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKHN0YXRpY19jYXN0PGxvbmc+KGNhbGxJZCks
IHNjcmlwdC5nZXQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBkb3VibGUgd29ybGRJRCA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9u
KSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGNvbnRyb2xsZXItPmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKHN0YXRpY19jYXN0PHVuc2lnbmVkPih3b3JsZElEKSwgSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBzY3JpcHQuZ2V0KCkpOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBkb3VibGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIGNvbnRyb2xsZXItPmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdvcmxkSUQpLCBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHNjcmlwdC5nZXQoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGVsZW1lbnRJ
ZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBib29sIGF1dG9Db21wbGV0
ZXMgPSBjb250cm9sbGVyLT5lbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQo
ZWxlbWVudElkLmdldCgpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4
dCwgYXV0b0NvbXBsZXRlcyk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBh
bmltYXRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBkb3VibGUg
dGltZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
ZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sy
XSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVl
TWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQoYW5pbWF0aW9uTmFtZS5nZXQoKSwgdGltZSwgZWxlbWVudElkLmdldCgpKSk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCAhPSAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0
LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBkb3VibGUgdGltZSA9IEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZWxlbWVudElkKEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0g
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4
dCwgY29udHJvbGxlci0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKHByb3Bl
cnR5TmFtZS5nZXQoKSwgdGltZSwgZWxlbWVudElkLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIG51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAwKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1i
ZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiB3YWl0Rm9yUG9saWN5RGVsZWdhdGVDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKLXsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT53YWl0Rm9y
UG9saWN5RGVsZWdhdGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9
IDQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW4oQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlvblBy
b3RvY29sKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gZGVzdGluYXRpb25Ib3N0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKLSAgICBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID0gSlNWYWx1ZVRvQm9vbGVh
bihjb250ZXh0LCBhcmd1bWVudHNbM10pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+YWRkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoc291cmNlT3JpZ2luLmdldCgpLCBkZXN0aW5hdGlvblByb3RvY29sLmdldCgp
LCBkZXN0aW5hdGlvbkhvc3QuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBzb3VyY2VPcmlnaW4oQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlvblByb3RvY29sKEFkb3B0LCBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGVzdGlu
YXRpb25Ib3N0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sy
XSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBib29sIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbM10pOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7Ci0gICAgY29udHJvbGxlci0+cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291
cmNlT3JpZ2luLmdldCgpLCBkZXN0aW5hdGlvblByb3RvY29sLmdldCgpLCBkZXN0aW5hdGlvbkhv
c3QuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFNjcm9s
bGJhclBvbGljeUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1l
bnRDb3VudCAhPSAyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3JpZW50YXRpb24oQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAg
ICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwb2xp
Y3koQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0U2Nyb2xs
YmFyUG9saWN5KG9yaWVudGF0aW9uLmdldCgpLCBwb2xpY3kuZ2V0KCkpOwotICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgYWRk
VXNlclNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1l
bnRDb3VudCAhPSAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0gICAgCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNvdXJjZShBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgYm9vbCBydW5BdFN0YXJ0ID0gSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOwotICAgIGJvb2wgYWxsRnJhbWVzID0gSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMl0pOwotICAgIAotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmFkZFVz
ZXJTY3JpcHQoc291cmNlLmdldCgpLCBydW5BdFN0YXJ0LCBhbGxGcmFtZXMpOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLSAKLXN0YXRpYyBKU1ZhbHVlUmVm
IGFkZFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlm
IChhcmd1bWVudENvdW50ICE9IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLSAgICAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc291cmNlKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICBib29sIGFsbEZyYW1lcyA9IEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKLSAgIAotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmFkZFVz
ZXJTdHlsZVNoZWV0KHNvdXJjZS5nZXQoKSwgYWxsRnJhbWVzKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFNob3Vs
ZFBhaW50QnJva2VuSW1hZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRhdGlvbgotICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJv
bGxlci0+c2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBhcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNl
VVJMQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50
ICE9IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQot
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1dGY4RGF0YShBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYmFzZVVSTChBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikp
OwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgICAgIAotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmFwaVRlc3RO
ZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwodXRmOERhdGEuZ2V0KCksIGJhc2VVUkwuZ2V0KCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgYXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJk
SXRlbSgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgc2V0V2ViVmlld0VkaXRhYmxlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBNYWMgaW1wbGVtZW50YXRpb24KLSAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFdlYlZpZXdFZGl0YWJsZShKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZW5kV2ViSW50ZW50UmVz
cG9uc2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHJlc3BvbnNlOwotICAgIGlmIChhcmd1bWVudENvdW50ID09IDEp
IHsKLSAgICAgICAgcmVzcG9uc2UuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwot
ICAgIH0gZWxzZQotICAgICAgICByZXNwb25zZS5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygwKSk7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZW5kV2ViSW50ZW50UmVzcG9uc2UocmVzcG9uc2Uu
Z2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBkZWxpdmVyV2ViSW50ZW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMykKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGFjdGlvbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHR5cGUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRp
b24pOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkYXRhKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmRlbGl2ZXJXZWJJbnRlbnQoYWN0aW9uLmdldCgp
LCB0eXBlLmdldCgpLCBkYXRhLmdldCgpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgYWJvcnRNb2RhbENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5hYm9ydE1vZGFsKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMg
SlNWYWx1ZVJlZiBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW1DYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQs
IGNvbnRyb2xsZXItPm1hcmtlclRleHRGb3JMaXN0SXRlbShjb250ZXh0LCBhcmd1bWVudHNbMF0p
LmdldCgpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgYXV0aGVudGljYXRlU2Vzc2lvbkNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBhdXRoZW50aWNhdGVTZXNzaW9uKHVy
bCwgdXNlcm5hbWUsIHBhc3N3b3JkKQotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDMpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiB1cmwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1c2VybmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBhc3N3b3JkKEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0g
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmF1dGhlbnRpY2F0ZVNlc3Npb24o
dXJsLmdldCgpLCB1c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQuZ2V0KCkpOwotICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0
U2VyaWFsaXplSFRUUExvYWRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBib29sIHNlcmlhbGl6
ZSA9IHRydWU7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKLSAgICAgICAgc2VyaWFsaXpl
ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwotCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhzZXJpYWxpemUpOwotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgc2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWRDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKLSAgICAg
ICAgY29udHJvbGxlci0+c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxv
YWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
YWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9s
bGVyLT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgLy8gdGhlIGZpcnN0IGFyZ3VtZW50IGlz
IGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgaW5wdXQgZmllbGQgaGFzIGJlZW4g
YWRkZWQKLSAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQotICAgICAgICBKU09iamVjdENhbGxB
c0Z1bmN0aW9uKGNvbnRleHQsIEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0s
IDApLCB0aGlzT2JqZWN0LCAwLCAwLCAwKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUNocm9tZUlucHV0Rmll
bGRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+cmVtb3ZlQ2hyb21l
SW5wdXRGaWVsZCgpOwotICAgIC8vIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIGNhbGxiYWNrIHRo
YXQgaXMgY2FsbGVkIG9uY2UgdGhlIGlucHV0IGZpZWxkIGhhcyBiZWVuIGFkZGVkCi0gICAgaWYg
KGFyZ3VtZW50Q291bnQgPT0gMSkKLSAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250
ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCAwKSwgdGhpc09iamVj
dCwgMCwgMCwgMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBmb2N1c1dlYlZpZXdDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7Ci0gICAgY29udHJvbGxlci0+Zm9jdXNXZWJWaWV3KCk7Ci0gICAgLy8gdGhlIGZpcnN0IGFy
Z3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgaW5wdXQgZmllbGQg
aGFzIGJlZW4gYWRkZWQKLSAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQotICAgICAgICBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1
bWVudHNbMF0sIDApLCB0aGlzT2JqZWN0LCAwLCAwLCAwKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldEJhY2tpbmdT
Y2FsZUZhY3RvckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1l
bnRDb3VudCAhPSAyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Ci0KLSAgICBkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24p
OwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgY29udHJvbGxlci0+c2V0QmFja2luZ1NjYWxlRmFjdG9yKGJhY2tpbmdTY2FsZUZhY3Rvcik7
Ci0KLSAgICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxs
ZWQgb25jZSB0aGUgYmFja2luZyBzY2FsZSBmYWN0b3IgaGFzIGJlZW4gc2V0LgotICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSwgMCksIHRoaXNPYmplY3QsIDAsIDAsIDApOwotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcHJlY2lzZVRpbWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVt
YmVyKGNvbnRleHQsIFdURjo6Y3VycmVudFRpbWUoKSk7Ci19Ci0KLS8vIFN0YXRpYyBWYWx1ZXMK
LQotc3RhdGljIEpTVmFsdWVSZWYgZ2V0R2xvYmFsRmxhZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIGNvbnRyb2xsZXItPmdsb2JhbEZsYWcoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGdl
dFdlYkhpc3RvcnlJdGVtQ291bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXIt
PndlYkhpc3RvcnlJdGVtQ291bnQoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGdldFdvcmtl
clRocmVhZENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT53b3JrZXJU
aHJlYWRDb3VudCgpKTsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShXSU4pCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdS
ZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHBsYXRmb3JtTmFtZShjb250cm9sbGVyLT5wbGF0Zm9ybU5hbWUoKSk7Ci0gICAg
aWYgKCFwbGF0Zm9ybU5hbWUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxh
dGZvcm1OYW1lLmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXRUaXRs
ZVRleHREaXJlY3Rpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRpdGxlRGlyZWN0aW9uKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250cm9sbGVyLT50aXRsZVRleHREaXJlY3Rpb24o
KS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHRpdGxl
RGlyZWN0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc2V0R2xvYmFsRmxhZ0NhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1Jl
ZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBjb250cm9sbGVyLT5zZXRHbG9iYWxGbGFnKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFs
dWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgaWdub3JlRGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25D
bGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsgCi0gICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHRpdGxlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgY29udHJvbGxlci0+c2ltdWxhdGVEZXNrdG9w
Tm90aWZpY2F0aW9uQ2xpY2sodGl0bGUuZ2V0KCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0TWluaW11bVRpbWVy
SW50ZXJ2YWxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci0KLSAgICBkb3VibGUgbWluaW11bSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNv
bnRyb2xsZXItPnNldE1pbmltdW1UaW1lckludGVydmFsKG1pbmltdW0pOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRUZXh0RGlyZWN0aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGRpcmVjdGlvbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAgICAgY29udHJvbGxlci0+c2V0VGV4dERpcmVjdGlv
bihkaXJlY3Rpb24uZ2V0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRIYXNDdXN0b21GdWxs
U2NyZWVuQmVoYXZpb3JDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewotICAgICAgICBib29sIGhhc0N1c3RvbUJlaGF2
aW9yID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwotICAgICAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAgICAgY29u
dHJvbGxlci0+c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKGhhc0N1c3RvbUJlaGF2aW9y
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCAhPSAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0K
LSAgICBkb3VibGUgaW50ZXJ2YWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5z
ZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoaW50ZXJ2YWwpOwotCi0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCBsYXlvdXRUZXN0
Q29udHJvbGxlck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmRl
cmVmKCk7Ci19Ci0KLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3
aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gdGVzdFJ1bm5lclN0cihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInRlc3RSdW5uZXIiKSk7Ci0gICAgcmVmKCk7Ci0gICAgcmVmKCk7Ci0KLSAgICBKU0Ns
YXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVz
dENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7
Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0
eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RD
b250b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Ci19Ci0KLUpTQ2xhc3NSZWYgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQotewotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVl
KiBzdGF0aWNWYWx1ZXMgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCk7Ci0g
ICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IExheW91dFRlc3RD
b250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKTsKLSAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRp
b24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUs
ICJMYXlvdXRUZXN0Q29udHJvbGxlciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25z
LAotICAgICAgICAwLCBsYXlvdXRUZXN0Q29udHJvbGxlck9iamVjdEZpbmFsaXplLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZj
bGFzc0RlZmluaXRpb24pOwotfQotCi1KU1N0YXRpY1ZhbHVlKiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3RhdGljVmFsdWVzKCkKLXsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1
ZXNbXSA9IHsKLSAgICAgICAgeyAiZ2xvYmFsRmxhZyIsIGdldEdsb2JhbEZsYWdDYWxsYmFjaywg
c2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKLSAgICAg
ICAgeyAid2ViSGlzdG9yeUl0ZW1Db3VudCIsIGdldFdlYkhpc3RvcnlJdGVtQ291bnRDYWxsYmFj
aywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ3b3JrZXJUaHJlYWRDb3VudCIsIGdldFdvcmtlclRo
cmVhZENvdW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotICAgICAgICB7ICJwbGF0Zm9ybU5hbWUiLCBnZXRQ
bGF0Zm9ybU5hbWVDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotI2VuZGlmCi0gICAgICAgIHsgInRpdGxl
VGV4dERpcmVjdGlvbiIsIGdldFRpdGxlVGV4dERpcmVjdGlvbkNhbGxiYWNrLCAwLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgMCwgMCwgMCwgMCB9Ci0gICAgfTsKLSAgICByZXR1cm4gc3RhdGljVmFsdWVz
OwotfQotCi1KU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVu
Y3Rpb25zKCkKLXsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNb
XSA9IHsKLSAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0TW9kYWxDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRkRGlzYWxsb3dlZFVSTENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCi0gICAgICAgIHsgImFkZFVSTFRvUmVkaXJlY3QiLCBhZGRVUkxUb1JlZGlyZWN0
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiYWRkVXNlclNjcmlwdCIsIGFkZFVzZXJTY3Jp
cHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJhZGRVc2VyU3R5bGVTaGVldCIsIGFkZFVz
ZXJTdHlsZVNoZWV0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiYXBpVGVzdE5ld1dpbmRv
d0RhdGFMb2FkQmFzZVVSTCIsIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkxDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJhcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0i
LCBhcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW1DYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAg
ICAgICB7ICJhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luIiwgYXBwbGljYXRpb25D
YWNoZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldyIsIGNhbGxTaG91bGRDbG9zZU9uV2ViVmlld0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCi0gICAgICAgIHsgImNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMiLCBjbGVhckFsbEFw
cGxpY2F0aW9uQ2FjaGVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiY2xlYXJBbGxEYXRh
YmFzZXMiLCBjbGVhckFsbERhdGFiYXNlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImNs
ZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbiIsIGNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9y
aWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImNsZWFyQmFja0ZvcndhcmRMaXN0Iiwg
Y2xlYXJCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJjbGVhclBl
cnNpc3RlbnRVc2VyU3R5bGVTaGVldCIsIGNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0Q2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiY2xvc2VXZWJJbnNwZWN0b3IiLCBjbG9zZVdlYklu
c3BlY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImNvbXB1dGVkU3R5bGVJbmNsdWRp
bmdWaXNpdGVkSW5mbyIsIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mb0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCi0gICAgICAgIHsgImRlY29kZUhvc3ROYW1lIiwgZGVjb2RlSG9zdE5hbWVDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkZWxpdmVyV2ViSW50ZW50IiwgZGVsaXZlcldlYklu
dGVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImRpc2FibGVJbWFnZUxvYWRpbmciLCBk
aXNhYmxlSW1hZ2VMb2FkaW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZGlzYWxsb3dJ
bmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSIsIGRpc2FsbG93SW5jcmVhc2VGb3JBcHBs
aWNhdGlvbkNhY2hlUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkaXNwYXRjaFBl
bmRpbmdMb2FkUmVxdWVzdHMiLCBkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHNDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAotICAgICAgICB7ICJkaXNwbGF5IiwgZGlzcGxheUNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgImRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbiIsIGRpc3BsYXlJbnZhbGlkYXRlZFJl
Z2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBBcHBsaWNhdGlvbkNhY2hlRGVs
ZWdhdGVDYWxsYmFja3MiLCBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVtcEFzVGV4dCIsIGR1bXBBc1RleHRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wQmFja0ZvcndhcmRMaXN0IiwgZHVtcEJhY2tGb3J3
YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBDaGlsZEZyYW1lU2Nyb2xs
UG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1Rl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wRE9NQXNXZWJBcmNoaXZlIiwgZHVt
cERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBEYXRhYmFz
ZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgZHVtcEVkaXRpbmdDYWxsYmFja3NDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwgZHVtcEZyYW1l
TG9hZENhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBQcm9ncmVzc0Zp
bmlzaGVkQ2FsbGJhY2siLCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAiZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MiLCBk
dW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sICAgICAg
ICAKLSAgICAgICAgeyAiZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyIsIGR1bXBSZXNvdXJjZUxv
YWRDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcyIsIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAiZHVtcFNlbGVjdGlvblJlY3QiLCBkdW1wU2VsZWN0aW9uUmVjdENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImR1bXBTb3VyY2VBc1dlYkFyY2hpdmUiLCBkdW1w
U291cmNlQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVtcFN0YXR1
c0NhbGxiYWNrcyIsIGR1bXBTdGF0dXNDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJkdW1wVGl0bGVDaGFuZ2VzIiwgZHVtcFRpdGxlQ2hhbmdlc0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgImR1bXBJY29uQ2hhbmdlcyIsIGR1bXBJY29uQ2hhbmdlc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCi0gICAgICAgIHsgImR1bXBXaWxsQ2FjaGVSZXNwb25zZSIsIGR1bXBXaWxsQ2FjaGVS
ZXNwb25zZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImVsZW1lbnREb2VzQXV0b0NvbXBs
ZXRlRm9yRWxlbWVudFdpdGhJZCIsIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdp
dGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImVuY29kZUhvc3ROYW1lIiwgZW5jb2Rl
SG9zdE5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJldmFsdWF0ZUluV2ViSW5zcGVj
dG9yIiwgZXZhbHVhdGVJbldlYkluc3BlY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUiLCBldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAg
ICAgeyAiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQiLCBldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImV4ZWNDb21tYW5kIiwgZXhl
Y0NvbW1hbmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJmaW5kU3RyaW5nIiwgZmluZFN0
cmluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZSIsIG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgImdvQmFjayIsIGdvQmFja0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sIAotICAgICAgICB7ICJncmFu
dERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uIiwgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9u
UGVybWlzc2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sIAotICAgICAgICB7ICJpZ25vcmVEZXNrdG9wTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzIiwgaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImlzQ29tbWFuZEVu
YWJsZWQiLCBpc0NvbW1hbmRFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAia2Vl
cFdlYkhpc3RvcnkiLCBrZWVwV2ViSGlzdG9yeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImxheWVyVHJlZUFzVGV4dCIsIGxheWVyVHJlZUFzVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgIm51bWJlck9mUGFnZXMiLCBudW1iZXJPZlBhZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCBu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0NhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgIm1hcmtlclRleHRGb3JMaXN0SXRlbSIsIG1hcmtlclRleHRGb3JMaXN0
SXRlbUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm5vdGlmeURvbmUiLCBub3RpZnlEb25l
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAibnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwg
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAib3Zl
cnJpZGVQcmVmZXJlbmNlIiwgb3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAicGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMiLCBwYWdlU2l6ZUFuZE1hcmdpbnNJ
blBpeGVsc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInBhZ2VQcm9wZXJ0eSIsIHBhZ2VQ
cm9wZXJ0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInBhdGhUb0xvY2FsUmVzb3VyY2Ui
LCBwYXRoVG9Mb2NhbFJlc291cmNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAicGF1c2VB
bmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZCIsIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInByaW50VG9QREYiLCBkdW1wQXNQREZDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgICAgICB7ICJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgcXVldWVCYWNr
TmF2aWdhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInF1ZXVlRm9yd2FyZE5hdmln
YXRpb24iLCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAicXVldWVMb2FkIiwgcXVldWVMb2FkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAicXVl
dWVMb2FkSFRNTFN0cmluZyIsIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJxdWV1ZUxvYWRpbmdTY3JpcHQiLCBxdWV1ZUxvYWRpbmdTY3JpcHRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCBxdWV1ZU5vbkxv
YWRpbmdTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJxdWV1ZVJlbG9hZCIsIHF1
ZXVlUmVsb2FkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAicmVtb3ZlQWxsVmlzaXRlZExp
bmtzIiwgcmVtb3ZlQWxsVmlzaXRlZExpbmtzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInJlcGFpbnRTd2VlcEhvcml6
b250YWxseSIsIHJlcGFpbnRTd2VlcEhvcml6b250YWxseUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgInJlc2V0UGFnZVZpc2liaWxpdHkiLCByZXNldFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKLSAgICAgICAgeyAic2VuZFdlYkludGVudFJlc3BvbnNlIiwgc2VuZFdlYkludGVu
dFJlc3BvbnNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0QWNjZXB0c0VkaXRpbmci
LCBzZXRBY2NlcHRzRWRpdGluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEFsbG93
VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzIiwgc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRBbGxvd0ZpbGVBY2Nlc3NG
cm9tRmlsZVVSTHMiLCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHNDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAotICAgICAgICB7ICJzZXRBbHdheXNBY2NlcHRDb29raWVzIiwgc2V0QWx3YXlzQWNjZXB0
Q29va2llc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEFwcENhY2hlTWF4aW11bVNp
emUiLCBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhIiwgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdp
blF1b3RhQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0RW5jb2RlZEF1ZGlvRGF0YSIs
IHNldEVuY29kZWRBdWRpb0RhdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRBdXRo
ZW50aWNhdGlvblBhc3N3b3JkIiwgc2V0QXV0aGVudGljYXRpb25QYXNzd29yZENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCi0gICAgICAgIHsgInNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiLCBzZXRBdXRoZW50
aWNhdGlvblVzZXJuYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQiLCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEF1dG9maWxsZWQiLCBzZXRBdXRvZmlsbGVkQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0Q2FjaGVNb2RlbCIsIHNldENhY2hlTW9kZWxDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRDYWxsQ2xvc2VPbldlYlZpZXdzIiwgc2V0Q2Fs
bENsb3NlT25XZWJWaWV3c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldENhbk9wZW5X
aW5kb3dzIiwgc2V0Q2FuT3BlbldpbmRvd3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJz
ZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUiLCBzZXRDbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRDdXN0b21Q
b2xpY3lEZWxlZ2F0ZSIsIHNldEN1c3RvbVBvbGljeURlbGVnYXRlQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAic2V0RGF0YWJhc2VRdW90YSIsIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LCAKLSAgICAgICAgeyAic2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCIsIHNldERl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRE
ZWZlcnNMb2FkaW5nIiwgc2V0RGVmZXJzTG9hZGluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgInNldFVzZURlZmVycmVkRnJhbWVMb2FkaW5nIiwgc2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRp
bmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXREb21haW5SZWxheGF0aW9uRm9yYmlk
ZGVuRm9yVVJMU2NoZW1lIiwgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVt
ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQi
LCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyIsIHNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJzZXRJY29uRGF0YWJhc2VFbmFibGVkIiwgc2V0SWNvbkRhdGFiYXNlRW5hYmxl
ZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25F
bmFibGVkIiwgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAotICAgICAgICB7ICJzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyIiwgc2V0TWFpbkZyYW1l
SXNGaXJzdFJlc3BvbmRlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldE1pbmltdW1U
aW1lckludGVydmFsIiwgc2V0TWluaW11bVRpbWVySW50ZXJ2YWxDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCBzZXRNb2NrRGV2aWNlT3JpZW50
YXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRNb2NrR2VvbG9jYXRpb25FcnJv
ciIsIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbkNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCIsIGFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldE1v
Y2tTcGVlY2hJbnB1dER1bXBSZWN0Iiwgc2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3RDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJzZXROZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCIs
IHNldE5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAg
ICAgeyAic2V0UGFnZVZpc2liaWxpdHkiLCBzZXRQYWdlVmlzaWJpbGl0eUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgInNldFBPU0lYTG9jYWxlIiwgc2V0UE9TSVhMb2NhbGVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAotICAgICAgICB7ICJzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIs
IHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAic2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQiLCBzZXRQb3B1cEJsb2NraW5nRW5hYmxl
ZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFBsdWdpbnNFbmFibGVkIiwgc2V0UGx1
Z2luc0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRQcmludGluZyIsIHNl
dFByaW50aW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCIsIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAg
ICAgICB7ICJzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkIiwgc2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFNl
cmlhbGl6ZUhUVFBMb2FkcyIsIHNldFNlcmlhbGl6ZUhUVFBMb2Fkc0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCIsIHNldFNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFNwYXRpYWxOYXZp
Z2F0aW9uRW5hYmxlZCIsIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgICAgIHsgInNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMiLCBzZXRTdG9wUHJv
dmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0VGFiS2V5
Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1v
ZGUiLCBzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZUNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgICAgIHsgInNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCIsIHNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24iLCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAic2V0VmFsdWVGb3JVc2VyIiwgc2V0VmFsdWVGb3JVc2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAg
ICAgICAgeyAic2V0Vmlld01vZGVNZWRpYUZlYXR1cmUiLCBzZXRWaWV3TW9kZU1lZGlhRmVhdHVy
ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFdlYlZpZXdFZGl0YWJsZSIsIHNldFdl
YlZpZXdFZGl0YWJsZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFdpbGxTZW5kUmVx
dWVzdENsZWFySGVhZGVyIiwgc2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAotICAgICAgICB7ICJzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCIsIHNldFdp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0
V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0Iiwgc2V0V2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0V2lu
ZG93SXNLZXkiLCBzZXRXaW5kb3dJc0tleUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNl
dEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQiLCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0WFNTQXVkaXRvckVuYWJsZWQi
LCBzZXRYU1NBdWRpdG9yRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldEFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzaG93V2ViSW5zcGVjdG9y
Iiwgc2hvd1dlYkluc3BlY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNpbXVsYXRl
RGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgc2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xp
Y2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ0ZXN0T25zY3JlZW4iLCB0ZXN0T25zY3Jl
ZW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ0ZXN0UmVwYWludCIsIHRlc3RSZXBhaW50
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAid2FpdEZvclBvbGljeURlbGVnYXRlIiwgd2Fp
dEZvclBvbGljeURlbGVnYXRlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAid2FpdFVudGls
RG9uZSIsIHdhaXRVbnRpbERvbmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ3aW5kb3dD
b3VudCIsIHdpbmRvd0NvdW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiYWRkT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkiLCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFNjcm9sbGJhclBvbGljeSIsIHNldFNjcm9sbGJh
clBvbGljeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImF1dGhlbnRpY2F0ZVNlc3Npb24i
LCBhdXRoZW50aWNhdGVTZXNzaW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZGVsZXRl
QWxsTG9jYWxTdG9yYWdlIiwgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICAgICAgeyAic3luY0xvY2FsU3RvcmFnZSIsIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LCAgICAgICAgICAgICAgICAKLSAgICAgICAgeyAib2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9ucyIsIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LCAgICAgICAgCi0gICAgICAgIHsgImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
biIsIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgImxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbiIsIGxvY2FsU3RvcmFnZURpc2tVc2Fn
ZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlIiwgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAg
ICB7ICJzZXRTaG91bGRQYWludEJyb2tlbkltYWdlIiwgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFn
ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldFRleHREaXJlY3Rpb24iLCBzZXRUZXh0
RGlyZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0U2hvdWxkU3RheU9uUGFn
ZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQiLCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgImFkZENocm9tZUlu
cHV0RmllbGQiLCBhZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAg
eyAicmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIsIHJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJmb2N1c1dlYlZpZXciLCBmb2N1c1dlYlZpZXdDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRCYWNraW5nU2NhbGVGYWN0b3IiLCBzZXRCYWNraW5n
U2NhbGVGYWN0b3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJwcmVjaXNlVGltZSIsIHBy
ZWNpc2VUaW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0SGFzQ3VzdG9tRnVsbFNj
cmVlbkJlaGF2aW9yIiwgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICAgICAgeyAic2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsIiwgc2V0U3Rv
cmFnZURhdGFiYXNlSWRsZUludGVydmFsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAwLCAw
LCAwIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250
ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKQotewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1
ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCkpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKEpTU3Ry
aW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hh
YmxlVVJMKQotewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0
cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgdW5yZWFjaGFibGVVUkwpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFjaykK
LXsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgQmFja0l0ZW0oaG93RmFyQmFj
aykpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKGludCBob3dGYXJGb3J3YXJkKQotewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVl
KG5ldyBGb3J3YXJkSXRlbShob3dGYXJGb3J3YXJkKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAg
V29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQo
SlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5l
dyBOb25Mb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cXVldWVSZWxvYWQoKQotewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVl
KG5ldyBSZWxvYWRJdGVtKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnRE
ZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCi17Ci0gICAg
bV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMucHVzaF9iYWNrKEpTU3RyaW5nUmV0
YWluKG9yaWdpbikpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjaGVja0Rlc2t0
b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKLXsKLSAgICBzdGQ6
OnZlY3RvcjxKU1N0cmluZ1JlZj46Oml0ZXJhdG9yIGk7Ci0gICAgZm9yIChpID0gbV9kZXNrdG9w
Tm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuYmVnaW4oKTsKLSAgICAgICAgIGkgIT0gbV9kZXNr
dG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAg
ICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbCgqaSwgb3JpZ2luKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQot
ewotICAgIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQg
PSBmYWxzZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJGaXJlZCgpCi17Ci0gICAgY29uc3QgY2hhciogbWVzc2FnZSA9ICJGQUlMOiBUaW1l
ZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiI7Ci0gICAgZnByaW50
ZihzdGRlcnIsICIlcyIsIG1lc3NhZ2UpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXMiLCBtZXNz
YWdlKTsKLSAgICBub3RpZnlEb25lKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQotewotICAgIG1faXNH
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwotICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNz
aW9uID0gYWxsb3c7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9j
YWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkKLXsKLSAgICBjaGFyIGxvY2FsZUJ1ZlszMl07Ci0gICAg
SlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhsb2NhbGUsIGxvY2FsZUJ1Ziwgc2l6ZW9mKGxvY2FsZUJ1
ZikpOwotICAgIHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZUJ1Zik7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJpbmcgb3JpZ2luLCBzdGQ6
OnN0cmluZyBkZXN0aW5hdGlvbikKLXsKLSAgICBtX1VSTHNUb1JlZGlyZWN0W29yaWdpbl0gPSBk
ZXN0aW5hdGlvbjsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIExheW91dFRlc3RDb250cm9sbGVy
OjpyZWRpcmVjdGlvbkRlc3RpbmF0aW9uRm9yVVJMKHN0ZDo6c3RyaW5nIG9yaWdpbikKLXsKLSAg
ICByZXR1cm4gbV9VUkxzVG9SZWRpcmVjdFtvcmlnaW5dOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTaG91bGRQYWludEJyb2tlbkltYWdlKGJvb2wgc2hvdWxkUGFpbnRCcm9r
ZW5JbWFnZSkKLXsKLSAgICBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UgPSBzaG91bGRQYWludEJy
b2tlbkltYWdlOwotfQotCi1jb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4
Vmlld1dpZHRoID0gODAwOwotY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1h
eFZpZXdIZWlnaHQgPSA2MDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQ0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0gCi0jaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gKLSNkZWZpbmUg
TGF5b3V0VGVzdENvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmpl
Y3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZl
Y3Rvcj4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0KLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
TGF5b3V0VGVzdENvbnRyb2xsZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxM
YXlvdXRUZXN0Q29udHJvbGxlcj4gY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9y
VVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOwotICAgIH5MYXlvdXRU
ZXN0Q29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7Ci0KLSAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKTsKLSAgICB2
b2lkIGFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJpbmcgb3JpZ2luLCBzdGQ6OnN0cmluZyBkZXN0
aW5hdGlvbik7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlZGlyZWN0aW9uRGVzdGluYXRpb25G
b3JVUkwoc3RkOjpzdHJpbmcpOwotICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygp
OwotICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAgICB2b2lkIGNsZWFyQXBwbGljYXRp
b25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKTsKLSAgICB2b2lkIGNsZWFyQmFja0Zv
cndhcmRMaXN0KCk7Ci0gICAgdm9pZCBjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpOwot
ICAgIGJvb2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7Ci0gICAgSlNTdHJpbmdSZWYgY29w
eURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKTsKLSAgICBKU1N0cmluZ1JlZiBjb3B5
RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOwotICAgIHZvaWQgZGVsaXZlcldlYklu
dGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3RyaW5nUmVmIGRh
dGEpOwotICAgIHZvaWQgZGlzYWJsZUltYWdlTG9hZGluZygpOwotICAgIHZvaWQgZGlzcGF0Y2hQ
ZW5kaW5nTG9hZFJlcXVlc3RzKCk7Ci0gICAgdm9pZCBkaXNwbGF5KCk7Ci0gICAgdm9pZCBkaXNw
bGF5SW52YWxpZGF0ZWRSZWdpb24oKTsKLSAgICB2b2lkIGV4ZWNDb21tYW5kKEpTU3RyaW5nUmVm
IG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKTsKLSAgICBib29sIGZpbmRTdHJpbmcoSlNDb250ZXh0
UmVmLCBKU1N0cmluZ1JlZiwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KTsKLSAgICB2b2lkIGdv
QmFjaygpOwotICAgIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29u
dGV4dFJlZik7Ci0gICAgbG9uZyBsb25nIGFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmln
aW4oSlNTdHJpbmdSZWYgbmFtZSk7Ci0gICAgYm9vbCBpc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5n
UmVmIG5hbWUpOwotICAgIHZvaWQga2VlcFdlYkhpc3RvcnkoKTsKLSAgICBKU1ZhbHVlUmVmIGNv
bXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYp
OwotICAgIHZvaWQgbm90aWZ5RG9uZSgpOwotICAgIGludCBudW1iZXJPZlBhZ2VzKGZsb2F0IHBh
Z2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMpOwotICAgIGludCBudW1i
ZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOwotICAgIHZvaWQgb3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpOwotICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVy
dHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3Q7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJv
dHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0OwotICAgIEpTU3RyaW5nUmVmIHBhdGhUb0xvY2Fs
UmVzb3VyY2UoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiB1cmwpOwotICAgIHZvaWQgcXVldWVC
YWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFja3dhcmQpOwotICAgIHZvaWQgcXVldWVGb3J3YXJk
TmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCk7Ci0gICAgdm9pZCBxdWV1ZUxvYWQoSlNTdHJp
bmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpOwotICAgIHZvaWQgcXVldWVMb2FkSFRNTFN0
cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKTsKLSAgICB2b2lk
IHF1ZXVlTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJp
bmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpOwotICAgIHZvaWQgcXVl
dWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCk7Ci0gICAgdm9pZCBxdWV1ZU5vbkxv
YWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KTsKLSAgICB2b2lkIHF1ZXVlUmVsb2FkKCk7
Ci0gICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKLSAgICB2b2lkIHNlbmRXZWJJbnRl
bnRSZXNwb25zZShKU1N0cmluZ1JlZiByZXNwb25zZSk7Ci0gICAgdm9pZCBzZXRBY2NlcHRzRWRp
dGluZyhib29sIGFjY2VwdHNFZGl0aW5nKTsKLSAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wpOwotICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKGJvb2wpOwotICAgIHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBs
b25nIGxvbmcgcXVvdGEpOwotICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7Ci0gICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCk7Ci0gICAgdm9pZCBzZXRDYWNo
ZU1vZGVsKGludCk7Ci0gICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERl
bGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOwotICAgIHZvaWQgc2V0RGF0YWJhc2VRdW90YSh1bnNp
Z25lZCBsb25nIGxvbmcgcXVvdGEpOwotICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKTsKLSAg
ICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAgdm9pZCBzZXRJY29uRGF0YWJhc2VF
bmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCk7Ci0gICAgdm9pZCBzZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7Ci0gICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5r
RGV0ZWN0aW9uRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJz
dFJlc3BvbmRlcihib29sIGZsYWcpOwotICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9u
KGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEs
IGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKTsKLSAgICB2
b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdl
KTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKLSAgICB2b2lkIGFkZE1vY2tTcGVl
Y2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0
cmluZ1JlZiBsYW5ndWFnZSk7Ci0gICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChi
b29sIGZsYWcpOwotICAgIHZvaWQgc2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
SlNTdHJpbmdSZWYgcGF0aCk7Ci0gICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcp
OwotICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lk
IHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNldFNlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNldFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpOwotICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVz
VGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKTsKLSAgICB2b2lkIHNldFVzZURhc2hib2FyZENv
bXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZyk7Ci0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVu
YWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNT
dHJpbmdSZWYgcGF0aCk7Ci0gICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKTsKLSAgICB2b2lkIHNldFZp
ZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpOwotICAgIHZvaWQgc2V0WFNTQXVk
aXRvckVuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJs
ZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmll
bnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKLSAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQo
SlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7Ci0gICAgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShj
b25zdCBjaGFyKik7Ci0gICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KCk7Ci0KLSAgICB2b2lk
IHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwotICAgIHNpemVfdCB3ZWJIaXN0b3J5SXRlbUNvdW50
KCk7Ci0gICAgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQoKSBjb25zdDsKLSAgICBpbnQgd2lu
ZG93Q291bnQoKTsKLSAgICAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oV0lOKQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUo
KSBjb25zdDsKLSNlbmRpZgotCi0gICAgdm9pZCBncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7Ci0gICAgYm9vbCBjaGVja0Rlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7Ci0gICAgdm9pZCBpZ25vcmVEZXNr
dG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgYm9vbCBhcmVEZXNrdG9w
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQ7IH0KLSAgICB2
b2lkIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKTsK
LQotICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3Ry
aW5nUmVmIGlkKTsKLQotICAgIGJvb2wgZHVtcEFzQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2R1
bXBBc0F1ZGlvOyB9Ci0gICAgdm9pZCBzZXREdW1wQXNBdWRpbyhib29sIGR1bXBBc0F1ZGlvKSB7
IG1fZHVtcEFzQXVkaW8gPSBkdW1wQXNBdWRpbzsgfQotICAgIAotICAgIGJvb2wgZHVtcEFzUERG
KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNQREY7IH0KLSAgICB2b2lkIHNldER1bXBBc1BERihi
b29sIGR1bXBBc1BERikgeyBtX2R1bXBBc1BERiA9IGR1bXBBc1BERjsgfQotCi0gICAgYm9vbCBk
dW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9Ci0gICAgdm9pZCBzZXRE
dW1wQXNUZXh0KGJvb2wgZHVtcEFzVGV4dCkgeyBtX2R1bXBBc1RleHQgPSBkdW1wQXNUZXh0OyB9
Ci0KLSAgICBib29sIGdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgY29uc3QgeyByZXR1cm4gbV9nZW5l
cmF0ZVBpeGVsUmVzdWx0czsgfQotICAgIHZvaWQgc2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMoYm9v
bCBnZW5lcmF0ZVBpeGVsUmVzdWx0cykgeyBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0gZ2VuZXJh
dGVQaXhlbFJlc3VsdHM7IH0KLQotICAgIGJvb2wgZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxp
Y2F0aW9uQ2FjaGVRdW90YTsgfQotICAgIHZvaWQgc2V0RGlzYWxsb3dJbmNyZWFzZUZvckFwcGxp
Y2F0aW9uQ2FjaGVRdW90YShib29sIGRpc2FsbG93SW5jcmVhc2UpIHsgbV9kaXNhbGxvd0luY3Jl
YXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhID0gZGlzYWxsb3dJbmNyZWFzZTsgfQotCi0gICAg
Ym9vbCBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1
cm4gbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBz
ZXREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKGJvb2wgZHVtcENhbGxiYWNr
cykgeyBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MgPSBkdW1wQ2FsbGJh
Y2tzOyB9Ci0KLSAgICBib29sIGR1bXBCYWNrRm9yd2FyZExpc3QoKSBjb25zdCB7IHJldHVybiBt
X2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KLSAgICB2b2lkIHNldER1bXBCYWNrRm9yd2FyZExpc3Qo
Ym9vbCBkdW1wQmFja0ZvcndhcmRMaXN0KSB7IG1fZHVtcEJhY2tGb3J3YXJkTGlzdCA9IGR1bXBC
YWNrRm9yd2FyZExpc3Q7IH0KLQotICAgIGJvb2wgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOyB9Ci0g
ICAgdm9pZCBzZXREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyhib29sIGR1bXBDaGlsZEZy
YW1lU2Nyb2xsUG9zaXRpb25zKSB7IG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMgPSBk
dW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQotCi0gICAgYm9vbCBkdW1wQ2hpbGRGcmFt
ZXNBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsgfQotICAg
IHZvaWQgc2V0RHVtcENoaWxkRnJhbWVzQXNUZXh0KGJvb2wgZHVtcENoaWxkRnJhbWVzQXNUZXh0
KSB7IG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0ID0gZHVtcENoaWxkRnJhbWVzQXNUZXh0OyB9Ci0K
LSAgICBib29sIGR1bXBEYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcERh
dGFiYXNlQ2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBzZXREdW1wRGF0YWJhc2VDYWxsYmFja3MoYm9v
bCBkdW1wRGF0YWJhc2VDYWxsYmFja3MpIHsgbV9kdW1wRGF0YWJhc2VDYWxsYmFja3MgPSBkdW1w
RGF0YWJhc2VDYWxsYmFja3M7IH0KLQotICAgIGJvb2wgZHVtcERPTUFzV2ViQXJjaGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQotICAgIHZvaWQgc2V0RHVtcERP
TUFzV2ViQXJjaGl2ZShib29sIGR1bXBET01Bc1dlYkFyY2hpdmUpIHsgbV9kdW1wRE9NQXNXZWJB
cmNoaXZlID0gZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQotCi0gICAgYm9vbCBkdW1wRWRpdGluZ0Nh
bGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7IH0KLSAgICB2
b2lkIHNldER1bXBFZGl0aW5nQ2FsbGJhY2tzKGJvb2wgZHVtcEVkaXRpbmdDYWxsYmFja3MpIHsg
bV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IGR1bXBFZGl0aW5nQ2FsbGJhY2tzOyB9Ci0KLSAgICBi
b29sIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBGcmFtZUxv
YWRDYWxsYmFja3M7IH0KLSAgICB2b2lkIHNldER1bXBGcmFtZUxvYWRDYWxsYmFja3MoYm9vbCBk
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKSB7IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGR1bXBG
cmFtZUxvYWRDYWxsYmFja3M7IH0KLQotICAgIGJvb2wgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxs
YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQot
ICAgIHZvaWQgc2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhib29sIGR1bXBQcm9ncmVz
c0ZpbmlzaGVkQ2FsbGJhY2spIHsgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gZHVt
cFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQotICAgIAotICAgIGJvb2wgZHVtcFVzZXJHZXN0
dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBVc2VyR2VzdHVy
ZUluRnJhbWVMb2FkQ2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBzZXREdW1wVXNlckdlc3R1cmVJbkZy
YW1lTG9hZENhbGxiYWNrcyhib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
KSB7IG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSBkdW1wVXNlckdlc3R1
cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfSAgICAKLQotICAgIGJvb2wgZHVtcEhpc3RvcnlEZWxl
Z2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxi
YWNrczsgfQotICAgIHZvaWQgc2V0RHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcyhib29sIGR1
bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MpIHsgbV9kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJh
Y2tzID0gZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrczsgfQotICAgIAotICAgIGJvb2wgZHVt
cFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0RHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyhib29s
IGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
ID0gZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsgfQotICAgIAotICAgIGJvb2wgZHVtcFJlc291
cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBSZXNvdXJjZVJlc3Bv
bnNlTUlNRVR5cGVzOyB9Ci0gICAgdm9pZCBzZXREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBl
cyhib29sIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKSB7IG1fZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMgPSBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlczsgfQotCi0gICAg
Ym9vbCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFNlbGVjdGlvblJl
Y3Q7IH0KLSAgICB2b2lkIHNldER1bXBTZWxlY3Rpb25SZWN0KGJvb2wgZHVtcFNlbGVjdGlvblJl
Y3QpIHsgbV9kdW1wU2VsZWN0aW9uUmVjdCA9IGR1bXBTZWxlY3Rpb25SZWN0OyB9Ci0KLSAgICBi
b29sIGR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSBjb25zdCB7IHJldHVybiBtX2R1bXBTb3VyY2VB
c1dlYkFyY2hpdmU7IH0KLSAgICB2b2lkIHNldER1bXBTb3VyY2VBc1dlYkFyY2hpdmUoYm9vbCBk
dW1wU291cmNlQXNXZWJBcmNoaXZlKSB7IG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSA9IGR1bXBT
b3VyY2VBc1dlYkFyY2hpdmU7IH0KLQotICAgIGJvb2wgZHVtcFN0YXR1c0NhbGxiYWNrcygpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0RHVtcFN0
YXR1c0NhbGxiYWNrcyhib29sIGR1bXBTdGF0dXNDYWxsYmFja3MpIHsgbV9kdW1wU3RhdHVzQ2Fs
bGJhY2tzID0gZHVtcFN0YXR1c0NhbGxiYWNrczsgfQotCi0gICAgYm9vbCBkdW1wVGl0bGVDaGFu
Z2VzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9Ci0gICAgdm9pZCBzZXRE
dW1wVGl0bGVDaGFuZ2VzKGJvb2wgZHVtcFRpdGxlQ2hhbmdlcykgeyBtX2R1bXBUaXRsZUNoYW5n
ZXMgPSBkdW1wVGl0bGVDaGFuZ2VzOyB9Ci0KLSAgICBib29sIGR1bXBJY29uQ2hhbmdlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcEljb25DaGFuZ2VzOyB9Ci0gICAgdm9pZCBzZXREdW1wSWNvbkNo
YW5nZXMoYm9vbCBkdW1wSWNvbkNoYW5nZXMpIHsgbV9kdW1wSWNvbkNoYW5nZXMgPSBkdW1wSWNv
bkNoYW5nZXM7IH0KLQotICAgIGJvb2wgZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrKCkgY29uc3Qg
eyByZXR1cm4gbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7IH0KLSAgICB2b2lkIHNldER1bXBW
aXNpdGVkTGlua3NDYWxsYmFjayhib29sIGR1bXBWaXNpdGVkTGlua3NDYWxsYmFjaykgeyBtX2R1
bXBWaXNpdGVkTGlua3NDYWxsYmFjayA9IGR1bXBWaXNpdGVkTGlua3NDYWxsYmFjazsgfQotICAg
IAotICAgIGJvb2wgZHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9kdW1w
V2lsbENhY2hlUmVzcG9uc2U7IH0KLSAgICB2b2lkIHNldER1bXBXaWxsQ2FjaGVSZXNwb25zZShi
b29sIGR1bXBXaWxsQ2FjaGVSZXNwb25zZSkgeyBtX2R1bXBXaWxsQ2FjaGVSZXNwb25zZSA9IGR1
bXBXaWxsQ2FjaGVSZXNwb25zZTsgfQotICAgIAotICAgIGJvb2wgY2FsbENsb3NlT25XZWJWaWV3
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbENsb3NlT25XZWJWaWV3czsgfQotICAgIHZvaWQgc2V0
Q2FsbENsb3NlT25XZWJWaWV3cyhib29sIGNhbGxDbG9zZU9uV2ViVmlld3MpIHsgbV9jYWxsQ2xv
c2VPbldlYlZpZXdzID0gY2FsbENsb3NlT25XZWJWaWV3czsgfQotCi0gICAgYm9vbCBjYW5PcGVu
V2luZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KLSAgICB2b2lkIHNl
dENhbk9wZW5XaW5kb3dzKGJvb2wgY2FuT3BlbldpbmRvd3MpIHsgbV9jYW5PcGVuV2luZG93cyA9
IGNhbk9wZW5XaW5kb3dzOyB9Ci0KLSAgICBib29sIGNsb3NlUmVtYWluaW5nV2luZG93c1doZW5D
b21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBs
ZXRlOyB9Ci0gICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoYm9v
bCBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpIHsgbV9jbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGUgPSBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGU7IH0K
LSAgICAKLSAgICBib29sIG5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdDsgfQotICAgIHZvaWQgc2V0TmV3
V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3QoYm9vbCBuZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJk
TGlzdCkgeyBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0ID0gbmV3V2luZG93c0NvcHlC
YWNrRm9yd2FyZExpc3Q7IH0KLSAgICAKLSAgICBib29sIHN0b3BQcm92aXNpb25hbEZyYW1lTG9h
ZHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7IH0KLSAgICB2
b2lkIHNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoYm9vbCBzdG9wUHJvdmlzaW9uYWxGcmFt
ZUxvYWRzKSB7IG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHM7IH0KLQotICAgIGJvb2wgdGVzdE9uc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV90
ZXN0T25zY3JlZW47IH0KLSAgICB2b2lkIHNldFRlc3RPbnNjcmVlbihib29sIHRlc3RPbnNjcmVl
bikgeyBtX3Rlc3RPbnNjcmVlbiA9IHRlc3RPbnNjcmVlbjsgfQotCi0gICAgYm9vbCB0ZXN0UmVw
YWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7IH0KLSAgICB2b2lkIHNldFRlc3RS
ZXBhaW50KGJvb2wgdGVzdFJlcGFpbnQpIHsgbV90ZXN0UmVwYWludCA9IHRlc3RSZXBhaW50OyB9
Ci0KLSAgICBib29sIHRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSBjb25zdCB7IHJldHVy
biBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHk7IH0KLSAgICB2b2lkIHNldFRlc3RSZXBh
aW50U3dlZXBIb3Jpem9udGFsbHkoYm9vbCB0ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KSB7
IG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRlc3RSZXBhaW50U3dlZXBIb3Jpem9u
dGFsbHk7IH0KLQotICAgIGJvb2wgd2FpdFRvRHVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdFRv
RHVtcDsgfQotICAgIHZvaWQgc2V0V2FpdFRvRHVtcChib29sIHdhaXRUb0R1bXApOwotICAgIHZv
aWQgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwotCi0gICAgY29uc3Qgc3RkOjpzZXQ8
c3RkOjpzdHJpbmc+JiB3aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKSBjb25zdCB7IHJldHVy
biBtX3dpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyczsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRS
ZXF1ZXN0Q2xlYXJIZWFkZXIoc3RkOjpzdHJpbmcgaGVhZGVyKSB7IG1fd2lsbFNlbmRSZXF1ZXN0
Q2xlYXJIZWFkZXJzLmluc2VydChoZWFkZXIpOyB9Ci0KLSAgICBib29sIHdpbGxTZW5kUmVxdWVz
dFJldHVybnNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVs
bDsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCByZXR1cm5z
TnVsbCkgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsID0gcmV0dXJuc051bGw7IH0KLQot
ICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7IH0KLSAgICB2b2lk
IHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChib29sIHJldHVybnNOdWxs
KSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0ID0gcmV0dXJuc051bGw7
IH0KLQotICAgIGJvb2wgd2luZG93SXNLZXkoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd0lzS2V5
OyB9Ci0gICAgdm9pZCBzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KTsKLQotICAgIGJv
b2wgYWx3YXlzQWNjZXB0Q29va2llcygpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzQWNjZXB0Q29v
a2llczsgfQotICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2Vw
dENvb2tpZXMpOwotICAgIAotICAgIGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlczsgfQot
ICAgIHZvaWQgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sIGhhbmRsZXNB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpIHsgbV9oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzID0gaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlczsgfQotICAgIAotICAgIGJvb2wg
aXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQcmludGluZzsgfQotICAgIHZvaWQgc2V0
SXNQcmludGluZyhib29sIGlzUHJpbnRpbmcpIHsgbV9pc1ByaW50aW5nID0gaXNQcmludGluZzsg
fQotCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWU7IH0KLSAgICB2b2lkIHNldEF1dGhl
bnRpY2F0aW9uVXNlcm5hbWUoc3RkOjpzdHJpbmcgdXNlcm5hbWUpIHsgbV9hdXRoZW50aWNhdGlv
blVzZXJuYW1lID0gdXNlcm5hbWU7IH0KLSAgICAKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXV0
aGVudGljYXRpb25QYXNzd29yZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aGVudGljYXRpb25QYXNz
d29yZDsgfQotICAgIHZvaWQgc2V0QXV0aGVudGljYXRpb25QYXNzd29yZChzdGQ6OnN0cmluZyBw
YXNzd29yZCkgeyBtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQgPSBwYXNzd29yZDsgfQotCi0gICAg
Ym9vbCBnbG9iYWxGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxGbGFnOyB9Ci0gICAgdm9p
ZCBzZXRHbG9iYWxGbGFnKGJvb2wgZ2xvYmFsRmxhZykgeyBtX2dsb2JhbEZsYWcgPSBnbG9iYWxG
bGFnOyB9Ci0gICAgCi0gICAgYm9vbCBkZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOyB9Ci0gICAgdm9pZCBzZXREZWZl
ck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wgZmxhZykgeyBtX2RlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQgPSBmbGFnOyB9Ci0KLSAgICBib29sIHVzZURlZmVycmVkRnJhbWVMb2FkaW5nKCkgY29u
c3QgeyByZXR1cm4gbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZzsgfQotICAgIHZvaWQgc2V0VXNl
RGVmZXJyZWRGcmFtZUxvYWRpbmcoYm9vbCBmbGFnKSB7IG1fdXNlRGVmZXJyZWRGcmFtZUxvYWRp
bmcgPSBmbGFnOyB9Ci0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVSTCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBl
eHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRQaXhlbEhhc2g7IH0K
LQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9Ci0gICAgdm9pZCBzZXRFbmNvZGVkQXVkaW9EYXRhKGNv
bnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKSB7IG1fZW5jb2RlZEF1ZGlvRGF0YSA9
IGVuY29kZWRBdWRpb0RhdGE7IH0KLSAgICAKLSAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBK
U1N0cmluZ1JlZiBlbGVtZW50SWQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3Ry
aW5nUmVmIGVsZW1lbnRJZCk7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3Ry
aW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNT
dHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVm
IHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdS
ZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLQot
ICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFy
dCwgYm9vbCBhbGxGcmFtZXMpOwotICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdS
ZWYgc291cmNlLCBib29sIGFsbEZyYW1lcyk7Ci0KLSAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbihib29sIGFsbG93KTsKLSAgICBib29sIGlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsgfQotICAgIGJv
b2wgZ2VvbG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW9sb2NhdGlvblBl
cm1pc3Npb247IH0KLQotICAgIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKTsK
LSAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwotICAg
IHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOwotICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoKTsK
LSAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVm
IHNjcmlwdCk7Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25l
ZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCk7
Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVu
c2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KTsKLQotICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxv
YWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9y
ZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKSB7
IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBzaG91bGRTdGF5
T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZDsgfQotCi0gICAgdm9pZCBhZGRDaHJvbWVJ
bnB1dEZpZWxkKCk7Ci0gICAgdm9pZCByZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgdm9p
ZCBmb2N1c1dlYlZpZXcoKTsKLQotICAgIHZvaWQgc2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJs
ZSk7Ci0KLSAgICB2b2lkIHNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2FsZSk7Ci0KLSAg
ICB2b2lkIHNldFdlYlZpZXdFZGl0YWJsZShib29sKTsKLQotICAgIHZvaWQgYWJvcnRNb2RhbCgp
OwotCi0gICAgc3RhdGljIHZvaWQgc2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXpl
KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJIHRlc3QgZnVuY3Rpb25zIHNob3VsZCBwcm9i
YWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyAKLSAgICAvLyB1bml0IHRlc3RzIG91
dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KLSAgICB2b2lkIGFwaVRlc3ROZXdXaW5kb3dE
YXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwp
OwotICAgIHZvaWQgYXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCk7Ci0KLSAgICAv
LyBTaW11bGF0ZSBhIHJlcXVlc3QgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNvdWxkIG1ha2Us
IHBvcHVsYXRpbmcgcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgotICAgIHZvaWQgYXV0
aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHVzZXJuYW1lLCBK
U1N0cmluZ1JlZiBwYXNzd29yZCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGF5
ZXJUcmVlQXNUZXh0KCkgY29uc3Q7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWFy
a2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVP
YmplY3QpIGNvbnN0OwotCi0gICAgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShK
U0NvbnRleHRSZWYpOwotICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7Ci0gICAgdm9p
ZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmll
cik7Ci0gICAgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmlu
Z1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKLSAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2Uo
KTsKLQotICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sKTsKLSAgICBib29s
IHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhaW50QnJv
a2VuSW1hZ2U7IH0KLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhWaWV3V2lkdGg7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdIZWlnaHQ7Ci0KLSAgICB2b2lkIHNldE1p
bmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7Ci0KLSAgICB2b2lkIHNldFRleHREaXJlY3Rpb24o
SlNTdHJpbmdSZWYpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZVRleHREaXJlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3RpdGxlVGV4dERpcmVjdGlvbjsgfQotICAgIHZvaWQgc2V0VGl0
bGVUZXh0RGlyZWN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJlY3Rpb24pIHsgbV90aXRsZVRl
eHREaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KLQotICAgIC8vIEN1c3RvbSBmdWxsIHNjcmVlbiBi
ZWhhdmlvci4KLSAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihib29sIHZh
bHVlKSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KLSAgICBib29sIGhh
c0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tRnVsbFNj
cmVlbkJlaGF2aW9yOyB9Ci0KLSAgICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZh
bChkb3VibGUpOwotCi1wcml2YXRlOgotICAgIExheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0
ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhl
bEhhc2gpOwotCi0gICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBh
bGxvdyk7Ci0KLSAgICBib29sIG1fZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVR
dW90YTsKLSAgICBib29sIG1fZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrczsK
LSAgICBib29sIG1fZHVtcEFzQXVkaW87Ci0gICAgYm9vbCBtX2R1bXBBc1BERjsKLSAgICBib29s
IG1fZHVtcEFzVGV4dDsKLSAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKLSAgICBib29s
IG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7Ci0gICAgYm9vbCBtX2R1bXBDaGlsZEZy
YW1lc0FzVGV4dDsKLSAgICBib29sIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsKLSAgICBib29sIG1f
ZHVtcERhdGFiYXNlQ2FsbGJhY2tzOwotICAgIGJvb2wgbV9kdW1wRWRpdGluZ0NhbGxiYWNrczsK
LSAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsKLSAgICBib29sIG1fZHVtcFByb2dy
ZXNzRmluaXNoZWRDYWxsYmFjazsKLSAgICBib29sIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxv
YWRDYWxsYmFja3M7Ci0gICAgYm9vbCBtX2R1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3M7Ci0g
ICAgYm9vbCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAgYm9vbCBtX2R1bXBSZXNv
dXJjZVJlc3BvbnNlTUlNRVR5cGVzOwotICAgIGJvb2wgbV9kdW1wU2VsZWN0aW9uUmVjdDsKLSAg
ICBib29sIG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZTsKLSAgICBib29sIG1fZHVtcFN0YXR1c0Nh
bGxiYWNrczsKLSAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKLSAgICBib29sIG1fZHVtcElj
b25DaGFuZ2VzOwotICAgIGJvb2wgbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7Ci0gICAgYm9v
bCBtX2R1bXBXaWxsQ2FjaGVSZXNwb25zZTsKLSAgICBib29sIG1fZ2VuZXJhdGVQaXhlbFJlc3Vs
dHM7Ci0gICAgYm9vbCBtX2NhbGxDbG9zZU9uV2ViVmlld3M7Ci0gICAgYm9vbCBtX2Nhbk9wZW5X
aW5kb3dzOwotICAgIGJvb2wgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGU7Ci0g
ICAgYm9vbCBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0OwotICAgIGJvb2wgbV9zdG9w
UHJvdmlzaW9uYWxGcmFtZUxvYWRzOwotICAgIGJvb2wgbV90ZXN0T25zY3JlZW47Ci0gICAgYm9v
bCBtX3Rlc3RSZXBhaW50OwotICAgIGJvb2wgbV90ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5
OwotICAgIGJvb2wgbV93YWl0VG9EdW1wOyAvLyBUcnVlIGlmIHdhaXRVbnRpbERvbmUoKSBoYXMg
YmVlbiBjYWxsZWQsIGJ1dCBub3RpZnlEb25lKCkgaGFzIG5vdCB5ZXQgYmVlbiBjYWxsZWQuCi0g
ICAgYm9vbCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsOwotICAgIGJvb2wgbV93aWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7Ci0gICAgYm9vbCBtX3dpbmRvd0lzS2V5Owot
ICAgIGJvb2wgbV9hbHdheXNBY2NlcHRDb29raWVzOwotICAgIGJvb2wgbV9nbG9iYWxGbGFnOwot
ICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsKLSAgICBib29sIG1fZ2VvbG9j
YXRpb25QZXJtaXNzaW9uOwotICAgIGJvb2wgbV9oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzOwotICAgIGJvb2wgbV9pc1ByaW50aW5nOwotICAgIGJvb2wgbV9kZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkOwotICAgIGJvb2wgbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZzsKLSAgICBib29s
IG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKLSAgICBib29sIG1fc2hvdWxkU3RheU9uUGFnZUFm
dGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7Ci0gICAgYm9vbCBtX2FyZURlc2t0b3BOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHNJZ25vcmVkOwotICAgIGJvb2wgbV9jdXN0b21GdWxsU2NyZWVu
QmVoYXZpb3I7Ci0KLSAgICBzdGQ6OnN0cmluZyBtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWU7Ci0g
ICAgc3RkOjpzdHJpbmcgbV9hdXRoZW50aWNhdGlvblBhc3N3b3JkOyAKLSAgICBzdGQ6OnN0cmlu
ZyBtX3Rlc3RQYXRoT3JVUkw7Ci0gICAgc3RkOjpzdHJpbmcgbV9leHBlY3RlZFBpeGVsSGFzaDsg
ICAgLy8gZW1wdHkgc3RyaW5nIGlmIG5vIGhhc2gKLSAgICBzdGQ6OnN0cmluZyBtX3RpdGxlVGV4
dERpcmVjdGlvbjsKLQotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX3dpbGxTZW5kUmVxdWVz
dENsZWFySGVhZGVyczsKLSAgICAKLSAgICAvLyBiYXNlNjQgZW5jb2RlZCBXQVYgYXVkaW8gZGF0
YSBpcyBzdG9yZWQgaGVyZS4KLSAgICBzdGQ6OnN0cmluZyBtX2VuY29kZWRBdWRpb0RhdGE7Ci0g
ICAgCi0gICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4gZ3JhbnRlZCBkZXNrdG9wIG5vdGlm
aWNhdGlvbiBhY2Nlc3MKLSAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj4gbV9kZXNrdG9wTm90
aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7Ci0KLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3Rk
OjpzdHJpbmc+IG1fVVJMc1RvUmVkaXJlY3Q7Ci0gICAgCi0gICAgc3RhdGljIEpTQ2xhc3NSZWYg
Z2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMoKTsK
LSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7Ci19OwotCi0j
ZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpbmNsdWRlICJDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCIKICNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ5LDExICs0OSwxMSBAQCB2
b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4CiB7CiAgICAgUmVmUHRyPEJp
dG1hcENvbnRleHQ+IGNvbnRleHQ7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmlzUHJpbnRpbmcoKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmlzUHJp
bnRpbmcoKSkKICAgICAgICAgY29udGV4dCA9IGNyZWF0ZVBhZ2VkQml0bWFwQ29udGV4dCgpOwog
ICAgIGVsc2UKICNlbmRpZgotICAgICAgICBjb250ZXh0ID0gY3JlYXRlQml0bWFwQ29udGV4dEZy
b21XZWJWaWV3KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+dGVzdE9uc2NyZWVuKCksIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+dGVzdFJlcGFpbnQoKSwgZ0xheW91dFRlc3RDb250cm9sbGVyLT50ZXN0
UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KCksIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNl
bGVjdGlvblJlY3QoKSk7CisgICAgICAgIGNvbnRleHQgPSBjcmVhdGVCaXRtYXBDb250ZXh0RnJv
bVdlYlZpZXcoZ1Rlc3RSdW5uZXItPnRlc3RPbnNjcmVlbigpLCBnVGVzdFJ1bm5lci0+dGVzdFJl
cGFpbnQoKSwgZ1Rlc3RSdW5uZXItPnRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSwgZ1Rl
c3RSdW5uZXItPmR1bXBTZWxlY3Rpb25SZWN0KCkpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICAg
ICAKICAgICAvLyBDb21wdXRlIHRoZSBoYXNoIG9mIHRoZSBiaXRtYXAgY29udGV4dCBwaXhlbHMK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgJ
KHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2Vy
RGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTUgKzIzLDE1IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi1jbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKK2NsYXNzIFRlc3RSdW5u
ZXI7CiAKIEBpbnRlcmZhY2UgU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKICAg
ICB1bnNpZ25lZCBudW1iZXJPZk5vdGlmaWNhdGlvbnNUb0xvZzsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlclRvTm90aWZ5RG9uZTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyVG9Ob3RpZnlEb25lOwogfQogCi0tICh2b2lkKWxvZ05vdGlmaWNhdGlvbnM6KHVuc2lnbmVk
KW51bWJlciBjb250cm9sbGVyOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcjsKKy0g
KHZvaWQpbG9nTm90aWZpY2F0aW9uczoodW5zaWduZWQpbnVtYmVyIGNvbnRyb2xsZXI6KFRlc3RS
dW5uZXIqKWNvbnRyb2xsZXI7CiAtICh2b2lkKW9yaWdpbk1vZGlmaWVkOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbjsKLS0gKHZvaWQpc2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZTooTGF5
b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CistICh2b2lkKXNldENvbnRyb2xsZXJUb05v
dGlmeURvbmU6KFRlc3RSdW5uZXIqKWNvbnRyb2xsZXI7CiAKIEBlbmQKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMTI1
MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgiCiAKLSNpbXBvcnQgIkxheW91dFRlc3RDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJUZXN0UnVubmVyLmgiCiAjaW1wb3J0IDxXZWJLaXQvV2ViU2Vj
dXJpdHlPcmlnaW5Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViU3RvcmFnZU1hbmFnZXJQ
cml2YXRlLmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAgLSAoaWQpaW5pdAogICAgIHJldHVybiBzZWxm
OwogfQogCi0tICh2b2lkKWxvZ05vdGlmaWNhdGlvbnM6KHVuc2lnbmVkKW51bWJlciBjb250cm9s
bGVyOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcgorLSAodm9pZClsb2dOb3RpZmlj
YXRpb25zOih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjooVGVzdFJ1bm5lciopY29udHJvbGxl
cgogewogICAgIGNvbnRyb2xsZXJUb05vdGlmeURvbmUgPSBjb250cm9sbGVyOwogCkBAIC03Myw3
ICs3Myw3IEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAo
dm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29u
dHJvbGxlcgorLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihUZXN0UnVubmVyKilj
b250cm9sbGVyCiB7CiAgICAgY29udHJvbGxlclRvTm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7CiB9
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMTI1MzM1KQko
ZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6MTI1MzM1
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgi
CisjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9s
bGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYg
ZXhwZWN0ZWRQaXhlbEhhc2gpCisgICAgOiBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlv
bkNhY2hlUXVvdGEoZmFsc2UpCisgICAgLCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVD
YWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBBc0F1ZGlvKGZhbHNlKQorICAgICwgbV9kdW1w
QXNQREYoZmFsc2UpCisgICAgLCBtX2R1bXBBc1RleHQoZmFsc2UpCisgICAgLCBtX2R1bXBCYWNr
Rm9yd2FyZExpc3QoZmFsc2UpCisgICAgLCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
KGZhbHNlKQorICAgICwgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQoZmFsc2UpCisgICAgLCBtX2R1
bXBET01Bc1dlYkFyY2hpdmUoZmFsc2UpCisgICAgLCBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrcyhm
YWxzZSkKKyAgICAsIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBG
cmFtZUxvYWRDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2Fs
bGJhY2soZmFsc2UpCisgICAgLCBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
KGZhbHNlKQorICAgICwgbV9kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKGZhbHNlKQorICAg
ICwgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGZhbHNlKQorICAgICwgbV9kdW1wUmVzb3Vy
Y2VSZXNwb25zZU1JTUVUeXBlcyhmYWxzZSkKKyAgICAsIG1fZHVtcFNlbGVjdGlvblJlY3QoZmFs
c2UpCisgICAgLCBtX2R1bXBTb3VyY2VBc1dlYkFyY2hpdmUoZmFsc2UpCisgICAgLCBtX2R1bXBT
dGF0dXNDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBUaXRsZUNoYW5nZXMoZmFsc2UpCisg
ICAgLCBtX2R1bXBJY29uQ2hhbmdlcyhmYWxzZSkKKyAgICAsIG1fZHVtcFZpc2l0ZWRMaW5rc0Nh
bGxiYWNrKGZhbHNlKQorICAgICwgbV9kdW1wV2lsbENhY2hlUmVzcG9uc2UoZmFsc2UpCisgICAg
LCBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzKHRydWUpCisgICAgLCBtX2NhbGxDbG9zZU9uV2ViVmll
d3ModHJ1ZSkKKyAgICAsIG1fY2FuT3BlbldpbmRvd3MoZmFsc2UpCisgICAgLCBtX2Nsb3NlUmVt
YWluaW5nV2luZG93c1doZW5Db21wbGV0ZSh0cnVlKQorICAgICwgbV9uZXdXaW5kb3dzQ29weUJh
Y2tGb3J3YXJkTGlzdChmYWxzZSkKKyAgICAsIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyhm
YWxzZSkKKyAgICAsIG1fdGVzdE9uc2NyZWVuKGZhbHNlKQorICAgICwgbV90ZXN0UmVwYWludChm
YWxzZSkKKyAgICAsIG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseShmYWxzZSkKKyAgICAs
IG1fd2FpdFRvRHVtcChmYWxzZSkKKyAgICAsIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwo
ZmFsc2UpCisgICAgLCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChmYWxz
ZSkKKyAgICAsIG1fd2luZG93SXNLZXkodHJ1ZSkKKyAgICAsIG1fYWx3YXlzQWNjZXB0Q29va2ll
cyhmYWxzZSkKKyAgICAsIG1fZ2xvYmFsRmxhZyhmYWxzZSkKKyAgICAsIG1faXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQoZmFsc2UpCisgICAgLCBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxz
ZSkKKyAgICAsIG1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhmYWxzZSkKKyAgICAs
IG1faXNQcmludGluZyhmYWxzZSkKKyAgICAsIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0
cnVlKQorICAgICwgbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZyhmYWxzZSkKKyAgICAsIG1fc2hv
dWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQorICAgICwgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJI
YW5kbGluZ0JlZm9yZVVubG9hZChmYWxzZSkKKyAgICAsIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQoZmFsc2UpCisgICAgLCBtX2N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvcihmYWxzZSkgCisgICAgLCBtX3Rlc3RQYXRoT3JVUkwodGVzdFBhdGhPclVSTCkK
KyAgICAsIG1fZXhwZWN0ZWRQaXhlbEhhc2goZXhwZWN0ZWRQaXhlbEhhc2gpCisgICAgLCBtX3Rp
dGxlVGV4dERpcmVjdGlvbigibHRyIikKK3sKK30KKworUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29u
dHJvbGxlcj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYg
dGVzdFBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5b3V0VGVzdENvbnRyb2xsZXIodGVzdFBhdGhPclVS
TCwgZXhwZWN0ZWRQaXhlbEhhc2gpKTsKK30KKworLy8gU3RhdGljIEZ1bmN0aW9ucworCitzdGF0
aWMgSlNWYWx1ZVJlZiBkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldERpc2Fs
bG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEodHJ1ZSk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1w
QXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdh
dGVDYWxsYmFja3ModHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXNQREZDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcEFzUERGKHRydWUpOworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgZHVtcEFzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOworCisgICAgLy8gT3B0aW9uYWwgcGFyYW1h
dGVyLCBkZXNjcmliaW5nIHdoZXRoZXIgaXQncyBhbGxvd2VkIHRvIGR1bXAgcGl4ZWwgcmVzdWx0
cyBpbiBkdW1wQXNUZXh0IG1vZGUuCisgICAgY29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhlbFJl
c3VsdHMoYXJndW1lbnRDb3VudCA+IDAgPyBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSkgOiBmYWxzZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcEJhY2tG
b3J3YXJkTGlzdCh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDaGlsZEZyYW1lc0FzVGV4dENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hpbGRG
cmFtZXNBc1RleHQodHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRE
dW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFz
ZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9s
bGVyLT5zZXREdW1wRGF0YWJhc2VDYWxsYmFja3ModHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRE9NQXNX
ZWJBcmNoaXZlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnNldER1bXBET01Bc1dlYkFyY2hpdmUodHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRWRpdGluZ0Nh
bGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5zZXREdW1wRWRpdGluZ0NhbGxiYWNrcyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBGcmFtZUxvYWRD
YWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxl
ci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBQcm9ncmVz
c0ZpbmlzaGVkQ2FsbGJhY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
Y29udHJvbGxlci0+c2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayh0cnVlKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldER1bXBVc2VyR2VzdHVyZUluRnJh
bWVMb2FkQ2FsbGJhY2tzKHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRE
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29u
dHJvbGxlci0+c2V0RHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXModHJ1ZSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wU2VsZWN0aW9uUmVjdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT5zZXREdW1wU2VsZWN0aW9uUmVjdCh0cnVlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBT
b3VyY2VBc1dlYkFyY2hpdmVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
Y29udHJvbGxlci0+c2V0RHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSh0cnVlKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1
bXBTdGF0dXNDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
Y29udHJvbGxlci0+c2V0RHVtcFN0YXR1c0NhbGxiYWNrcyh0cnVlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBU
aXRsZUNoYW5nZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJv
bGxlci0+c2V0RHVtcFRpdGxlQ2hhbmdlcyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBJY29uQ2hhbmdl
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRE
dW1wSWNvbkNoYW5nZXModHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wV2lsbENhY2hlUmVzcG9uc2VDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcFdp
bGxDYWNoZVJlc3BvbnNlKHRydWUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcGF0aFRvTG9jYWxSZXNvdXJjZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsb2NhbFBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNl
cHRpb24pOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbnZlcnRlZFBhdGgoQWRv
cHQsIGNvbnRyb2xsZXItPnBhdGhUb0xvY2FsUmVzb3VyY2UoY29udGV4dCwgbG9jYWxQYXRoLmdl
dCgpKSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQYXRoKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29u
dGV4dCwgY29udmVydGVkUGF0aC5nZXQoKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHJlbW92
ZUFsbFZpc2l0ZWRMaW5rc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5zZXREdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2sodHJ1ZSk7CisgICAgY29udHJv
bGxlci0+cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiByZXBhaW50U3dlZXBIb3Jp
em9udGFsbHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxl
ci0+c2V0VGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSh0cnVlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldENh
bGxDbG9zZU9uV2ViVmlld3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRDYWxsQ2xvc2VPbldlYlZpZXdzKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDYW5P
cGVuV2luZG93c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9s
bGVyLT5zZXRDYW5PcGVuV2luZG93cyh0cnVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5n
V2luZG93c1doZW5Db21wbGV0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldENsb3NlUmVtYWluaW5nV2luZG93
c1doZW5Db21wbGV0ZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgc2V0RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBlbmNvZGVkQXVkaW9EYXRhKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAg
ICAKKyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdT
aXplKGVuY29kZWRBdWRpb0RhdGEuZ2V0KCkpOworICAgIE93bkFycmF5UHRyPGNoYXI+IGVuY29k
ZWRBdWRpb0RhdGFCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heExlbmd0aCArIDFd
KTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGVuY29kZWRBdWRpb0RhdGEuZ2V0KCksIGVu
Y29kZWRBdWRpb0RhdGFCdWZmZXIuZ2V0KCksIG1heExlbmd0aCArIDEpOworCisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+
c2V0RW5jb2RlZEF1ZGlvRGF0YShlbmNvZGVkQXVkaW9EYXRhQnVmZmVyLmdldCgpKTsKKyAgICBj
b250cm9sbGVyLT5zZXREdW1wQXNBdWRpbyh0cnVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHRlc3RPbnNj
cmVlbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5z
ZXRUZXN0T25zY3JlZW4odHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0UmVwYWludENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRUZXN0UmVwYWludCh0cnVl
KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIGFkZERpc2FsbG93ZWRVUkxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHVybChBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5hZGREaXNhbGxvd2VkVVJMKHVybC5nZXQoKSk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gb3JpZ2luKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlvbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7CisKKyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENT
dHJpbmdTaXplKG9yaWdpbi5nZXQoKSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gb3JpZ2luQnVm
ZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAgSlNTdHJp
bmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0KCksIG9yaWdpbkJ1ZmZlci5nZXQoKSwgbWF4TGVu
Z3RoICsgMSk7CisKKyAgICBtYXhMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUoZGVzdGluYXRpb24uZ2V0KCkpOworICAgIE93bkFycmF5UHRyPGNoYXI+IGRlc3RpbmF0
aW9uQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAg
SlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi5nZXQoKSwgZGVzdGluYXRpb25CdWZm
ZXIuZ2V0KCksIG1heExlbmd0aCArIDEpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+YWRkVVJMVG9SZWRpcmVjdChv
cmlnaW5CdWZmZXIuZ2V0KCksIGRlc3RpbmF0aW9uQnVmZmVyLmdldCgpKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldygpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJBbGxBcHBsaWNhdGlvbkNh
Y2hlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMg
bWFjIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygp
OworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW5DYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gb3JpZ2luVVJMKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIGNvbnRyb2xsZXItPmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihvcmlnaW5V
UkwuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9y
aWdpbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW5VUkwoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNv
bnRleHQsIGNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4ob3Jp
Z2luVVJMLmdldCgpKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoQXBwbGlj
YXRpb25DYWNoZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4g
Y29udHJvbGxlci0+b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnRleHQpOworfQorCitz
dGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFsbERhdGFiYXNlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGNvbnRyb2xsZXItPmNsZWFyQWxsRGF0YWJhc2VzKCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0
b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBjb250cm9sbGVy
LT5zeW5jTG9jYWxTdG9yYWdlKCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKworICAgIHVuc2lnbmVkIG51bU5vdGlmaWNhdGlvbnMgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworCisgICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnMobnVtTm90aWZpY2F0aW9ucyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRlbGV0ZUFsbExvY2FsU3RvcmFn
ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5kZWxl
dGVBbGxMb2NhbFN0b3JhZ2UoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKKworICAgIGNvbnRyb2xsZXItPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bih1cmwuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW5D
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW5VUkwoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNv
bnRyb2xsZXItPmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihvcmlnaW5VUkwuZ2V0KCkp
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2VDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXItPm9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBjbGVh
ckJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmNsZWFy
QmFja0ZvcndhcmRMaXN0KCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNo
ZWV0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Y2xlYXJQZXJzaXN0ZW50VXNl
clN0eWxlU2hlZXQoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZGVjb2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgor
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRv
cHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRl
Y29kZWRIb3N0TmFtZShBZG9wdCwgY29udHJvbGxlci0+Y29weURlY29kZWRIb3N0TmFtZShuYW1l
LmdldCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGRlY29kZWRI
b3N0TmFtZS5nZXQoKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRpc2FibGVJbWFnZUxvYWRp
bmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1h
YyBpbXBsZW1lbnRhdGlvbiwgbmVlZHMgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXIt
PmRpc2FibGVJbWFnZUxvYWRpbmcoKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGRpc3BhdGNoUGVuZGluZ0xv
YWRSZXF1ZXN0c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgbWFjIGltcGxlbWVudGF0aW9uLCBuZWVkcyB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29u
dHJvbGxlci0+ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CisgICAgCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBk
aXNwbGF5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhh
cyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+ZGlzcGxheSgpOworCisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24K
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICAv
LyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpIG9ubHkgcmVuZGVycyB0aGUgaW52YWxp
ZGF0ZWQgcmVnaW9uIHNvCisgICAgLy8gd2UgY2FuIGp1c3QgdXNlIHRoYXQuCisgICAgY29udHJv
bGxlci0+ZGlzcGxheSgpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9u
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
ZW5jb2RlZEhvc3ROYW1lKEFkb3B0LCBjb250cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1lKG5h
bWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZW5jb2Rl
ZEhvc3ROYW1lLmdldCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIE1hYyAmIFdp
bmRvd3MgaW1wbGVtZW50YXRpb25zLgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisg
ICAgLy8gSWdub3JpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0
aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0aW9uLgorCisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHZhbHVlOworICAgIGlmIChhcmd1bWVudENvdW50ID49IDMpIHsKKyAgICAg
ICAgdmFsdWUuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0s
IGV4Y2VwdGlvbikpOworICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIH0gZWxzZQor
ICAgICAgICB2YWx1ZS5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwor
CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRhdGlvbi4KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0YXJnZXQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNl
cHRpb24pOworCisgICAgSlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+ZmluZFN0cmlu
Zyhjb250ZXh0LCB0YXJnZXQuZ2V0KCksIG9wdGlvbnMpKTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgZ29CYWNrQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPmdvQmFjaygpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVy
bWlzc2lvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgV2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBjb250cm9sbGVy
LT5ncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKSk7CisgICAgICAgIAorICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaXNDb21t
YW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgTWFjIGltcGxlbWVudGF0aW9uLgorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+aXNDb21t
YW5kRW5hYmxlZChuYW1lLmdldCgpKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG92ZXJyaWRl
UHJlZmVyZW5jZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBrZXkoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1
ZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5vdmVycmlkZVBy
ZWZlcmVuY2Uoa2V5LmdldCgpLCB2YWx1ZS5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGtlZXBXZWJIaXN0
b3J5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5rZWVwV2ViSGlzdG9yeSgpOworCisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm9DYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIAorICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICByZXR1cm4gY29udHJvbGxlci0+Y29tcHV0ZWRTdHlsZUluY2x1ZGlu
Z1Zpc2l0ZWRJbmZvKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIGxheWVyVHJlZUFzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCBjb250cm9sbGVyLT5sYXllclRyZWVBc1RleHQoKS5nZXQoKSk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG5vdGlmeURvbmVDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRp
b24KKyAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5
IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5ub3RpZnlEb25lKCk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgYm9vbCBwYXJz
ZVBhZ2VQYXJhbWV0ZXJzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpbnQgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiogYXJndW1lbnRzLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGZsb2F0
JiBwYWdlV2lkdGhJblBpeGVscywgZmxvYXQmIHBhZ2VIZWlnaHRJblBpeGVscykKK3sKKyAgICBw
YWdlV2lkdGhJblBpeGVscyA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Cisg
ICAgcGFnZUhlaWdodEluUGl4ZWxzID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWln
aHQ7CisgICAgc3dpdGNoIChhcmd1bWVudENvdW50KSB7CisgICAgY2FzZSAyOgorICAgICAgICBw
YWdlV2lkdGhJblBpeGVscyA9IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAgICAgaWYgKCpleGNlcHRpb24p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHBhZ2VIZWlnaHRJblBpeGVscyA9
IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pKTsKKyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSAwOiAvLyBGYWxsIHRocm91Z2guCisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIENhbGxlciBuZWVkcyB0byBkZWxldGVbXSBwcm9wZXJ0eU5hbWUuCitzdGF0
aWMgYm9vbCBwYXJzZVBhZ2VQcm9wZXJ0eVBhcmFtZXRlcnMoSlNDb250ZXh0UmVmIGNvbnRleHQs
IGludCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmKiBhcmd1bWVudHMsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbiwgY2hhciomIHByb3BlcnR5TmFtZSwgaW50JiBwYWdlTnVtYmVyKQorewor
ICAgIHBhZ2VOdW1iZXIgPSAwOworICAgIHN3aXRjaCAoYXJndW1lbnRDb3VudCkgeworICAgIGNh
c2UgMjoKKyAgICAgICAgcGFnZU51bWJlciA9IHN0YXRpY19jYXN0PGZsb2F0PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICAgICAgaWYgKCpl
eGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwgdGhy
b3VnaC4KKyAgICBjYXNlIDE6IHsKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBy
b3BlcnR5TmFtZVN0cmluZyhBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHByb3BlcnR5TmFtZVN0cmluZy5nZXQoKSk7CisgICAg
ICAgIHByb3BlcnR5TmFtZSA9IG5ldyBjaGFyW21heExlbmd0aCArIDFdOworICAgICAgICBKU1N0
cmluZ0dldFVURjhDU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZy5nZXQoKSwgcHJvcGVydHlOYW1l
LCBtYXhMZW5ndGggKyAxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2Ug
MDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0
aWMgYm9vbCBwYXJzZVBhZ2VOdW1iZXJTaXplTWFyaW5ncyhKU0NvbnRleHRSZWYgY29udGV4dCwg
aW50IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cywgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uLCBpbnQmIHBhZ2VOdW1iZXIsIGludCYgd2lkdGgsIGludCYgaGVpZ2h0LCBp
bnQmIG1hcmdpblRvcCwgaW50JiBtYXJnaW5SaWdodCwgaW50JiBtYXJnaW5Cb3R0b20sIGludCYg
bWFyZ2luTGVmdCkKK3sKKyAgICBwYWdlTnVtYmVyID0gMDsKKyAgICB3aWR0aCA9IGhlaWdodCA9
IDA7CisgICAgbWFyZ2luVG9wID0gbWFyZ2luUmlnaHQgPSBtYXJnaW5Cb3R0b20gPSBtYXJnaW5M
ZWZ0ID0gMDsKKworICAgIHN3aXRjaCAoYXJndW1lbnRDb3VudCkgeworICAgIGNhc2UgNzoKKyAg
ICAgICAgbWFyZ2luTGVmdCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGFyZ3VtZW50c1s2XSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAg
Y2FzZSA2OgorICAgICAgICBtYXJnaW5Cb3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2VwdGlvbikpOworICAgICAgICBpZiAo
KmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFsbCB0
aHJvdWdoLgorICAgIGNhc2UgNToKKyAgICAgICAgbWFyZ2luUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4Y2VwdGlvbikpOwor
ICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gRmFsbCB0aHJvdWdoLgorICAgIGNhc2UgNDoKKyAgICAgICAgbWFyZ2luVG9wID0gc3Rh
dGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNl
cHRpb24pKTsKKyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAgICBjYXNlIDM6CisgICAgICAgIGhlaWdo
dCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sy
XSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgY2FzZSAyOgorICAgICAg
ICB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgY2FzZSAxOgor
ICAgICAgICBwYWdlTnVtYmVyID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAgICAgaWYgKCpleGNlcHRpb24p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworc3RhdGljIEpTVmFsdWVSZWYgbnVtYmVyT2ZQYWdlc0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBmbG9hdCBwYWdlV2lkdGhJblBpeGVscyA9
IDA7CisgICAgZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzID0gMDsKKyAgICBpZiAoIXBhcnNlUGFn
ZVBhcmFtZXRlcnMoY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24s
IHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgY29udHJvbGxlci0+bnVtYmVyT2ZQYWdlcyhwYWdlV2lkdGhJblBpeGVscywgcGFn
ZUhlaWdodEluUGl4ZWxzKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mUGVuZGlu
Z0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVy
LT5udW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpKTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgcGFnZVByb3BlcnR5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGNoYXIqIHByb3BlcnR5TmFtZSA9IDA7CisgICAgaW50IHBhZ2VO
dW1iZXIgPSAwOworICAgIGlmICghcGFyc2VQYWdlUHJvcGVydHlQYXJhbWV0ZXJzKGNvbnRleHQs
IGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBwcm9wZXJ0eU5hbWUsIHBhZ2VO
dW1iZXIpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBK
U1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29udHJvbGxlci0+
cGFnZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcikuZ2V0KCkpOworCisgICAgZGVs
ZXRlW10gcHJvcGVydHlOYW1lOworICAgIHJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgaW50IHBhZ2VOdW1iZXIgPSAwOworICAgIGludCB3aWR0aCA9
IDAsIGhlaWdodCA9IDA7CisgICAgaW50IG1hcmdpblRvcCA9IDAsIG1hcmdpblJpZ2h0ID0gMCwg
bWFyZ2luQm90dG9tID0gMCwgbWFyZ2luTGVmdCA9IDA7CisgICAgaWYgKCFwYXJzZVBhZ2VOdW1i
ZXJTaXplTWFyaW5ncyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlv
biwgcGFnZU51bWJlciwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFy
Z2luQm90dG9tLCBtYXJnaW5MZWZ0KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xs
ZXItPnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQs
IG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkuZ2V0KCkp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUJhY2tOYXZpZ2F0aW9uQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGlt
cGxlbWVudGF0aW9uCisgICAgLy8gTWF5IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRl
cGVuZGFudCBieSB1c2luZyBzaGFyZWQgV29ya1F1ZXVlCisgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBkb3VibGUgaG93RmFyQmFja0RvdWJsZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnF1ZXVlQmFja05hdmlnYXRpb24oc3RhdGljX2Nhc3Q8aW50Pihob3dGYXJCYWNrRG91Ymxl
KSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlRm9yd2FyZE5hdmlnYXRpb25DYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50
YXRpb24KKyAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50
IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGRvdWJs
ZSBob3dGYXJGb3J3YXJkRG91YmxlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+
cXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGF0aWNfY2FzdDxpbnQ+KGhvd0ZhckZvcndhcmREb3Vi
bGUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAg
Ly8gTWF5IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBz
aGFyZWQgV29ya1F1ZXVlCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB0YXJnZXQ7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikg
eworICAgICAgICB0YXJnZXQuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAg
IH0gZWxzZQorICAgICAgICB0YXJnZXQuYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIiIpKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRpb24K
KyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb250ZW50
KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBiYXNlVVJMOworICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKKyAgICAgICAg
YmFzZVVSTC5hZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwg
ZXhjZXB0aW9uKSk7CisgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgfSBlbHNlCisg
ICAgICAgIGJhc2VVUkwuYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgeworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gdW5yZWFjaGFibGVVUkw7CisgICAgICAgIHVucmVhY2hhYmxlVVJMLmFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICAgICAgY29udHJvbGxlci0+cXVldWVMb2FkQWx0
ZXJuYXRlSFRNTFN0cmluZyhjb250ZW50LmdldCgpLCBiYXNlVVJMLmdldCgpLCB1bnJlYWNoYWJs
ZVVSTC5nZXQoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKyAgICB9CisKKyAgICBjb250cm9sbGVyLT5xdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnRlbnQu
Z2V0KCksIGJhc2VVUkwuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcXVldWVSZWxvYWRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1w
bGVtZW50YXRpb24KKyAgICAvLyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVw
ZW5kYW50IGJ5IHVzaW5nIHNoYXJlZCBXb3JrUXVldWUKKworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnF1ZXVlUmVsb2Fk
KCk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZGluZ1NjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgorICAgIC8vIE1heSBiZSBhYmxlIHRvIGJlIG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkg
dXNpbmcgc2hhcmVkIFdvcmtRdWV1ZQorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5xdWV1ZUxvYWRpbmdTY3JpcHQoc2NyaXB0LmdldCgpKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
cXVldWVOb25Mb2FkaW5nU2NyaXB0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgLy8gTWF5
IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQg
V29ya1F1ZXVlCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnF1
ZXVlTm9uTG9hZGluZ1NjcmlwdChzY3JpcHQuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBY2NlcHRz
RWRpdGluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJv
bGxlci0+c2V0QWNjZXB0c0VkaXRpbmcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgc2V0QWx3YXlzQWNjZXB0Q29va2llc0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBs
ZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0QWx3YXlzQWNjZXB0
Q29va2llcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
CisgICAgZG91YmxlIHNpemUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBOVUxMKTsKKyAgICBpZiAoIWlzbmFuKHNpemUpKQorICAgICAgICBjb250cm9sbGVyLT5zZXRB
cHBDYWNoZU1heGltdW1TaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSkp
OworICAgICAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxl
bWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgTlVMTCk7CisgICAgaWYgKCFpc25hbihzaXplKSkK
KyAgICAgICAgY29udHJvbGxlci0+c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBdXRoZW50
aWNhdGlvblBhc3N3b3JkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGFzc3dvcmQoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NF
UlQoISpleGNlcHRpb24pOworCisgICAgc2l6ZV90IG1heExlbmd0aCA9IEpTU3RyaW5nR2V0TWF4
aW11bVVURjhDU3RyaW5nU2l6ZShwYXNzd29yZC5nZXQoKSk7CisgICAgY2hhciogcGFzc3dvcmRC
dWZmZXIgPSBuZXcgY2hhclttYXhMZW5ndGggKyAxXTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3Ry
aW5nKHBhc3N3b3JkLmdldCgpLCBwYXNzd29yZEJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7CisgICAg
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
Y29udHJvbGxlci0+c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChwYXNzd29yZEJ1ZmZlcik7Cisg
ICAgZGVsZXRlW10gcGFzc3dvcmRCdWZmZXI7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhlbnRpY2F0aW9u
VXNlcm5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8g
SGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1c2VybmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CisKKyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRG
OENTdHJpbmdTaXplKHVzZXJuYW1lLmdldCgpKTsKKyAgICBjaGFyKiB1c2VybmFtZUJ1ZmZlciA9
IG5ldyBjaGFyW21heExlbmd0aCArIDFdOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcodXNl
cm5hbWUuZ2V0KCksIHVzZXJuYW1lQnVmZmVyLCBtYXhMZW5ndGggKyAxKTsKKyAgICAKKyAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9s
bGVyLT5zZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHVzZXJuYW1lQnVmZmVyKTsKKyAgICBkZWxl
dGVbXSB1c2VybmFtZUJ1ZmZlcjsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFz
IG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dG9maWxsZWRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMiB8
fCAhYXJndW1lbnRzWzBdKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBjb250cm9sbGVyLT5zZXRBdXRvZmlsbGVkKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pKTsKKworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0
Q2FjaGVNb2RlbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgTWFjIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgaW50IGNh
Y2hlTW9kZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRDYWNoZU1vZGVs
KGNhY2hlTW9kZWwpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVu
dGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgCisgICAgYm9vbCBwZXJtaXNzaXZlID0gZmFs
c2U7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikKKyAgICAgICAgcGVybWlzc2l2ZSA9IEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKKworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEN1
c3RvbVBvbGljeURlbGVnYXRlKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSwgcGVybWlzc2l2ZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlv
bgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBkb3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsKKyAgICBpZiAoIWlzbmFuKHF1b3RhKSkKKyAgICAg
ICAgY29udHJvbGxlci0+c2V0RGF0YWJhc2VRdW90YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KHF1b3RhKSk7CisgICAgICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0RGVmZXJNYWluUmVzb3VyY2VE
YXRhTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgTWFjIGFuZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250
cm9sbGVyLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldERlZmVyc0xvYWRpbmdDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250
cm9sbGVyLT5zZXREZWZlcnNMb2FkaW5nKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1l
bnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFVzZURlZmVycmVkRnJhbWVMb2FkaW5nQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJv
bGxlci0+c2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvclVSTFNjaGVtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgTWFjIGFuZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKwor
ICAgIGJvb2wgZm9yYmlkZGVuID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNb
MF0pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY2hlbWUoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCAwKSk7CisgICAgY29udHJvbGxlci0+
c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHNjaGVt
ZS5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tEZXZpY2VPcmllbnRhdGlvbkNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDYp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGJv
b2wgY2FuUHJvdmlkZUFscGhhID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNb
MF0pOworICAgIGRvdWJsZSBhbHBoYSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBib29sIGNh
blByb3ZpZGVCZXRhID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMl0pOwor
ICAgIGRvdWJsZSBiZXRhID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwg
ZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgY2FuUHJvdmlk
ZUdhbW1hID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbNF0pOworICAgIGRv
dWJsZSBnYW1tYSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2Vw
dGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0TW9j
a0RldmljZU9yaWVudGF0aW9uKGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVCZXRh
LCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpLCAgLy8gbGF0
aXR1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBOVUxMKSwgIC8vIGxvbmdpdHVkZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBhcmd1bWVudHNbMl0sIE5VTEwpKTsgIC8vIGFjY3VyYWN5CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNl
dE1vY2tHZW9sb2NhdGlvbkVycm9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgaW50IGNvZGUgPSBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gbWVzc2FnZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvZGUsIG1lc3NhZ2UuZ2V0KCkpOworCisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBhZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gcmVzdWx0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGRvdWJs
ZSBjb25maWRlbmNlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhj
ZXB0aW9uKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsYW5ndWFnZShBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwor
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5hZGRNb2NrU3BlZWNoSW5wdXRS
ZXN1bHQocmVzdWx0LmdldCgpLCBjb25maWRlbmNlLCBsYW5ndWFnZS5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgYm9vbCBkdW1wUmVjdCA9IEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldE1v
Y2tTcGVlY2hJbnB1dER1bXBSZWN0KGR1bXBSZWN0KTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TmV3V2luZG93
c0NvcHlCYWNrRm9yd2FyZExpc3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50
IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAg
IAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGNvbnRyb2xsZXItPnNldE5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5z
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYg
d2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRQT1NJWExvY2FsZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBsb2NhbGUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAg
IGNvbnRyb2xsZXItPnNldFBPU0lYTG9jYWxlKGxvY2FsZS5nZXQoKSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNl
dEljb25EYXRhYmFzZUVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIGNvbnRyb2xsZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVh
bihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TWFpbkZyYW1lSXNGaXJz
dFJlc3BvbmRlckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5z
ZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0
aW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBwYXRoKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGguZ2V0KCkpOworCisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9u
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNl
dEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
c2V0WFNTQXVkaXRvckVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIGNvbnRyb2xsZXItPnNldFhTU0F1ZGl0b3JFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgbWFjIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1l
bnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFByaW50aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldElzUHJpbnRpbmcodHJ1ZSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0QWxs
b3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2Rl
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisK
KyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFj
IGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcGF0aChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVy
LT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGguZ2V0KCkpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRW
YWx1ZUZvclVzZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
Ly8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT5zZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCB2YWx1
ZS5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRp
b24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtb2Rl
KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFZpZXdNb2Rl
TWVkaWFGZWF0dXJlKG1vZGUuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RD
bGVhckhlYWRlckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50
IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGhlYWRlcihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CisKKyAgICBzaXplX3QgbWF4TGVuZ3RoID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRG
OENTdHJpbmdTaXplKGhlYWRlci5nZXQoKSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gaGVhZGVy
QnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhoZWFkZXIuZ2V0KCksIGhlYWRlckJ1ZmZlci5nZXQoKSwgbWF4
TGVuZ3RoICsgMSk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlciho
ZWFkZXJCdWZmZXIuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5z
TnVsbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMg
Y3Jvc3MtcGxhdGZvcm0gaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dCwgYXJndW1lbnRzWzBdKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNO
dWxsT25SZWRpcmVjdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBIYXMgY3Jvc3MtcGxhdGZvcm0gaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGNvbnRyb2xsZXItPnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaW5k
b3dJc0tleUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBI
YXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRX
aW5kb3dJc0tleShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiB3YWl0VW50aWxEb25lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+
c2V0V2FpdFRvRHVtcCh0cnVlKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgd2luZG93Q291bnRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlv
bgorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGludCB3aW5kb3dzID0gY29udHJvbGxlci0+d2luZG93Q291bnQoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgd2luZG93cyk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVm
IHNldFBvcHVwQmxvY2tpbmdFbmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRQb3B1cEJsb2NraW5nRW5hYmxlZChKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRQbHVnaW5zRW5h
YmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMg
bWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIAorICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRy
b2xsZXItPnNldFBsdWdpbnNFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1l
bnRzWzBdKSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfSAgICAKKworc3RhdGljIEpTVmFsdWVSZWYgc2V0UGFnZVZpc2liaWxpdHlDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3Mg
aW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiB2aXNpYmlsaXR5KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IHNpemVfdCBtYXhMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUodmlz
aWJpbGl0eS5nZXQoKSk7CisgICAgY2hhciogdmlzaWJpbGl0eUJ1ZmZlciA9IG5ldyBjaGFyW21h
eExlbmd0aCArIDFdOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcodmlzaWJpbGl0eS5nZXQo
KSwgdmlzaWJpbGl0eUJ1ZmZlciwgbWF4TGVuZ3RoICsgMSk7CisgICAgCisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0
UGFnZVZpc2liaWxpdHkodmlzaWJpbGl0eUJ1ZmZlcik7CisgICAgZGVsZXRlW10gdmlzaWJpbGl0
eUJ1ZmZlcjsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9ICAgIAorCitzdGF0aWMgSlNWYWx1ZVJlZiByZXNldFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnJlc2V0UGFnZVZpc2li
aWxpdHkoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9ICAg
IAorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWRDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250
cm9sbGVyLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCBhcmd1bWVudHNbMF0pKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25F
bmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChh
cmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgY29udHJvbGxlci0+c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFNlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBd
KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHModHJ1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5h
YmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIGNvbnRyb2xsZXItPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzaG93V2Vi
SW5zcGVjdG9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xs
ZXItPnNob3dXZWJJbnNwZWN0b3IoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNsb3NlV2ViSW5zcGVjdG9yQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmNsb3NlV2ViSW5z
cGVjdG9yKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQor
CitzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZUluV2ViSW5zcGVjdG9yQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGRvdWJsZSBjYWxsSWQgPSBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KHN0YXRpY19jYXN0PGxvbmc+KGNhbGxJZCksIHNjcmlwdC5nZXQoKSk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBkb3VibGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KworICAgIGNvbnRyb2xsZXItPmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHN0YXRpY19j
YXN0PHVuc2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQp
LCBzY3JpcHQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBkb3Vi
bGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIGNvbnRy
b2xsZXItPmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHdvcmxkSUQpLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCksIHNjcmlwdC5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVs
ZW1lbnRXaXRoSWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGVsZW1lbnRJZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CisKKyAgICBib29sIGF1dG9Db21wbGV0ZXMgPSBjb250cm9sbGVyLT5lbGVtZW50RG9lc0F1
dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoZWxlbWVudElkLmdldCgpKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgYXV0b0NvbXBsZXRlcyk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9
IDMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmltYXRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKKyAgICBkb3VibGUgdGltZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxl
ci0+cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoYW5pbWF0aW9uTmFtZS5nZXQo
KSwgdGltZSwgZWxlbWVudElkLmdldCgpKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAzKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAg
ICBkb3VibGUgdGltZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+cGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKHByb3BlcnR5TmFtZS5nZXQoKSwgdGltZSwgZWxlbWVudElk
LmdldCgpKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mQWN0aXZlQW5pbWF0aW9u
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1l
bnRDb3VudCAhPSAwKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zKCkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiB3YWl0Rm9yUG9s
aWN5RGVsZWdhdGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVl
UmVmKikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBjb250cm9sbGVyLT53YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGFk
ZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3Vy
Y2VPcmlnaW4oQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBkZXN0aW5hdGlvblByb3RvY29sKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGVzdGluYXRpb25Ib3N0KEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9u
KSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbM10pOworCisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29u
dHJvbGxlci0+YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlT3JpZ2luLmdldCgp
LCBkZXN0aW5hdGlvblByb3RvY29sLmdldCgpLCBkZXN0aW5hdGlvbkhvc3QuZ2V0KCksIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVu
dENvdW50ICE9IDQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW4oQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkZXN0
aW5hdGlvblByb3RvY29sKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gZGVzdGluYXRpb25Ib3N0KEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKKyAgICBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID0gSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbM10pOworCisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+cmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlT3JpZ2luLmdldCgpLCBkZXN0aW5hdGlvblBy
b3RvY29sLmdldCgpLCBkZXN0aW5hdGlvbkhvc3QuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHNldFNjcm9sbGJhclBvbGljeUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAyKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gb3JpZW50YXRpb24oQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwb2xpY3koQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRp
b24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgY29udHJvbGxlci0+c2V0U2Nyb2xsYmFyUG9saWN5KG9yaWVudGF0aW9uLmdldCgpLCBw
b2xpY3kuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgYWRkVXNlclNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAzKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNvdXJjZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYm9v
bCBydW5BdFN0YXJ0ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOwor
ICAgIGJvb2wgYWxsRnJhbWVzID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNb
Ml0pOworICAgIAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHQoc291cmNlLmdldCgpLCBydW5BdFN0
YXJ0LCBhbGxGcmFtZXMpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKyAKK3N0YXRpYyBKU1ZhbHVlUmVmIGFkZFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gc291cmNlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KyAgICBib29sIGFsbEZyYW1lcyA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRz
WzFdKTsKKyAgIAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0KHNvdXJjZS5nZXQoKSwgYWxs
RnJhbWVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHNldFNob3VsZFBhaW50QnJva2VuSW1hZ2VDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gSGFzIE1hYyBpbXBsZW1lbnRhdGlv
bgorICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFn
ZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOworCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBh
cGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1
dGY4RGF0YShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gYmFzZVVSTChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Cisg
ICAgICAgIAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIGNvbnRyb2xsZXItPmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwodXRmOERh
dGEuZ2V0KCksIGJhc2VVUkwuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgYXBpVGVzdEdvVG9DdXJyZW50QmFj
a0ZvcndhcmRJdGVtQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmFw
aVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0V2ViVmlld0Vk
aXRhYmxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEhh
cyBNYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldFdl
YlZpZXdFZGl0YWJsZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwor
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBzZW5kV2ViSW50ZW50UmVzcG9uc2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHJlc3BvbnNlOwor
ICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKKyAgICAgICAgcmVzcG9uc2UuYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
ICAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIH0gZWxzZQorICAgICAgICByZXNwb25zZS5h
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygwKSk7CisKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZW5k
V2ViSW50ZW50UmVzcG9uc2UocmVzcG9uc2UuZ2V0KCkpOworCisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBkZWxpdmVyV2Vi
SW50ZW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChh
cmd1bWVudENvdW50IDwgMykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFjdGlvbihBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHR5cGUo
QWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRp
b24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBkYXRhKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sy
XSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmRl
bGl2ZXJXZWJJbnRlbnQoYWN0aW9uLmdldCgpLCB0eXBlLmdldCgpLCBkYXRhLmdldCgpKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpT
VmFsdWVSZWYgYWJvcnRNb2RhbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT5hYm9ydE1vZGFsKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBtYXJrZXJUZXh0Rm9yTGlzdEl0
ZW1DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPm1hcmtlclRleHRGb3JMaXN0
SXRlbShjb250ZXh0LCBhcmd1bWVudHNbMF0pLmdldCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgYXV0aGVudGljYXRlU2Vzc2lvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICAvLyBhdXRoZW50aWNhdGVTZXNzaW9uKHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkKQorICAgIGlm
IChhcmd1bWVudENvdW50ICE9IDMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1cmwoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1c2Vy
bmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHBhc3N3b3JkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRy
b2xsZXItPmF1dGhlbnRpY2F0ZVNlc3Npb24odXJsLmdldCgpLCB1c2VybmFtZS5nZXQoKSwgcGFz
c3dvcmQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0U2VyaWFsaXplSFRUUExvYWRzQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBib29sIHNlcmlhbGl6ZSA9IHRydWU7CisgICAgaWYgKGFyZ3VtZW50Q291
bnQgPT0gMSkKKyAgICAgICAgc2VyaWFsaXplID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhU
VFBMb2FkcyhzZXJpYWxpemUpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFu
ZGxpbmdCZWZvcmVVbmxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgY29udHJvbGxlci0+c2V0U2hvdWxkU3RheU9u
UGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgYWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7Cisg
ICAgLy8gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25j
ZSB0aGUgaW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9
PSAxKQorICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApLCB0aGlzT2JqZWN0LCAwLCAwLCAwKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIHJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgY29udHJvbGxlci0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOworICAgIC8vIHRoZSBmaXJz
dCBhcmd1bWVudCBpcyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIG9uY2UgdGhlIGlucHV0IGZp
ZWxkIGhhcyBiZWVuIGFkZGVkCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwg
YXJndW1lbnRzWzBdLCAwKSwgdGhpc09iamVjdCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBmb2N1c1dl
YlZpZXdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Zm9jdXNXZWJW
aWV3KCk7CisgICAgLy8gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBj
YWxsZWQgb25jZSB0aGUgaW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQKKyAgICBpZiAoYXJndW1l
bnRDb3VudCA9PSAxKQorICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApLCB0aGlzT2JqZWN0LCAwLCAw
LCAwKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAyKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBkb3VibGUgYmFja2luZ1NjYWxl
RmFjdG9yID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0QmFja2luZ1NjYWxl
RmFjdG9yKGJhY2tpbmdTY2FsZUZhY3Rvcik7CisKKyAgICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50
IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgYmFja2luZyBzY2FsZSBmYWN0
b3IgaGFzIGJlZW4gc2V0LgorICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgMCksIHRoaXNPYmplY3QsIDAsIDAs
IDApOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgcHJlY2lzZVRpbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIFdURjo6Y3VycmVudFRpbWUo
KSk7Cit9CisKKy8vIFN0YXRpYyBWYWx1ZXMKKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0R2xvYmFs
RmxhZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmdsb2JhbEZsYWcoKSk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFdlYkhpc3RvcnlJdGVtQ291bnRDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPndlYkhpc3RvcnlJdGVtQ291bnQoKSk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIGdldFdvcmtlclRocmVhZENvdW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihj
b250ZXh0LCBjb250cm9sbGVyLT53b3JrZXJUaHJlYWRDb3VudCgpKTsKK30KKworI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCitzdGF0aWMgSlNWYWx1
ZVJlZiBnZXRQbGF0Zm9ybU5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShjb250cm9s
bGVyLT5wbGF0Zm9ybU5hbWUoKSk7CisgICAgaWYgKCFwbGF0Zm9ybU5hbWUuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgpKTsKK30KKyNlbmRpZgor
CitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRUaXRsZVRleHREaXJlY3Rpb25DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHRpdGxlRGlyZWN0aW9uKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250
cm9sbGVyLT50aXRsZVRleHREaXJlY3Rpb24oKS5jX3N0cigpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlU3RyaW5nKGNvbnRleHQsIHRpdGxlRGlyZWN0aW9uLmdldCgpKTsKK30KKworc3RhdGlj
IGJvb2wgc2V0R2xvYmFsRmxhZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYgdmFs
dWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRHbG9iYWxGbGFnKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgaWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5p
Z25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBz
aW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsgCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRpdGxlKEFkb3B0LCBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAg
Y29udHJvbGxlci0+c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2sodGl0bGUuZ2V0KCkp
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgc2V0TWluaW11bVRpbWVySW50ZXJ2YWxDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBkb3VibGUgbWluaW11
bSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Cisg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldE1pbmltdW1UaW1lckludGVy
dmFsKG1pbmltdW0pOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRUZXh0RGlyZWN0aW9uQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsK
KyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGRpcmVjdGlvbihBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgICAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICAgICAg
Y29udHJvbGxlci0+c2V0VGV4dERpcmVjdGlvbihkaXJlY3Rpb24uZ2V0KCkpOworICAgIH0KKwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3JDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewor
ICAgICAgICBib29sIGhhc0N1c3RvbUJlaGF2aW9yID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pOworICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICAgICAgY29udHJvbGxlci0+c2V0SGFzQ3VzdG9tRnVsbFNjcmVl
bkJlaGF2aW9yKGhhc0N1c3RvbUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldFN0b3Jh
Z2VEYXRhYmFzZUlkbGVJbnRlcnZhbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAxKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwo
aW50ZXJ2YWwpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
fQorCitzdGF0aWMgdm9pZCBsYXlvdXRUZXN0Q29udHJvbGxlck9iamVjdEZpbmFsaXplKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9i
amVjdCkpOworICAgIGNvbnRyb2xsZXItPmRlcmVmKCk7Cit9CisKKy8vIE9iamVjdCBDcmVhdGlv
bgorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGVzdFJ1bm5lclN0cihBZG9w
dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RSdW5uZXIiKSk7CisgICAgcmVm
KCk7CisgICAgcmVmKCk7CisKKyAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygp
OworICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFr
ZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7CisgICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYp
OworCisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRlc3RS
dW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlv
bik7Cit9CisKK0pTQ2xhc3NSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQor
eworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c3RhdGljVmFsdWVzKCk7CisgICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0
YXRpY0Z1bmN0aW9ucyA9IExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKTsK
KyAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0geworICAgICAg
ICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJMYXlvdXRUZXN0Q29udHJvbGxlciIsIDAsIHN0
YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgICAgICAwLCBsYXlvdXRUZXN0Q29udHJv
bGxlck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKwor
ICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworfQorCitKU1N0YXRp
Y1ZhbHVlKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCkKK3sKKyAgICBzdGF0
aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKKyAgICAgICAgeyAiZ2xvYmFsRmxh
ZyIsIGdldEdsb2JhbEZsYWdDYWxsYmFjaywgc2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAid2ViSGlzdG9yeUl0ZW1Db3VudCIsIGdl
dFdlYkhpc3RvcnlJdGVtQ291bnRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ3b3Jr
ZXJUaHJlYWRDb3VudCIsIGdldFdvcmtlclRocmVhZENvdW50Q2FsbGJhY2ssIDAsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorICAg
ICAgICB7ICJwbGF0Zm9ybU5hbWUiLCBnZXRQbGF0Zm9ybU5hbWVDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorI2VuZGlmCisgICAgICAgIHsgInRpdGxlVGV4dERpcmVjdGlvbiIsIGdldFRpdGxlVGV4dERp
cmVjdGlvbkNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCwgMCB9CisgICAg
fTsKKyAgICByZXR1cm4gc3RhdGljVmFsdWVzOworfQorCitKU1N0YXRpY0Z1bmN0aW9uKiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKK3sKKyAgICBzdGF0aWMgSlNTdGF0
aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAiYWJvcnRNb2RhbCIs
IGFib3J0TW9kYWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJM
IiwgYWRkRGlzYWxsb3dlZFVSTENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImFkZFVSTFRv
UmVkaXJlY3QiLCBhZGRVUkxUb1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAi
YWRkVXNlclNjcmlwdCIsIGFkZFVzZXJTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJhZGRVc2VyU3R5bGVTaGVldCIsIGFkZFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyAgICAgICAgeyAiYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTCIsIGFwaVRlc3ROZXdX
aW5kb3dEYXRhTG9hZEJhc2VVUkxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhcGlUZXN0
R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0iLCBhcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2Fy
ZEl0ZW1DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbkNhY2hlRGlza1Vz
YWdlRm9yT3JpZ2luIiwgYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgImNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyIsIGNhbGxTaG91
bGRDbG9zZU9uV2ViVmlld0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImNsZWFyQWxsQXBw
bGljYXRpb25DYWNoZXMiLCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKKyAgICAgICAgeyAiY2xlYXJBbGxEYXRhYmFzZXMiLCBjbGVhckFsbERhdGFiYXNlc0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgICAgIHsgImNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbiIs
IGNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgImNsZWFyQmFja0ZvcndhcmRMaXN0IiwgY2xlYXJCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCIsIGNsZWFy
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiY2xv
c2VXZWJJbnNwZWN0b3IiLCBjbG9zZVdlYkluc3BlY3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgImNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyIsIGNvbXB1dGVkU3R5bGVJ
bmNsdWRpbmdWaXNpdGVkSW5mb0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImRlY29kZUhv
c3ROYW1lIiwgZGVjb2RlSG9zdE5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkZWxp
dmVyV2ViSW50ZW50IiwgZGVsaXZlcldlYkludGVudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgImRpc2FibGVJbWFnZUxvYWRpbmciLCBkaXNhYmxlSW1hZ2VMb2FkaW5nQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAiZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90
YSIsIGRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGFDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMiLCBkaXNwYXRjaFBl
bmRpbmdMb2FkUmVxdWVzdHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkaXNwbGF5Iiwg
ZGlzcGxheUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImRpc3BsYXlJbnZhbGlkYXRlZFJl
Z2lvbiIsIGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgImR1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MiLCBkdW1wQXBwbGljYXRp
b25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVt
cEFzVGV4dCIsIGR1bXBBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wQmFj
a0ZvcndhcmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNB
c1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJkdW1wRE9NQXNXZWJBcmNoaXZlIiwgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgImR1bXBEYXRhYmFzZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNhbGxi
YWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwg
ZHVtcEVkaXRpbmdDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzIiwgZHVtcEZyYW1lTG9hZENhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CisgICAgICAgIHsgImR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2siLCBkdW1wUHJvZ3Jlc3NG
aW5pc2hlZENhbGxiYWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcFVzZXJHZXN0
dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MiLCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxi
YWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sICAgICAgICAKKyAgICAgICAgeyAiZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcyIsIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyIsIGR1bXBSZXNvdXJjZVJl
c3BvbnNlTUlNRVR5cGVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcFNlbGVjdGlv
blJlY3QiLCBkdW1wU2VsZWN0aW9uUmVjdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1
bXBTb3VyY2VBc1dlYkFyY2hpdmUiLCBkdW1wU291cmNlQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAiZHVtcFN0YXR1c0NhbGxiYWNrcyIsIGR1bXBTdGF0dXNDYWxsYmFj
a3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wVGl0bGVDaGFuZ2VzIiwgZHVtcFRp
dGxlQ2hhbmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBJY29uQ2hhbmdlcyIs
IGR1bXBJY29uQ2hhbmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBXaWxsQ2Fj
aGVSZXNwb25zZSIsIGR1bXBXaWxsQ2FjaGVSZXNwb25zZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsIGVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgImVuY29kZUhvc3ROYW1lIiwgZW5jb2RlSG9zdE5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJldmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgZXZhbHVhdGVJbldlYkluc3BlY3RvckNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUiLCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQiLCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgImV4ZWNDb21tYW5kIiwgZXhlY0NvbW1hbmRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJmaW5kU3RyaW5nIiwgZmluZFN0cmluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgIm9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSIsIG9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImdvQmFjayIsIGdvQmFja0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sIAorICAgICAgICB7ICJncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9u
IiwgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sIAor
ICAgICAgICB7ICJpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzIiwg
aWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0NhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgImlzQ29tbWFuZEVuYWJsZWQiLCBpc0NvbW1hbmRFbmFibGVkQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAia2VlcFdlYkhpc3RvcnkiLCBrZWVwV2ViSGlzdG9yeUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImxheWVyVHJlZUFzVGV4dCIsIGxheWVyVHJlZUFz
VGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm51bWJlck9mUGFnZXMiLCBudW1iZXJP
ZlBhZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAibnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm1hcmtlclRleHRGb3JM
aXN0SXRlbSIsIG1hcmtlclRleHRGb3JMaXN0SXRlbUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgIm5vdGlmeURvbmUiLCBub3RpZnlEb25lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAi
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAib3ZlcnJpZGVQcmVmZXJlbmNlIiwgb3ZlcnJpZGVQcmVm
ZXJlbmNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMiLCBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVsc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInBhZ2VQcm9wZXJ0eSIsIHBhZ2VQcm9wZXJ0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInBhdGhUb0xvY2FsUmVzb3VyY2UiLCBwYXRoVG9Mb2NhbFJlc291cmNlQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICAgICAgeyAicGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQi
LCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgInBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsIHBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InByaW50VG9QREYiLCBkdW1wQXNQREZDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJxdWV1
ZUJhY2tOYXZpZ2F0aW9uIiwgcXVldWVCYWNrTmF2aWdhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgInF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9u
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicXVldWVMb2FkIiwgcXVldWVMb2FkQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAicXVldWVMb2FkSFRNTFN0cmluZyIsIHF1ZXVlTG9hZEhU
TUxTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJxdWV1ZUxvYWRpbmdTY3JpcHQi
LCBxdWV1ZUxvYWRpbmdTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJxdWV1ZU5v
bkxvYWRpbmdTY3JpcHQiLCBxdWV1ZU5vbkxvYWRpbmdTY3JpcHRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJxdWV1ZVJlbG9hZCIsIHF1ZXVlUmVsb2FkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAicmVtb3ZlQWxsVmlzaXRlZExpbmtzIiwgcmVtb3ZlQWxsVmlzaXRlZExpbmtzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkiLCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgInJlcGFpbnRTd2VlcEhvcml6b250YWxseSIsIHJlcGFpbnRTd2VlcEhvcml6b250
YWxseUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInJlc2V0UGFnZVZpc2liaWxpdHkiLCBy
ZXNldFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2VuZFdlYklu
dGVudFJlc3BvbnNlIiwgc2VuZFdlYkludGVudFJlc3BvbnNlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAic2V0QWNjZXB0c0VkaXRpbmciLCBzZXRBY2NlcHRzRWRpdGluZ0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzIiwg
c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
ICAgICB7ICJzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMiLCBzZXRBbGxvd0ZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRBbHdheXNBY2Nl
cHRDb29raWVzIiwgc2V0QWx3YXlzQWNjZXB0Q29va2llc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInNldEFwcENhY2hlTWF4aW11bVNpemUiLCBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
Iiwgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAic2V0RW5jb2RlZEF1ZGlvRGF0YSIsIHNldEVuY29kZWRBdWRpb0RhdGFDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIiwgc2V0QXV0aGVu
dGljYXRpb25QYXNzd29yZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEF1dGhlbnRp
Y2F0aW9uVXNlcm5hbWUiLCBzZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKKyAgICAgICAgeyAic2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCBzZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEF1dG9m
aWxsZWQiLCBzZXRBdXRvZmlsbGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0Q2Fj
aGVNb2RlbCIsIHNldENhY2hlTW9kZWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRD
YWxsQ2xvc2VPbldlYlZpZXdzIiwgc2V0Q2FsbENsb3NlT25XZWJWaWV3c0NhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgInNldENhbk9wZW5XaW5kb3dzIiwgc2V0Q2FuT3BlbldpbmRvd3NDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGUiLCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGVDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIsIHNldEN1c3RvbVBvbGlj
eURlbGVnYXRlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0RGF0YWJhc2VRdW90YSIs
IHNldERhdGFiYXNlUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKKyAgICAgICAgeyAic2V0RGVmZXJN
YWluUmVzb3VyY2VEYXRhTG9hZCIsIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJzZXREZWZlcnNMb2FkaW5nIiwgc2V0RGVmZXJzTG9hZGlu
Z0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFVzZURlZmVycmVkRnJhbWVMb2FkaW5n
Iiwgc2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lIiwgc2V0RG9tYWluUmVs
YXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQiLCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0SGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRJY29uRGF0YWJhc2VFbmFi
bGVkIiwgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkIiwgc2V0QXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRNYWluRnJhbWVJc0Zp
cnN0UmVzcG9uZGVyIiwgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlckNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgInNldE1pbmltdW1UaW1lckludGVydmFsIiwgc2V0TWluaW11bVRpbWVy
SW50ZXJ2YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50
YXRpb24iLCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAg
ICB7ICJzZXRNb2NrR2VvbG9jYXRpb25FcnJvciIsIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCIsIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0Iiwgc2V0TW9j
a1NwZWVjaElucHV0RHVtcFJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXROZXdX
aW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCIsIHNldE5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRM
aXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0UGFnZVZpc2liaWxpdHkiLCBzZXRQ
YWdlVmlzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFBPU0lYTG9jYWxl
Iiwgc2V0UE9TSVhMb2NhbGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIsIHNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0UG9wdXBCbG9ja2luZ0VuYWJs
ZWQiLCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldFBsdWdpbnNFbmFibGVkIiwgc2V0UGx1Z2luc0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJzZXRQcmludGluZyIsIHNldFByaW50aW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAic2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCIsIHNldFByaXZhdGVCcm93c2luZ0Vu
YWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRTZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkIiwgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInNldFNlcmlhbGl6ZUhUVFBMb2FkcyIsIHNldFNlcmlhbGl6
ZUhUVFBMb2Fkc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCIsIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CisgICAgICAgIHsgInNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCIsIHNldFNwYXRpYWxOYXZp
Z2F0aW9uRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFN0b3BQcm92aXNp
b25hbEZyYW1lTG9hZHMiLCBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAic2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgc2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0
VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUiLCBzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmls
aXR5TW9kZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZCIsIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgInNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24iLCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0VmFsdWVGb3JVc2VyIiwgc2V0VmFsdWVG
b3JVc2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0Vmlld01vZGVNZWRpYUZlYXR1
cmUiLCBzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldFdlYlZpZXdFZGl0YWJsZSIsIHNldFdlYlZpZXdFZGl0YWJsZUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CisgICAgICAgIHsgInNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyIiwgc2V0V2lsbFNlbmRS
ZXF1ZXN0Q2xlYXJIZWFkZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRXaWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbCIsIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJl
ZGlyZWN0Iiwgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICAgICAgeyAic2V0V2luZG93SXNLZXkiLCBzZXRXaW5kb3dJc0tleUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQi
LCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAic2V0WFNTQXVkaXRvckVuYWJsZWQiLCBzZXRYU1NBdWRpdG9yRW5hYmxlZENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Iiwgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJzaG93V2ViSW5zcGVjdG9yIiwgc2hvd1dlYkluc3BlY3RvckNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgc2lt
dWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJ0ZXN0T25zY3JlZW4iLCB0ZXN0T25zY3JlZW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJ0ZXN0UmVwYWludCIsIHRlc3RSZXBhaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAi
d2FpdEZvclBvbGljeURlbGVnYXRlIiwgd2FpdEZvclBvbGljeURlbGVnYXRlQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAid2FpdFVudGlsRG9uZSIsIHdhaXRVbnRpbERvbmVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJ3aW5kb3dDb3VudCIsIHdpbmRvd0NvdW50Q2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCBhZGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldFNj
cm9sbGJhclBvbGljeSIsIHNldFNjcm9sbGJhclBvbGljeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgImF1dGhlbnRpY2F0ZVNlc3Npb24iLCBhdXRoZW50aWNhdGVTZXNzaW9uQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICAgICAgeyAiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgZGVsZXRlQWxsTG9j
YWxTdG9yYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3luY0xvY2FsU3RvcmFnZSIs
IHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgICAgICAgICAKKyAgICAg
ICAgeyAib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyIsIG9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAgICAgICAgCisgICAgICAgIHsg
ImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIsIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9y
aWdpbiIsIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwgb3JpZ2luc1dpdGhMb2NhbFN0b3Jh
Z2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRTaG91bGRQYWludEJyb2tlbkltYWdl
Iiwgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldFRleHREaXJlY3Rpb24iLCBzZXRUZXh0RGlyZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAic2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQiLCBz
ZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgImFkZENocm9tZUlucHV0RmllbGQiLCBhZGRDaHJvbWVJbnB1dEZpZWxk
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIsIHJl
bW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJmb2N1c1dl
YlZpZXciLCBmb2N1c1dlYlZpZXdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRCYWNr
aW5nU2NhbGVGYWN0b3IiLCBzZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJwcmVjaXNlVGltZSIsIHByZWNpc2VUaW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAic2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yIiwgc2V0SGFzQ3VzdG9tRnVs
bFNjcmVlbkJlaGF2aW9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0U3RvcmFnZURh
dGFiYXNlSWRsZUludGVydmFsIiwgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAwLCAwLCAwIH0KKyAgICB9OworCisgICAgcmV0dXJuIHN0
YXRpY0Z1bmN0aW9uczsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2Fk
SFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKQorewor
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29u
dGVudCwgYmFzZVVSTCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxv
YWRBbHRlcm5hdGVIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJh
c2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQoreworICAgIFdvcmtRdWV1ZTo6c2hh
cmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgdW5y
ZWFjaGFibGVVUkwpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNr
TmF2aWdhdGlvbihpbnQgaG93RmFyQmFjaykKK3sKKyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5x
dWV1ZShuZXcgQmFja0l0ZW0oaG93RmFyQmFjaykpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dGYXJGb3J3YXJkKQoreworICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBGb3J3YXJkSXRlbShob3dGYXJGb3J3YXJk
KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChK
U1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IExvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIFdv
cmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBOb25Mb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQp
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVSZWxvYWQoKQoreworICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBSZWxvYWRJdGVtKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihK
U1N0cmluZ1JlZiBvcmlnaW4pCit7CisgICAgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9y
aWdpbnMucHVzaF9iYWNrKEpTU3RyaW5nUmV0YWluKG9yaWdpbikpOworfQorCitib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3Ry
aW5nUmVmIG9yaWdpbikKK3sKKyAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj46Oml0ZXJhdG9y
IGk7CisgICAgZm9yIChpID0gbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuYmVn
aW4oKTsKKyAgICAgICAgIGkgIT0gbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMu
ZW5kKCk7CisgICAgICAgICArK2kpIHsKKyAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbCgqaSwg
b3JpZ2luKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQoreworICAgIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpCit7CisgICAgY29uc3Qg
Y2hhciogbWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0
byBiZSBjYWxsZWRcbiI7CisgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIG1lc3NhZ2UpOworICAg
IGZwcmludGYoc3Rkb3V0LCAiJXMiLCBtZXNzYWdlKTsKKyAgICBub3RpZnlEb25lKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1v
bihib29sIGFsbG93KQoreworICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVl
OworICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gYWxsb3c7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkKK3sKKyAg
ICBjaGFyIGxvY2FsZUJ1ZlszMl07CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhsb2NhbGUs
IGxvY2FsZUJ1Ziwgc2l6ZW9mKGxvY2FsZUJ1ZikpOworICAgIHNldGxvY2FsZShMQ19BTEwsIGxv
Y2FsZUJ1Zik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVSTFRvUmVkaXJl
Y3Qoc3RkOjpzdHJpbmcgb3JpZ2luLCBzdGQ6OnN0cmluZyBkZXN0aW5hdGlvbikKK3sKKyAgICBt
X1VSTHNUb1JlZGlyZWN0W29yaWdpbl0gPSBkZXN0aW5hdGlvbjsKK30KKworY29uc3Qgc3RkOjpz
dHJpbmcmIExheW91dFRlc3RDb250cm9sbGVyOjpyZWRpcmVjdGlvbkRlc3RpbmF0aW9uRm9yVVJM
KHN0ZDo6c3RyaW5nIG9yaWdpbikKK3sKKyAgICByZXR1cm4gbV9VUkxzVG9SZWRpcmVjdFtvcmln
aW5dOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRQYWludEJyb2tl
bkltYWdlKGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSkKK3sKKyAgICBtX3Nob3VsZFBhaW50
QnJva2VuSW1hZ2UgPSBzaG91bGRQYWludEJyb2tlbkltYWdlOworfQorCitjb25zdCB1bnNpZ25l
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoID0gODAwOworY29uc3QgdW5zaWdu
ZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQgPSA2MDA7CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAKICNpbmNsdWRlICJXb3JrUXVldWUu
aCIKICNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVk
ZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1MYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRl
c3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKK1Rlc3RS
dW5uZXI6OlRlc3RSdW5uZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKICAgICA6IG1fZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YShmYWxzZSkKICAgICAsIG1fZHVtcEFwcGxpY2F0aW9u
Q2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcyhmYWxzZSkKICAgICAsIG1fZHVtcEFzQXVkaW8oZmFsc2Up
CkBAIC0xMDAsMzcgKzEwMCwzNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENv
bnRyb2xsCiB7CiB9CiAKLVBhc3NSZWZQdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+IExheW91dFRl
c3RDb250cm9sbGVyOjpjcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKK1Bhc3NSZWZQdHI8VGVzdFJ1bm5l
cj4gVGVzdFJ1bm5lcjo6Y3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBj
b25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMYXlvdXRUZXN0Q29udHJvbGxlcih0ZXN0UGF0aE9yVVJMLCBleHBlY3RlZFBpeGVs
SGFzaCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGVzdFJ1bm5lcih0ZXN0UGF0aE9yVVJM
LCBleHBlY3RlZFBpeGVsSGFzaCkpOwogfQogCiAvLyBTdGF0aWMgRnVuY3Rpb25zCiAKIHN0YXRp
YyBKU1ZhbHVlUmVmIGRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGFDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNh
Y2hlUXVvdGEodHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2Fs
bGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wQXBwbGljYXRpb25DYWNoZURl
bGVnYXRlQ2FsbGJhY2tzKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcEFzUERGQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5zZXREdW1wQXNQREYodHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXNUZXh0Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwogCiAgICAgLy8gT3B0aW9u
YWwgcGFyYW1hdGVyLCBkZXNjcmliaW5nIHdoZXRoZXIgaXQncyBhbGxvd2VkIHRvIGR1bXAgcGl4
ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUuCkBAIC0xNDEsMTE5ICsxNDEsMTE5IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIGR1bXBBc1RleHRDYWxsYmFjayhKU0MKIAogc3RhdGljIEpTVmFsdWVS
ZWYgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcEJh
Y2tGb3J3YXJkTGlzdCh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDaGlsZEZyYW1lc0FzVGV4dENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcENoaWxkRnJhbWVzQXNUZXh0KHRydWUpOwogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFs
dWVSZWYgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRl
c3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xs
ZXItPnNldER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKHRydWUpOwogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVt
cERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wRGF0YWJh
c2VDYWxsYmFja3ModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRE9NQXNXZWJBcmNoaXZlQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICBjb250cm9sbGVyLT5zZXREdW1wRE9NQXNXZWJBcmNoaXZlKHRydWUpOwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYg
ZHVtcEVkaXRpbmdDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBFZGl0
aW5nQ2FsbGJhY2tzKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcEZyYW1lTG9hZENhbGxiYWNrc0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1Zh
bHVlUmVmIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2tDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRl
c3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xs
ZXItPnNldER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2sodHJ1ZSk7CiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
c2V0RHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBk
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1w
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcFJlc291cmNlUmVzcG9u
c2VNSU1FVHlwZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBSZXNvdXJjZVJlc3Bv
bnNlTUlNRVR5cGVzKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcFNlbGVjdGlvblJlY3RDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGNvbnRyb2xsZXItPnNldER1bXBTZWxlY3Rpb25SZWN0KHRydWUpOwogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVt
cFNvdXJjZUFzV2ViQXJjaGl2ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFNvdXJj
ZUFzV2ViQXJjaGl2ZSh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBTdGF0dXNDYWxsYmFja3NDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPnNldER1bXBTdGF0dXNDYWxsYmFja3ModHJ1ZSk7CiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wVGl0bGVDaGFuZ2VzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wVGl0bGVD
aGFuZ2VzKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcEljb25DaGFuZ2VzQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250
cm9sbGVyLT5zZXREdW1wSWNvbkNoYW5nZXModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wV2lsbENhY2hl
UmVzcG9uc2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBXaWxsQ2FjaGVSZXNwb25z
ZSh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBA
IC0yNjMsNyArMjYzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGF0aFRvTG9jYWxSZXNvdXJjZUNh
bAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBsb2NhbFBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRp
b24pOwogCkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGF0aFRvTG9jYWxS
ZXNvdXJjZUNhbAogCiBzdGF0aWMgSlNWYWx1ZVJlZiByZW1vdmVBbGxWaXNpdGVkTGlua3NDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBWaXNpdGVkTGlua3NDYWxsYmFjayh0cnVlKTsK
ICAgICBjb250cm9sbGVyLT5yZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0yODQsNyArMjg0LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgcmVtb3ZlQWxsVmlzaXRlZExpbmtzQwogCiBzdGF0aWMgSlNWYWx1ZVJlZiByZXBh
aW50U3dlZXBIb3Jpem9udGFsbHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFRlc3RSZXBh
aW50U3dlZXBIb3Jpem9udGFsbHkodHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogfQpAQCAtMjk0LDE0ICsyOTQsMTQgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0Q2FsbENsb3NlT25XZWJWaWV3cwogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldENhbGxDbG9zZU9uV2ViVmlld3MoSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldENhbk9wZW5X
aW5kb3dzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRDYW5PcGVuV2luZG93cyh0cnVlKTsK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0zMTEsNyAr
MzExLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2xvc2VSZW1haW5pbmdXaW5kbwogICAgIGlm
IChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNl
dENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIGFyZ3VtZW50c1swXSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKIH0KQEAgLTMyOCw3ICszMjgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRFbmNvZGVk
QXVkaW9EYXRhQ2FsCiAgICAgT3duQXJyYXlQdHI8Y2hhcj4gZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZl
ciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbWF4TGVuZ3RoICsgMV0pOwogICAgIEpTU3RyaW5n
R2V0VVRGOENTdHJpbmcoZW5jb2RlZEF1ZGlvRGF0YS5nZXQoKSwgZW5jb2RlZEF1ZGlvRGF0YUJ1
ZmZlci5nZXQoKSwgbWF4TGVuZ3RoICsgMSk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgY29udHJvbGxlci0+c2V0RW5jb2RlZEF1ZGlvRGF0YShlbmNvZGVkQXVkaW9EYXRhQnVmZmVy
LmdldCgpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wQXNBdWRpbyh0cnVlKTsKICAgICAKQEAg
LTMzNywxNCArMzM3LDE0IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEVuY29kZWRBdWRpb0RhdGFD
YWwKIAogc3RhdGljIEpTVmFsdWVSZWYgdGVzdE9uc2NyZWVuQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5zZXRUZXN0T25zY3JlZW4odHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0UmVwYWludENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CiAgICAgY29udHJvbGxlci0+c2V0VGVzdFJlcGFpbnQodHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIGFkZERpc2FsbG93ZWRVUkxDYWxsYmEKICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gdXJsKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5hZGREaXNhbGxvd2VkVVJMKHVybC5nZXQoKSk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0zODMsNyAr
MzgzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgYWRkVVJMVG9SZWRpcmVjdENhbGxiYQogICAgIE93
bkFycmF5UHRyPGNoYXI+IGRlc3RpbmF0aW9uQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hh
clttYXhMZW5ndGggKyAxXSk7CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhkZXN0aW5hdGlv
bi5nZXQoKSwgZGVzdGluYXRpb25CdWZmZXIuZ2V0KCksIG1heExlbmd0aCArIDEpOwogCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFkZFVSTFRvUmVkaXJlY3Qob3Jp
Z2luQnVmZmVyLmdldCgpLCBkZXN0aW5hdGlvbkJ1ZmZlci5nZXQoKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgYWRkVVJMVG9SZWRpcmVjdENhbGxiYQogc3RhdGljIEpTVmFsdWVSZWYgY2Fs
bFNob3VsZENsb3NlT25XZWJWaWV3Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBj
b250cm9sbGVyLT5jYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKSk7CiB9CkBAIC00MDAsNyArNDAw
LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgY2FsbFNob3VsZENsb3NlT25XZWJWaQogc3RhdGljIEpT
VmFsdWVSZWYgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmNsZWFyQWxsQXBwbGljYXRpb25DYWNo
ZXMoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTQx
NCw3ICs0MTQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFwcGxpY2F0aW9uQ2FjaGVGCiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9yaWdpblVSTChBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKG9yaWdpblVSTC5nZXQoKSk7CiAgICAgCiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNDI4LDIxICs0Mjgs
MjEgQEAgc3RhdGljIEpTVmFsdWVSZWYgYXBwbGljYXRpb25DYWNoZURpc2tVcwogICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBvcmlnaW5VUkwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRp
b24pOwogICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT5hcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdl
Rm9yT3JpZ2luKG9yaWdpblVSTC5nZXQoKSkpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBvcmln
aW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBjb250cm9sbGVyLT5v
cmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNsZWFyQWxsRGF0YWJhc2VzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmNsZWFyQWxsRGF0YWJhc2VzKCk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC00NTAsNyArNDUwLDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJBbGxEYXRhYmFzZXNDYWxsYgogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBzeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAogICAgIGNvbnRyb2xsZXItPnN5bmNM
b2NhbFN0b3JhZ2UoKTsKIApAQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHN5
bmNMb2NhbFN0b3JhZ2VDYWxsYmEKIAogc3RhdGljIEpTVmFsdWVSZWYgb2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTQ3NSw3
ICs0NzUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOCiAKIHN0
YXRpYyBKU1ZhbHVlUmVmIGRlbGV0ZUFsbExvY2FsU3RvcmFnZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJv
bGxlci0+ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CkBAIC00ODMsNyArNDgzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
ZGVsZXRlQWxsTG9jYWxTdG9yYWdlQwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkZWxldGVMb2NhbFN0
b3JhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC00OTgsNyArNDk4
LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlTG9jYWxTdG9yYWdlRm9yTwogCiBzdGF0aWMg
SlNWYWx1ZVJlZiBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CkBAIC01MTEsMTQgKzUxMSwxNCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBsb2Nh
bFN0b3JhZ2VEaXNrVXNhZ2VGCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIG9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gY29udHJvbGxlci0+b3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQmFja0ZvcndhcmRM
aXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAg
IGNvbnRyb2xsZXItPmNsZWFyQmFja0ZvcndhcmRMaXN0KCk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC01MjcsNyArNTI3LDcgQEAgc3RhdGljIEpTVmFs
dWVSZWYgY2xlYXJCYWNrRm9yd2FyZExpc3RDYQogc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJQZXJz
aXN0ZW50VXNlclN0eWxlU2hlZXRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hl
ZXQoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTU0
Miw3ICs1NDIsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkZWNvZGVIb3N0TmFtZUNhbGxiYWNrCiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNl
cHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBkZWNvZGVkSG9zdE5hbWUoQWRvcHQsIGNvbnRyb2xsZXItPmNvcHlEZWNvZGVkSG9z
dE5hbWUobmFtZS5nZXQoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCBkZWNvZGVkSG9zdE5hbWUuZ2V0KCkpOwogfQpAQCAtNTUwLDcgKzU1MCw3IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIGRlY29kZUhvc3ROYW1lQ2FsbGJhY2sKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc2Fi
bGVJbWFnZUxvYWRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgLy8gSGFzIG1hYyBpbXBsZW1lbnRhdGlvbiwgbmVlZHMgd2luZG93cyBpbXBsZW1lbnRhdGlv
bgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5kaXNhYmxlSW1hZ2VM
b2FkaW5nKCk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwpAQCAtNTU5LDcgKzU1OSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc2FibGVJbWFnZUxvYWRp
bmdDYWwKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0c0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBIYXMgbWFjIGltcGxl
bWVudGF0aW9uLCBuZWVkcyB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpOwog
ICAgIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTU2OCw3
ICs1NjgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwYXRjaFBlbmRpbmdMb2FkUmVxCiBzdGF0
aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmRpc3BsYXkoKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTU3Nyw4ICs1NzcsOCBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJhY2soSlNDb250CiBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNw
bGF5SW52YWxpZGF0ZWRSZWdpb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAvLyBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGxheSgpIG9ubHkgcmVuZGVycyB0aGUgaW52YWxpZGF0ZWQgcmVnaW9u
IHNvCisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIC8vIFRlc3RSdW5uZXI6OmRp
c3BsYXkoKSBvbmx5IHJlbmRlcnMgdGhlIGludmFsaWRhdGVkIHJlZ2lvbiBzbwogICAgIC8vIHdl
IGNhbiBqdXN0IHVzZSB0aGF0LgogICAgIGNvbnRyb2xsZXItPmRpc3BsYXkoKTsKIApAQCAtNTk0
LDcgKzU5NCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2sKICAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGVuY29kZWRIb3N0TmFtZShBZG9wdCwgY29udHJvbGxlci0+Y29weUVuY29kZWRIb3N0
TmFtZShuYW1lLmdldCgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQs
IGVuY29kZWRIb3N0TmFtZS5nZXQoKSk7CiB9CkBAIC02MTgsNyArNjE4LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKUwogICAgICAgICB2YWx1ZS5hZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwogCiAKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CiAgICAgY29udHJvbGxlci0+ZXhlY0NvbW1hbmQobmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNjM2LDEz
ICs2MzYsMTMgQEAgc3RhdGljIEpTVmFsdWVSZWYgZmluZFN0cmluZ0NhbGxiYWNrKEpTQwogICAg
IEpTT2JqZWN0UmVmIG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRz
WzFdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBjb250
cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5nZXQoKSwgb3B0aW9ucykpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnb0JhY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmdvQmFj
aygpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAg
LTY1NCw3ICs2NTQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBncmFudERlc2t0b3BOb3RpZmljYXRp
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBjb250
cm9sbGVyLT5ncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKSk7CiAgICAgICAgIApAQCAtNjcxLDcg
KzY3MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlzQ29tbWFuZEVuYWJsZWRDYWxsYmEKICAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VC
b29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmlzQ29tbWFuZEVuYWJsZWQobmFtZS5nZXQoKSkp
OwogfQpAQCAtNjg2LDcgKzY4Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG92ZXJyaWRlUHJlZmVy
ZW5jZUNhbGwKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWUoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKICAgICBB
U1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPm92ZXJyaWRlUHJlZmVyZW5jZShrZXkuZ2V0KCksIHZhbHVlLmdldCgpKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTY5NSw3ICs2OTUsNyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VDYWxsCiBzdGF0aWMgSlNWYWx1
ZVJlZiBrZWVwV2ViSGlzdG9yeUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKICAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPmtlZXBXZWJIaXN0b3J5KCk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC03MDcsMTQgKzcwNywxNCBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICAKICAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9u
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
VGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBjb250cm9sbGVyLT5jb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIH0KIAog
c3RhdGljIEpTVmFsdWVSZWYgbGF5ZXJUcmVlQXNUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9u
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
VGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhj
b250ZXh0LCBjb250cm9sbGVyLT5sYXllclRyZWVBc1RleHQoKS5nZXQoKSk7CiB9CiAKQEAgLTcy
MiwxNSArNzIyLDE1IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG5vdGlmeURvbmVDYWxsYmFjayhKU0MK
IHsKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgogICAgIC8vIE1heSBi
ZSBhYmxlIHRvIGJlIG1hZGUgcGxhdGZvcm0gaW5kZXBlbmRhbnQgYnkgdXNpbmcgc2hhcmVkIFdv
cmtRdWV1ZQotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5ub3RpZnlE
b25lKCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBz
dGF0aWMgYm9vbCBwYXJzZVBhZ2VQYXJhbWV0ZXJzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpbnQg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiogYXJndW1lbnRzLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24sIGZsb2F0JiBwYWdlV2lkdGhJblBpeGVscywgZmxvYXQmIHBhZ2VIZWlnaHRJblBp
eGVscykKIHsKLSAgICBwYWdlV2lkdGhJblBpeGVscyA9IExheW91dFRlc3RDb250cm9sbGVyOjpt
YXhWaWV3V2lkdGg7Ci0gICAgcGFnZUhlaWdodEluUGl4ZWxzID0gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om1heFZpZXdIZWlnaHQ7CisgICAgcGFnZVdpZHRoSW5QaXhlbHMgPSBUZXN0UnVubmVyOjpt
YXhWaWV3V2lkdGg7CisgICAgcGFnZUhlaWdodEluUGl4ZWxzID0gVGVzdFJ1bm5lcjo6bWF4Vmll
d0hlaWdodDsKICAgICBzd2l0Y2ggKGFyZ3VtZW50Q291bnQpIHsKICAgICBjYXNlIDI6CiAgICAg
ICAgIHBhZ2VXaWR0aEluUGl4ZWxzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwpAQCAtODI4LDEzICs4MjgsMTMg
QEAgc3RhdGljIEpTVmFsdWVSZWYgbnVtYmVyT2ZQYWdlc0NhbGxiYWNrKAogICAgIGlmICghcGFy
c2VQYWdlUGFyYW1ldGVycyhjb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2Vw
dGlvbiwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+
bnVtYmVyT2ZQYWdlcyhwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9
CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
Y29udHJvbGxlci0+bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMo
KSk7CiB9CiAKQEAgLTg0NSw3ICs4NDUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBwYWdlUHJvcGVy
dHlDYWxsYmFjayhKCiAgICAgaWYgKCFwYXJzZVBhZ2VQcm9wZXJ0eVBhcmFtZXRlcnMoY29udGV4
dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHByb3BlcnR5TmFtZSwgcGFn
ZU51bWJlcikpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1
ZU1ha2VTdHJpbmcoY29udGV4dCwgY29udHJvbGxlci0+cGFnZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSwgcGFnZU51bWJlcikuZ2V0KCkpOwogCiAgICAgZGVsZXRlW10gcHJvcGVydHlOYW1lOwpAQCAt
ODYwLDcgKzg2MCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHBhZ2VTaXplQW5kTWFyZ2luc0luUGkK
ICAgICBpZiAoIXBhcnNlUGFnZU51bWJlclNpemVNYXJpbmdzKGNvbnRleHQsIGFyZ3VtZW50Q291
bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBwYWdlTnVtYmVyLCB3aWR0aCwgaGVpZ2h0LCBtYXJn
aW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXIt
PnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1h
cmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkuZ2V0KCkpOwog
fQogCkBAIC04NzQsNyArODc0LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVCYWNrTmF2aWdh
dGlvbkNhbAogICAgIGRvdWJsZSBob3dGYXJCYWNrRG91YmxlID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24p
OwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlQmFja05h
dmlnYXRpb24oc3RhdGljX2Nhc3Q8aW50Pihob3dGYXJCYWNrRG91YmxlKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC04OTAsNyArODkwLDcgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgcXVldWVGb3J3YXJkTmF2aWdhdGlvbgogICAgIGRvdWJsZSBob3dGYXJG
b3J3YXJkRG91YmxlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oc3RhdGljX2Nhc3Q8
aW50Pihob3dGYXJGb3J3YXJkRG91YmxlKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CkBAIC05MTMsNyArOTEzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVl
dWVMb2FkQ2FsbGJhY2soSlNDbwogICAgIH0gZWxzZQogICAgICAgICB0YXJnZXQuYWRvcHQoSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKIAotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5xdWV1ZUxvYWQodXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtOTM1LDcgKzkz
NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWwKICAgICB9IGVs
c2UKICAgICAgICAgYmFzZVVSTC5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
IikpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgaWYgKGFyZ3VtZW50Q291bnQg
Pj0gMykgewogICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkw7
CkBAIC05NTQsNyArOTU0LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVSZWxvYWRDYWxsYmFj
ayhKUwogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCiAgICAgLy8gTWF5
IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFyZWQg
V29ya1F1ZXVlCiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+cXVl
dWVSZWxvYWQoKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
QEAgLTk3MCw3ICs5NzAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUxvYWRpbmdTY3JpcHRD
YWxsCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxl
ci0+cXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdC5nZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC05ODYsNyArOTg2LDcgQEAgc3RhdGljIEpTVmFs
dWVSZWYgcXVldWVOb25Mb2FkaW5nU2NyaXB0QwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBzY3JpcHQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChzY3JpcHQu
Z2V0KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAt
OTk4LDcgKzk5OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEFjY2VwdHNFZGl0aW5nQ2FsbGIK
ICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5zZXRBY2NlcHRzRWRpdGluZyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50
c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAt
MTAxMCw3ICsxMDEwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QWx3YXlzQWNjZXB0Q29va2ll
cwogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPnNldEFsd2F5c0FjY2VwdENvb2tpZXMoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEFwcENhY2hlTWF4
aW11bVNpemUKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAog
ICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
TlVMTCk7CiAgICAgaWYgKCFpc25hbihzaXplKSkKQEAgLTEwMzcsNyArMTAzNyw3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmkKICAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRl
c3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAogICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgTlVMTCk7CiAgICAgaWYgKCFpc25hbihzaXplKSkK
QEAgLTEwNTksNyArMTA1OSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhlbnRpY2F0aW9u
UGFzc3cKICAgICBjaGFyKiBwYXNzd29yZEJ1ZmZlciA9IG5ldyBjaGFyW21heExlbmd0aCArIDFd
OwogICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcocGFzc3dvcmQuZ2V0KCksIHBhc3N3b3JkQnVm
ZmVyLCBtYXhMZW5ndGggKyAxKTsKICAgICAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChwYXNzd29yZEJ1ZmZlcik7CiAg
ICAgZGVsZXRlW10gcGFzc3dvcmRCdWZmZXI7CiAKQEAgLTEwNzksNyArMTA3OSw3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldEF1dGhlbnRpY2F0aW9uVXNlcm4KICAgICBjaGFyKiB1c2VybmFtZUJ1
ZmZlciA9IG5ldyBjaGFyW21heExlbmd0aCArIDFdOwogICAgIEpTU3RyaW5nR2V0VVRGOENTdHJp
bmcodXNlcm5hbWUuZ2V0KCksIHVzZXJuYW1lQnVmZmVyLCBtYXhMZW5ndGggKyAxKTsKICAgICAK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0QXV0aGVudGljYXRp
b25Vc2VybmFtZSh1c2VybmFtZUJ1ZmZlcik7CiAgICAgZGVsZXRlW10gdXNlcm5hbWVCdWZmZXI7
CiAKQEAgLTEwOTIsNyArMTA5Miw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhvckFuZFVz
ZXJTdHlsZXMKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAg
ICBjb250cm9sbGVyLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0QXV0b2ZpbGxlZENhbGxiYWNrKAogICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIgfHwgIWFy
Z3VtZW50c1swXSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEF1dG9maWxs
ZWQoY29udGV4dCwgYXJndW1lbnRzWzBdLCBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtMTExOCw3ICsxMTE4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2FjaGVNb2RlbENhbGxi
YWNrKAogICAgIGludCBjYWNoZU1vZGVsID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldENhY2hlTW9kZWwoY2FjaGVNb2Rl
bCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMTM0
LDcgKzExMzQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0CiAg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikKICAgICAgICAgcGVybWlzc2l2ZSA9IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSksIHBlcm1pc3NpdmUpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgc2V0RGF0YWJhc2VRdW90YUNhbGxiYQogICAgIGlmIChhcmd1bWVudENvdW50
IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgZG91YmxlIHF1b3RhID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgTlVMTCk7CiAgICAgaWYgKCFpc25hbihxdW90YSkp
CkBAIC0xMTYxLDcgKzExNjEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXREZWZlck1haW5SZXNv
dXJjZURhCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0
RGVmZXJzTG9hZGluZ0NhbGxiYQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldERlZmVyc0xvYWRpbmcoSlNWYWx1ZVRvQm9vbGVh
bihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKQEAgLTExODMsNyArMTE4Myw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNl
dFVzZURlZmVycmVkRnJhbWVMb2EKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRVc2VEZWZlcnJlZEZyYW1lTG9hZGluZyhKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTE5NSw3ICsxMTk1LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgc2V0RG9tYWluUmVsYXhhdGlvbkZvcgogICAgIGlmIChhcmd1bWVudENvdW50IDwg
MikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgYm9vbCBmb3JiaWRkZW4gPSBKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHNjaGVtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0s
IDApKTsKQEAgLTEyMTksNyArMTIxOSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tEZXZp
Y2VPcmllbnRhdGkKICAgICBkb3VibGUgZ2FtbWEgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzVdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwg
YmV0YSwgY2FuUHJvdmlkZUdhbW1hLCBnYW1tYSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpLCAg
Ly8gbGF0aXR1ZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBOVUxMKSwgIC8vIGxvbmdpdHVk
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMl0sIE5VTEwpKTsgIC8vIGFjY3VyYWN5CkBAIC0xMjQ3
LDcgKzEyNDcsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNb2NrR2VvbG9jYXRpb25FcnJvCiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1lc3NhZ2UoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpl
eGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWlu
dGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250
cm9sbGVyLT5zZXRNb2NrR2VvbG9jYXRpb25FcnJvcihjb2RlLCBtZXNzYWdlLmdldCgpKTsKIAog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTEyNjYsNyArMTI2
Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3UKICAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gbGFuZ3VhZ2UoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRp
b24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFkZE1vY2tT
cGVlY2hJbnB1dFJlc3VsdChyZXN1bHQuZ2V0KCksIGNvbmZpZGVuY2UsIGxhbmd1YWdlLmdldCgp
KTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTEyNzks
NyArMTI3OSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tTcGVlY2hJbnB1dER1bXAKIAog
ICAgIGJvb2wgZHVtcFJlY3QgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sw
XSk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0TW9ja1Nw
ZWVjaElucHV0RHVtcFJlY3QoZHVtcFJlY3QpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0TmV3V2luZG93c0NvcHlCYWNrRgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIAotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXROZXdXaW5kb3dzQ29weUJhY2tGb3J3
YXJkTGlzdChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTMwMyw3ICsxMzAzLDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0R2VvbG9jYXRpb25QZXJtaXNzaQogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTMxNSw3
ICsxMzE1LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aQogICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXIt
PnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKQEAgLTEzMjYsNyArMTMyNiw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFBPU0lY
TG9jYWxlQ2FsbGJhY2sKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbG9jYWxlKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKICAgICBjb250cm9sbGVyLT5zZXRQT1NJWExvY2FsZShsb2NhbGUuZ2V0
KCkpOwpAQCAtMTM0MCw3ICsxMzQwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0SWNvbkRhdGFi
YXNlRW5hYmxlZAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGNvbnRyb2xsZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKQEAgLTEzNTIsNyArMTM1Miw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1h
aW5GcmFtZUlzRmlyc3RSZXMKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRQZXJzaXN0ZW50VXNlclN0eWxlCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKHBhdGguZ2V0KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoSlNWYWx1ZVRvQm9v
bGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKQEAgLTEzOTEsNyArMTM5MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IHNldEphdmFTY3JpcHRDYW5BY2Nlc3MKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNDAzLDcgKzE0MDMsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRYU1NBdWRpdG9yRW5hYmxlZENhCiAgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0WFNTQXVkaXRv
ckVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE0MTUsNyArMTQxNSw3
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW4KICAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRTcGF0
aWFsTmF2aWdhdGlvbkVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNb
MF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE0
MjMsNyArMTQyMyw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFNwYXRpYWxOYXZpZ2F0aW9uRW4K
IAogc3RhdGljIEpTVmFsdWVSZWYgc2V0UHJpbnRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXIt
PnNldElzUHJpbnRpbmcodHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogfQpAQCAtMTQzNSw3ICsxNDM1LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0RnJh
bWVGbGF0dGVuaW5nRW5hYgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoSlNWYWx1ZVRv
Qm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIHNldEFsbG93VW5pdmVyc2FsQWNjZXMKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTQ1OSw3ICsxNDU5
LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbQogICAgIGlmIChh
cmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEFs
bG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0VGFiS2V5Q3ljbGVzVGhy
b3VnaAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNv
bnRyb2xsZXItPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0
VXNlRGFzaGJvYXJkQ29tcGF0aQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2Rl
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNDk1LDcgKzE0OTUsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBzZXRVc2VyU3R5bGVTaGVldEVuYWJsCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0VXNlclN0eWxlU2hl
ZXRFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNTEwLDcgKzE1MTAs
NyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRVc2VyU3R5bGVTaGVldExvY2F0CiAgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHBhdGgoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwog
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
VGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24ocGF0aC5nZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CkBAIC0xNTI1LDcgKzE1MjUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRW
YWx1ZUZvclVzZXJDYWxsYmFjCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9u
KSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICBjb250cm9sbGVyLT5zZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCB2
YWx1ZS5nZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CkBAIC0xNTQwLDcgKzE1NDAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRWaWV3TW9kZU1lZGlh
RmVhdHVyCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1vZGUoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NF
UlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRl
c3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xs
ZXItPnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKG1vZGUuZ2V0KCkpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTU1OSw3ICsxNTU5LDcgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgc2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYQogICAgIE93bkFycmF5UHRyPGNoYXI+
IGhlYWRlckJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbWF4TGVuZ3RoICsgMV0pOwog
ICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoaGVhZGVyLmdldCgpLCBoZWFkZXJCdWZmZXIuZ2V0
KCksIG1heExlbmd0aCArIDEpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGhlYWRlckJ1ZmZlci5nZXQoKSk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNTcxLDcg
KzE1NzEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1CiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKQEAgLTE1ODMsNyArMTU4Myw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFdpbGxTZW5kUmVx
dWVzdFJldHUKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAg
ICBjb250cm9sbGVyLT5zZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE1OTUsNyArMTU5NSw3IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIHNldFdpbmRvd0lzS2V5Q2FsbGJhY2sKICAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RS
dW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRXaW5kb3dJc0tleShKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTYwNCw3ICsxNjA0LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgc2V0V2luZG93SXNLZXlDYWxsYmFjawogc3RhdGljIEpTVmFsdWVSZWYgd2FpdFVu
dGlsRG9uZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICBjb250cm9sbGVyLT5zZXRXYWl0VG9EdW1wKHRydWUpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTYxMyw3ICsxNjEzLDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgd2FpdFVudGlsRG9uZUNhbGxiYWNrKAogc3RhdGljIEpTVmFsdWVSZWYgd2luZG93
Q291bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8gSGFz
IG1hYyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBpbnQgd2lu
ZG93cyA9IGNvbnRyb2xsZXItPndpbmRvd0NvdW50KCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIHdpbmRvd3MpOwogfQpAQCAtMTYyNCw3ICsxNjI0LDcgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZQogICAgIGlmIChhcmd1bWVudENvdW50
IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFBvcHVwQmxvY2tpbmdF
bmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNjM2LDcgKzE2MzYsNyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRQbHVnaW5zRW5hYmxlZENhbGxiCiAgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiAgICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFBs
dWdpbnNFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAg
ICAgCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTY1NSw3
ICsxNjU1LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0UGFnZVZpc2liaWxpdHlDYWxsYgogICAg
IGNoYXIqIHZpc2liaWxpdHlCdWZmZXIgPSBuZXcgY2hhclttYXhMZW5ndGggKyAxXTsKICAgICBK
U1N0cmluZ0dldFVURjhDU3RyaW5nKHZpc2liaWxpdHkuZ2V0KCksIHZpc2liaWxpdHlCdWZmZXIs
IG1heExlbmd0aCArIDEpOwogICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250
cm9sbGVyLT5zZXRQYWdlVmlzaWJpbGl0eSh2aXNpYmlsaXR5QnVmZmVyKTsKICAgICBkZWxldGVb
XSB2aXNpYmlsaXR5QnVmZmVyOwogICAgIApAQCAtMTY2NCw3ICsxNjY0LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgc2V0UGFnZVZpc2liaWxpdHlDYWxsYgogCiBzdGF0aWMgSlNWYWx1ZVJlZiByZXNl
dFBhZ2VWaXNpYmlsaXR5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRl
c3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5yZXNldFBhZ2VWaXNpYmls
aXR5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfSAgICAK
QEAgLTE2NzQsNyArMTY3NCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCBhcmd1bWVudHNbMF0pKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CkBAIC0xNjg0LDcgKzE2ODQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRB
dXRvbWF0aWNMaW5rRGV0ZWN0CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQo
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0xNjk0LDE0ICsxNjk0LDE0IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIHNldFNlbGVjdFRyYWlsaW5nV2hpdGUKICAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRz
WzBdKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAg
ICBjb250cm9sbGVyLT5zZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKHRydWUpOwogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTE3MTEsMjggKzE3MTEs
MjggQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QXN5bmNocm9ub3VzU3BlbGxDaAogICAgIGlmIChh
cmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzBdKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBzaG93V2ViSW5zcGVjdG9yQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5zaG93V2ViSW5zcGVjdG9yKCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBjbG9zZVdlYkluc3BlY3Rv
ckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Y2xvc2VXZWJJbnNwZWN0b3IoKTsKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGRvdWJsZSBjYWxsSWQgPSBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikp
OwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZXZhbHVhdGVJbldlYklu
c3BlY3RvcgogCiBzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgZG91YmxlIHdvcmxkSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwpAQCAtMTc1Niw3ICsxNzU2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgZXZhbHVhdGVTY3JpcHRJbklzb2xhdAogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBkb3VibGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CkBAIC0xNzY4LDcgKzE3NjgsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0CiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGVsZW1lbnRJZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7CiAKQEAgLTE3ODksNyArMTc4OSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHBhdXNlQW5p
bWF0aW9uQXRUaW1lT24KICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZWxlbWVudElkKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9u
KSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGFuaW1hdGlvbk5hbWUuZ2V0KCksIHRpbWUs
IGVsZW1lbnRJZC5nZXQoKSkpOwogfQogCkBAIC0xODA1LDcgKzE4MDUsNyBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGVsZW1lbnRJZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBj
b250cm9sbGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQocHJvcGVydHlO
YW1lLmdldCgpLCB0aW1lLCBlbGVtZW50SWQuZ2V0KCkpKTsKIH0KIApAQCAtMTgxNCwxMyArMTgx
NCwxMyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvCiAgICAgaWYg
KGFyZ3VtZW50Q291bnQgIT0gMCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
KSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQogewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT53YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0xODM4LDcg
KzE4MzgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpCiAgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbM10pOwogCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KHNvdXJjZU9yaWdpbi5nZXQoKSwgZGVzdGluYXRpb25Qcm90b2NvbC5nZXQoKSwgZGVzdGlu
YXRpb25Ib3N0LmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMTg1Niw3ICsxODU2LDcgQEAg
c3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdAogICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CiAgICAgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA9IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzNdKTsKIAotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShzb3Vy
Y2VPcmlnaW4uZ2V0KCksIGRlc3RpbmF0aW9uUHJvdG9jb2wuZ2V0KCksIGRlc3RpbmF0aW9uSG9z
dC5nZXQoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTE4NzEsNyArMTg3MSw3IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIHNldFNjcm9sbGJhclBvbGljeUNhbGwKICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gcG9saWN5KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1sxXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRTY3JvbGxiYXJQb2xpY3kob3JpZW50
YXRpb24uZ2V0KCksIHBvbGljeS5nZXQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogfQpAQCAtMTg4Niw3ICsxODg2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
YWRkVXNlclNjcmlwdENhbGxiYWNrKAogICAgIGJvb2wgcnVuQXRTdGFydCA9IEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKICAgICBib29sIGFsbEZyYW1lcyA9IEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzJdKTsKICAgICAKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+YWRkVXNlclNjcmlwdChzb3VyY2UuZ2V0KCksIHJ1
bkF0U3RhcnQsIGFsbEZyYW1lcyk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogfQpAQCAtMTkwMCw3ICsxOTAwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgYWRkVXNl
clN0eWxlU2hlZXRDYWxsYgogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAgICAgYm9vbCBhbGxG
cmFtZXMgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CiAgICAKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0
UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXQo
c291cmNlLmdldCgpLCBhbGxGcmFtZXMpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KQEAgLTE5MTEsNyArMTkxMSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNl
dFNob3VsZFBhaW50QnJva2VuSW0KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRTaG91bGRQYWludEJyb2tlbkltYWdlKEpTVmFs
dWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xOTI4LDE0ICsxOTI4LDE0IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG8KICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gYmFzZVVSTChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAgICAgICAgIAot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRl
c3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5hcGlUZXN0TmV3V2luZG93
RGF0YUxvYWRCYXNlVVJMKHV0ZjhEYXRhLmdldCgpLCBiYXNlVVJMLmdldCgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IGFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+YXBpVGVz
dEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMTk0Niw3ICsxOTQ2LDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgc2V0V2ViVmlld0VkaXRhYmxlQ2FsbAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFdlYlZpZXdFZGl0YWJsZShKU1ZhbHVl
VG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTk2MSw3ICsxOTYxLDcgQEAgc3RhdGljIEpTVmFs
dWVSZWYgc2VuZFdlYkludGVudFJlc3BvbnNlQwogICAgIH0gZWxzZQogICAgICAgICByZXNwb25z
ZS5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygwKSk7CiAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2VuZFdlYkludGVudFJlc3BvbnNlKHJlc3Bv
bnNlLmdldCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
QEAgLTE5NzksNyArMTk3OSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRlbGl2ZXJXZWJJbnRlbnRD
YWxsYmEKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGF0YShBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxl
ci0+ZGVsaXZlcldlYkludGVudChhY3Rpb24uZ2V0KCksIHR5cGUuZ2V0KCksIGRhdGEuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTk4Nywx
NCArMTk4NywxNCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkZWxpdmVyV2ViSW50ZW50Q2FsbGJhCiAK
IHN0YXRpYyBKU1ZhbHVlUmVmIGFib3J0TW9kYWxDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFi
b3J0TW9kYWwoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9
CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIG1hcmtlclRleHRGb3JMaXN0SXRlbUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPm1h
cmtlclRleHRGb3JMaXN0SXRlbShjb250ZXh0LCBhcmd1bWVudHNbMF0pLmdldCgpKTsKQEAgLTIw
MTMsNyArMjAxMyw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGF1dGhlbnRpY2F0ZVNlc3Npb25DYWwK
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGFzc3dvcmQoQWRvcHQsIEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXIt
PmF1dGhlbnRpY2F0ZVNlc3Npb24odXJsLmdldCgpLCB1c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQu
Z2V0KCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAg
LTIwMjQsMTMgKzIwMjQsMTMgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0U2VyaWFsaXplSFRUUExv
YWRzQwogICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCiAgICAgICAgIHNlcmlhbGl6ZSA9IEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAotICAgIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKKyAgICBUZXN0UnVu
bmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFNob3Vs
ZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICAKICAgICBpZiAoYXJndW1l
bnRDb3VudCA9PSAxKQogICAgICAgICBjb250cm9sbGVyLT5zZXRTaG91bGRTdGF5T25QYWdlQWZ0
ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50
c1swXSkpOwpAQCAtMjA0MCw3ICsyMDQwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0U2hvdWxk
U3RheU9uUGFnZUFmdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBhZGRDaHJvbWVJbnB1dEZpZWxkQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAg
ICBjb250cm9sbGVyLT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgLy8gdGhlIGZpcnN0IGFy
Z3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgaW5wdXQgZmllbGQg
aGFzIGJlZW4gYWRkZWQKICAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQpAQCAtMjA1MCw3ICsy
MDUwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgYWRkQ2hyb21lSW5wdXRGaWVsZENhbAogCiBzdGF0
aWMgSlNWYWx1ZVJlZiByZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5yZW1v
dmVDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgLy8gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2Fs
bGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgaW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQK
ICAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQpAQCAtMjA2MCw3ICsyMDYwLDcgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgcmVtb3ZlQ2hyb21lSW5wdXRGaWVsZAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBm
b2N1c1dlYlZpZXdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmZvY3VzV2ViVmlldygpOwogICAgIC8vIHRoZSBm
aXJzdCBhcmd1bWVudCBpcyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIG9uY2UgdGhlIGlucHV0
IGZpZWxkIGhhcyBiZWVuIGFkZGVkCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKQEAgLTIw
NzYsNyArMjA3Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEJhY2tpbmdTY2FsZUZhY3RvckMK
ICAgICBkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEJhY2tpbmdTY2FsZUZh
Y3RvcihiYWNraW5nU2NhbGVGYWN0b3IpOwogCiAgICAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBp
cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIG9uY2UgdGhlIGJhY2tpbmcgc2NhbGUgZmFjdG9y
IGhhcyBiZWVuIHNldC4KQEAgLTIwOTMsMjYgKzIwOTMsMjYgQEAgc3RhdGljIEpTVmFsdWVSZWYg
cHJlY2lzZVRpbWVDYWxsYmFjayhKUwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRHbG9iYWxGbGFn
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpT
U3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IGNvbnRyb2xsZXItPmdsb2JhbEZsYWcoKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFdl
Ykhpc3RvcnlJdGVtQ291bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLT53ZWJIaXN0b3J5SXRlbUNvdW50KCkpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRXb3JrZXJUaHJlYWRDb3VudENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPndvcmtl
clRocmVhZENvdW50KCkpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdJTikKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFBsYXRmb3JtTmFtZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmlu
Z1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShj
b250cm9sbGVyLT5wbGF0Zm9ybU5hbWUoKSk7CiAgICAgaWYgKCFwbGF0Zm9ybU5hbWUuZ2V0KCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTIxMjIs
MjggKzIxMjIsMjggQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxhdGZvcm1OYW1lQ2FsbGJhYwog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRUaXRsZVRleHREaXJlY3Rpb25DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0aXRsZURpcmVjdGlvbihBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29udHJvbGxlci0+dGl0bGVUZXh0RGlyZWN0aW9u
KCkuY19zdHIoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0aXRs
ZURpcmVjdGlvbi5nZXQoKSk7CiB9CiAKIHN0YXRpYyBib29sIHNldEdsb2JhbEZsYWdDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdS
ZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEdsb2JhbEZs
YWcoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBpZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5pZ25vcmVEZXNrdG9wTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBzaW11bGF0ZURlc2t0b3BOb3RpZmlj
YXRpb25DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsgCisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOyAKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGl0bGUo
QWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKICAgICBjb250cm9sbGVyLT5zaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayh0
aXRsZS5nZXQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtMjE1Nyw3ICsyMTU3LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0TWluaW11bVRpbWVySW50
ZXJ2YQogICAgIGRvdWJsZSBtaW5pbXVtID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldE1pbmltdW1UaW1lckludGVydmFs
KG1pbmltdW0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtMjE2Nyw3ICsyMTY3LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0VGV4dERpcmVjdGlvbkNh
bGxiYQogewogICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKICAgICAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGRpcmVjdGlvbihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICAgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgICAgICBjb250cm9sbGVyLT5zZXRUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbi5n
ZXQoKSk7CiAgICAgfQogCkBAIC0yMTc5LDcgKzIxNzksNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRIYXNDdXN0b21GdWxsU2NyZWVuCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewog
ICAgICAgICBib29sIGhhc0N1c3RvbUJlaGF2aW9yID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCBhcmd1bWVudHNbMF0pOwotICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgICAg
ICBjb250cm9sbGVyLT5zZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoaGFzQ3VzdG9tQmVo
YXZpb3IpOwogICAgIH0KIApAQCAtMjE5NCwyMSArMjE5NCwyMSBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlCiAgICAgZG91YmxlIGludGVydmFsID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpl
eGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNl
dFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChpbnRlcnZhbCk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxheW91dFRlc3RD
b250cm9sbGVyT2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQorc3RhdGljIHZvaWQg
dGVzdFJ1bm5lck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPmRlcmVmKCk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlv
bgogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRlc3RSdW5uZXJTdHIoQWRvcHQsIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0UnVubmVyIikpOwogICAgIHJlZigpOwpAQCAt
MjIyMSwxOSArMjIyMSwxOSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYWtlV2luZG93
T2JqCiAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRlc3RS
dW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlv
bik7CiB9CiAKLUpTQ2xhc3NSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQor
SlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0
aWNWYWx1ZSogc3RhdGljVmFsdWVzID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY1ZhbHVl
cygpOwotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMgPSBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCk7CisgICAgc3RhdGljIEpTU3RhdGlj
VmFsdWUqIHN0YXRpY1ZhbHVlcyA9IFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpOworICAgIHN0
YXRpYyBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMgPSBUZXN0UnVubmVyOjpzdGF0
aWNGdW5jdGlvbnMoKTsKICAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0
aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJMYXlvdXRUZXN0Q29u
dHJvbGxlciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAotICAgICAgICAwLCBs
YXlvdXRUZXN0Q29udHJvbGxlck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwCisgICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRlc3RSdW5uZXIiLCAwLCBz
dGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAgMCwgdGVzdFJ1bm5lck9iamVj
dEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKIAogICAgIHJldHVy
biBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOwogfQogCi1KU1N0YXRpY1ZhbHVlKiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCkKK0pTU3RhdGljVmFsdWUqIFRlc3RS
dW5uZXI6OnN0YXRpY1ZhbHVlcygpCiB7CiAgICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGlj
VmFsdWVzW10gPSB7CiAgICAgICAgIHsgImdsb2JhbEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJh
Y2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBA
IC0yMjQ4LDcgKzIyNDgsNyBAQCBKU1N0YXRpY1ZhbHVlKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3RhCiAgICAgcmV0dXJuIHN0YXRpY1ZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlvbiogTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCitKU1N0YXRpY0Z1bmN0aW9uKiBU
ZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogewogICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0
aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0yNDIzLDQ3ICsyNDIzLDQ3IEBAIEpTU3RhdGljRnVu
Y3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICByZXR1cm4gc3RhdGljRnVuY3Rpb25z
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpT
U3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCit2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFz
ZVVSTCkKIHsKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxTdHJp
bmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0
cmluZ1JlZiBiYXNlVVJMLCBKU1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBK
U1N0cmluZ1JlZiBiYXNlVVJMLCBKU1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTCkKIHsKICAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnRlbnQs
IGJhc2VVUkwsIHVucmVhY2hhYmxlVVJMKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnF1ZXVlQmFja05hdmlnYXRpb24oaW50IGhvd0ZhckJhY2spCit2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlQmFja05hdmlnYXRpb24oaW50IGhvd0ZhckJhY2spCiB7CiAgICAgV29ya1F1ZXVlOjpz
aGFyZWQoKS0+cXVldWUobmV3IEJhY2tJdGVtKGhvd0ZhckJhY2spKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2Fy
ZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9y
d2FyZCkKIHsKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgRm9yd2FyZEl0ZW0o
aG93RmFyRm9yd2FyZCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxv
YWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxv
YWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFdvcmtRdWV1ZTo6c2hhcmVk
KCktPnF1ZXVlKG5ldyBMb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQpKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlw
dCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNj
cmlwdCkKIHsKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTm9uTG9hZGluZ1Nj
cmlwdEl0ZW0oc2NyaXB0KSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVl
UmVsb2FkKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogewogICAgIFdvcmtRdWV1
ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBSZWxvYWRJdGVtKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1Jl
ZiBvcmlnaW4pCit2b2lkIFRlc3RSdW5uZXI6OmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1p
c3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewogICAgIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFs
bG93ZWRPcmlnaW5zLnB1c2hfYmFjayhKU1N0cmluZ1JldGFpbihvcmlnaW4pKTsKIH0KIAotYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2hlY2tEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lv
bihKU1N0cmluZ1JlZiBvcmlnaW4pCitib29sIFRlc3RSdW5uZXI6OmNoZWNrRGVza3RvcE5vdGlm
aWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewogICAgIHN0ZDo6dmVjdG9y
PEpTU3RyaW5nUmVmPjo6aXRlcmF0b3IgaTsKICAgICBmb3IgKGkgPSBtX2Rlc2t0b3BOb3RpZmlj
YXRpb25BbGxvd2VkT3JpZ2lucy5iZWdpbigpOwpAQCAtMjQ3NSwxMiArMjQ3NSwxMiBAQCBib29s
IExheW91dFRlc3RDb250cm9sbGVyOjpjaGVja0Rlc2t0b3BOCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlRGVza3RvcE5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiB7CiAgICAgbV9hcmVEZXNrdG9wTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3JlZCA9IGZhbHNlOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpCiB7CiAgICAgY29uc3QgY2hhciog
bWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBj
YWxsZWRcbiI7CiAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIG1lc3NhZ2UpOwpAQCAtMjQ4OCwz
MyArMjQ4OCwzMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0CiAg
ICAgbm90aWZ5RG9uZSgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCiB7CiAgICAgbV9pc0dlb2xv
Y2F0aW9uUGVybWlzc2lvblNldCA9IHRydWU7CiAgICAgbV9nZW9sb2NhdGlvblBlcm1pc3Npb24g
PSBhbGxvdzsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUo
SlNTdHJpbmdSZWYgbG9jYWxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShKU1N0
cmluZ1JlZiBsb2NhbGUpCiB7CiAgICAgY2hhciBsb2NhbGVCdWZbMzJdOwogICAgIEpTU3RyaW5n
R2V0VVRGOENTdHJpbmcobG9jYWxlLCBsb2NhbGVCdWYsIHNpemVvZihsb2NhbGVCdWYpKTsKICAg
ICBzZXRsb2NhbGUoTENfQUxMLCBsb2NhbGVCdWYpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRVUkxUb1JlZGlyZWN0KHN0ZDo6c3RyaW5nIG9yaWdpbiwgc3RkOjpzdHJpbmcg
ZGVzdGluYXRpb24pCit2b2lkIFRlc3RSdW5uZXI6OmFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJp
bmcgb3JpZ2luLCBzdGQ6OnN0cmluZyBkZXN0aW5hdGlvbikKIHsKICAgICBtX1VSTHNUb1JlZGly
ZWN0W29yaWdpbl0gPSBkZXN0aW5hdGlvbjsKIH0KIAotY29uc3Qgc3RkOjpzdHJpbmcmIExheW91
dFRlc3RDb250cm9sbGVyOjpyZWRpcmVjdGlvbkRlc3RpbmF0aW9uRm9yVVJMKHN0ZDo6c3RyaW5n
IG9yaWdpbikKK2NvbnN0IHN0ZDo6c3RyaW5nJiBUZXN0UnVubmVyOjpyZWRpcmVjdGlvbkRlc3Rp
bmF0aW9uRm9yVVJMKHN0ZDo6c3RyaW5nIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9VUkxzVG9S
ZWRpcmVjdFtvcmlnaW5dOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91
bGRQYWludEJyb2tlbkltYWdlKGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sIHNob3VsZFBhaW50QnJva2Vu
SW1hZ2UpCiB7CiAgICAgbV9zaG91bGRQYWludEJyb2tlbkltYWdlID0gc2hvdWxkUGFpbnRCcm9r
ZW5JbWFnZTsKIH0KIAotY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZp
ZXdXaWR0aCA9IDgwMDsKLWNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjptYXhW
aWV3SGVpZ2h0ID0gNjAwOworY29uc3QgdW5zaWduZWQgVGVzdFJ1bm5lcjo6bWF4Vmlld1dpZHRo
ID0gODAwOworY29uc3QgdW5zaWduZWQgVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodCA9IDYwMDsK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDEyNTMzNSkJKGZyb20g
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoxMjUzMzUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gK
KyNkZWZpbmUgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8TGF5b3V0VGVzdENvbnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gY3JlYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0
ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAg
IH5MYXlvdXRUZXN0Q29udHJvbGxlcigpOworCisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJs
KTsKKyAgICB2b2lkIGFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJpbmcgb3JpZ2luLCBzdGQ6OnN0
cmluZyBkZXN0aW5hdGlvbik7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlZGlyZWN0aW9uRGVz
dGluYXRpb25Gb3JVUkwoc3RkOjpzdHJpbmcpOworICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcygpOworICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICB2b2lkIGNsZWFy
QXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKTsKKyAgICB2b2lkIGNs
ZWFyQmFja0ZvcndhcmRMaXN0KCk7CisgICAgdm9pZCBjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVT
aGVldCgpOworICAgIGJvb2wgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCk7CisgICAgSlNTdHJp
bmdSZWYgY29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKTsKKyAgICBKU1N0cmlu
Z1JlZiBjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOworICAgIHZvaWQgZGVs
aXZlcldlYkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3Ry
aW5nUmVmIGRhdGEpOworICAgIHZvaWQgZGlzYWJsZUltYWdlTG9hZGluZygpOworICAgIHZvaWQg
ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CisgICAgdm9pZCBkaXNwbGF5KCk7CisgICAg
dm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oKTsKKyAgICB2b2lkIGV4ZWNDb21tYW5kKEpT
U3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKTsKKyAgICBib29sIGZpbmRTdHJpbmco
SlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KTsKKyAg
ICB2b2lkIGdvQmFjaygpOworICAgIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNh
Y2hlKEpTQ29udGV4dFJlZik7CisgICAgbG9uZyBsb25nIGFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNh
Z2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSk7CisgICAgYm9vbCBpc0NvbW1hbmRFbmFibGVk
KEpTU3RyaW5nUmVmIG5hbWUpOworICAgIHZvaWQga2VlcFdlYkhpc3RvcnkoKTsKKyAgICBKU1Zh
bHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYsIEpT
VmFsdWVSZWYpOworICAgIHZvaWQgbm90aWZ5RG9uZSgpOworICAgIGludCBudW1iZXJPZlBhZ2Vz
KGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMpOworICAg
IGludCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOworICAg
IHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFs
dWUpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYWdlUHJvcGVydHkoY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3Q7CisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50
IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0OworICAgIEpTU3RyaW5nUmVmIHBh
dGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiB1cmwpOworICAgIHZv
aWQgcXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFja3dhcmQpOworICAgIHZvaWQgcXVl
dWVGb3J3YXJkTmF2aWdhdGlvbihpbnQgaG93RmFyRm9yd2FyZCk7CisgICAgdm9pZCBxdWV1ZUxv
YWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpOworICAgIHZvaWQgcXVldWVM
b2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKTsK
KyAgICB2b2lkIHF1ZXVlTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVu
dCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpOworICAg
IHZvaWQgcXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBx
dWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KTsKKyAgICB2b2lkIHF1ZXVl
UmVsb2FkKCk7CisgICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKKyAgICB2b2lkIHNl
bmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZiByZXNwb25zZSk7CisgICAgdm9pZCBzZXRB
Y2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKTsKKyAgICB2b2lkIHNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOworICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CisgICAgdm9pZCBzZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldEF1dG9maWxsZWQoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCk7CisgICAgdm9p
ZCBzZXRDYWNoZU1vZGVsKGludCk7CisgICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShi
b29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOworICAgIHZvaWQgc2V0RGF0YWJhc2VR
dW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOworICAgIHZvaWQgc2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2No
ZW1lKTsKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisgICAgdm9pZCBzZXRJY29u
RGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCk7CisgICAgdm9pZCBzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7CisgICAgdm9pZCBzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQgc2V0TWFpbkZy
YW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOworICAgIHZvaWQgc2V0TW9ja0RldmljZU9y
aWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJv
dmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1h
KTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1Jl
ZiBtZXNzYWdlKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KTsKKyAgICB2b2lkIGFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSk7CisgICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXRE
dW1wUmVjdChib29sIGZsYWcpOworICAgIHZvaWQgc2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CisgICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChi
b29sIGZsYWcpOworICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsK
KyAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lk
IHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lk
IHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpOworICAgIHZvaWQgc2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKTsKKyAgICB2b2lkIHNldFVzZURh
c2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZyk7CisgICAgdm9pZCBzZXRVc2VyU3R5
bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oSlNTdHJpbmdSZWYgcGF0aCk7CisgICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKTsKKyAgICB2
b2lkIHNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpOworICAgIHZvaWQg
c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICB2b2lkIHNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShKU1N0cmlu
Z1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KTsKKyAgICB2b2lkIHN0YXJ0U3Bl
ZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCk7CisgICAgdm9pZCBzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBjaGFyKik7CisgICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KCk7CisK
KyAgICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOworICAgIHNpemVfdCB3ZWJIaXN0b3J5
SXRlbUNvdW50KCk7CisgICAgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQoKSBjb25zdDsKKyAg
ICBpbnQgd2luZG93Q291bnQoKTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV0lOKQorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0
Zm9ybU5hbWUoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdm9pZCBncmFudERlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7CisgICAgYm9vbCBjaGVja0Rlc2t0
b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbik7CisgICAgdm9pZCBp
Z25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CisgICAgYm9vbCBh
cmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzSWdub3JlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXJlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0c0lnbm9yZWQ7
IH0KKyAgICB2b2lkIHNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVm
IHRpdGxlKTsKKworICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGlkKTsKKworICAgIGJvb2wgZHVtcEFzQXVkaW8oKSBjb25zdCB7IHJl
dHVybiBtX2R1bXBBc0F1ZGlvOyB9CisgICAgdm9pZCBzZXREdW1wQXNBdWRpbyhib29sIGR1bXBB
c0F1ZGlvKSB7IG1fZHVtcEFzQXVkaW8gPSBkdW1wQXNBdWRpbzsgfQorICAgIAorICAgIGJvb2wg
ZHVtcEFzUERGKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNQREY7IH0KKyAgICB2b2lkIHNldER1
bXBBc1BERihib29sIGR1bXBBc1BERikgeyBtX2R1bXBBc1BERiA9IGR1bXBBc1BERjsgfQorCisg
ICAgYm9vbCBkdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9CisgICAg
dm9pZCBzZXREdW1wQXNUZXh0KGJvb2wgZHVtcEFzVGV4dCkgeyBtX2R1bXBBc1RleHQgPSBkdW1w
QXNUZXh0OyB9CisKKyAgICBib29sIGdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgY29uc3QgeyByZXR1
cm4gbV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsgfQorICAgIHZvaWQgc2V0R2VuZXJhdGVQaXhlbFJl
c3VsdHMoYm9vbCBnZW5lcmF0ZVBpeGVsUmVzdWx0cykgeyBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRz
ID0gZ2VuZXJhdGVQaXhlbFJlc3VsdHM7IH0KKworICAgIGJvb2wgZGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsgfQorICAgIHZvaWQgc2V0RGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YShib29sIGRpc2FsbG93SW5jcmVhc2UpIHsgbV9kaXNh
bGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhID0gZGlzYWxsb3dJbmNyZWFzZTsg
fQorCisgICAgYm9vbCBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkgY29u
c3QgeyByZXR1cm4gbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzOyB9Cisg
ICAgdm9pZCBzZXREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKGJvb2wgZHVt
cENhbGxiYWNrcykgeyBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MgPSBk
dW1wQ2FsbGJhY2tzOyB9CisKKyAgICBib29sIGR1bXBCYWNrRm9yd2FyZExpc3QoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KKyAgICB2b2lkIHNldER1bXBCYWNrRm9y
d2FyZExpc3QoYm9vbCBkdW1wQmFja0ZvcndhcmRMaXN0KSB7IG1fZHVtcEJhY2tGb3J3YXJkTGlz
dCA9IGR1bXBCYWNrRm9yd2FyZExpc3Q7IH0KKworICAgIGJvb2wgZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRp
b25zOyB9CisgICAgdm9pZCBzZXREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyhib29sIGR1
bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKSB7IG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnMgPSBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQorCisgICAgYm9vbCBkdW1w
Q2hpbGRGcmFtZXNBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4
dDsgfQorICAgIHZvaWQgc2V0RHVtcENoaWxkRnJhbWVzQXNUZXh0KGJvb2wgZHVtcENoaWxkRnJh
bWVzQXNUZXh0KSB7IG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0ID0gZHVtcENoaWxkRnJhbWVzQXNU
ZXh0OyB9CisKKyAgICBib29sIGR1bXBEYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOyB9CisgICAgdm9pZCBzZXREdW1wRGF0YWJhc2VDYWxs
YmFja3MoYm9vbCBkdW1wRGF0YWJhc2VDYWxsYmFja3MpIHsgbV9kdW1wRGF0YWJhc2VDYWxsYmFj
a3MgPSBkdW1wRGF0YWJhc2VDYWxsYmFja3M7IH0KKworICAgIGJvb2wgZHVtcERPTUFzV2ViQXJj
aGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQorICAgIHZvaWQg
c2V0RHVtcERPTUFzV2ViQXJjaGl2ZShib29sIGR1bXBET01Bc1dlYkFyY2hpdmUpIHsgbV9kdW1w
RE9NQXNXZWJBcmNoaXZlID0gZHVtcERPTUFzV2ViQXJjaGl2ZTsgfQorCisgICAgYm9vbCBkdW1w
RWRpdGluZ0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7
IH0KKyAgICB2b2lkIHNldER1bXBFZGl0aW5nQ2FsbGJhY2tzKGJvb2wgZHVtcEVkaXRpbmdDYWxs
YmFja3MpIHsgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IGR1bXBFZGl0aW5nQ2FsbGJhY2tzOyB9
CisKKyAgICBib29sIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1
bXBGcmFtZUxvYWRDYWxsYmFja3M7IH0KKyAgICB2b2lkIHNldER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoYm9vbCBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKSB7IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNr
cyA9IGR1bXBGcmFtZUxvYWRDYWxsYmFja3M7IH0KKworICAgIGJvb2wgZHVtcFByb2dyZXNzRmlu
aXNoZWRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxs
YmFjazsgfQorICAgIHZvaWQgc2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhib29sIGR1
bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spIHsgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxi
YWNrID0gZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsgfQorICAgIAorICAgIGJvb2wgZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBV
c2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzOyB9CisgICAgdm9pZCBzZXREdW1wVXNlckdl
c3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKSB7IG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSBkdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfSAgICAKKworICAgIGJvb2wgZHVtcEhp
c3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEhpc3RvcnlEZWxl
Z2F0ZUNhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0RHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNr
cyhib29sIGR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MpIHsgbV9kdW1wSGlzdG9yeURlbGVn
YXRlQ2FsbGJhY2tzID0gZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrczsgfQorICAgIAorICAg
IGJvb2wgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0RHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcyhib29sIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpIHsgbV9kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzID0gZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsgfQorICAgIAorICAgIGJvb2wg
ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBSZXNv
dXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9CisgICAgdm9pZCBzZXREdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlcyhib29sIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKSB7IG1fZHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSBkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlczsg
fQorCisgICAgYm9vbCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFNl
bGVjdGlvblJlY3Q7IH0KKyAgICB2b2lkIHNldER1bXBTZWxlY3Rpb25SZWN0KGJvb2wgZHVtcFNl
bGVjdGlvblJlY3QpIHsgbV9kdW1wU2VsZWN0aW9uUmVjdCA9IGR1bXBTZWxlY3Rpb25SZWN0OyB9
CisKKyAgICBib29sIGR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSBjb25zdCB7IHJldHVybiBtX2R1
bXBTb3VyY2VBc1dlYkFyY2hpdmU7IH0KKyAgICB2b2lkIHNldER1bXBTb3VyY2VBc1dlYkFyY2hp
dmUoYm9vbCBkdW1wU291cmNlQXNXZWJBcmNoaXZlKSB7IG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2
ZSA9IGR1bXBTb3VyY2VBc1dlYkFyY2hpdmU7IH0KKworICAgIGJvb2wgZHVtcFN0YXR1c0NhbGxi
YWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsgfQorICAgIHZvaWQg
c2V0RHVtcFN0YXR1c0NhbGxiYWNrcyhib29sIGR1bXBTdGF0dXNDYWxsYmFja3MpIHsgbV9kdW1w
U3RhdHVzQ2FsbGJhY2tzID0gZHVtcFN0YXR1c0NhbGxiYWNrczsgfQorCisgICAgYm9vbCBkdW1w
VGl0bGVDaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9CisgICAg
dm9pZCBzZXREdW1wVGl0bGVDaGFuZ2VzKGJvb2wgZHVtcFRpdGxlQ2hhbmdlcykgeyBtX2R1bXBU
aXRsZUNoYW5nZXMgPSBkdW1wVGl0bGVDaGFuZ2VzOyB9CisKKyAgICBib29sIGR1bXBJY29uQ2hh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEljb25DaGFuZ2VzOyB9CisgICAgdm9pZCBzZXRE
dW1wSWNvbkNoYW5nZXMoYm9vbCBkdW1wSWNvbkNoYW5nZXMpIHsgbV9kdW1wSWNvbkNoYW5nZXMg
PSBkdW1wSWNvbkNoYW5nZXM7IH0KKworICAgIGJvb2wgZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7IH0KKyAgICB2b2lk
IHNldER1bXBWaXNpdGVkTGlua3NDYWxsYmFjayhib29sIGR1bXBWaXNpdGVkTGlua3NDYWxsYmFj
aykgeyBtX2R1bXBWaXNpdGVkTGlua3NDYWxsYmFjayA9IGR1bXBWaXNpdGVkTGlua3NDYWxsYmFj
azsgfQorICAgIAorICAgIGJvb2wgZHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkgY29uc3QgeyByZXR1
cm4gbV9kdW1wV2lsbENhY2hlUmVzcG9uc2U7IH0KKyAgICB2b2lkIHNldER1bXBXaWxsQ2FjaGVS
ZXNwb25zZShib29sIGR1bXBXaWxsQ2FjaGVSZXNwb25zZSkgeyBtX2R1bXBXaWxsQ2FjaGVSZXNw
b25zZSA9IGR1bXBXaWxsQ2FjaGVSZXNwb25zZTsgfQorICAgIAorICAgIGJvb2wgY2FsbENsb3Nl
T25XZWJWaWV3cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbENsb3NlT25XZWJWaWV3czsgfQorICAg
IHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3cyhib29sIGNhbGxDbG9zZU9uV2ViVmlld3MpIHsg
bV9jYWxsQ2xvc2VPbldlYlZpZXdzID0gY2FsbENsb3NlT25XZWJWaWV3czsgfQorCisgICAgYm9v
bCBjYW5PcGVuV2luZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KKyAg
ICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGJvb2wgY2FuT3BlbldpbmRvd3MpIHsgbV9jYW5PcGVu
V2luZG93cyA9IGNhbk9wZW5XaW5kb3dzOyB9CisKKyAgICBib29sIGNsb3NlUmVtYWluaW5nV2lu
ZG93c1doZW5Db21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlOyB9CisgICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGUoYm9vbCBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpIHsgbV9jbG9zZVJl
bWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUgPSBjbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGU7IH0KKyAgICAKKyAgICBib29sIG5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdDsgfQorICAgIHZv
aWQgc2V0TmV3V2luZG93c0NvcHlCYWNrRm9yd2FyZExpc3QoYm9vbCBuZXdXaW5kb3dzQ29weUJh
Y2tGb3J3YXJkTGlzdCkgeyBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0ID0gbmV3V2lu
ZG93c0NvcHlCYWNrRm9yd2FyZExpc3Q7IH0KKyAgICAKKyAgICBib29sIHN0b3BQcm92aXNpb25h
bEZyYW1lTG9hZHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7
IH0KKyAgICB2b2lkIHNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoYm9vbCBzdG9wUHJvdmlz
aW9uYWxGcmFtZUxvYWRzKSB7IG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHN0b3BQcm92
aXNpb25hbEZyYW1lTG9hZHM7IH0KKworICAgIGJvb2wgdGVzdE9uc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXN0T25zY3JlZW47IH0KKyAgICB2b2lkIHNldFRlc3RPbnNjcmVlbihib29sIHRl
c3RPbnNjcmVlbikgeyBtX3Rlc3RPbnNjcmVlbiA9IHRlc3RPbnNjcmVlbjsgfQorCisgICAgYm9v
bCB0ZXN0UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7IH0KKyAgICB2b2lk
IHNldFRlc3RSZXBhaW50KGJvb2wgdGVzdFJlcGFpbnQpIHsgbV90ZXN0UmVwYWludCA9IHRlc3RS
ZXBhaW50OyB9CisKKyAgICBib29sIHRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSBjb25z
dCB7IHJldHVybiBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHk7IH0KKyAgICB2b2lkIHNl
dFRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoYm9vbCB0ZXN0UmVwYWludFN3ZWVwSG9yaXpv
bnRhbGx5KSB7IG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRlc3RSZXBhaW50U3dl
ZXBIb3Jpem9udGFsbHk7IH0KKworICAgIGJvb2wgd2FpdFRvRHVtcCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2FpdFRvRHVtcDsgfQorICAgIHZvaWQgc2V0V2FpdFRvRHVtcChib29sIHdhaXRUb0R1bXAp
OworICAgIHZvaWQgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworCisgICAgY29uc3Qg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiB3aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3dpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyczsgfQorICAgIHZvaWQgc2V0
V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoc3RkOjpzdHJpbmcgaGVhZGVyKSB7IG1fd2lsbFNl
bmRSZXF1ZXN0Q2xlYXJIZWFkZXJzLmluc2VydChoZWFkZXIpOyB9CisKKyAgICBib29sIHdpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbDsgfQorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9v
bCByZXR1cm5zTnVsbCkgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsID0gcmV0dXJuc051
bGw7IH0KKworICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7IH0K
KyAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChib29sIHJl
dHVybnNOdWxsKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0ID0gcmV0
dXJuc051bGw7IH0KKworICAgIGJvb2wgd2luZG93SXNLZXkoKSBjb25zdCB7IHJldHVybiBtX3dp
bmRvd0lzS2V5OyB9CisgICAgdm9pZCBzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KTsK
KworICAgIGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcygpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlz
QWNjZXB0Q29va2llczsgfQorICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFs
d2F5c0FjY2VwdENvb2tpZXMpOworICAgIAorICAgIGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlczsgfQorICAgIHZvaWQgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29s
IGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpIHsgbV9oYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzID0gaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlczsgfQorICAgIAor
ICAgIGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNQcmludGluZzsgfQorICAg
IHZvaWQgc2V0SXNQcmludGluZyhib29sIGlzUHJpbnRpbmcpIHsgbV9pc1ByaW50aW5nID0gaXNQ
cmludGluZzsgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF1dGhlbnRpY2F0aW9uVXNlcm5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWU7IH0KKyAgICB2b2lk
IHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoc3RkOjpzdHJpbmcgdXNlcm5hbWUpIHsgbV9hdXRo
ZW50aWNhdGlvblVzZXJuYW1lID0gdXNlcm5hbWU7IH0KKyAgICAKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyYgYXV0aGVudGljYXRpb25QYXNzd29yZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aGVudGlj
YXRpb25QYXNzd29yZDsgfQorICAgIHZvaWQgc2V0QXV0aGVudGljYXRpb25QYXNzd29yZChzdGQ6
OnN0cmluZyBwYXNzd29yZCkgeyBtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQgPSBwYXNzd29yZDsg
fQorCisgICAgYm9vbCBnbG9iYWxGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxGbGFnOyB9
CisgICAgdm9pZCBzZXRHbG9iYWxGbGFnKGJvb2wgZ2xvYmFsRmxhZykgeyBtX2dsb2JhbEZsYWcg
PSBnbG9iYWxGbGFnOyB9CisgICAgCisgICAgYm9vbCBkZWZlck1haW5SZXNvdXJjZURhdGFMb2Fk
KCkgY29uc3QgeyByZXR1cm4gbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOyB9CisgICAgdm9p
ZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wgZmxhZykgeyBtX2RlZmVyTWFpblJl
c291cmNlRGF0YUxvYWQgPSBmbGFnOyB9CisKKyAgICBib29sIHVzZURlZmVycmVkRnJhbWVMb2Fk
aW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZzsgfQorICAgIHZv
aWQgc2V0VXNlRGVmZXJyZWRGcmFtZUxvYWRpbmcoYm9vbCBmbGFnKSB7IG1fdXNlRGVmZXJyZWRG
cmFtZUxvYWRpbmcgPSBmbGFnOyB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhP
clVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQorICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRQaXhl
bEhhc2g7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9CisgICAgdm9pZCBzZXRFbmNvZGVkQXVk
aW9EYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRhKSB7IG1fZW5jb2RlZEF1
ZGlvRGF0YSA9IGVuY29kZWRBdWRpb0RhdGE7IH0KKyAgICAKKyAgICBib29sIHBhdXNlQW5pbWF0
aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpOworICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRp
bWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpT
U3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwg
SlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zKTsKKworICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wg
cnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpOworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQo
SlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcyk7CisKKyAgICB2b2lkIHNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KTsKKyAgICBib29sIGlzR2VvbG9jYXRpb25QZXJt
aXNzaW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsg
fQorICAgIGJvb2wgZ2VvbG9jYXRpb25QZXJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW9s
b2NhdGlvblBlcm1pc3Npb247IH0KKworICAgIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZChib29sKTsKKyAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wpOworICAgIHZvaWQgc2hvd1dlYkluc3BlY3RvcigpOworICAgIHZvaWQgY2xvc2VXZWJJbnNw
ZWN0b3IoKTsKKyAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpT
U3RyaW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmdSZWYgc2NyaXB0KTsKKworICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdC
ZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRs
aW5nQmVmb3JlVW5sb2FkOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKSB7IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBz
aG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZDsgfQorCisgICAgdm9pZCBh
ZGRDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgdm9pZCByZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7
CisgICAgdm9pZCBmb2N1c1dlYlZpZXcoKTsKKworICAgIHZvaWQgc2V0QmFja2luZ1NjYWxlRmFj
dG9yKGRvdWJsZSk7CisKKyAgICB2b2lkIHNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2Fs
ZSk7CisKKyAgICB2b2lkIHNldFdlYlZpZXdFZGl0YWJsZShib29sKTsKKworICAgIHZvaWQgYWJv
cnRNb2RhbCgpOworCisgICAgc3RhdGljIHZvaWQgc2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wg
c2VyaWFsaXplKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJIHRlc3QgZnVuY3Rpb25zIHNo
b3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyAKKyAgICAvLyB1bml0
IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KKyAgICB2b2lkIGFwaVRlc3RO
ZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVm
IGJhc2VVUkwpOworICAgIHZvaWQgYXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCk7
CisKKyAgICAvLyBTaW11bGF0ZSBhIHJlcXVlc3QgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNv
dWxkIG1ha2UsIHBvcHVsYXRpbmcgcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgorICAg
IHZvaWQgYXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHVz
ZXJuYW1lLCBKU1N0cmluZ1JlZiBwYXNzd29yZCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gbWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QpIGNvbnN0OworCisgICAgSlNWYWx1ZVJlZiBvcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZShKU0NvbnRleHRSZWYpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7
CisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2Nh
bFN0b3JhZ2UoKTsKKworICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZShib29sKTsK
KyAgICBib29sIHNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFBhaW50QnJva2VuSW1hZ2U7IH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhWaWV3
V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFZpZXdIZWlnaHQ7CisKKyAgICB2
b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7CisKKyAgICB2b2lkIHNldFRleHRE
aXJlY3Rpb24oSlNTdHJpbmdSZWYpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZVRleHRE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpdGxlVGV4dERpcmVjdGlvbjsgfQorICAgIHZv
aWQgc2V0VGl0bGVUZXh0RGlyZWN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJlY3Rpb24pIHsg
bV90aXRsZVRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KKworICAgIC8vIEN1c3RvbSBmdWxs
IHNjcmVlbiBiZWhhdmlvci4KKyAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlv
cihib29sIHZhbHVlKSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KKyAg
ICBib29sIGhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tRnVsbFNjcmVlbkJlaGF2aW9yOyB9CisKKyAgICB2b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbChkb3VibGUpOworCitwcml2YXRlOgorICAgIExheW91dFRlc3RDb250cm9sbGVy
KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhw
ZWN0ZWRQaXhlbEhhc2gpOworCisgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21t
b24oYm9vbCBhbGxvdyk7CisKKyAgICBib29sIG1fZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YTsKKyAgICBib29sIG1fZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNh
bGxiYWNrczsKKyAgICBib29sIG1fZHVtcEFzQXVkaW87CisgICAgYm9vbCBtX2R1bXBBc1BERjsK
KyAgICBib29sIG1fZHVtcEFzVGV4dDsKKyAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsK
KyAgICBib29sIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7CisgICAgYm9vbCBtX2R1
bXBDaGlsZEZyYW1lc0FzVGV4dDsKKyAgICBib29sIG1fZHVtcERPTUFzV2ViQXJjaGl2ZTsKKyAg
ICBib29sIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzOworICAgIGJvb2wgbV9kdW1wRWRpdGluZ0Nh
bGxiYWNrczsKKyAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsKKyAgICBib29sIG1f
ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKKyAgICBib29sIG1fZHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3M7CisgICAgYm9vbCBtX2R1bXBIaXN0b3J5RGVsZWdhdGVDYWxs
YmFja3M7CisgICAgYm9vbCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7CisgICAgYm9vbCBt
X2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOworICAgIGJvb2wgbV9kdW1wU2VsZWN0aW9u
UmVjdDsKKyAgICBib29sIG1fZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZTsKKyAgICBib29sIG1fZHVt
cFN0YXR1c0NhbGxiYWNrczsKKyAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKKyAgICBib29s
IG1fZHVtcEljb25DaGFuZ2VzOworICAgIGJvb2wgbV9kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2s7
CisgICAgYm9vbCBtX2R1bXBXaWxsQ2FjaGVSZXNwb25zZTsKKyAgICBib29sIG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHM7CisgICAgYm9vbCBtX2NhbGxDbG9zZU9uV2ViVmlld3M7CisgICAgYm9vbCBt
X2Nhbk9wZW5XaW5kb3dzOworICAgIGJvb2wgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGU7CisgICAgYm9vbCBtX25ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0OworICAgIGJv
b2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOworICAgIGJvb2wgbV90ZXN0T25zY3JlZW47
CisgICAgYm9vbCBtX3Rlc3RSZXBhaW50OworICAgIGJvb2wgbV90ZXN0UmVwYWludFN3ZWVwSG9y
aXpvbnRhbGx5OworICAgIGJvb2wgbV93YWl0VG9EdW1wOyAvLyBUcnVlIGlmIHdhaXRVbnRpbERv
bmUoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCBub3RpZnlEb25lKCkgaGFzIG5vdCB5ZXQgYmVlbiBj
YWxsZWQuCisgICAgYm9vbCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsOworICAgIGJvb2wg
bV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Q7CisgICAgYm9vbCBtX3dpbmRv
d0lzS2V5OworICAgIGJvb2wgbV9hbHdheXNBY2NlcHRDb29raWVzOworICAgIGJvb2wgbV9nbG9i
YWxGbGFnOworICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsKKyAgICBib29s
IG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworICAgIGJvb2wgbV9oYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzOworICAgIGJvb2wgbV9pc1ByaW50aW5nOworICAgIGJvb2wgbV9kZWZlck1h
aW5SZXNvdXJjZURhdGFMb2FkOworICAgIGJvb2wgbV91c2VEZWZlcnJlZEZyYW1lTG9hZGluZzsK
KyAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKKyAgICBib29sIG1fc2hvdWxkU3Rh
eU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7CisgICAgYm9vbCBtX2FyZURlc2t0b3BO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNJZ25vcmVkOworICAgIGJvb2wgbV9jdXN0b21G
dWxsU2NyZWVuQmVoYXZpb3I7CisKKyAgICBzdGQ6OnN0cmluZyBtX2F1dGhlbnRpY2F0aW9uVXNl
cm5hbWU7CisgICAgc3RkOjpzdHJpbmcgbV9hdXRoZW50aWNhdGlvblBhc3N3b3JkOyAKKyAgICBz
dGQ6OnN0cmluZyBtX3Rlc3RQYXRoT3JVUkw7CisgICAgc3RkOjpzdHJpbmcgbV9leHBlY3RlZFBp
eGVsSGFzaDsgICAgLy8gZW1wdHkgc3RyaW5nIGlmIG5vIGhhc2gKKyAgICBzdGQ6OnN0cmluZyBt
X3RpdGxlVGV4dERpcmVjdGlvbjsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX3dpbGxT
ZW5kUmVxdWVzdENsZWFySGVhZGVyczsKKyAgICAKKyAgICAvLyBiYXNlNjQgZW5jb2RlZCBXQVYg
YXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBzdGQ6OnN0cmluZyBtX2VuY29kZWRBdWRp
b0RhdGE7CisgICAgCisgICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4gZ3JhbnRlZCBkZXNr
dG9wIG5vdGlmaWNhdGlvbiBhY2Nlc3MKKyAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj4gbV9k
ZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CisKKyAgICBzdGQ6Om1hcDxzdGQ6OnN0
cmluZywgc3RkOjpzdHJpbmc+IG1fVVJMc1RvUmVkaXJlY3Q7CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NSZWYgZ2V0SlNDbGFzcygpOworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNW
YWx1ZXMoKTsKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7
Cit9OworCisjZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAgCi0jaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gKLSNkZWZpbmUgTGF5
b3V0VGVzdENvbnRyb2xsZXJfaAorI2lmbmRlZiBUZXN0UnVubmVyX2gKKyNkZWZpbmUgVGVzdFJ1
bm5lcl9oCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CkBAIC0zOCwxMCArMzgsMTAgQEAKICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
LWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5b3V0VGVz
dENvbnRyb2xsZXI+IHsKK2NsYXNzIFRlc3RSdW5uZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXN0
UnVubmVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5b3V0VGVzdENvbnRy
b2xsZXI+IGNyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVSTCwgY29uc3Qgc3Rk
OjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKTsKLSAgICB+TGF5b3V0VGVzdENvbnRyb2xsZXIo
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXN0UnVubmVyPiBjcmVhdGUoY29uc3Qgc3RkOjpz
dHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFz
aCk7CisgICAgflRlc3RSdW5uZXIoKTsKIAogICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOwogCkBAIC0zNjYsNyArMzY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3Rv
cmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSk7CiAKIHByaXZhdGU6Ci0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0
ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgVGVzdFJ1bm5lcihjb25zdCBzdGQ6
OnN0cmluZyYgdGVzdFBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxI
YXNoKTsKIAogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxs
b3cpOwogCkBAIC00NDEsNCArNDQxLDQgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSlNTdGF0aWNG
dW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CiB9OwogCi0jZW5kaWYgLy8gTGF5b3V0VGVzdENv
bnRyb2xsZXJfaAorI2VuZGlmIC8vIFRlc3RSdW5uZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0
CShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgaW5jbHVkZV9wYXRocyA9IFsKICAgICAgICAg
ICAgICAgICBdCiBzb3VyY2VzID0gWwogICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlQ29tbW9u
LmNwcCcsCi0gICAgICAgICAgICAnTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwJywKKyAgICAgICAg
ICAgICdUZXN0UnVubmVyLmNwcCcsCiAgICAgICAgICAgICAnV29ya1F1ZXVlLmNwcCcsCiAgICAg
ICAgICAgICAnd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAnLAotICAgICAgICAgICAgJ3d4L0xheW91
dFRlc3RDb250cm9sbGVyV3guY3BwJywKKyAgICAgICAgICAgICd3eC9UZXN0UnVubmVyV3guY3Bw
JywKICAgICAgICAgICAgICd3eC9Xb3JrUXVldWVJdGVtV3guY3BwJwogICAgICAgICAgIF0KIApJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsOCArMTA1LDggQEAKIAkJQUU4MjU5RjMwOEQyMjQ2MzAw
MDUwN0FCIC8qIENhcmJvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBRTgyNTdFRjA4RDIyMzg5MDAwNTA3QUIgLyogQ2FyYm9uLmZy
YW1ld29yayAqLzsgfTsKIAkJQUU4MjU5RjQwOEQyMjQ2MzAwMDUwN0FCIC8qIENhcmJvbi5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RTgyNTdFRjA4RDIyMzg5MDAwNTA3QUIgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsKIAkJQjVB
NzUyQTIwOEFGNUQxRjAwMTM4RTQ1IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNzUyQTEwOEFGNUQxRjAw
MTM4RTQ1IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwotCQlCQzAxMzFEQTBDOTc3MjAx
MDA4NzMxN0QgLyogTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMTMxRDgwQzk3NzIwMTAwODczMTdEIC8qIExh
eW91dFRlc3RDb250cm9sbGVyLmNwcCAqLzsgfTsKLQkJQkMwMTMxREIwQzk3NzIwMTAwODczMTdE
IC8qIExheW91dFRlc3RDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzAxMzFEOTBDOTc3MjAxMDA4NzMxN0QgLyogTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCAqLzsgfTsKKwkJQkMwMTMxREEwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RSdW5u
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MTMxRDgwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RSdW5uZXIuY3BwICovOyB9OworCQlCQzAxMzFE
QjBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMTMxRDkwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RS
dW5uZXIuaCAqLzsgfTsKIAkJQkMwRTI0RTAwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMEUyNERFMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmgg
Ki87IH07CiAJCUJDMEUyNEUxMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MEUyNERGMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCAqLzsg
fTsKIAkJQkMwRTI2MTUwRTJEQTRDNjAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzBF
MjYxNDBFMkRBNEM2MDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSAqLzsg
fTsKQEAgLTExNiw3ICsxMTYsNyBAQAogCQlCQzlEOTAyNTBDOTc0NzJFMDA5OUE0QTMgLyogV29y
a1F1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzlEOTAyMjBDOTc0NzJFMDA5OUE0QTMgLyogV29ya1F1ZXVlLmggKi87IH07CiAJCUJDOUQ5MDI2
MEM5NzQ3MkUwMDk5QTRBMyAvKiBXb3JrUXVldWVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlEOTAyMzBDOTc0NzJFMDA5OUE0QTMgLyogV29y
a1F1ZXVlSXRlbS5oICovOyB9OwogCQlCQ0ExOEIyMzBDOUIwMTRCMDAxMTQzNjkgLyogR0NDb250
cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNBMThCMjEwQzlCMDE0QjAwMTE0MzY5IC8qIEdDQ29udHJvbGxlck1hYy5tbSAqLzsgfTsK
LQkJQkNBMThCMjQwQzlCMDE0QjAwMTE0MzY5IC8qIExheW91dFRlc3RDb250cm9sbGVyTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMThCMjIw
QzlCMDE0QjAwMTE0MzY5IC8qIExheW91dFRlc3RDb250cm9sbGVyTWFjLm1tICovOyB9OworCQlC
Q0ExOEIyNDBDOUIwMTRCMDAxMTQzNjkgLyogVGVzdFJ1bm5lck1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE4QjIyMEM5QjAxNEIwMDExNDM2
OSAvKiBUZXN0UnVubmVyTWFjLm1tICovOyB9OwogCQlCQ0ExOEIyNjBDOUIwMTVDMDAxMTQzNjkg
LyogV29ya1F1ZXVlSXRlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQTE4QjI1MEM5QjAxNUMwMDExNDM2OSAvKiBXb3JrUXVldWVJdGVtTWFj
Lm1tICovOyB9OwogCQlCQ0ExOEIzMTBDOUIwMUI0MDAxMTQzNjkgLyogT2JqQ0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE4QjJG
MEM5QjAxQjQwMDExNDM2OSAvKiBPYmpDQ29udHJvbGxlci5oICovOyB9OwogCQlCQ0ExOEIzMjBD
OUIwMUI0MDAxMTQzNjkgLyogT2JqQ0NvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE4QjMwMEM5QjAxQjQwMDExNDM2OSAvKiBPYmpD
Q29udHJvbGxlci5tICovOyB9OwpAQCAtMzA4LDggKzMwOCw4IEBACiAJCUFFODI1N0VGMDhEMjIz
ODkwMDA1MDdBQiAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDYXJib24u
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQjVBNzUyNjcwOEFGNEE0QTAw
MTM4RTQ1IC8qIEltYWdlRGlmZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gSW1hZ2VEaWZmOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQlCNUE3NTJBMTA4QUY1RDFGMDAxMzhFNDUgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IFF1YXJ0ekNvcmUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29s
dXRlPiI7IH07Ci0JCUJDMDEzMUQ4MEM5NzcyMDEwMDg3MzE3RCAvKiBMYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzAxMzFEOTBD
OTc3MjAxMDA4NzMxN0QgLyogTGF5b3V0VGVzdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFRlc3RDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDMDEzMUQ4MEM5NzcyMDEwMDg3MzE3RCAvKiBUZXN0UnVubmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMwMTMxRDkwQzk3NzIwMTAwODczMTdEIC8q
IFRlc3RSdW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RSdW5u
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwRTI0REUwRTJEOTQ1MTAwMUI2
QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzBFMjRERjBFMkQ5NDUxMDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwRTI2MTQwRTJE
QTRDNjAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
OyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJQkM5RDkwMjIwQzk3NDcyRTAwOTlB
NEEzIC8qIFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29y
a1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUQ5MDIzMEM5NzQ3MkUw
MDk5QTRBMyAvKiBXb3JrUXVldWVJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXb3JrUXVldWVJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE4
QjIxMEM5QjAxNEIwMDExNDM2OSAvKiBHQ0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gR0NDb250cm9sbGVyTWFjLm1tOyBwYXRoID0gbWFj
L0dDQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNBMThC
MjIwQzlCMDE0QjAwMTE0MzY5IC8qIExheW91dFRlc3RDb250cm9sbGVyTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW07IHBhdGggPSBtYWMvTGF5
b3V0VGVzdENvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
QTE4QjIyMEM5QjAxNEIwMDExNDM2OSAvKiBUZXN0UnVubmVyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gVGVzdFJ1bm5lck1hYy5tbTsgcGF0aCA9IG1hYy9UZXN0UnVubmVyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ExOEIyNTBDOUIwMTVDMDAxMTQzNjkgLyog
V29ya1F1ZXVlSXRlbU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXb3JrUXVldWVJdGVtTWFjLm1tOyBwYXRoID0gbWFjL1dvcmtRdWV1ZUl0ZW1NYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE4QjJGMEM5QjAxQjQwMDExNDM2OSAv
KiBPYmpDQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT2Jq
Q0NvbnRyb2xsZXIuaDsgcGF0aCA9IG1hYy9PYmpDQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0ExOEIzMDBDOUIwMUI0MDAxMTQzNjkgLyogT2JqQ0NvbnRyb2xs
ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IE9iakNDb250cm9sbGVy
Lm07IHBhdGggPSBtYWMvT2JqQ0NvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ5OCw5ICs0OTgsOSBAQAogCQkJCUJDRjZDNjRGMEM5OEU5QzAwMEFDMDYzRSAvKiBH
Q0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTE0NzcwRkUwMEEyMkFERjcwMDkzNDJFRSAvKiBHQ0Nv
bnRyb2xsZXIuaCAqLywKIAkJCQlCQ0ExOEIyMTBDOUIwMTRCMDAxMTQzNjkgLyogR0NDb250cm9s
bGVyTWFjLm1tICovLAotCQkJCUJDMDEzMUQ4MEM5NzcyMDEwMDg3MzE3RCAvKiBMYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAgKi8sCi0JCQkJQkMwMTMxRDkwQzk3NzIwMTAwODczMTdEIC8qIExheW91
dFRlc3RDb250cm9sbGVyLmggKi8sCi0JCQkJQkNBMThCMjIwQzlCMDE0QjAwMTE0MzY5IC8qIExh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tICovLAorCQkJCUJDMDEzMUQ4MEM5NzcyMDEwMDg3MzE3
RCAvKiBUZXN0UnVubmVyLmNwcCAqLywKKwkJCQlCQzAxMzFEOTBDOTc3MjAxMDA4NzMxN0QgLyog
VGVzdFJ1bm5lci5oICovLAorCQkJCUJDQTE4QjIyMEM5QjAxNEIwMDExNDM2OSAvKiBUZXN0UnVu
bmVyTWFjLm1tICovLAogCQkJCUUxQjc4MDg1MTFBRjE2NDMwMDdFMUJDMiAvKiBNb2NrR2VvbG9j
YXRpb25Qcm92aWRlci5oICovLAogCQkJCUUxQjc4MDg3MTFBRjE2NjkwMDdFMUJDMiAvKiBNb2Nr
R2VvbG9jYXRpb25Qcm92aWRlci5tbSAqLywKIAkJCQlCQ0ExOEI2RDBDOUIwOERCMDAxMTQzNjkg
LyogTmF2aWdhdGlvbkNvbnRyb2xsZXIuaCAqLywKQEAgLTcxMyw3ICs3MTMsNyBAQAogCQkJCUJD
QTE4QjYzMEM5QjA4QzIwMDExNDM2OSAvKiBGcmFtZUxvYWREZWxlZ2F0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ3NzBGRTIwQTIyQURGNzAwOTM0MkVFIC8qIEdDQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM0NzQxMkEwRDAzOEE0QzAwNzJCMDA2IC8qIEphdmFTY3JpcHRUaHJl
YWRpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMDEzMURCMEM5NzcyMDEwMDg3MzE3RCAvKiBM
YXlvdXRUZXN0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMwMTMxREIwQzk3NzIw
MTAwODczMTdEIC8qIFRlc3RSdW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTE4QjcxMEM5
QjA4REIwMDExNDM2OSAvKiBOYXZpZ2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNBMThCMzEwQzlCMDFCNDAwMTE0MzY5IC8qIE9iakNDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0ExOEI3RDBDOUIwOEYxMDAxMTQzNjkgLyogT2JqQ1BsdWdpbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MzksOCArOTM5LDggQEAKIAkJCQlCQ0Y2QzY1MDBDOThFOUMwMDBBQzA2
M0UgLyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjIzMEM5QjAx
NEIwMDExNDM2OSAvKiBHQ0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQ3
NDE0MTBEMDM4QTU3MDA3MkIwMDYgLyogSmF2YVNjcmlwdFRocmVhZGluZ1B0aHJlYWRzLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUJDMDEzMURBMEM5NzcyMDEwMDg3MzE3RCAvKiBMYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0ExOEIyNDBDOUIwMTRCMDAxMTQz
NjkgLyogTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlCQzAx
MzFEQTBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCQ0ExOEIyNDBDOUIwMTRCMDAxMTQzNjkgLyogVGVzdFJ1bm5lck1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDQTE4QjcyMEM5QjA4REIwMDExNDM2OSAvKiBOYXZpZ2F0aW9uQ29udHJvbGxl
ci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCMzIwQzlCMDFCNDAwMTE0MzY5IC8qIE9iakND
b250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEI3RTBDOUIwOEYxMDAxMTQzNjkg
LyogT2JqQ1BsdWdpbi5tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTI1MzM1
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJlZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC01Myw2ICs1
Miw3IEBACiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgi
CiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
ICJWZWN0b3IuaCIKQEAgLTcyLDcgKzcyLDcgQEAKIAogdm9sYXRpbGUgYm9vbCB0ZXN0RG9uZTsK
IAotUmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7CitS
ZWZQdHI8VGVzdFJ1bm5lcj4gZ1Rlc3RSdW5uZXI7CiAKIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJh
bWUgPSAwOwogV2ViQ29yZTo6RnJhbWUqIHRvcExvYWRpbmdGcmFtZSA9IDA7CkBAIC0xODEsNyAr
MTgxLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cnVuVGVzdChjb25zdCBTdHJpbgogICAgIG1h
aW5GcmFtZS0+bG9hZGVyKCktPnN0b3BGb3JVc2VyQ2FuY2VsKCk7CiAgICAgcmVzZXRUb0NvbnNp
c3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoKTsKICAgICBpZiAoc2hvdWxkTG9nRnJhbWVMb2FkRGVs
ZWdhdGVzKHVybCkpCi0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RHVtcEZyYW1l
TG9hZENhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBGcmFtZUxv
YWRDYWxsYmFja3ModHJ1ZSk7CiAgICAgU3RyaW5nIHN0ZG91dEZpbGUgPSBtX3Jlc3VsdHNEaXIg
KyAqbV9jdXJyZW50VGVzdCArICIuZHVtcCI7CiAgICAgU3RyaW5nIHN0ZGVyckZpbGUgPSBtX3Jl
c3VsdHNEaXIgKyAqbV9jdXJyZW50VGVzdCArICIuc3RkZXJyIjsKIApAQCAtMjQxLDExICsyNDEs
MTEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cnVuUmVtYWluaW5nVGVzdHMoKQogdm9pZCBEdW1w
UmVuZGVyVHJlZTo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoKQogewogICAg
IGlmIChpc0hUVFBUZXN0KG1fY3VycmVudFRlc3QtPnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICBn
TGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKFN0cmlu
ZyhodHRwUHJlZml4VVJMICsgKm1fY3VycmVudFRlc3QpLnV0ZjgoKS5kYXRhKCksICIiKTsKKyAg
ICAgICAgZ1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUoU3RyaW5nKGh0dHBQcmVmaXhV
UkwgKyAqbV9jdXJyZW50VGVzdCkudXRmOCgpLmRhdGEoKSwgIiIpOwogICAgIGVsc2UKLSAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShT
dHJpbmcoa1NEQ0xheW91dFRlc3RzVVJJICsgKm1fY3VycmVudFRlc3QpLnV0ZjgoKS5kYXRhKCks
ICIiKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUoU3RyaW5nKGtT
RENMYXlvdXRUZXN0c1VSSSArICptX2N1cnJlbnRUZXN0KS51dGY4KCkuZGF0YSgpLCAiIik7CiAK
LSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoZmFsc2Up
OworICAgIGdUZXN0UnVubmVyLT5zZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKIAogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6cmVzZXRHZW9sb2NhdGlvbk1vY2sobV9wYWdlKTsKIApA
QCAtMzYxLDcgKzM2MSw3IEBAIFN0cmluZyBEdW1wUmVuZGVyVHJlZTo6ZHVtcEZyYW1lc0FzVGV4
dCgKIAogICAgIHMgKz0gZG9jdW1lbnRFbGVtZW50LT5pbm5lclRleHQoKSArICJcbiI7CiAKLSAg
ICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgewor
ICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkpIHsKICAgICAgICAg
V2ViQ29yZTo6RnJhbWVUcmVlKiB0cmVlID0gZnJhbWUtPnRyZWUoKTsKICAgICAgICAgZm9yIChX
ZWJDb3JlOjpGcmFtZSogY2hpbGQgPSB0cmVlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICBzICs9IGR1bXBGcmFt
ZXNBc1RleHQoY2hpbGQpOwpAQCAtNDg4LDE3ICs0ODgsMTcgQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6ZHVtcCgpCiAgICAgU3RyaW5nIHJlc3VsdE1pbWVUeXBlID0gInRleHQvcGxhaW4iOwogICAg
IFN0cmluZyByZXNwb25zZU1pbWVUeXBlID0gbWFpbkZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpOwogCi0gICAgYm9vbCBkdW1wQXNUZXh0ID0gZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNUZXh0KCkgfHwgcmVzcG9uc2VNaW1lVHlwZSA9PSAi
dGV4dC9wbGFpbiI7CisgICAgYm9vbCBkdW1wQXNUZXh0ID0gZ1Rlc3RSdW5uZXItPmR1bXBBc1Rl
eHQoKSB8fCByZXNwb25zZU1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIjsKICAgICBTdHJpbmcgZGF0
YSA9IGR1bXBBc1RleHQgPyBkdW1wRnJhbWVzQXNUZXh0KG1haW5GcmFtZSkgOiByZW5kZXJUcmVl
RHVtcCgpOwogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEJhY2tGb3J3YXJk
TGlzdCgpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEJhY2tGb3J3YXJkTGlzdCgpKQogICAg
ICAgICBkYXRhICs9IGR1bXBCYWNrRm9yd2FyZExpc3RGb3JXZWJWaWV3KCk7CiAKICAgICBTdHJp
bmcgcmVzdWx0ID0gIkNvbnRlbnQtVHlwZTogIiArIHJlc3VsdE1pbWVUeXBlICsgIlxuIiArIGRh
dGE7CiAKICAgICBkdW1wVG9GaWxlKHJlc3VsdCk7Ci0gICAgaWYgKG1fZHVtcFBpeGVscyAmJiAh
ZHVtcEFzVGV4dCAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRz
KCkpCi0gICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CisgICAgaWYgKG1fZHVt
cFBpeGVscyAmJiAhZHVtcEFzVGV4dCAmJiBnVGVzdFJ1bm5lci0+Z2VuZXJhdGVQaXhlbFJlc3Vs
dHMoKSkKKyAgICAgICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQo
Z1Rlc3RSdW5uZXItPmV4cGVjdGVkUGl4ZWxIYXNoKCkpOwogCiAgICAgU3RyaW5nIGNyYXNoRmls
ZSA9IGR1bXBGaWxlICsgIi5jcmFzaCI7CiAgICAgdW5saW5rKGNyYXNoRmlsZS51dGY4KCkuZGF0
YSgpKTsKQEAgLTUxOCw3ICs1MTgsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpzZXRXYWl0VG9E
dW1wV2F0Y2hkCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8RHVtcFJlbmRlclRyZWU+KikKIHsKLSAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICBnVGVzdFJ1
bm5lci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwogfQogCiB2b2lkIER1bXBSZW5k
ZXJUcmVlOjpwcm9jZXNzV29yayhXZWJDb3JlOjpUaW1lcjxEdW1wUmVuZGVyVHJlZT4qKQpAQCAt
NTI2LDcgKzUyNiw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnByb2Nlc3NXb3JrKFdlYkNvcmUK
ICAgICBpZiAodG9wTG9hZGluZ0ZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoV29y
a1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVy
LT53YWl0VG9EdW1wKCkpCisgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nlc3NXb3Jr
KCkgJiYgIWdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIGR1bXAoKTsKIH0KIApA
QCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmxvY2F0aW9uQ2hhbmdlRm9y
RnIKIAogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+
c2V0RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVl
Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChn
VGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoV29y
a1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKQEAgLTU0OSwxNiArNTQ5LDE2IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWU6OmxvY2F0aW9uQ2hhbmdlRm9yRnIKIC8vIEZyYW1lTG9hZENsaWVudCBkZWxl
Z2F0ZXMuCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghdGVz
dERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAg
cHJpbnRmKCIlcyAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVcbiIsIGRydEZyYW1l
RGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgaWYgKCF0ZXN0RG9uZSAm
JiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJh
Y2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJGcmFtZSB3aXRoIHVzZXIg
Z2VzdHVyZSBcIiVzXCIgLSBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lXG4iLCBX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSA/ICJ0cnVl
IiA6ICJmYWxzZSIpOwogCiAgICAgaWYgKCF0b3BMb2FkaW5nRnJhbWUgJiYgIXRlc3REb25lKQog
ICAgICAgICB0b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKIAotICAgIGlmICghdGVzdERvbmUgJiYg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsKKyAg
ICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRz
KCkpIHsKICAgICAgICAgcHJpbnRmKCIlcyAtIHN0b3BwaW5nIGxvYWQgaW4gZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFja1xuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFt
ZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3RvcEZvclVzZXJD
YW5jZWwoKTsKICAgICB9CkBAIC01NjYsMTUgKzU2NiwxNSBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
OjpkaWRTdGFydFByb3Zpc2lvbmFsCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZENvbW1pdExv
YWRGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAm
JiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBp
ZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVcbiIsIGRydEZyYW1lRGVz
Y3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zZXRXaW5kb3dJc0tleSh0cnVlKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0V2luZG93SXNL
ZXkodHJ1ZSk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZEZhaWxQcm92aXNpb25hbExv
YWRGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAm
JiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBp
ZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yXG4iLCBk
cnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGxvY2F0aW9u
Q2hhbmdlRm9yRnJhbWUoZnJhbWUpOwpAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWU6OmRpZEZhaWxQcm92aXNpb25hbEwKIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkRmFp
bExvYWRGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCF0ZXN0RG9u
ZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAg
ICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkp
CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZFdpdGhFcnJvclxuIiwgZHJ0RnJhbWVE
ZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBsb2NhdGlvbkNoYW5nZUZv
ckZyYW1lKGZyYW1lKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpk
aWRGYWlsTG9hZEZvckZyYW1lCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZEZpbmlzaExvYWRG
b3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAo
IXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWVcbiIsIGRydEZyYW1lRGVzY3Jp
cHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKGZyYW1lID09IHRvcExvYWRp
bmdGcmFtZSkKQEAgLTYwMSw3ICs2MDEsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRGaW5p
c2hMb2FkRm9yRnJhCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCF0ZXN0RG9uZSkgewot
ICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCisgICAgICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQog
ICAgICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lXG4i
LCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBmcmFt
ZS0+ZG9tV2luZG93KCktPnBlbmRpbmdVbmxvYWRFdmVudExpc3RlbmVycygpOwpAQCAtNjE1LDcg
KzYxNSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZENsZWFyV2luZG93T2JqZWMKIHsKICAg
ICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
Pm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAg
ICBnVGVzdFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZl
eGNlcHRpb24pOwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKIAogICAgIG1fZ2NDb250cm9sbGVy
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7CkBA
IC02MzMsMTAgKzYzMywxMCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpkaWRDbGVhcldpbmRvd09i
amVjCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKGNvbnN0
IFN0cmluZyYgdGl0bGUsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIXRlc3RE
b25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQor
ICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVUaXRsZTogJXNcbiIsIGRydEZyYW1l
RGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCksIHRpdGxlLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hhbmdlcygpKQorICAg
IGlmIChnVGVzdFJ1bm5lci0+ZHVtcFRpdGxlQ2hhbmdlcygpKQogICAgICAgICBwcmludGYoIlRJ
VExFIENIQU5HRUQ6ICVzXG4iLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAtNjc1LDEz
ICs2NzUsMTMgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZTo6cnVuQmVmb3JlVW5sb2FkQ29uZgogCiB2
b2lkIER1bXBSZW5kZXJUcmVlOjpzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzKQog
ewotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkK
KyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcHJp
bnRmKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6JXNcbiIsIHN0
YXR1cy51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZXhjZWVkZWRE
YXRhYmFzZVF1b3RhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUg
REFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2lu
OnslcywgJXMsICVpfSBkYXRhYmFzZTolc1xuIiwgb3JpZ2luLT5wcm90b2NvbCgpLnV0ZjgoKS5k
YXRhKCksIG9yaWdpbi0+aG9zdCgpLnV0ZjgoKS5kYXRhKCksIG9yaWdpbi0+cG9ydCgpLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuc2V0UXVvdGEobWFpbkZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCA1ICog
MTAyNCAqIDEwMjQpOwpAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmV4
Y2VlZGVkRGF0YWJhc2VRdW8KIAogYm9vbCBEdW1wUmVuZGVyVHJlZTo6YWxsb3dzT3BlbmluZ1dp
bmRvdygpCiB7Ci0gICAgcmV0dXJuIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Y2FuT3BlbldpbmRv
d3MoKTsKKyAgICByZXR1cm4gZ1Rlc3RSdW5uZXItPmNhbk9wZW5XaW5kb3dzKCk7CiB9CiAKIHZv
aWQgRHVtcFJlbmRlclRyZWU6OndpbmRvd0NyZWF0ZWQoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlKiBwYWdlKQpAQCAtNzAwLDI1ICs3MDAsMjUgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6d2lu
ZG93Q3JlYXRlZChCbGFjawogLy8gRWRpdG9yQ2xpZW50IGRlbGVnYXRlcy4KIHZvaWQgRHVtcFJl
bmRlclRyZWU6OmRpZEJlZ2luRWRpdGluZygpCiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0
RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJp
bnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiVzXG4iLCAiV2Vi
Vmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbiIpOwogfQogCiB2b2lkIER1bXBSZW5kZXJU
cmVlOjpkaWRFbmRFZGl0aW5nKCkKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3REb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiVzXG4iLCAiV2ViVmlld0RpZEVu
ZEVkaXRpbmdOb3RpZmljYXRpb24iKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkQ2hh
bmdlKCkKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6JXNcbiIsICJXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uIik7
CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZENoYW5nZVNlbGVjdGlvbigpCiB7Ci0gICAg
aWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOiVzXG4iLCAiV2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
biIpOwogfQogCkBAIC03MzAsMjggKzczMCwyOCBAQCBib29sIER1bXBSZW5kZXJUcmVlOjpmaW5k
U3RyaW5nKGNvbnN0IFN0CiAKIGJvb2wgRHVtcFJlbmRlclRyZWU6OnNob3VsZEJlZ2luRWRpdGlu
Z0luRE9NUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghdGVzdERvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlm
ICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5n
ZTolc1xuIiwgZHJ0UmFuZ2VEZXNjcmlwdGlvbihyYW5nZSkudXRmOCgpLmRhdGEoKSk7CiAgICAg
cmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7CiB9CiAKIGJvb2wgRHVtcFJlbmRlclRyZWU6OnNob3Vs
ZEVuZEVkaXRpbmdJbkRPTVJhbmdlKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAo
IXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJ
bkRPTVJhbmdlOiVzXG4iLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKS51dGY4KCkuZGF0YSgp
KTsKICAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKIH0KIAogYm9vbCBEdW1wUmVuZGVyVHJl
ZTo6c2hvdWxkRGVsZXRlRE9NUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGlm
ICghdGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9N
UmFuZ2U6JXNcbiIsIGRydFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIHJldHVybiBtX2FjY2VwdHNFZGl0aW5nOwogfQogCiBib29sIER1bXBSZW5kZXJUcmVlOjpz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlVG9ET01SYW5nZUFmZmluaXR5U3RpbGxTZWxlY3Rp
bmcoV2ViQ29yZTo6UmFuZ2UqIGZyb21SYW5nZSwgV2ViQ29yZTo6UmFuZ2UqIHRvUmFuZ2UsIGlu
dCBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBpZiAoIXRlc3REb25lICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAo
IXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAg
ICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6
JXMgdG9ET01SYW5nZTolcyBhZmZpbml0eTolcyBzdGlsbFNlbGVjdGluZzolc1xuIiwgZHJ0UmFu
Z2VEZXNjcmlwdGlvbihmcm9tUmFuZ2UpLnV0ZjgoKS5kYXRhKCksIGRydFJhbmdlRGVzY3JpcHRp
b24odG9SYW5nZSkudXRmOCgpLmRhdGEoKSwgZHJ0QWZmaW5pdHlEZXNjcmlwdGlvbihzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpFQWZmaW5pdHk+KGFmZmluaXR5KSkudXRmOCgpLmRhdGEoKSwgc3RpbGxT
ZWxlY3RpbmcgPyAiVFJVRSIgOiAiRkFMU0UiKTsKICAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGlu
ZzsKIH0KQEAgLTc3MiwxNCArNzcyLDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBpbnNlcnRBY3Rp
b25TdHJpbmcoV2UKIAogYm9vbCBEdW1wUmVuZGVyVHJlZTo6c2hvdWxkSW5zZXJ0Tm9kZShXZWJD
b3JlOjpOb2RlKiBub2RlLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2UsIGludCBhY3Rpb24pCiB7Ci0g
ICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNl
cnROb2RlOiVzIHJlcGxhY2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLCBkcnREdW1w
UGF0aChub2RlKS51dGY4KCkuZGF0YSgpLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKS51dGY4
KCkuZGF0YSgpLCBpbnNlcnRBY3Rpb25TdHJpbmcoKFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlv
bilhY3Rpb24pKTsKICAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKIH0KIAogYm9vbCBEdW1w
UmVuZGVyVHJlZTo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFdlYkNvcmU6
OlJhbmdlKiByYW5nZSwgaW50IGFjdGlvbikKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3RE
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmlu
dGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6JXMgcmVwbGFjaW5nRE9NUmFu
Z2U6JXMgZ2l2ZW5BY3Rpb246JXNcbiIsIHRleHQudXRmOCgpLmRhdGEoKSwgZHJ0UmFuZ2VEZXNj
cmlwdGlvbihyYW5nZSkudXRmOCgpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3RyaW5nKChXZWJDb3Jl
OjpFZGl0b3JJbnNlcnRBY3Rpb24pYWN0aW9uKSk7CiAgICAgcmV0dXJuIG1fYWNjZXB0c0VkaXRp
bmc7CiB9CkBAIC04MTYsMzYgKzgxNiwzNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpkaWREZWNp
ZGVQb2xpY3lGb3JOCiAgICAgcHJpbnRmKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9h
ZCAlcyB3aXRoIG5hdmlnYXRpb24gdHlwZSAnJXMnXG4iLCByZXF1ZXN0LnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIHR5cGVEZXNjcmlwdGlvbik7CiAgICAgLy8gRklYTUU6IGRvIG9yaWdp
bmF0aW5nIHBhcnQuCiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPm5vdGlmeURvbmUoKTsK
KyAgICBnVGVzdFJ1bm5lci0+bm90aWZ5RG9uZSgpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVl
OjpkaWREaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoKQogewotICAgIGlmICghdGVz
dERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9h
ZENhbGxiYWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBVc2Vy
R2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRnJhbWUgd2l0
aCB1c2VyIGdlc3R1cmUgXCIlc1wiIC0gaW4gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFxuIiwg
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgPyAidHJ1
ZSIgOiAiZmFsc2UiKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkSGFuZGxlT25sb2Fk
RXZlbnRzRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewotICAgIGlmICghdGVzdERv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisg
ICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
KQogICAgICAgICBwcmludGYoIiVzIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWVcbiIs
IGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIER1
bXBSZW5kZXJUcmVlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSog
ZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAg
IGlmICghdGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VSZXNw
b25zZU1JTUVUeXBlcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBS
ZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCiAgICAgICAgIHByaW50ZigiJXMgaGFzIE1JTUUg
dHlwZSAlc1xuIiwgcmVzcG9uc2UudXJsKCkubGFzdFBhdGhDb21wb25lbnQoKS51dGY4KCkuZGF0
YSgpLCByZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBib29sIER1bXBS
ZW5kZXJUcmVlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+
aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcygpKSB7CisgICAgaWYgKCFnVGVzdFJ1bm5l
ci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcygpKSB7CiAgICAgICAgIGNyZWRlbnRp
YWwgPSBXZWJDb3JlOjpDcmVkZW50aWFsKCk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSBTaW11bGF0aW5nIGNhbmNlbGxlZCBhdXRoZW50
aWNhdGlvblxuIiwgZHJ0Q3JlZGVudGlhbERlc2NyaXB0aW9uKGNyZWRlbnRpYWwpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIHVz
ZXIgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoKS5jX3N0
cigpOwotICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5h
dXRoZW50aWNhdGlvblBhc3N3b3JkKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFyKiB1c2VyID0g
Z1Rlc3RSdW5uZXItPmF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoKS5jX3N0cigpOworICAgIGNvbnN0
IGNoYXIqIHBhc3N3b3JkID0gZ1Rlc3RSdW5uZXItPmF1dGhlbnRpY2F0aW9uUGFzc3dvcmQoKS5j
X3N0cigpOwogICAgIGNyZWRlbnRpYWwgPSBXZWJDb3JlOjpDcmVkZW50aWFsKHVzZXIsIHBhc3N3
b3JkLCBXZWJDb3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKTsKICAgICBwcmlu
dGYoIiVzIC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gUmVzcG9uZGluZyB3
aXRoICVzOiVzXG4iLCBkcnRDcmVkZW50aWFsRGVzY3JpcHRpb24oY3JlZGVudGlhbCkudXRmOCgp
LmRhdGEoKSwgdXNlciwgcGFzc3dvcmQpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0
VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgot
I2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgotI2lu
Y2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVCbGFja0Jl
cnJ5LmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0LmgiCi0jaW5jbHVkZSAiRWRp
dGluZ0JlaGF2aW9yVHlwZXMuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRCbGFja0JlcnJ5Lmgi
Ci0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRWxlbWVudC5oIgotI2luY2x1ZGUgIktVUkwu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk93bkFycmF5UHRyLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNs
dWRlICJTY2hlbWVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5j
bHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUg
IlVudXNlZFBhcmFtLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSAiV29ya1F1
ZXVlSXRlbS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQVBJQ2FzdC5oPgotI2luY2x1ZGUgPFNoYXJlZFBvaW50ZXIuaD4KLSNpbmNsdWRl
IDxXZWJQYWdlLmg+Ci0jaW5jbHVkZSA8V2ViU2V0dGluZ3MuaD4KLQotdXNpbmcgV2ViQ29yZTo6
dG9FbGVtZW50OwotdXNpbmcgV2ViQ29yZTo6dG9KUzsKLQotTGF5b3V0VGVzdENvbnRyb2xsZXI6
On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKQotewotICAgIFVOVVNFRF9QQVJB
TSh1cmwpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAg
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsRGF0YWJhc2VzKCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2Fy
ZExpc3QoKQotewotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJl
bnRJbnN0YW5jZSgpLT5wYWdlKCktPmNsZWFyQmFja0ZvcndhcmRMaXN0KHRydWUpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBV
TlVTRURfUEFSQU0obmFtZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5h
bWUoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgU3RyaW5nIGpzU3RyaW5nUmVmVG9XZWJDb3Jl
U3RyaW5nKEpTU3RyaW5nUmVmIHN0cikKLXsKLSAgICBzaXplX3Qgc3RyQXJyU2l6ZSA9IEpTU3Ry
aW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHIpOwotICAgIE93bkFycmF5UHRyPGNoYXI+
IHN0ckFyciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbc3RyQXJyU2l6ZV0pOwotICAgIEpTU3Ry
aW5nR2V0VVRGOENTdHJpbmcoc3RyLCBzdHJBcnIuZ2V0KCksIHN0ckFyclNpemUpOwotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KHN0ckFyci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZh
bHVlKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJp
bmcgbmFtZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKG5hbWUpOwotICAgIFN0cmlu
ZyB2YWx1ZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKLQotICAgIG1h
aW5GcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZVN0cikuZXhlY3V0ZSh2YWx1ZVN0cik7Ci19
Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdS
ZWYgbmFtZSkKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgU3RyaW5nIG5hbWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhuYW1lKTsK
LQotICAgIHJldHVybiBtYWluRnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWVTdHIpLmlzRW5h
YmxlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAoIXRvcExvYWRpbmdG
cmFtZSB8fCBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFu
Y2UoKS0+bG9hZEZpbmlzaGVkKCkpICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQot
ICAgICAgICBkdW1wKCk7Ci0KLSAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKLSAgICB3YWl0Rm9y
UG9saWN5ID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpw
YXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYgdXJsKQotewotICAg
IHJldHVybiBKU1N0cmluZ1JldGFpbih1cmwpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0g
ICAgc2l6ZV90IHVybEFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
dXJsKTsKLSAgICBPd25BcnJheVB0cjxjaGFyPiB1cmxBcnIgPSBhZG9wdEFycmF5UHRyKG5ldyBj
aGFyW3VybEFyclNpemVdKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHVybCwgdXJsQXJy
LmdldCgpLCB1cmxBcnJTaXplKTsKLQotICAgIFdlYkNvcmU6OktVUkwgYmFzZSA9IG1haW5GcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgV2Vi
Q29yZTo6S1VSTCBhYnNvbHV0ZShiYXNlLCB1cmxBcnIuZ2V0KCkpOwotCi0gICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGFic29sdXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhhYnNvbHV0ZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV29ya1F1ZXVl
OjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQp
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9v
bCBhY2NlcHRzRWRpdGluZykKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJU
cmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0QWNjZXB0c0VkaXRpbmcoYWNjZXB0c0VkaXRpbmcp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXpl
KHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocXVvdGEpOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIG1haW5GcmFt
ZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChlbmFi
bGUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3Np
dmUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNldERlbGVnYXRlKTsKLSAgICBVTlVTRURfUEFSQU0o
cGVybWlzc2l2ZSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9wYXF1ZUpTU3RyaW5n
KikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFw
cGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdl
Rm9yT3JpZ2luKEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3Vw
cG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RD
b250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRh
aW4gYXBwbGljYXRpb24gY2FjaGVzLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAg
ICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEobWFpbkZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLCBxdW90YSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpT
U3RyaW5nUmVmIHNjaGVtZSkKLXsKLSAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2V0RG9t
YWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIGpzU3RyaW5nUmVm
VG9XZWJDb3JlU3RyaW5nKHNjaGVtZSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKLXsKLSAg
ICBVTlVTRURfUEFSQU0oaWNvbkRhdGFiYXNlRW5hYmxlZCk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJl
c3BvbmRlcihib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3Rl
bnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHBhdGgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBC
bGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCFm
bGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0
b3JFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5k
ZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRYU1NBdWRp
dG9yRW5hYmxlZChmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgQmxhY2tCZXJy
eTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnNldFNlbGVjdFRy
YWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoZmxhZyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGN5Y2xl
cykKLXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFpbkZy
YW1lLT5wYWdlKCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhjeWNsZXMpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5
TW9kZShib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNo
ZWV0RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZsYWcpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKLXsKLSAgICBTdHJpbmcgcGF0aFN0
ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHBhdGgpOwotICAgIEJsYWNrQmVycnk6Oldl
YktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldHRpbmdz
KCktPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocGF0aFN0ci51dGY4KCkuZGF0YSgpKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKLXsK
LSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotICAgIHdhaXRGb3JQb2xpY3kgPSB0cnVlOwotfQot
Ci1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewot
ICAgIFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6QmFja0ZvcndhcmRF
bnRyeT4gYmFja0ZvcndhcmRMaXN0OwotICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRl
clRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPmdldEJhY2tGb3J3YXJkTGlzdChiYWNr
Rm9yd2FyZExpc3QpOwotICAgIHJldHVybiBiYWNrRm9yd2FyZExpc3QubGVuZ3RoKCk7Ci19Ci0K
LWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkK
LXsKLSAgICBVTlVTRURfUEFSQU0oaWQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVt
YmVyKSBjb25zdAotewotICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eU5hbWUpOwotICAgIFVOVVNF
RF9QQVJBTShwYWdlTnVtYmVyKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2Fp
dFRvRHVtcCkKLXsKLSAgICAvLyBDaGFuZ2UgZnJvbSAzMHMgdG8gMzVzIGJlY2F1c2Ugc29tZSB0
ZXN0IGNhc2VzIGluIG11bHRpcGFydCBuZWVkIDMwIHNlY29uZHMsCi0gICAgLy8gcmVmZXIgdG8g
aHR0cC90ZXN0cy9tdWx0aXBhcnQvcmVzb3VyY2VzL211bHRpcGFydC13YWl0LWJlZm9yZS1ib3Vu
ZGFyeS5waHAgcGxlYXNlLgotICAgIHN0YXRpYyBjb25zdCBkb3VibGUga1dhaXRUb0R1bXBXYXRj
aGRvZ0ludGVydmFsID0gMzUuMDsKLSAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VG9EdW1wOwotICAg
IGlmIChtX3dhaXRUb0R1bXApCi0gICAgICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRl
clRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5zZXRXYWl0VG9EdW1wV2F0Y2hkb2coa1dhaXRUb0R1
bXBXYXRjaGRvZ0ludGVydmFsKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKLXsKLSAgICBtX3dpbmRvd0lzS2V5ID0gd2lu
ZG93SXNLZXk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAg
ICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IG5hbWVM
ZW4gPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYW5pbWF0aW9uTmFtZSk7Ci0g
ICAgaW50IGlkTGVuID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGVsZW1lbnRJ
ZCk7Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJb
bmFtZUxlbl0pOwotICAgIE93bkFycmF5UHRyPGNoYXI+IGVJZCA9IGFkb3B0QXJyYXlQdHIobmV3
IGNoYXJbaWRMZW5dKTsKLQotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoYW5pbWF0aW9uTmFt
ZSwgbmFtZS5nZXQoKSwgbmFtZUxlbik7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhlbGVt
ZW50SWQsIGVJZC5nZXQoKSwgaWRMZW4pOwotCi0gICAgV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJv
bGxlciogYW5pbWF0aW9uQ29udHJvbGxlciA9IG1haW5GcmFtZS0+YW5pbWF0aW9uKCk7Ci0gICAg
aWYgKCFhbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBX
ZWJDb3JlOjpOb2RlKiBub2RlID0gbWFpbkZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJ
ZChlSWQuZ2V0KCkpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNl
QW5pbWF0aW9uQXRUaW1lKG5vZGUtPnJlbmRlcmVyKCksIG5hbWUuZ2V0KCksIHRpbWUpOwotfQot
Ci1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdS
ZWYgZWxlbWVudElkKQotewotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpbnQgbmFtZUxlbiA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6
ZShwcm9wZXJ0eU5hbWUpOwotICAgIGludCBpZExlbiA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhD
U3RyaW5nU2l6ZShlbGVtZW50SWQpOwotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9w
dEFycmF5UHRyKG5ldyBjaGFyW25hbWVMZW5dKTsKLSAgICBPd25BcnJheVB0cjxjaGFyPiBlSWQg
PSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2lkTGVuXSk7Ci0KLSAgICBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKHByb3BlcnR5TmFtZSwgbmFtZS5nZXQoKSwgbmFtZUxlbik7Ci0gICAgSlNTdHJpbmdH
ZXRVVEY4Q1N0cmluZyhlbGVtZW50SWQsIGVJZC5nZXQoKSwgaWRMZW4pOwotCi0gICAgV2ViQ29y
ZTo6QW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlciA9IG1haW5GcmFtZS0+
YW5pbWF0aW9uKCk7Ci0gICAgaWYgKCFhbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBXZWJDb3JlOjpOb2RlKiBub2RlID0gbWFpbkZyYW1lLT5kb2N1bWVu
dCgpLT5nZXRFbGVtZW50QnlJZChlSWQuZ2V0KCkpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlv
bkNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGltZShub2RlLT5yZW5kZXJlcigpLCBuYW1l
LmdldCgpLCB0aW1lKTsKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIqIGFu
aW1hdGlvbkNvbnRyb2xsZXIgPSBtYWluRnJhbWUtPmFuaW1hdGlvbigpOwotICAgIGlmICghYW5p
bWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFu
aW1hdGlvbkNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhtYWluRnJhbWUtPmRv
Y3VtZW50KCkpOwotfQotCi11bnNpZ25lZCBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondvcmtl
clRocmVhZENvdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEVfV09SS0VSUwotICAgIHJldHVybiBX
ZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCk7Ci0jZWxzZQotICAgIHJl
dHVybiAwOwotI2VuZGlmCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCi17Ci0gICAgQmxhY2tCZXJy
eTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGZhbHNlKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwg
SlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyBrZXlTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhrZXkp
OwotICAgIFN0cmluZyB2YWx1ZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHZhbHVl
KTsKLQotICAgIGlmIChrZXlTdHIgPT0gIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5
IikKLSAgICAgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudElu
c3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgxKTsK
LSAgICBlbHNlIGlmIChrZXlTdHIgPT0gIldlYktpdFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzIikK
LSAgICAgICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnNldFVzZVByZUhUTUw1UGFy
c2VyUXVpcmtzKHRydWUpOwotICAgIGVsc2UgaWYgKGtleVN0ciA9PSAiV2ViS2l0VGFiVG9MaW5r
c1ByZWZlcmVuY2VLZXkiKQotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldExpbmtz
SW5jbHVkZWRJbkZvY3VzQ2hhaW4odmFsdWVTdHIgPT0gInRydWUiIHx8IHZhbHVlU3RyID09ICIx
Iik7Ci0gICAgZWxzZSBpZiAoa2V5U3RyID09ICJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJs
ZWQiKQotICAgICAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0SHlwZXJsaW5r
QXVkaXRpbmdFbmFibGVkKHZhbHVlU3RyID09ICJ0cnVlIiB8fCB2YWx1ZVN0ciA9PSAiMSIpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJv
b2wgYWx3YXlzQWNjZXB0Q29va2llcykKLXsKLSAgICBVTlVTRURfUEFSQU0oYWx3YXlzQWNjZXB0
Q29va2llcyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3Vi
bGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLCBsYXRpdHVkZSwgbG9uZ2l0dWRl
LCBhY2N1cmFjeSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQotewotICAgIFN0cmlu
ZyBtZXNzYWdlU3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcobWVzc2FnZSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihCbGFja0JlcnJ5
OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLCBjb2Rl
LCBtZXNzYWdlU3RyKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYklu
c3BlY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
bG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oY2Fs
bElkKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIFVOVVNFRF9QQVJBTSh3b3JsZElEKTsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyaXB0
KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBVTlVTRURfUEFS
QU0od29ybGRJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHNjcmlwdCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVu
QXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHJ1bkF0U3RhcnQpOwotICAgIFVOVVNFRF9QQVJBTShhbGxGcmFtZXMp
OwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmLCBib29sKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCwgZmxvYXQp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihK
U1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHVzZXJuYW1lLCBKU1N0cmluZ1JlZiBwYXNzd29y
ZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRG
cmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIEJsYWNrQmVycnk6Oldl
YktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldHRpbmdz
KCktPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwg
SlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25I
b3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAgIFdlYkNvcmU6OlNl
Y3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmco
c291cmNlT3JpZ2luKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1N0
cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvbkhvc3QpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9t
YWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVz
dGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAgIFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5Ojpy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OmNyZWF0ZUZyb21TdHJpbmcoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoc291cmNlT3JpZ2lu
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1N0cmluZ1Jl
ZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvbkhvc3QpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyhib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBbGxvd0Zp
bGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFpbkZyYW1l
LT5wYWdlKCktPnNldHRpbmdzKCktPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
KGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2lu
ZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNl
VVJMKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCi17Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0
OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChmbGFnKTsKLX0KLQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250ZXh0LCB2YWx1ZSk7
Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5
ZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBu
b2RlT2JqZWN0KSBjb25zdAotewotICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSB0b0Vs
ZW1lbnQodG9KUyh0b0pTKGNvbnRleHQpLCBub2RlT2JqZWN0KSk7Ci0gICAgaWYgKCFlbGVtZW50
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJr
ZXJUZXh0KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhXZWJDb3JlOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCkudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVybiBt
YXJrZXJUZXh0OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5h
YmxlZChib29sIGZsYWcpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hl
cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBx
dW90YSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRv
dWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJv
dmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3Ry
aW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIHNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0Ojpz
ZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRl
clRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCksIGFsbG93KTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUoY29uc3QgSlNTdHJpbmdS
ZWYgbW9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGlmIG5lZWRlZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwNzU4LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGly
ZWN0aW9uKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFi
bGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0
b3JhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBi
b29sIGF1dG9maWxsZWQpCi17Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRl
eHQpOwotICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQodG9KUyhleGVj
LCBub2RlT2JqZWN0KSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1
dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW5wdXRFbGVtZW50LT5zZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOwotfQotCi1pbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKCkKLXsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpudW1iZXJPZlBl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1
bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpKTsKLX0KLQotYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJp
bmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkpCi17Ci0gICAgV2ViQ29yZTo6
RmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0KLSAgICBTdHJpbmcgbmFtZVN0ciA9IGpzU3RyaW5n
UmVmVG9XZWJDb3JlU3RyaW5nKHRhcmdldCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIHNpemVfdCBsZW5ndGggPSAwOwotICAgIGlmIChvcHRpb25zQXJy
YXkpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOwot
ICAgICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVf
dD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgfQotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0Fy
cmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUs
IDApKTsKLQotICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25O
YW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdl
YkNvcmU6OkNhc2VJbnNlbnNpdGl2ZTsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQXRXb3JkU3RhcnRzIikpCi0gICAgICAg
ICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkF0V29yZFN0YXJ0czsKLSAgICAgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiVHJlYXRNZWRp
YWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6
VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIpKQotICAg
ICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpCYWNrd2FyZHM7Ci0gICAgICAgIGVsc2UgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIldyYXBBcm91
bmQiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6V3JhcEFyb3VuZDsKLSAgICAg
ICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiU3RhcnRJblNlbGVjdGlvbiIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpT
dGFydEluU2VsZWN0aW9uOwotICAgIH0KLQotICAgIC8vIE91ciBsYXlvdXQgdGVzdHMgYXNzdW1l
IGZpbmQgd2lsbCB3cmFwIGFuZCBoaWdobGlnaHQgYWxsIG1hdGNoZXMuCi0gICAgcmV0dXJuIEJs
YWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdl
KCktPmZpbmROZXh0U3RyaW5nKG5hbWVTdHIudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgIShvcHRp
b25zICYgV2ViQ29yZTo6QmFja3dhcmRzKSwgIShvcHRpb25zICYgV2ViQ29yZTo6Q2FzZUluc2Vu
c2l0aXZlKSwgdHJ1ZSAvKiB3cmFwICovLCB0cnVlIC8qIGhpZ2hsaWdodEFsbE1hdGNoZXMgKi8p
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JP
cmlnaW4oSlNTdHJpbmdSZWYgVVJMKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7Ci0gICAgV2ViQ29yZTo6RWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudCh0b0pTKGV4ZWMsIG5vZGVPYmplY3QpKTsKLSAgICBp
ZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICgh
aW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dEVsZW1lbnQtPnNldFZh
bHVlRm9yVXNlcihqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpOwotfQotCi1sb25n
IGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JP
cmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3Ig
YW4gb3JpZ2luLgotICAgIHJldHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZvY3VzV2ViVmlldygpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wpCi17Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpT
U3RyaW5nUmVmIHRpdGxlKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNl
dFBhZ2VWaXNpYmlsaXR5KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25z
ZShKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1Jl
ZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvVGVzdFJ1bm5lckJsYWNrQmVycnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvVGVzdFJ1bm5lckJsYWNr
QmVycnkuY3BwCShyZXZpc2lvbiAxMjUzMzUpCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Js
YWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcDoxMjUzMzUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RSdW5uZXJCbGFja0JlcnJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeS5o
IgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydC5oIgorI2luY2x1ZGUgIkVkaXRpbmdC
ZWhhdmlvclR5cGVzLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50QmxhY2tCZXJyeS5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0VsZW1lbnQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPd25BcnJheVB0ci5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAi
U2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJVbnVz
ZWRQYXJhbS5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZUl0
ZW0uaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0FQSUNhc3QuaD4KKyNpbmNsdWRlIDxTaGFyZWRQb2ludGVyLmg+CisjaW5jbHVkZSA8V2Vi
UGFnZS5oPgorI2luY2x1ZGUgPFdlYlNldHRpbmdzLmg+CisKK3VzaW5nIFdlYkNvcmU6OnRvRWxl
bWVudDsKK3VzaW5nIFdlYkNvcmU6OnRvSlM7CisKK0xheW91dFRlc3RDb250cm9sbGVyOjp+TGF5
b3V0VGVzdENvbnRyb2xsZXIoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
ZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICBVTlVTRURfUEFSQU0odXJs
KTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbERhdGFiYXNlcygpCit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZUFsbERhdGFiYXNlcygpOworI2Vu
ZGlmCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0
KCkKK3sKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5z
dGFuY2UoKS0+cGFnZSgpLT5jbGVhckJhY2tGb3J3YXJkTGlzdCh0cnVlKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9s
bGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgVU5VU0VE
X1BBUkFNKG5hbWUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpT
U3RyaW5nUmVmIG5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKG5hbWUpOworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworc3RhdGljIFN0cmluZyBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmlu
ZyhKU1N0cmluZ1JlZiBzdHIpCit7CisgICAgc2l6ZV90IHN0ckFyclNpemUgPSBKU1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBzdHJB
cnIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3N0ckFyclNpemVdKTsKKyAgICBKU1N0cmluZ0dl
dFVURjhDU3RyaW5nKHN0ciwgc3RyQXJyLmdldCgpLCBzdHJBcnJTaXplKTsKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChzdHJBcnIuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkK
K3sKKyAgICBpZiAoIW1haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG5h
bWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBTdHJpbmcgdmFs
dWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisKKyAgICBtYWluRnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWVTdHIpLmV4ZWN1dGUodmFsdWVTdHIpOworfQorCiti
b29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5h
bWUpCit7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFN0cmluZyBuYW1lU3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcobmFtZSk7CisKKyAg
ICByZXR1cm4gbWFpbkZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lU3RyKS5pc0VuYWJsZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5v
dGlmeURvbmUoKQoreworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgKCF0b3BMb2FkaW5nRnJhbWUg
fHwgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCkt
PmxvYWRGaW5pc2hlZCgpKSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAg
ICAgZHVtcCgpOworCisgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7CisgICAgd2FpdEZvclBvbGlj
eSA9IGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRv
TG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICByZXR1
cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQoreworICAgIHNp
emVfdCB1cmxBcnJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHVybCk7
CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gdXJsQXJyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclt1
cmxBcnJTaXplXSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyh1cmwsIHVybEFyci5nZXQo
KSwgdXJsQXJyU2l6ZSk7CisKKyAgICBXZWJDb3JlOjpLVVJMIGJhc2UgPSBtYWluRnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpLnVybCgpOworICAgIFdlYkNvcmU6
OktVUkwgYWJzb2x1dGUoYmFzZSwgdXJsQXJyLmdldCgpKTsKKworICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBhYnNvbHV0ZVVSTChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoYWJzb2x1dGUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIFdvcmtRdWV1ZTo6c2hh
cmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNj
ZXB0c0VkaXRpbmcpCit7CisgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6
Y3VycmVudEluc3RhbmNlKCktPnNldEFjY2VwdHNFZGl0aW5nKGFjY2VwdHNFZGl0aW5nKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNp
Z25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKHF1b3RhKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBtYWluRnJhbWUtPnBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoZW5hYmxlKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQor
eworICAgIFVOVVNFRF9QQVJBTShzZXREZWxlZ2F0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHBlcm1p
c3NpdmUpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihPcGFxdWVKU1N0cmluZyopCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNh
dGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCits
b25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9y
aWdpbihKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQg
Z2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4uCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250YWluIGFw
cGxpY2F0aW9uIGNhY2hlcy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgaWYg
KCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKSwgcXVvdGEpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21h
aW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmlu
Z1JlZiBzY2hlbWUpCit7CisgICAgV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnNldERvbWFpblJl
bGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9yYmlkZGVuLCBqc1N0cmluZ1JlZlRvV2Vi
Q29yZVN0cmluZyhzY2hlbWUpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCit7CisgICAgVU5V
U0VEX1BBUkFNKGljb25EYXRhYmFzZUVuYWJsZWQpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25k
ZXIoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNl
clN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQoreworICAgIFVOVVNFRF9QQVJB
TShwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgQmxhY2tC
ZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseSghZmxhZyk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5h
YmxlZChib29sIGZsYWcpCit7CisgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJl
ZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0WFNTQXVkaXRvckVu
YWJsZWQoZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRy
YWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIEJsYWNrQmVycnk6Oldl
YktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5zZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKGZsYWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9Q
QVJBTShmbGFnKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBjeWNsZXMpCit7
CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1haW5GcmFtZS0+
cGFnZSgpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY3ljbGVzKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUo
Ym9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVu
YWJsZWQoYm9vbCBmbGFnKQoreworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit7CisgICAgU3RyaW5nIHBhdGhTdHIgPSBq
c1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhwYXRoKTsKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6
OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5z
ZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHBhdGhTdHIudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit7CisgICAg
c2V0V2FpdFRvRHVtcCh0cnVlKTsKKyAgICB3YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKK30KKworc2l6
ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3sKKyAgICBT
aGFyZWRBcnJheTxCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OkJhY2tGb3J3YXJkRW50cnk+
IGJhY2tGb3J3YXJkTGlzdDsKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5nZXRCYWNrRm9yd2FyZExpc3QoYmFja0Zvcndh
cmRMaXN0KTsKKyAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0Lmxlbmd0aCgpOworfQorCitpbnQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVt
ZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikg
Y29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHlOYW1lKTsKKyAgICBVTlVTRURfUEFS
QU0ocGFnZU51bWJlcik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRUb0R1
bXApCit7CisgICAgLy8gQ2hhbmdlIGZyb20gMzBzIHRvIDM1cyBiZWNhdXNlIHNvbWUgdGVzdCBj
YXNlcyBpbiBtdWx0aXBhcnQgbmVlZCAzMCBzZWNvbmRzLAorICAgIC8vIHJlZmVyIHRvIGh0dHAv
dGVzdHMvbXVsdGlwYXJ0L3Jlc291cmNlcy9tdWx0aXBhcnQtd2FpdC1iZWZvcmUtYm91bmRhcnku
cGhwIHBsZWFzZS4KKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtXYWl0VG9EdW1wV2F0Y2hkb2dJ
bnRlcnZhbCA9IDM1LjA7CisgICAgbV93YWl0VG9EdW1wID0gd2FpdFRvRHVtcDsKKyAgICBpZiAo
bV93YWl0VG9EdW1wKQorICAgICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0V2FpdFRvRHVtcFdhdGNoZG9nKGtXYWl0VG9EdW1wV2F0
Y2hkb2dJbnRlcnZhbCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRv
d0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCit7CisgICAgbV93aW5kb3dJc0tleSA9IHdpbmRvd0lz
S2V5OworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgaWYg
KCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBuYW1lTGVuID0g
SlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGFuaW1hdGlvbk5hbWUpOworICAgIGlu
dCBpZExlbiA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShlbGVtZW50SWQpOwor
ICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW25hbWVM
ZW5dKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBlSWQgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFy
W2lkTGVuXSk7CisKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGFuaW1hdGlvbk5hbWUsIG5h
bWUuZ2V0KCksIG5hbWVMZW4pOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoZWxlbWVudElk
LCBlSWQuZ2V0KCksIGlkTGVuKTsKKworICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIq
IGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtYWluRnJhbWUtPmFuaW1hdGlvbigpOworICAgIGlmICgh
YW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29y
ZTo6Tm9kZSogbm9kZSA9IG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZUlk
LmdldCgpKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLT5wYXVzZUFuaW1h
dGlvbkF0VGltZShub2RlLT5yZW5kZXJlcigpLCBuYW1lLmdldCgpLCB0aW1lKTsKK30KKworYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVs
ZW1lbnRJZCkKK3sKKyAgICBpZiAoIW1haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW50IG5hbWVMZW4gPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUocHJv
cGVydHlOYW1lKTsKKyAgICBpbnQgaWRMZW4gPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUoZWxlbWVudElkKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBuYW1lID0gYWRvcHRBcnJh
eVB0cihuZXcgY2hhcltuYW1lTGVuXSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gZUlkID0gYWRv
cHRBcnJheVB0cihuZXcgY2hhcltpZExlbl0pOworCisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmlu
Zyhwcm9wZXJ0eU5hbWUsIG5hbWUuZ2V0KCksIG5hbWVMZW4pOworICAgIEpTU3RyaW5nR2V0VVRG
OENTdHJpbmcoZWxlbWVudElkLCBlSWQuZ2V0KCksIGlkTGVuKTsKKworICAgIFdlYkNvcmU6OkFu
aW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtYWluRnJhbWUtPmFuaW1h
dGlvbigpOworICAgIGlmICghYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+
Z2V0RWxlbWVudEJ5SWQoZUlkLmdldCgpKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhbmltYXRpb25Db250
cm9sbGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUobm9kZS0+cmVuZGVyZXIoKSwgbmFtZS5nZXQo
KSwgdGltZSk7Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRp
b25Db250cm9sbGVyID0gbWFpbkZyYW1lLT5hbmltYXRpb24oKTsKKyAgICBpZiAoIWFuaW1hdGlv
bkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhbmltYXRp
b25Db250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMobWFpbkZyYW1lLT5kb2N1bWVu
dCgpKTsKK30KKwordW5zaWduZWQgaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJl
YWRDb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFX1dPUktFUlMKKyAgICByZXR1cm4gV2ViQ29y
ZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3VudCgpOworI2Vsc2UKKyAgICByZXR1cm4g
MDsKKyNlbmRpZgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNp
dGVkTGlua3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQoreworICAgIEJsYWNrQmVycnk6Oldl
YktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldHRpbmdz
KCktPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3Ry
aW5nUmVmIHZhbHVlKQoreworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAgICByZXR1cm47CisK
KyAgICBTdHJpbmcga2V5U3RyID0ganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoa2V5KTsKKyAg
ICBTdHJpbmcgdmFsdWVTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisK
KyAgICBpZiAoa2V5U3RyID09ICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpCisg
ICAgICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5j
ZSgpLT5wYWdlKCktPnNldHRpbmdzKCktPnNldE1heGltdW1QYWdlc0luQ2FjaGUoMSk7CisgICAg
ZWxzZSBpZiAoa2V5U3RyID09ICJXZWJLaXRVc2VQcmVIVE1MNVBhcnNlclF1aXJrcyIpCisgICAg
ICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRVc2VQcmVIVE1MNVBhcnNlclF1
aXJrcyh0cnVlKTsKKyAgICBlbHNlIGlmIChrZXlTdHIgPT0gIldlYktpdFRhYlRvTGlua3NQcmVm
ZXJlbmNlS2V5IikKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRMaW5rc0luY2x1
ZGVkSW5Gb2N1c0NoYWluKHZhbHVlU3RyID09ICJ0cnVlIiB8fCB2YWx1ZVN0ciA9PSAiMSIpOwor
ICAgIGVsc2UgaWYgKGtleVN0ciA9PSAiV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkIikK
KyAgICAgICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnNldEh5cGVybGlua0F1ZGl0
aW5nRW5hYmxlZCh2YWx1ZVN0ciA9PSAidHJ1ZSIgfHwgdmFsdWVTdHIgPT0gIjEiKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFs
d2F5c0FjY2VwdENvb2tpZXMpCit7CisgICAgVU5VU0VEX1BBUkFNKGFsd2F5c0FjY2VwdENvb2tp
ZXMpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVy
VHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3kpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRp
b25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgbWVz
c2FnZVN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKG1lc3NhZ2UpOworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwgY29kZSwgbWVz
c2FnZVN0cik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcg
Y2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxJZCk7
CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CisgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYg
Z2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHdv
cmxkSUQpOworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShzY3JpcHQpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3Rh
cnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOworICAgIFVO
VVNFRF9QQVJBTShydW5BdFN0YXJ0KTsKKyAgICBVTlVTRURfUEFSQU0oYWxsRnJhbWVzKTsKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRV
c2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
Z2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitp
bnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQsIGZsb2F0KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJp
bmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYgcGFzc3dvcmQpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6
OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5z
ZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGVuYWJsZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwg
Ym9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBXZWJDb3JlOjpTZWN1cml0
eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKldlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNvdXJj
ZU9yaWdpbikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvblByb3RvY29sKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNTdHJpbmdS
ZWZUb1dlYkNvcmVTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0
aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3Rp
bmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKldlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVGcm9tU3RyaW5nKGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNvdXJjZU9yaWdpbikpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1N0
cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvblByb3RvY29sKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNTdHJpbmdSZWZUb1dl
YkNvcmVTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QWxsb3dGaWxlQWNj
ZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit7Cisg
ICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1haW5GcmFtZS0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhlbmFi
bGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0Rh
dGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKQoreworICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVt
cFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCktPnNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQoZmxhZyk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29udGV4dCwgdmFsdWUpOworfQor
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJl
ZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCkgY29uc3QKK3sKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50
KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVjdCkpOworICAgIGlmICghZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4
dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoV2ViQ29yZTo6bWFya2VyVGV4
dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gbWFya2Vy
VGV4dDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQo
Ym9vbCBmbGFnKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUg
YWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVH
YW1tYSwgZG91YmxlIGdhbW1hKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1Jl
ZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3sKKyAgICBzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb25Db21tb24oYWxsb3cpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9j
a0dlb2xvY2F0aW9uUGVybWlzc2lvbihCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLCBhbGxvdyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKGNvbnN0IEpTU3RyaW5nUmVmIG1v
ZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBpZiBuZWVkZWQgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDc1OC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlv
bihKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8g
ZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVm
ZXJzTG9hZGluZyhib29sKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxv
YWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dp
dGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlv
bnModW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9m
aWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBh
dXRvZmlsbGVkKQoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9k
ZU9iamVjdCkpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
cHV0RWxlbWVudC0+c2V0QXV0b2ZpbGxlZChhdXRvZmlsbGVkKTsKK30KKworaW50IExheW91dFRl
c3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cygpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6bnVtYmVyT2ZQZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVu
ZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVm
IHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQoreworICAgIFdlYkNvcmU6OkZpbmRP
cHRpb25zIG9wdGlvbnMgPSAwOworCisgICAgU3RyaW5nIG5hbWVTdHIgPSBqc1N0cmluZ1JlZlRv
V2ViQ29yZVN0cmluZyh0YXJnZXQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxl
bmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxl
bmd0aCIpKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gMDsKKyAgICBpZiAob3B0aW9uc0FycmF5KSB7
CisgICAgICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKKyAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
aSwgMCk7CisgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBv
cHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7
CisKKyAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5n
ZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3Jl
OjpDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIpKQorICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpBdFdvcmRTdGFydHM7CisgICAgICAgIGVsc2UgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2Fw
aXRhbEFzV29yZFN0YXJ0IikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OlRyZWF0
TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJCYWNrd2FyZHMiKSkKKyAgICAgICAg
ICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6QmFja3dhcmRzOworICAgICAgICBlbHNlIGlmIChKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJXcmFwQXJvdW5kIikp
CisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OldyYXBBcm91bmQ7CisgICAgICAgIGVs
c2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0
YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJ
blNlbGVjdGlvbjsKKyAgICB9CisKKyAgICAvLyBPdXIgbGF5b3V0IHRlc3RzIGFzc3VtZSBmaW5k
IHdpbGwgd3JhcCBhbmQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzLgorICAgIHJldHVybiBCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5m
aW5kTmV4dFN0cmluZyhuYW1lU3RyLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICEob3B0aW9ucyAm
IFdlYkNvcmU6OkJhY2t3YXJkcyksICEob3B0aW9ucyAmIFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2
ZSksIHRydWUgLyogd3JhcCAqLywgdHJ1ZSAvKiBoaWdobGlnaHRBbGxNYXRjaGVzICovKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lu
KEpTU3RyaW5nUmVmIFVSTCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGVsZW1lbnQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0KSk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlucHV0
RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5wdXRFbGVtZW50LT5zZXRWYWx1ZUZv
clVzZXIoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKK30KKworbG9uZyBsb25n
IExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2lu
KEpTU3RyaW5nUmVmIG9yaWdpbikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBv
cnQgZ2V0dGluZyBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9y
aWdpbi4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
Q2hyb21lSW5wdXRGaWVsZCgpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZUNocm9tZUlucHV0RmllbGQoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojpmb2N1c1dlYlZpZXcoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRC
YWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sKQoreworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmlu
Z1JlZiB0aXRsZSkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21h
dGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNT
dHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpT
U3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RSdW5uZXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RSdW5uZXJCbGFja0JlcnJ5
LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJy
eS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAKICNpbmNsdWRlICJDU3RyaW5nLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCkBAIC01NSw1MyArNTUsNTMgQEAKIHVzaW5n
IFdlYkNvcmU6OnRvRWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OnRvSlM7CiAKLUxheW91dFRlc3RD
b250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQorVGVzdFJ1bm5lcjo6flRlc3RSdW5u
ZXIoKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJM
KEpTU3RyaW5nUmVmIHVybCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0
cmluZ1JlZiB1cmwpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHVybCk7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMo
KQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAjaWYgRU5BQkxFKERB
VEFCQVNFKQogICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZUFs
bERhdGFiYXNlcygpOwogI2VuZGlmCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQmFja0ZvcndhcmRMaXN0KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExp
c3QoKQogewogICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJ
bnN0YW5jZSgpLT5wYWdlKCktPmNsZWFyQmFja0ZvcndhcmRMaXN0KHRydWUpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit2
b2lkIFRlc3RSdW5uZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQorSlNTdHJpbmdSZWYgVGVzdFJ1
bm5lcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShuYW1lKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQog
Ci1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShK
U1N0cmluZ1JlZiBuYW1lKQorSlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6Y29weUVuY29kZWRIb3N0
TmFtZShKU1N0cmluZ1JlZiBuYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShuYW1lKTsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjpk
aXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQordm9pZCBUZXN0UnVubmVy
OjpkaXNwbGF5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTE0LDcgKzExNCw3
IEBAIHN0YXRpYyBTdHJpbmcganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcKICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChzdHJBcnIuZ2V0KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdS
ZWYgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTEy
NSw3ICsxMjUsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKCiAg
ICAgbWFpbkZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lU3RyKS5leGVjdXRlKHZhbHVlU3Ry
KTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0
cmluZ1JlZiBuYW1lKQorYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5n
UmVmIG5hbWUpCiB7CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEzNSwxMiArMTM1LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFu
ZEVuYWIKICAgICByZXR1cm4gbWFpbkZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lU3RyKS5p
c0VuYWJsZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3Rv
cnkoKQordm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit2
b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIGlmIChtX3dhaXRUb0R1bXAgJiYg
KCF0b3BMb2FkaW5nRnJhbWUgfHwgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6
Y3VycmVudEluc3RhbmNlKCktPmxvYWRGaW5pc2hlZCgpKSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQo
KS0+Y291bnQoKSkKICAgICAgICAgZHVtcCgpOwpAQCAtMTQ5LDEyICsxNDksMTIgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCiAgICAgd2FpdEZvclBvbGljeSA9IGZh
bHNlOwogfQogCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxS
ZXNvdXJjZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmIHVybCkKK0pTU3RyaW5nUmVmIFRlc3RS
dW5uZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZiB1cmwp
CiB7CiAgICAgcmV0dXJuIEpTU3RyaW5nUmV0YWluKHVybCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdl
dCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdS
ZWYgdGFyZ2V0KQogewogICAgIHNpemVfdCB1cmxBcnJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVt
VVRGOENTdHJpbmdTaXplKHVybCk7CiAgICAgT3duQXJyYXlQdHI8Y2hhcj4gdXJsQXJyID0gYWRv
cHRBcnJheVB0cihuZXcgY2hhclt1cmxBcnJTaXplXSk7CkBAIC0xNjcsNTUgKzE2Nyw1NSBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTCiAgICAgV29ya1F1ZXVlOjpz
aGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBh
Y2NlcHRzRWRpdGluZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBh
Y2NlcHRzRWRpdGluZykKIHsKICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0QWNjZXB0c0VkaXRpbmcoYWNjZXB0c0VkaXRpbmcpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVu
c2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhp
bXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHF1
b3RhKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJsZSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBlbmFibGUpCiB7CiAg
ICAgbWFpbkZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKGVuYWJsZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hl
TW9kZWwoaW50KQordm9pZCBUZXN0UnVubmVyOjpzZXRDYWNoZU1vZGVsKGludCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0
b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCit2b2lk
IFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJv
b2wgcGVybWlzc2l2ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc2V0RGVsZWdhdGUpOwogICAgIFVO
VVNFRF9QQVJBTShwZXJtaXNzaXZlKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3Bh
cXVlSlNTdHJpbmcqKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JP
cmlnaW4oT3BhcXVlSlNTdHJpbmcqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3Vw
cG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjps
b2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCitsb25nIGxvbmcgVGVz
dFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQogewog
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4g
Ynl0ZXMgZm9yIGFuIG9yaWdpbi4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAw
OwogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxp
Y2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6
Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgY29udGFpbiBhcHBsaWNh
dGlvbiBjYWNoZXMuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBUZXN0UnVubmVy
OjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKIHsKICAgICBpZiAo
IW1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIzLDU3ICsyMjMsNTcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdQogICAgIFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSwgcXVvdGEpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0
cmluZ1JlZiBzY2hlbWUpCit2b2lkIFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKIHsK
ICAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNjaGVt
ZSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFi
bGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0SWNvbkRh
dGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGljb25EYXRhYmFzZUVuYWJsZWQpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9v
bCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJv
b2wgZmxhZykKIHsKICAgICBVTlVTRURfUEFSQU0oZmxhZyk7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGVy
c2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAgICBV
TlVTRURfUEFSQU0ocGF0aCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAg
QmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgh
ZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBVTlVTRURfUEFSQU0oZmxhZyk7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRv
ckVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxl
ZChib29sIGZsYWcpCiB7CiAgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6
Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0WFNTQXVkaXRvckVuYWJs
ZWQoZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWls
aW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBCbGFja0JlcnJ5
OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmbGFnKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBVTlVT
RURfUEFSQU0oZmxhZyk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVz
KQordm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBj
eWNsZXMpCiB7CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MSw1
MSArMjgxLDUxIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2wKICAg
ICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGN5Y2xl
cyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBh
dGliaWxpdHlNb2RlKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlRGFzaGJvYXJk
Q29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQogewogICAgIFVOVVNFRF9QQVJBTShmbGFnKTsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRV
c2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIFVOVVNFRF9QQVJBTShmbGFn
KTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAg
ICBTdHJpbmcgcGF0aFN0ciA9IGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHBhdGgpOwogICAg
IEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5w
YWdlKCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24ocGF0aFN0ci51dGY4
KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGlj
eURlbGVnYXRlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKIHsK
ICAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwogICAgIHdhaXRGb3JQb2xpY3kgPSB0cnVlOwogfQog
Ci1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQorc2l6
ZV90IFRlc3RSdW5uZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQogewogICAgIFNoYXJlZEFycmF5
PEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6QmFja0ZvcndhcmRFbnRyeT4gYmFja0Zvcndh
cmRMaXN0OwogICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJ
bnN0YW5jZSgpLT5wYWdlKCktPmdldEJhY2tGb3J3YXJkTGlzdChiYWNrRm9yd2FyZExpc3QpOwog
ICAgIHJldHVybiBiYWNrRm9yd2FyZExpc3QubGVuZ3RoKCk7CiB9CiAKLWludCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoraW50IFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KCkK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQo
SlNTdHJpbmdSZWYgaWQpCitib29sIFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
Rm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkKIHsKICAgICBVTlVTRURfUEFSQU0oaWQp
OwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAorSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAogewogICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0
eU5hbWUpOwogICAgIFVOVVNFRF9QQVJBTShwYWdlTnVtYmVyKTsKQEAgLTMzMyw3ICszMzMsNyBA
QCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyCiAgICAgcmV0dXJuIDA7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0
VG9EdW1wKQordm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFRvRHVtcCkK
IHsKICAgICAvLyBDaGFuZ2UgZnJvbSAzMHMgdG8gMzVzIGJlY2F1c2Ugc29tZSB0ZXN0IGNhc2Vz
IGluIG11bHRpcGFydCBuZWVkIDMwIHNlY29uZHMsCiAgICAgLy8gcmVmZXIgdG8gaHR0cC90ZXN0
cy9tdWx0aXBhcnQvcmVzb3VyY2VzL211bHRpcGFydC13YWl0LWJlZm9yZS1ib3VuZGFyeS5waHAg
cGxlYXNlLgpAQCAtMzQzLDEzICszNDMsMTMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2FpdFRvRHVtcAogICAgICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+c2V0V2FpdFRvRHVtcFdhdGNoZG9nKGtXYWl0VG9EdW1wV2F0
Y2hkb2dJbnRlcnZhbCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRv
d0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCit2b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5
KGJvb2wgd2luZG93SXNLZXkpCiB7CiAgICAgbV93aW5kb3dJc0tleSA9IHdpbmRvd0lzS2V5Owog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5h
bWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6
OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7CiAgICAgaWYgKCFt
YWluRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM3Myw3ICszNzMsNyBAQCBib29s
IExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvCiAgICAgcmV0dXJuIGFuaW1hdGlv
bkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lKG5vZGUtPnJlbmRlcmVyKCksIG5hbWUu
Z2V0KCksIHRpbWUpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5z
aXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3Vi
bGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVyOjpwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBk
b3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIGlmICghbWFpbkZyYW1l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTcsNyArMzk3LDcgQEAgYm9vbCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aQogICAgIHJldHVybiBhbmltYXRpb25Db250cm9s
bGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUobm9kZS0+cmVuZGVyZXIoKSwgbmFtZS5nZXQoKSwg
dGltZSk7CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoKSBjb25zdAordW5zaWduZWQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKIHsKICAgICBpZiAoIW1haW5GcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNDA5LDcgKzQwOSw3IEBAIHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVy
OjpudW1iZXJPZkEKICAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci0+bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKG1haW5GcmFtZS0+ZG9jdW1lbnQoKSk7CiB9CiAKLXVuc2lnbmVkIGludCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAordW5zaWduZWQg
aW50IFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKIHsKICNpZiBFTkFCTEVf
V09SS0VSUwogICAgIHJldHVybiBXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENv
dW50KCk7CkBAIC00MTgsMTcgKzQxOCwxNyBAQCB1bnNpZ25lZCBpbnQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndvcmtlCiAjZW5kaWYKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVt
b3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWJsZUlt
YWdlTG9hZGluZygpCiB7CiAgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6
Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0TG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5KGZhbHNlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lkIFRl
c3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVm
IHZhbHVlKQogewogICAgIGlmICghbWFpbkZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC00NDYs
NDEgKzQ0Niw0MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlCiAg
ICAgICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRIeXBlcmxpbmtBdWRpdGlu
Z0VuYWJsZWQodmFsdWVTdHIgPT0gInRydWUiIHx8IHZhbHVlU3RyID09ICIxIik7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdh
eXNBY2NlcHRDb29raWVzKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVz
KGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKIHsKICAgICBVTlVTRURfUEFSQU0oYWx3YXlzQWNj
ZXB0Q29va2llcyk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5KQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24oQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3Vy
cmVudEluc3RhbmNlKCktPnBhZ2UoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihp
bnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dl
b2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCiB7CiAgICAgU3Ry
aW5nIG1lc3NhZ2VTdHIgPSBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhtZXNzYWdlKTsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKEJsYWNrQmVy
cnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCksIGNv
ZGUsIG1lc3NhZ2VTdHIpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2Vi
SW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VX
ZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9p
ZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmlu
Z1JlZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxJZCk7CiAgICAgVU5VU0VEX1BB
UkFNKHNjcmlwdCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CiAgICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYg
c2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKIHsKICAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CiAgICAgVU5VU0VEX1BBUkFNKGds
b2JhbE9iamVjdCk7CkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1
bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0
KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsK
ICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKICAgICBVTlVTRURfUEFSQU0ocnVuQXRTdGFydCk7
CkBAIC01MDQsNTUgKzUwNCw1NSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2Vy
U2NyaXB0CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYsIGJvb2wpCit2b2lkIFRlc3RSdW5u
ZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmLCBib29sKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OnBh
Z2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCi1p
bnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQsIGZsb2F0KQoraW50
IFRlc3RSdW5uZXI6Om51bWJlck9mUGFnZXMoZmxvYXQsIGZsb2F0KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0
UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFdlYlZpZXdFZGl0YWJsZShib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRXZWJWaWV3RWRpdGFi
bGUoYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdS
ZWYgdXNlcm5hbWUsIEpTU3RyaW5nUmVmIHBhc3N3b3JkKQordm9pZCBUZXN0UnVubmVyOjphdXRo
ZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdXNlcm5hbWUsIEpT
U3RyaW5nUmVmIHBhc3N3b3JkKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCitib29sIFRl
c3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXI6
OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGUpCiB7CiAgICAgQmxhY2tCZXJy
eTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFi
bGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVu
YWJsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VP
cmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3Rp
bmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1
bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3Jp
Z2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5h
dGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgV2ViQ29y
ZTo6U2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCpXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhqc1N0cmluZ1JlZlRvV2ViQ29yZVN0
cmluZyhzb3VyY2VPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAganNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoZGVzdGluYXRpb25Qcm90
b2NvbCksCkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
T3JpZ2luQWNjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNv
dXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQordm9pZCBU
ZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBz
b3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVm
IGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKICAg
ICBXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoKldlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGpzU3RyaW5nUmVm
VG9XZWJDb3JlU3RyaW5nKHNvdXJjZU9yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1N0cmluZ1JlZlRvV2ViQ29yZVN0cmluZyhk
ZXN0aW5hdGlvblByb3RvY29sKSwKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZW1vdmVPcmlnaW5BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoIW1haW5GcmFtZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNTc2LDcgKzU3Niw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
bG93RmlsZUEKICAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit2
b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBpZiAoIW1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTg0
LDMzICs1ODQsMzMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZQog
ICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMcyhlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNT
dHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFM
b2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
cGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQordm9pZCBUZXN0UnVubmVyOjphcGlU
ZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZykKIHsKICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXRKYXZhU2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkKGZsYWcpOwogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6OmNvbXB1dGVkU3R5bGVJ
bmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0Ojpjb21wdXRlZFN0eWxlSW5j
bHVkaW5nVmlzaXRlZEluZm8oY29udGV4dCwgdmFsdWUpOwogfQogCi1KU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCi1KU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0
SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Om1hcmtlclRleHRGb3JMaXN0SXRl
bShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAogewog
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQodG9KUyh0b0pTKGNvbnRl
eHQpLCBub2RlT2JqZWN0KSk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtNjIwLDEwMiArNjIwLDEw
MiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyCiAgICAgcmV0dXJu
IG1hcmtlclRleHQ7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNF
bmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9v
bCBmbGFnKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFib3J0TW9kYWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9ydE1vZGFsKCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBs
aWNhdGlvbkNhY2hlcygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVk
IGxvbmcgbG9uZyBxdW90YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50
YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRl
QmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCit2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVB
bHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9v
bCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1
bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFu
Z3VhZ2UpCit2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmlu
Z1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiB7CiAgICAgc2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldE1v
Y2tHZW9sb2NhdGlvblBlcm1pc3Npb24oQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJl
ZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwgYWxsb3cpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25zdCBKU1N0cmluZ1JlZiBt
b2RlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25zdCBKU1N0
cmluZ1JlZiBtb2RlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sKQordm9pZCBUZXN0UnVu
bmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGlmIG5lZWRlZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUwNzU4LgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJp
bmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Z29CYWNrKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMu
aHRtbAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9h
ZGluZyhib29sKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9u
YXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9y
aWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKHVuc2lnbmVkKQordm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNr
ZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQordm9pZCBUZXN0
UnVubmVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQordm9p
ZCBUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxsZWQpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
bm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVt
ZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOwpAQCAtNzI4LDEyICs3MjgsMTIgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZAogICAgIGlucHV0RWxlbWVudC0+c2V0
QXV0b2ZpbGxlZChhdXRvZmlsbGVkKTsKIH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjpu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCitpbnQgVGVzdFJ1
bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQogewog
ICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzKEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6
OmN1cnJlbnRJbnN0YW5jZSgpLT5wYWdlKCkpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQs
IEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKK2Jvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRp
b25zQXJyYXkpCiB7CiAgICAgV2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7CiAKQEAg
LTc3NCwxMiArNzc0LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmco
SlMKICAgICAgICAgIShvcHRpb25zICYgV2ViQ29yZTo6QmFja3dhcmRzKSwgIShvcHRpb25zICYg
V2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlKSwgdHJ1ZSAvKiB3cmFwICovLCB0cnVlIC8qIGhpZ2hs
aWdodEFsbE1hdGNoZXMgKi8pOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQordm9pZCBUZXN0UnVubmVy
OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZh
bHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBK
U1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVl
KQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKICAgICBXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkp
OwpAQCAtNzkyLDU3ICs3OTIsNTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFs
dWVGb3JVcwogICAgIGlucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKGpzU3RyaW5nUmVmVG9X
ZWJDb3JlU3RyaW5nKHZhbHVlKSk7CiB9CiAKLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4p
Citsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBw
b3J0IGdldHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBv
cmlnaW4uCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZENocm9tZUlucHV0RmllbGQoKQordm9pZCBUZXN0UnVubmVyOjphZGRDaHJvbWVJbnB1dEZpZWxk
KCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRG
aWVsZCgpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQogewogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQordm9pZCBUZXN0UnVu
bmVyOjpmb2N1c1dlYlZpZXcoKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5n
U2NhbGVGYWN0b3IoZG91YmxlKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2Nr
U3BlZWNoSW5wdXREdW1wUmVjdChib29sKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJp
bmdSZWYgdGl0bGUpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFn
ZVZpc2liaWxpdHkoKQordm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZp
c2liaWxpdHkoY29uc3QgY2hhciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQo
Ym9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQo
Ym9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5u
ZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50
KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6
OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3Zb
XSkKICAgICAgICAgc2hlbGwuY2FsbEpTR0MoKTsKICAgICAgICAgc2hlbGwuY2FsbEpTR0MoKTsK
IAotICAgICAgICAvLyBXaGVuIHdlIGZpbmlzaCB0aGUgbGFzdCB0ZXN0LCBjbGVhbnVwIHRoZSBM
YXlvdXRUZXN0Q29udHJvbGxlci4KKyAgICAgICAgLy8gV2hlbiB3ZSBmaW5pc2ggdGhlIGxhc3Qg
dGVzdCwgY2xlYW51cCB0aGUgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyLgogICAgICAgICAvLyBJ
dCBtYXkgaGF2ZSByZWZlcmVuY2VzIHRvIG5vdC15ZXQtY2xlYW5lZCB1cCB3aW5kb3dzLiBCeSBj
bGVhbmluZyB1cAogICAgICAgICAvLyBoZXJlIHdlIGhlbHAgcHVyaWZ5IHJlcG9ydHMuCiAgICAg
ICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyLmNw
cAkocmV2aXNpb24gMTI1MzM1KQkoZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHA6MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXdlbCBIYWpkYW4gKHBo
YWpkYW4uanJAY2hyb21pdW0ub3JnKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRU
ZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgorI2luY2x1
ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5oIgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorI2luY2x1ZGUgIldlYkFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgorI2luY2x1ZGUg
IldlYkNvbnNvbGVNZXNzYWdlLmgiCisjaW5jbHVkZSAiV2ViRGV2aWNlT3JpZW50YXRpb24uaCIK
KyNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCIKKyNpbmNsdWRlICJX
ZWJEb2N1bWVudC5oIgorI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXZWJGaW5k
T3B0aW9ucy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRp
b25DbGllbnRNb2NrLmgiCisjaW5jbHVkZSAiV2ViSURCRmFjdG9yeS5oIgorI2luY2x1ZGUgIldl
YklucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIldlYkludGVudC5oIgorI2luY2x1ZGUgIldlYklu
dGVudFJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJXZWJQZXJtaXNzaW9ucy5oIgorI2luY2x1ZGUg
IldlYlByaW50UGFyYW1zLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVk
ZSAiV2ViU2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJXZWJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIldlYlN1cnJvdW5kaW5nVGV4dC5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3SG9zdC5oIgorI2luY2x1ZGUgIldlYldvcmtlckluZm8uaCIKKyNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJEYXRhLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlVSTC5oIgorI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8Y2xvY2FsZT4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgT1MoTElOVVgp
IHx8IE9TKEFORFJPSUQpCisjaW5jbHVkZSAibGludXgvV2ViRm9udFJlbmRlcmluZy5oIgorI2Vu
ZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2NsYXNzIEVtcHR5V2ViRGVsaXZlcmVkSW50ZW50Q2xp
ZW50IDogcHVibGljIFdlYktpdDo6V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50IHsKK3B1YmxpYzoK
KyAgICBFbXB0eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCgpIHsgfQorICAgIH5FbXB0eVdlYkRl
bGl2ZXJlZEludGVudENsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHBvc3RSZXN1bHQo
Y29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBkYXRhKSBjb25zdCB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcG9zdEZhaWx1cmUoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBkYXRh
KSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIHsgfQorfTsKKworTGF5b3V0
VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCisg
ICAgOiBtX3NoZWxsKHNoZWxsKQorICAgICwgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MoZmFsc2Up
CisgICAgLCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpCisgICAgLCBtX3Nob3dE
ZWJ1Z0xheWVyVHJlZShmYWxzZSkKKyAgICAsIG1fd29ya1F1ZXVlKHRoaXMpCisgICAgLCBtX2lu
dGVudENsaWVudChhZG9wdFB0cihuZXcgRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQpKQor
ICAgICwgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChmYWxzZSkK
K3sKKworICAgIC8vIEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29jaWF0ZXMgbWV0aG9kcyBv
ZiB0aGlzIGNsYXNzIHdpdGggdGhlIG5hbWVzCisgICAgLy8gdGhleSB3aWxsIHVzZSB3aGVuIGNh
bGxlZCBieSBKYXZhU2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2YgdGhvc2UKKyAgICAvLyBu
YW1lcyB0byB0aGVpciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxsaW5nIGJpbmRUb0phdmFT
Y3JpcHQoKSAoZGVmaW5lZAorICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8g
TGF5b3V0VGVzdENvbnRyb2xsZXIpLgorICAgIGJpbmRNZXRob2QoImFkZEZpbGVUb1Bhc3RlYm9h
cmRPbkRyYWciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRy
YWcpOworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCisgICAgYmluZE1ldGhvZCgiYWRkTW9ja1Nw
ZWVjaElucHV0UmVzdWx0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5w
dXRSZXN1bHQpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdCk7CisjZW5k
aWYKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorICAgIGJpbmRNZXRob2QoImFkZE1vY2tT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1Nw
ZWVjaFJlY29nbml0aW9uUmVzdWx0KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRNb2NrU3BlZWNoUmVj
b2duaXRpb25FcnJvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaFJlY29n
bml0aW9uRXJyb3IpOworICAgIGJpbmRNZXRob2QoIndhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFi
b3J0ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFi
b3J0ZWQpOworI2VuZGlmCisgICAgYmluZE1ldGhvZCgiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KTsKKyAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU2NyaXB0IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjphZGRVc2VyU2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU3R5bGVTaGVldCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQpOworICAgIGJpbmRNZXRo
b2QoImNsZWFyQWxsRGF0YWJhc2VzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERh
dGFiYXNlcyk7CisgICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NL
KQorICAgIGJpbmRNZXRob2QoImRpZExvc2VQb2ludGVyTG9jayIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGlkTG9zZVBvaW50ZXJMb2NrKTsKKyNlbmRpZgorICAgIGJpbmRNZXRob2QoImRpc2Fi
bGVBdXRvUmVzaXplTW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUF1dG9SZXNp
emVNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJkaXNhYmxlSW1hZ2VMb2FkaW5nIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJkaXNw
bGF5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KTsKKyAgICBiaW5kTWV0aG9kKCJk
aXNwbGF5SW52YWxpZGF0ZWRSZWdpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXlJ
bnZhbGlkYXRlZFJlZ2lvbik7CisgICAgYmluZE1ldGhvZCgiZHVtcEFzVGV4dCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4dCk7CisgICAgYmluZE1ldGhvZCgiZHVtcEJhY2tGb3J3
YXJkTGlzdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEJhY2tGb3J3YXJkTGlzdCk7Cisg
ICAgYmluZE1ldGhvZCgiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wQ2hpbGRGcmFtZXNBc1RleHQpOworICAgIGJpbmRNZXRob2QoImR1bXBDaGlsZEZy
YW1lU2Nyb2xsUG9zaXRpb25zIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFt
ZVNjcm9sbFBvc2l0aW9ucyk7CisgICAgYmluZE1ldGhvZCgiZHVtcERhdGFiYXNlQ2FsbGJhY2tz
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRGF0YWJhc2VDYWxsYmFja3MpOworICAgIGJp
bmRNZXRob2QoImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpk
dW1wRWRpdGluZ0NhbGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcEZyYW1lTG9hZENhbGxi
YWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcyk7Cisg
ICAgYmluZE1ldGhvZCgiZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayk7CisgICAgYmluZE1ldGhv
ZCgiZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKTsKKyAgICBiaW5kTWV0
aG9kKCJkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpk
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wUmVzb3VyY2VS
ZXNwb25zZU1JTUVUeXBlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMpOworICAgIGJpbmRNZXRob2QoImR1bXBTZWxlY3Rpb25SZWN0IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wU2VsZWN0aW9uUmVjdCk7CisgICAgYmluZE1ldGhvZCgi
ZHVtcFN0YXR1c0NhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFdpbmRvd1N0
YXR1c0NoYW5nZXMpOworICAgIGJpbmRNZXRob2QoImR1bXBUaXRsZUNoYW5nZXMiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmR1bXBUaXRsZUNoYW5nZXMpOworICAgIGJpbmRNZXRob2QoImR1bXBQ
ZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcENyZWF0ZVZpZXci
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDcmVhdGVWaWV3KTsKKyAgICBiaW5kTWV0aG9k
KCJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCk7CisgICAg
YmluZE1ldGhvZCgiZW5hYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmVuYWJsZUF1dG9SZXNpemVNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZUluV2ViSW5z
cGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKTsK
KyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOworICAgIGJpbmRN
ZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJu
VmFsdWUpOworICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKTsK
KyAgICBiaW5kTWV0aG9kKCJleGVjQ29tbWFuZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhl
Y0NvbW1hbmQpOworICAgIGJpbmRNZXRob2QoImZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyk7CisjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpCisgICAgYmluZE1ldGhvZCgiZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9u
UGVybWlzc2lvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0
aW9uUGVybWlzc2lvbik7CisjZW5kaWYKKyAgICBiaW5kTWV0aG9kKCJmaW5kU3RyaW5nIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJpc0NvbW1h
bmRFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKTsKKyAg
ICBiaW5kTWV0aG9kKCJoYXNDdXN0b21QYWdlU2l6ZVN0eWxlIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKTsKKyAgICBiaW5kTWV0aG9kKCJsYXllclRyZWVB
c1RleHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCk7CisgICAgYmlu
ZE1ldGhvZCgibG9zZUNvbXBvc2l0b3JDb250ZXh0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjps
b3NlQ29tcG9zaXRvckNvbnRleHQpOworICAgIGJpbmRNZXRob2QoIm1hcmtlclRleHRGb3JMaXN0
SXRlbSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTsKKyAg
ICBiaW5kTWV0aG9kKCJub3RpZnlEb25lIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlE
b25lKTsKKyAgICBiaW5kTWV0aG9kKCJudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk7CisgICAgYmluZE1ldGhv
ZCgibnVtYmVyT2ZQYWdlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyk7
CisgICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OiBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0cyk7CisgICAgYmluZE1ldGhvZCgib2JqQ0lkZW50aXR5SXNFcXVh
bCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNFcXVhbCk7CisgICAgYmlu
ZE1ldGhvZCgib3ZlcnJpZGVQcmVmZXJlbmNlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvdmVy
cmlkZVByZWZlcmVuY2UpOworICAgIGJpbmRNZXRob2QoInBhZ2VQcm9wZXJ0eSIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KTsKKyAgICBiaW5kTWV0aG9kKCJwYWdlU2l6ZUFu
ZE1hcmdpbnNJblBpeGVscyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJn
aW5zSW5QaXhlbHMpOworICAgIGJpbmRNZXRob2QoInBhdGhUb0xvY2FsUmVzb3VyY2UiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UpOworICAgIGJpbmRNZXRob2Qo
InBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhv
ZCgicGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOworICAgIGJpbmRN
ZXRob2QoInF1ZXVlQmFja05hdmlnYXRpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVl
QmFja05hdmlnYXRpb24pOworICAgIGJpbmRNZXRob2QoInF1ZXVlRm9yd2FyZE5hdmlnYXRpb24i
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOworICAgIGJp
bmRNZXRob2QoInF1ZXVlTG9hZGluZ1NjcmlwdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVl
dWVMb2FkaW5nU2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnF1ZXVlTG9hZCk7CisgICAgYmluZE1ldGhvZCgicXVldWVMb2FkSFRNTFN0
cmluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRNTFN0cmluZyk7CisgICAg
YmluZE1ldGhvZCgicXVldWVOb25Mb2FkaW5nU2NyaXB0IiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQpOworICAgIGJpbmRNZXRob2QoInF1ZXVlUmVsb2FkIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZVJlbG9hZCk7CisgICAgYmluZE1ldGhvZCgicmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKKyAgICBiaW5kTWV0aG9kKCJyZXBhaW50
U3dlZXBIb3Jpem9udGFsbHkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlcGFpbnRTd2VlcEhv
cml6b250YWxseSk7CisgICAgYmluZE1ldGhvZCgicmVzZXRQYWdlVmlzaWJpbGl0eSIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk7CisgICAgYmluZE1ldGhvZCgi
c2V0QWNjZXB0c0VkaXRpbmciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0
aW5nKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQp
OworICAgIGJpbmRNZXRob2QoInNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKTsKKyAgICBi
aW5kTWV0aG9kKCJzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQpOworICAgIGJpbmRN
ZXRob2QoInNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk7CisgICAgYmlu
ZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7CisgICAgYmluZE1ldGhvZCgic2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBdXRvZmlsbGVkIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRDYW5PcGVu
V2luZG93cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3MpOworICAg
IGJpbmRNZXRob2QoInNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOworICAgIGJpbmRNZXRob2QoInNldERh
dGFiYXNlUXVvdGEiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEpOwor
ICAgIGJpbmRNZXRob2QoInNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQpOworICAgIGJpbmRNZXRo
b2QoInNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOwor
ICAgIGJpbmRNZXRob2QoInNldEF1ZGlvRGF0YSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXVkaW9EYXRhKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik7CisgICAgYmlu
ZE1ldGhvZCgic2V0SWNvbkRhdGFiYXNlRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZCk7CisgICAgYmluZE1ldGhvZCgic2V0TWluaW11bVRpbWVySW50ZXJ2
YWwiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbik7CisgICAgYmluZE1ldGhvZCgic2V0TW9j
a0dlb2xvY2F0aW9uRXJyb3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2Nh
dGlvbkVycm9yKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOworICAg
IGJpbmRNZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQYWdlVmlzaWJpbGl0eSk7CisgICAgYmluZE1ldGhvZCgic2V0UGx1Z2luc0VuYWJsZWQiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKTsKKyNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQorICAgIGJpbmRNZXRob2QoInNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hy
b25vdXNseSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFz
eW5jaHJvbm91c2x5KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3lu
Y2hyb25vdXNseSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFp
bFN5bmNocm9ub3VzbHkpOworI2VuZGlmCisgICAgYmluZE1ldGhvZCgic2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVk
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRQT1NJWExvY2FsZSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UE9TSVhMb2NhbGUpOworICAgIGJpbmRNZXRob2QoInNldFByaW50aW5nIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQcmludGluZyk7CisgICAgYmluZE1ldGhvZCgic2V0U2Nyb2xs
YmFyUG9saWN5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3kpOwor
ICAgIGJpbmRNZXRob2QoInNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOwor
ICAgIGJpbmRNZXRob2QoInNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk7CisgICAgYmluZE1ldGhvZCgi
c2V0QmFja2luZ1NjYWxlRmFjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5n
U2NhbGVGYWN0b3IpOworICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7CisgICAgYmluZE1ldGhvZCgic2V0
VXNlclN0eWxlU2hlZXRFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5
bGVTaGVldEVuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOwor
ICAgIGJpbmRNZXRob2QoInNldFZhbHVlRm9yVXNlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VmFsdWVGb3JVc2VyKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RDbGVh
ckhlYWRlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJI
ZWFkZXIpOworICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCk7Cisg
ICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QpOworICAgIGJpbmRNZXRob2QoInNldFdpbmRvd0lzS2V5IiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRXaW5kb3dJc0tleSk7CisgICAgYmluZE1ldGhvZCgic2V0WFNTQXVkaXRvckVu
YWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwor
ICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNob3dXZWJJbnNwZWN0b3IpOworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorICAgIGJpbmRN
ZXRob2QoInNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayk7CisjZW5kaWYKKyAgICBi
aW5kTWV0aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzdGFy
dFNwZWVjaElucHV0KTsKKyAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWludCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQpOworICAgIGJpbmRNZXRob2QoIndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKTsK
KyAgICBiaW5kTWV0aG9kKCJ3YWl0VW50aWxEb25lIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjp3
YWl0VW50aWxEb25lKTsKKyAgICBiaW5kTWV0aG9kKCJ3aW5kb3dDb3VudCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d2luZG93Q291bnQpOworICAgIGJpbmRNZXRob2QoInNldFRleHREaXJlY3Rp
b24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24pOworICAgIGJpbmRN
ZXRob2QoInNldEltYWdlc0FsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEltYWdl
c0FsbG93ZWQpOworICAgIGJpbmRNZXRob2QoInNldFNjcmlwdHNBbGxvd2VkIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRTY3JpcHRzQWxsb3dlZCk7CisgICAgYmluZE1ldGhvZCgic2V0U3Rv
cmFnZUFsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VBbGxvd2VkKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zQWxsb3dlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UGx1Z2luc0FsbG93ZWQpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgc3R1YnMu
CisgICAgYmluZE1ldGhvZCgiYWJvcnRNb2RhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJv
cnRNb2RhbCk7CisgICAgYmluZE1ldGhvZCgiYWNjZXNzU3RvcmVkV2ViU2NyaXB0T2JqZWN0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjphY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QpOworICAg
IGJpbmRNZXRob2QoImFkZERpc2FsbG93ZWRVUkwiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZERpc2FsbG93ZWRVUkwpOworICAgIGJpbmRNZXRob2QoImFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNh
Z2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNr
VXNhZ2VGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoImNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KTsKKyAg
ICBiaW5kTWV0aG9kKCJjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTsKKyAgICBiaW5kTWV0aG9kKCJjbGVh
ckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFy
QXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik7CisgICAgYmluZE1ldGhvZCgiY2xlYXJCYWNrRm9y
d2FyZExpc3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTsK
KyAgICBiaW5kTWV0aG9kKCJkdW1wQXNXZWJBcmNoaXZlIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wQXNXZWJBcmNoaXZlKTsKKyAgICBiaW5kTWV0aG9kKCJrZWVwV2ViSGlzdG9yeSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOworICAgIGJpbmRNZXRob2QoIm9i
akNDbGFzc05hbWVPZiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JqQ0NsYXNzTmFtZU9mKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk7CisgICAgYmlu
ZE1ldGhvZCgic2V0Q2FsbENsb3NlT25XZWJWaWV3cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0Q2FsbENsb3NlT25XZWJWaWV3cyk7CisgICAgYmluZE1ldGhvZCgic2V0TWFpbkZyYW1lSXNG
aXJzdFJlc3BvbmRlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJz
dFJlc3BvbmRlcik7CisgICAgYmluZE1ldGhvZCgic2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisgICAg
YmluZE1ldGhvZCgic2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKTsKKyAgICBiaW5k
TWV0aG9kKCJzdG9yZVdlYlNjcmlwdE9iamVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3Rv
cmVXZWJTY3JpcHRPYmplY3QpOworICAgIGJpbmRNZXRob2QoImRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKTsKKyAgICBi
aW5kTWV0aG9kKCJsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4iLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbik7CisgICAgYmluZE1ldGhv
ZCgib3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKTsKKyAgICBiaW5kTWV0aG9kKCJkZWxldGVMb2NhbFN0b3JhZ2VG
b3JPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbik7CisgICAgYmluZE1ldGhvZCgib2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9u
cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0
aW9ucyk7CisgICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgic2V0U2hvdWxkU3Rh
eU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKTsKKyAgICBiaW5k
TWV0aG9kKCJlbmFibGVGaXhlZExheW91dE1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVu
YWJsZUZpeGVkTGF5b3V0TW9kZSk7CisgICAgYmluZE1ldGhvZCgic2V0Rml4ZWRMYXlvdXRTaXpl
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRGaXhlZExheW91dFNpemUpOworICAgIGJpbmRN
ZXRob2QoInNlbGVjdGlvbkFzTWFya3VwIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZWxlY3Rp
b25Bc01hcmt1cCk7CisgICAgYmluZE1ldGhvZCgic2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZp
b3IpOworICAgIGJpbmRNZXRob2QoInRleHRTdXJyb3VuZGluZ05vZGUiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOworCisgICAgLy8gVGhlIGZhbGxiYWNrIG1l
dGhvZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3duIG1ldGhvZCBpcyBpbnZva2VkLgorICAgIGJp
bmRGYWxsYmFja01ldGhvZCgmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZhbGxiYWNrTWV0aG9kKTsK
KworICAgIC8vIFNoYXJlZCBwcm9wZXJ0aWVzLgorICAgIC8vIGdsb2JhbEZsYWcgaXMgdXNlZCBi
eSBhIG51bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4KKyAgICAvLyBMYXlvdXRUZXN0c1xodHRwXHRl
c3RzXHNlY3VyaXR5XGRhdGFVUkwuCisgICAgYmluZFByb3BlcnR5KCJnbG9iYWxGbGFnIiwgJm1f
Z2xvYmFsRmxhZyk7CisgICAgLy8gd2ViSGlzdG9yeUl0ZW1Db3VudCBpcyB1c2VkIGJ5IHRlc3Rz
IGluIExheW91dFRlc3RzXGh0dHBcdGVzdHNcaGlzdG9yeQorICAgIGJpbmRQcm9wZXJ0eSgid2Vi
SGlzdG9yeUl0ZW1Db3VudCIsICZtX3dlYkhpc3RvcnlJdGVtQ291bnQpOworICAgIGJpbmRQcm9w
ZXJ0eSgidGl0bGVUZXh0RGlyZWN0aW9uIiwgJm1fdGl0bGVUZXh0RGlyZWN0aW9uKTsKKyAgICBi
aW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRmb3JtTmFtZSk7CisgICAgYmluZFBy
b3BlcnR5KCJpbnRlcmNlcHRQb3N0TWVzc2FnZSIsICZtX2ludGVyY2VwdFBvc3RNZXNzYWdlKTsK
KyAgICBiaW5kUHJvcGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjp3b3JrZXJUaHJlYWRDb3VudCk7CisgICAgYmluZE1ldGhvZCgic2VuZFdlYkludGVudFJl
c3BvbnNlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UpOwor
ICAgIGJpbmRNZXRob2QoImRlbGl2ZXJXZWJJbnRlbnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRlbGl2ZXJXZWJJbnRlbnQpOworfQorCitMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRl
c3RDb250cm9sbGVyKCkKK3sKK30KKworTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6
fldvcmtRdWV1ZSgpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6V29ya1F1ZXVlOjpwcm9jZXNzV29ya1Nvb24oKQoreworICAgIGlmIChtX2NvbnRyb2xs
ZXItPm1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnRvcExvYWRpbmdGcmFtZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFdlIGRl
bGF5IHByb2Nlc3NpbmcgcXVldWVkIHdvcmsgdG8gYXZvaWQgcmVjdXJzaW9uIHByb2JsZW1zLgor
ICAgICAgICBwb3N0VGFzayhuZXcgV29ya1F1ZXVlVGFzayh0aGlzKSk7CisgICAgfSBlbHNlIGlm
ICghbV9jb250cm9sbGVyLT5tX3dhaXRVbnRpbERvbmUpCisgICAgICAgIG1fY29udHJvbGxlci0+
bV9zaGVsbC0+dGVzdEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OldvcmtRdWV1ZTo6cHJvY2Vzc1dvcmsoKQoreworICAgIFRlc3RTaGVsbCogc2hlbGwgPSBtX2Nv
bnRyb2xsZXItPm1fc2hlbGw7CisgICAgLy8gUXVpdCBkb2luZyB3b3JrIG9uY2UgYSBsb2FkIGlz
IGluIHByb2dyZXNzLgorICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ym9vbCBzdGFydGVkTG9hZCA9IG1fcXVldWUuZmlyc3QoKS0+cnVuKHNoZWxsKTsKKyAgICAgICAg
ZGVsZXRlIG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChzdGFydGVkTG9hZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY29udHJvbGxlci0+bV93YWl0
VW50aWxEb25lICYmICFzaGVsbC0+d2ViVmlld0hvc3QoKS0+dG9wTG9hZGluZ0ZyYW1lKCkpCisg
ICAgICAgIHNoZWxsLT50ZXN0RmluaXNoZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6V29ya1F1ZXVlOjpyZXNldCgpCit7CisgICAgbV9mcm96ZW4gPSBmYWxzZTsKKyAgICB3
aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICBkZWxldGUgbV9xdWV1ZS50YWtlRmly
c3QoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjphZGRXb3Jr
KFdvcmtJdGVtKiB3b3JrKQoreworICAgIGlmIChtX2Zyb3plbikgeworICAgICAgICBkZWxldGUg
d29yazsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3F1ZXVlLmFwcGVuZCh3b3JrKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4dChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcEFz
VGV4dCA9IHRydWU7CisgICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IGZhbHNlOworCisgICAg
Ly8gT3B0aW9uYWwgcGFyYW1hdGVyLCBkZXNjcmliaW5nIHdoZXRoZXIgaXQncyBhbGxvd2VkIHRv
IGR1bXAgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUuCisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9nZW5lcmF0
ZVBpeGVsUmVzdWx0cyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CisKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcERhdGFi
YXNlQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICAvLyBEbyBub3RoaW5nOyB3ZSBkb24ndCB1c2UgdGhpcyBmbGFnIGFueXdoZXJlIGZv
ciBub3cKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MgPSB0cnVlOworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
QmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICBtX2R1bXBCYWNrRm9yd2FyZExpc3QgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2sgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wVXNlckdlc3R1cmVJ
bkZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyA9IHRy
dWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRy
dWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5
cGVzID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnMgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFtZXNBc1RleHQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcENoaWxkRnJhbWVzQXNU
ZXh0ID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMg
PSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkdW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSB0cnVlOworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUGVybWlz
c2lvbkNsaWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgbV9kdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyA9IHRydWU7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1
bXBDcmVhdGVWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICBtX2R1bXBDcmVhdGVWaWV3ID0gdHJ1ZTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAg
ICBtX2FjY2VwdHNFZGl0aW5nID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVu
dGlsRG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgaWYgKCF3ZWJraXRfc3VwcG9ydDo6QmVpbmdEZWJ1Z2dlZCgpKQorICAgICAgICBwb3N0RGVs
YXllZFRhc2sobmV3IE5vdGlmeURvbmVUaW1lZE91dFRhc2sodGhpcyksIG1fc2hlbGwtPmxheW91
dFRlc3RUaW1lb3V0KCkpOworICAgIG1fd2FpdFVudGlsRG9uZSA9IHRydWU7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIFRl
c3QgZGlkbid0IHRpbWVvdXQuIEtpbGwgdGhlIHRpbWVvdXQgdGltZXIuCisgICAgbV90YXNrTGlz
dC5yZXZva2VBbGwoKTsKKworICAgIGNvbXBsZXRlTm90aWZ5RG9uZShmYWxzZSk7CisgICAgcmVz
dWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXBsZXRl
Tm90aWZ5RG9uZShib29sIGlzVGltZW91dCkKK3sKKyAgICBpZiAobV93YWl0VW50aWxEb25lICYm
ICFtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT50b3BMb2FkaW5nRnJhbWUoKSAmJiBtX3dvcmtRdWV1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGlzVGltZW91dCkKKyAgICAgICAgICAgIG1fc2hl
bGwtPnRlc3RUaW1lZE91dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3NoZWxsLT50
ZXN0RmluaXNoZWQoKTsKKyAgICB9CisgICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7Cit9CisK
K2NsYXNzIFdvcmtJdGVtQmFja0ZvcndhcmQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBXb3JrSXRlbUJhY2tGb3J3YXJkKGludCBkaXN0YW5j
ZSkgOiBtX2Rpc3RhbmNlKGRpc3RhbmNlKSB7IH0KKyAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNo
ZWxsKQorICAgIHsKKyAgICAgICAgc2hlbGwtPmdvVG9PZmZzZXQobV9kaXN0YW5jZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBzdGFydCBhIG5hdmlnYXRp
b24/CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX2Rpc3RhbmNlOworfTsKKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgbV93b3Jr
UXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1CYWNrRm9yd2FyZCgtYXJndW1lbnRzWzBdLnRvSW50
MzIoKSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQorICAgICAgICBtX3dvcmtRdWV1ZS5hZGRX
b3JrKG5ldyBXb3JrSXRlbUJhY2tGb3J3YXJkKGFyZ3VtZW50c1swXS50b0ludDMyKCkpKTsKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKworY2xhc3MgV29ya0l0ZW1SZWxvYWQgOiBwdWJsaWMg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBib29sIHJ1bihU
ZXN0U2hlbGwqIHNoZWxsKQorICAgIHsKKyAgICAgICAgc2hlbGwtPnJlbG9hZCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpx
dWV1ZVJlbG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1SZWxvYWQpOworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCitjbGFzcyBXb3JrSXRlbUxvYWRpbmdTY3JpcHQgOiBwdWJsaWMg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBXb3JrSXRlbUxv
YWRpbmdTY3JpcHQoY29uc3Qgc3RyaW5nJiBzY3JpcHQpIDogbV9zY3JpcHQoc2NyaXB0KSB7IH0K
KyAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQorICAgIHsKKyAgICAgICAgc2hlbGwtPndl
YlZpZXcoKS0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0
cmluZzo6ZnJvbVVURjgobV9zY3JpcHQpKSk7CisgICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhN
RTogRGlkIGl0IHJlYWxseSBzdGFydCBhIG5hdmlnYXRpb24/CisgICAgfQorCitwcml2YXRlOgor
ICAgIHN0cmluZyBtX3NjcmlwdDsKK307CisKK2NsYXNzIFdvcmtJdGVtTm9uTG9hZGluZ1Njcmlw
dCA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0geworcHVibGljOgorICAg
IFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChjb25zdCBzdHJpbmcmIHNjcmlwdCkgOiBtX3Njcmlw
dChzY3JpcHQpIHsgfQorICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCisgICAgeworICAg
ICAgICBzaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3Jp
cHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOChtX3NjcmlwdCkpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJpbmcgbV9zY3JpcHQ7Cit9OworCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIG1f
d29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZGluZ1NjcmlwdChhcmd1bWVudHNbMF0u
dG9TdHJpbmcoKSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIG1fd29ya1F1ZXVl
LmFkZFdvcmsobmV3IFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChhcmd1bWVudHNbMF0udG9TdHJp
bmcoKSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCitjbGFzcyBXb3JrSXRlbUxvYWQg
OiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBX
b3JrSXRlbUxvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgdGFyZ2V0KQor
ICAgICAgICA6IG1fdXJsKHVybCkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpIHsgfQorICAg
IGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCisgICAgeworICAgICAgICBzaGVsbC0+d2ViVmll
d0hvc3QoKS0+bG9hZFVSTEZvckZyYW1lKG1fdXJsLCBtX3RhcmdldCk7CisgICAgICAgIHJldHVy
biB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBzdGFydCBhIG5hdmlnYXRpb24/CisgICAg
fQorCitwcml2YXRlOgorICAgIFdlYlVSTCBtX3VybDsKKyAgICBXZWJTdHJpbmcgbV90YXJnZXQ7
Cit9OworCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBXZWJVUkw6OnJlc29sdmUoKSBhbmQgYXZvaWQgR1VSTC4KKyAg
ICAgICAgR1VSTCBjdXJyZW50VVJMID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+
ZG9jdW1lbnQoKS51cmwoKTsKKyAgICAgICAgR1VSTCBmdWxsVVJMID0gY3VycmVudFVSTC5SZXNv
bHZlKGFyZ3VtZW50c1swXS50b1N0cmluZygpKTsKKworICAgICAgICBzdHJpbmcgdGFyZ2V0ID0g
IiI7CisgICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMSAmJiBhcmd1bWVudHNbMV0uaXNT
dHJpbmcoKSkKKyAgICAgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXS50b1N0cmluZygpOwor
CisgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZChmdWxsVVJMLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KHRhcmdldCkpKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK2NsYXNzIFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcgOiBwdWJsaWMgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OldvcmtJdGVtICB7CitwdWJsaWM6CisgICAgV29ya0l0ZW1Mb2FkSFRNTFN0
cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgaHRtbCwgY29uc3QgV2ViVVJMJiBiYXNlVVJMKQorICAg
ICAgICA6IG1faHRtbChodG1sKQorICAgICAgICAsIG1fYmFzZVVSTChiYXNlVVJMKSB7IH0KKyAg
ICBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBodG1sLCBjb25zdCBX
ZWJVUkwmIGJhc2VVUkwsIGNvbnN0IFdlYlVSTCYgdW5yZWFjaGFibGVVUkwpCisgICAgICAgIDog
bV9odG1sKGh0bWwpCisgICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpCisgICAgICAgICwgbV91
bnJlYWNoYWJsZVVSTCh1bnJlYWNoYWJsZVVSTCkgeyB9CisgICAgYm9vbCBydW4oVGVzdFNoZWxs
KiBzaGVsbCkKKyAgICB7CisgICAgICAgIHNoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5s
b2FkSFRNTFN0cmluZygKKyAgICAgICAgICAgIFdlYktpdDo6V2ViRGF0YShtX2h0bWwuZGF0YSgp
LCBtX2h0bWwubGVuZ3RoKCkpLCBtX2Jhc2VVUkwsIG1fdW5yZWFjaGFibGVVUkwpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpzdHJpbmcgbV9odG1s
OworICAgIFdlYlVSTCBtX2Jhc2VVUkw7CisgICAgV2ViVVJMIG1fdW5yZWFjaGFibGVVUkw7Cit9
OworCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Cisg
ICAgICAgIHN0cmluZyBodG1sID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7CisgICAgICAgIFdl
YlVSTCBiYXNlVVJMKEdVUkwoIiIpKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAx
ICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICAgICAgYmFzZVVSTCA9IFdlYlVS
TChHVVJMKGFyZ3VtZW50c1sxXS50b1N0cmluZygpKSk7CisgICAgICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkKKyAgICAgICAgICAgIG1fd29y
a1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcoaHRtbCwgYmFzZVVSTCwg
V2ViVVJMKEdVUkwoYXJndW1lbnRzWzJdLnRvU3RyaW5nKCkpKSkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWRIVE1MU3RyaW5n
KGh0bWwsIGJhc2VVUkwpKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNJZGVudGl0eUlzRXF1YWwoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8IDIpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4g
ZG8gdG8gcmV0dXJuIGFuIGVycm9yLgorICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICByZXN1bHQtPnNldChhcmd1bWVudHNbMF0uaXNFcXVhbChh
cmd1bWVudHNbMV0pKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQor
eworICAgIGlmIChtX3NoZWxsKSB7CisgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0Wm9v
bUxldmVsKGZhbHNlLCAwKTsKKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRUYWJLZXlD
eWNsZXNUaHJvdWdoRWxlbWVudHModHJ1ZSk7CisjaWYgIU9TKERBUldJTikgJiYgIU9TKFdJTkRP
V1MpIC8vIEFjdHVhbGx5LCBUT09MS0lUX0dUSworICAgICAgICAvLyAoQ29uc3RhbnRzIGNvcGll
ZCBiZWNhdXNlIHdlIGNhbid0IGRlcGVuZCBvbiB0aGUgaGVhZGVyIHRoYXQgZGVmaW5lZAorICAg
ICAgICAvLyB0aGVtIGZyb20gdGhpcyBmaWxlLikKKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygp
LT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZjFlOTBmZiwgMHhmZjAwMDAwMCwgMHhmZmM4YzhjOCwg
MHhmZjMyMzIzMik7CisjZW5kaWYKKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5yZW1vdmVB
bGxVc2VyQ29udGVudCgpOworICAgICAgICBXZWJLaXQ6OldlYlNpemUgZW1wdHk7CisgICAgICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+ZGlzYWJsZUF1dG9SZXNpemVNb2RlKCk7CisgICAgICAgIG1f
c2hlbGwtPndlYlZpZXcoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoMSk7CisgICAgfQorICAgIG1f
ZHVtcEFzVGV4dCA9IGZhbHNlOworICAgIG1fZHVtcEFzQXVkaW8gPSBmYWxzZTsKKyAgICBtX2R1
bXBDcmVhdGVWaWV3ID0gZmFsc2U7CisgICAgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IGZhbHNl
OworICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGZhbHNlOworICAgIG1fZHVtcFByb2dy
ZXNzRmluaXNoZWRDYWxsYmFjayA9IGZhbHNlOworICAgIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFt
ZUxvYWRDYWxsYmFja3MgPSBmYWxzZTsKKyAgICBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mg
PSBmYWxzZTsKKyAgICBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzID0gZmFsc2U7Cisg
ICAgbV9kdW1wQmFja0ZvcndhcmRMaXN0ID0gZmFsc2U7CisgICAgbV9kdW1wQ2hpbGRGcmFtZVNj
cm9sbFBvc2l0aW9ucyA9IGZhbHNlOworICAgIG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0ID0gZmFs
c2U7CisgICAgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlcyA9IGZhbHNlOworICAgIG1fZHVtcFNl
bGVjdGlvblJlY3QgPSBmYWxzZTsKKyAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSBmYWxzZTsKKyAg
ICBtX2R1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzID0gZmFsc2U7CisgICAgbV9nZW5lcmF0
ZVBpeGVsUmVzdWx0cyA9IHRydWU7CisgICAgbV9hY2NlcHRzRWRpdGluZyA9IHRydWU7CisgICAg
bV93YWl0VW50aWxEb25lID0gZmFsc2U7CisgICAgbV9jYW5PcGVuV2luZG93cyA9IGZhbHNlOwor
ICAgIG1fdGVzdFJlcGFpbnQgPSBmYWxzZTsKKyAgICBtX3N3ZWVwSG9yaXpvbnRhbGx5ID0gZmFs
c2U7CisgICAgbV9zaG91bGRBZGRGaWxlVG9QYXN0ZWJvYXJkID0gZmFsc2U7CisgICAgbV9zdG9w
UHJvdmlzaW9uYWxGcmFtZUxvYWRzID0gZmFsc2U7CisgICAgbV9kZWZlck1haW5SZXNvdXJjZURh
dGFMb2FkID0gdHJ1ZTsKKyAgICBtX2dsb2JhbEZsYWcuc2V0KGZhbHNlKTsKKyAgICBtX3dlYkhp
c3RvcnlJdGVtQ291bnQuc2V0KDApOworICAgIG1fdGl0bGVUZXh0RGlyZWN0aW9uLnNldCgibHRy
Iik7CisgICAgbV9wbGF0Zm9ybU5hbWUuc2V0KCJjaHJvbWl1bSIpOworICAgIG1faW50ZXJjZXB0
UG9zdE1lc3NhZ2Uuc2V0KGZhbHNlKTsKKyAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBX
ZWJVUkwoKTsKKyAgICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKKworICAgIHdlYmtpdF9zdXBwb3J0
OjpTZXRBY2NlcHRBbGxDb29raWVzKGZhbHNlKTsKKyAgICBXZWJTZWN1cml0eVBvbGljeTo6cmVz
ZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisKKyAgICAvLyBSZXNldCB0aGUgZGVmYXVsdCBx
dW90YSBmb3IgZWFjaCBvcmlnaW4gdG8gNU1CCisgICAgd2Via2l0X3N1cHBvcnQ6OlNldERhdGFi
YXNlUXVvdGEoNSAqIDEwMjQgKiAxMDI0KTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsK
KworICAgIGlmIChtX2Nsb3NlUmVtYWluaW5nV2luZG93cykKKyAgICAgICAgbV9zaGVsbC0+Y2xv
c2VSZW1haW5pbmdXaW5kb3dzKCk7CisgICAgZWxzZQorICAgICAgICBtX2Nsb3NlUmVtYWluaW5n
V2luZG93cyA9IHRydWU7CisgICAgbV93b3JrUXVldWUucmVzZXQoKTsKKyAgICBtX3Rhc2tMaXN0
LnJldm9rZUFsbCgpOworICAgIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVV
bmxvYWQgPSBmYWxzZTsKKyAgICBtX2hhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciA9IGZhbHNl
OworI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRST0lEKQorICAgIFdlYkZvbnRSZW5kZXJpbmc6OnNl
dFN1YnBpeGVsUG9zaXRpb25pbmcoZmFsc2UpOworI2VuZGlmCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCit7CisgICAgbV93ZWJIaXN0b3J5SXRl
bUNvdW50LnNldChtX3NoZWxsLT5uYXZpZ2F0aW9uRW50cnlDb3VudCgpKTsKKworICAgIC8vIE5v
IG1vcmUgbmV3IHdvcmsgYWZ0ZXIgdGhlIGZpcnN0IGNvbXBsZXRlIGxvYWQuCisgICAgbV93b3Jr
UXVldWUuc2V0RnJvemVuKHRydWUpOworCisgICAgaWYgKCFtX3dhaXRVbnRpbERvbmUpCisgICAg
ICAgIG1fd29ya1F1ZXVlLnByb2Nlc3NXb3JrU29vbigpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpwb2xpY3lEZWxlZ2F0ZURvbmUoKQoreworICAgIEFTU0VSVChtX3dhaXRVbnRp
bERvbmUpOworICAgIG1fc2hlbGwtPnRlc3RGaW5pc2hlZCgpOworICAgIG1fd2FpdFVudGlsRG9u
ZSA9IGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYW5PcGVuV2lu
ZG93cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
bV9jYW5PcGVuV2luZG93cyA9IHRydWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisg
ICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
KGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChzdGF0aWNfY2Fz
dDxpbnQ+KG1fc2hlbGwtPndpbmRvd0NvdW50KCkpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9j
bG9zZVJlbWFpbmluZ1dpbmRvd3MgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
bHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwKQorICAgICAg
ICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0QWxsQ29va2llcyhjcHBWYXJpYW50VG9Cb29sKGFy
Z3VtZW50c1swXSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pKTsKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3Bl
Y3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
bV9zaGVsbC0+c2hvd0RldlRvb2xzKCk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fc2hlbGwtPmNsb3Nl
RGV2VG9vbHMoKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3NoZWxsLT5zZXRGb2N1cyhtX3No
ZWxsLT53ZWJWaWV3KCksIGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5
bGVTaGVldEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRz
WzBdLmlzQm9vbCgpKSB7CisgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPnVzZXJTdHls
ZVNoZWV0TG9jYXRpb24gPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlID8gbV91c2VyU3R5
bGVTaGVldExvY2F0aW9uIDogV2ViVVJMKCk7CisgICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVy
ZW5jZXMoKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgbV91
c2VyU3R5bGVTaGVldExvY2F0aW9uID0gd2Via2l0X3N1cHBvcnQ6OkxvY2FsRmlsZVRvRGF0YVVS
TCgKKyAgICAgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZXdyaXRlTGF5b3V0VGVzdHNVUkwoYXJn
dW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+
dXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKKyAgICAg
ICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0
eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzQm9vbCgpKSB7CisgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKKyAgICAgICAg
bV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdHJpbmcgY29t
bWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlKCIi
KTsKKyAgICAvLyBJZ25vcmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGlzIHVzZXJJbnRl
cmZhY2UpCisgICAgLy8gc2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFjdGlv
bi4KKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1syXS5pc1N0cmlu
ZygpKQorICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmluZygpOworCisgICAgLy8g
Tm90ZTogd2Via2l0J3MgdmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhlIGJvb2xlYW4sIHNvIG5l
aXRoZXIgZG8gd2UuCisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhl
Y3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRF
bmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPD0gMCB8fCAhYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBjb21tYW5kID0gYXJndW1lbnRzWzBdLnRvU3RyaW5n
KCk7CisgICAgYm9vbCBydiA9IG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmlz
Q29tbWFuZEVuYWJsZWQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSk7CisgICAgcmVzdWx0
LT5zZXQocnYpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpIHsKKyAgICAgICAgYm9vbCBibG9ja1BvcHVwcyA9IGFyZ3VtZW50c1swXS50b0Jv
b2xlYW4oKTsKKyAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+amF2YVNjcmlwdENhbk9w
ZW5XaW5kb3dzQXV0b21hdGljYWxseSA9ICFibG9ja1BvcHVwczsKKyAgICAgICAgbV9zaGVsbC0+
YXBwbHlQcmVmZXJlbmNlcygpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SW1hZ2VzQWxsb3dlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fc2hl
bGwtPndlYlBlcm1pc3Npb25zKCktPnNldEltYWdlc0FsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9v
bGVhbigpKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U2NyaXB0c0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9u
cygpLT5zZXRTY3JpcHRzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9y
YWdlQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpCisgICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCktPnNldFN0b3JhZ2VB
bGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNBbGxvd2VkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAg
ICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0UGx1Z2luc0FsbG93ZWQoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIFdlIGhhdmUg
bm8gbmVlZCB0byBzdXBwb3J0IERhc2hib2FyZCBDb21wYXRpYmlsaXR5IE1vZGUgKG1hYy1vbmx5
KQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBw
bGljYXRpb24gY2FjaGUgcXVvdGFzLgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGUgZm9y
IGFuIG9yaWdpbi4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgorICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIG9yaWdpbnMgdGhhdCBo
YXZlIGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdp
bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBw
bGljYXRpb24gY2FjaGUgZm9yIGFuIG9yaWdpbi4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50LgorICAgIC8vIEN1cnJlbnRseSBvbmx5IGhhcyBhIG5vbi1udWxsIGltcGxlbWVudGF0
aW9uIG9uIFFULgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKKyAgICAgICAgYm9vbCBlbmFibGUg
PSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOworICAgICAgICBib29sIHBlcm1pc3NpdmUg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAxICYmIGFyZ3VtZW50c1sx
XS5pc0Jvb2woKSkKKyAgICAgICAgICAgIHBlcm1pc3NpdmUgPSBhcmd1bWVudHNbMV0udmFsdWUu
Ym9vbFZhbHVlOworICAgICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZShlbmFibGUsIHBlcm1pc3NpdmUpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVn
YXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBt
X3NoZWxsLT53ZWJWaWV3SG9zdCgpLT53YWl0Rm9yUG9saWN5RGVsZWdhdGUoKTsKKyAgICBtX3dh
aXRVbnRpbERvbmUgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAg
ICAgICBzdHJpbmcgaGVhZGVyID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7CisgICAgICAgIGlm
ICghaGVhZGVyLmVtcHR5KCkpCisgICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5h
ZGRDbGVhckhlYWRlcihTdHJpbmc6OmZyb21VVEY4KGhlYWRlci5jX3N0cigpKSk7CisgICAgfQor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3NoZWxsLT53
ZWJWaWV3SG9zdCgpLT5zZXRCbG9ja1JlZGlyZWN0cyhhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZh
bHVlKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3NoZWxsLT53ZWJW
aWV3SG9zdCgpLT5zZXRSZXF1ZXN0UmV0dXJuTnVsbChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZh
bHVlKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzdHJpbmcgdXJsID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7
CisjaWYgT1MoV0lORE9XUykKKyAgICBpZiAoIXVybC5maW5kKCIvdG1wLyIpKSB7CisgICAgICAg
IC8vIFdlIHdhbnQgYSB0ZW1wIGZpbGUuCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHRlbXBQcmVm
aXhMZW5ndGggPSA1OworICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IE1BWF9QQVRIOworICAg
ICAgICBPd25BcnJheVB0cjxXQ0hBUj4gdGVtcFBhdGggPSBhZG9wdEFycmF5UHRyKG5ldyBXQ0hB
UltidWZmZXJTaXplXSk7CisgICAgICAgIERXT1JEIHRlbXBMZW5ndGggPSA6OkdldFRlbXBQYXRo
VyhidWZmZXJTaXplLCB0ZW1wUGF0aC5nZXQoKSk7CisgICAgICAgIGlmICh0ZW1wTGVuZ3RoICsg
dXJsLmxlbmd0aCgpIC0gdGVtcFByZWZpeExlbmd0aCArIDEgPiBidWZmZXJTaXplKSB7CisgICAg
ICAgICAgICBidWZmZXJTaXplID0gdGVtcExlbmd0aCArIHVybC5sZW5ndGgoKSAtIHRlbXBQcmVm
aXhMZW5ndGggKyAxOworICAgICAgICAgICAgdGVtcFBhdGggPSBhZG9wdEFycmF5UHRyKG5ldyBX
Q0hBUltidWZmZXJTaXplXSk7CisgICAgICAgICAgICB0ZW1wTGVuZ3RoID0gR2V0VGVtcFBhdGhX
KGJ1ZmZlclNpemUsIHRlbXBQYXRoLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0ZW1wTGVu
Z3RoIDwgYnVmZmVyU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaW5nIHJlc3VsdFBhdGgo
V2ViU3RyaW5nKHRlbXBQYXRoLmdldCgpLCB0ZW1wTGVuZ3RoKS51dGY4KCkpOworICAgICAgICBy
ZXN1bHRQYXRoLmFwcGVuZCh1cmwuc3Vic3RyKHRlbXBQcmVmaXhMZW5ndGgpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXQocmVzdWx0UGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KworICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIHVzZSBmaWxlOi8vLy8gd2hpY2ggd2UgcmVzb2x2
ZSBhcyBhIFVOQyBwYXRoLiBOb3JtYWxpemUKKyAgICAvLyB0aGVtIHRvIGp1c3QgZmlsZTovLy8u
CisgICAgc3RyaW5nIGxvd2VyVXJsID0gdXJsOworICAgIHRyYW5zZm9ybShsb3dlclVybC5iZWdp
bigpLCBsb3dlclVybC5lbmQoKSwgbG93ZXJVcmwuYmVnaW4oKSwgOjp0b2xvd2VyKTsKKyAgICB3
aGlsZSAoIWxvd2VyVXJsLmZpbmQoImZpbGU6Ly8vLyIpKSB7CisgICAgICAgIHVybCA9IHVybC5z
dWJzdHIoMCwgOCkgKyB1cmwuc3Vic3RyKDkpOworICAgICAgICBsb3dlclVybCA9IGxvd2VyVXJs
LnN1YnN0cigwLCA4KSArIGxvd2VyVXJsLnN1YnN0cig5KTsKKyAgICB9CisgICAgcmVzdWx0LT5z
ZXQod2Via2l0X3N1cHBvcnQ6OlJld3JpdGVMYXlvdXRUZXN0c1VSTCh1cmwpLnNwZWMoKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWco
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworICAgIG1fc2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCA9IHRydWU7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9h
ZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHRydWU7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29s
KCkpCisgICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVu
dHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFNlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgYW5p
bWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQorewor
ICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7
CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQW5p
bWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1lLT5hbmltYXRpb25Db250cm9s
bGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBXZWJFbGVtZW50IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJ
ZChlbGVtZW50SWQpOworICAgIGlmIChlbGVtZW50LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1l
bnQsIGFuaW1hdGlvbk5hbWUsIHRpbWUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVy
OjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBw
cm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKK3sK
KyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgp
OworICAgIGlmICghd2ViRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkFu
aW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFtZS0+YW5pbWF0aW9uQ29udHJv
bGxlcigpOworICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5
SWQoZWxlbWVudElkKTsKKyAgICBpZiAoZWxlbWVudC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBjb250cm9sbGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxl
bWVudCwgcHJvcGVydHlOYW1lLCB0aW1lKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmlu
ZyYgZWxlbWVudElkKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZp
ZXcoKS0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0
RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKyAgICBpZiAoZWxlbWVudC5pc051bGwoKSB8fCAhZWxl
bWVudC5oYXNUYWdOYW1lKCJpbnB1dCIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBX
ZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gZWxlbWVudC50bzxXZWJJbnB1dEVsZW1lbnQ+
KCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRvQ29tcGxldGUoKTsKK30KKworaW50IExh
eW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKQoreworICAgIFdl
YkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7CisgICAg
aWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgV2ViQW5pbWF0aW9uQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCk7Cisg
ICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gY29u
dHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXQoZmFsc2UpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNb
Ml0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTdHJpbmcgYW5pbWF0aW9uTmFtZSA9IGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOworICAgICAgICBkb3VibGUgdGltZSA9IGFy
Z3VtZW50c1sxXS50b0RvdWJsZSgpOworICAgICAgICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSk7CisgICAgICAgIHJlc3VsdC0+c2V0KHBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVs
ZW1lbnRJZCkpOworICAgIH0KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSAm
JiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkgewor
ICAgICAgICBXZWJTdHJpbmcgcHJvcGVydHlOYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFy
Z3VtZW50c1swXSk7CisgICAgICAgIGRvdWJsZSB0aW1lID0gYXJndW1lbnRzWzFdLnRvRG91Ymxl
KCk7CisgICAgICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmco
YXJndW1lbnRzWzJdKTsKKyAgICAgICAgcmVzdWx0LT5zZXQocGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKHByb3BlcnR5TmFtZSwgdGltZSwgZWxlbWVudElkKSk7CisgICAgfQor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMF0pOworICAgIHJlc3VsdC0+c2V0KGVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZChlbGVtZW50SWQpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSA0KSB7CisgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpbnQgbWluV2lkdGggPSBjcHBWYXJpYW50VG9JbnQzMihhcmd1bWVudHNbMF0p
OworICAgIGludCBtaW5IZWlnaHQgPSBjcHBWYXJpYW50VG9JbnQzMihhcmd1bWVudHNbMV0pOwor
ICAgIFdlYktpdDo6V2ViU2l6ZSBtaW5TaXplKG1pbldpZHRoLCBtaW5IZWlnaHQpOworCisgICAg
aW50IG1heFdpZHRoID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzJdKTsKKyAgICBpbnQg
bWF4SGVpZ2h0ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzNdKTsKKyAgICBXZWJLaXQ6
OldlYlNpemUgbWF4U2l6ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KTsKKworICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUobWluU2l6ZSwgbWF4U2l6ZSk7CisgICAgcmVz
dWx0LT5zZXQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVB
dXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9MikgeworICAgICAgICBy
ZXN1bHQtPnNldChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IG5ld1dp
ZHRoID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBdKTsKKyAgICBpbnQgbmV3SGVpZ2h0
ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzFdKTsKKyAgICBXZWJLaXQ6OldlYlNpemUg
bmV3U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKworICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0
KCktPnNldFdpbmRvd1JlY3QoV2ViUmVjdCgwLCAwLCBuZXdTaXplLndpZHRoLCBuZXdTaXplLmhl
aWdodCkpOworICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+ZGlzYWJsZUF1dG9SZXNpemVNb2RlKCk7
CisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5yZXNpemUobmV3U2l6ZSk7CisgICAgcmVzdWx0LT5z
ZXQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZl
QW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX3NoZWxsLT5wcmVmZXJlbmNl
cygpLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBmYWxzZTsKKyAgICBtX3NoZWxsLT5hcHBs
eVByZWZlcmVuY2VzKCk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgV2Vi
S2l0IGljb24gZGF0YWJhc2UuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQobV9zaGVs
bC0+d2ViVmlldygpLT5kaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KCkpOworfQorCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0
b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSB8
fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBF
TkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgbV9zaGVsbC0+bm90aWZpY2F0aW9uUHJl
c2VudGVyKCktPmdyYW50UGVybWlzc2lvbihjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzBdKSk7CisjZW5kaWYKKyAgICByZXN1bHQtPnNldCh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAg
ICAgICByZXN1bHQtPnNldChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAgICBp
ZiAobV9zaGVsbC0+bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnNpbXVsYXRlQ2xpY2soY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSkpKQorICAgICAgICByZXN1bHQtPnNldCh0cnVl
KTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOworfQorI2Vu
ZGlmCisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1
bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXREb21haW5SZWxheGF0aW9uRm9yYmlk
ZGVuKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1sxXSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZl
ck1haW5SZXNvdXJjZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSkKKyAg
ICAgICAgbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkID0gY3BwVmFyaWFudFRvQm9vbChhcmd1
bWVudHNbMF0pOworfQorCisvLworLy8gVW5pbXBsZW1lbnRlZCBzdHVicworLy8KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzV2ViQXJjaGl2ZShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0
UmVzcG9uZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmR1bXBTZWxlY3Rpb25SZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9kdW1wU2VsZWN0aW9uUmVjdCA9IHRy
dWU7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBXZWJWaWV3SG9zdCogaG9zdCA9IG1fc2hlbGwtPndlYlZpZXdIb3N0
KCk7CisgICAgY29uc3QgV2ViS2l0OjpXZWJTaXplJiBzaXplID0gbV9zaGVsbC0+d2ViVmlldygp
LT5zaXplKCk7CisgICAgV2ViUmVjdCByZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0
KTsKKyAgICBob3N0LT51cGRhdGVQYWludFJlY3QocmVjdCk7CisgICAgaG9zdC0+cGFpbnRJbnZh
bGlkYXRlZFJlZ2lvbigpOworICAgIGhvc3QtPmRpc3BsYXlSZXBhaW50TWFzaygpOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5
SW52YWxpZGF0ZWRSZWdpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICBXZWJWaWV3SG9zdCogaG9zdCA9IG1fc2hlbGwtPndlYlZp
ZXdIb3N0KCk7CisgICAgaG9zdC0+cGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpOworICAgIGhvc3Qt
PmRpc3BsYXlSZXBhaW50TWFzaygpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjp0ZXN0UmVwYWludChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV90ZXN0UmVwYWludCA9IHRydWU7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlcGFp
bnRTd2VlcEhvcml6b250YWxseShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgbV9zd2VlcEhvcml6b250YWxseSA9IHRydWU7CisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0Zvcndh
cmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmtlZXBXZWJIaXN0b3J5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCAg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzdG9yZVdlYlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphY2Nlc3NTdG9yZWRX
ZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FsbENs
b3NlT25XZWJWaWV3cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRz
WzBdLmlzQm9vbCgpKSB7CisgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOworICAg
ICAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5h
YmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29s
KCkpIHsKKyAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+WFNTQXVkaXRvckVuYWJsZWQg
PSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOworICAgICAgICBtX3NoZWxsLT5hcHBseVBy
ZWZlcmVuY2VzKCk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFdlYlZlY3Rvcjx2ODo6TG9j
YWw8djg6OlZhbHVlPiA+IHZhbHVlczsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYm
IGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7Cisg
ICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3Vt
ZW50c1sxXSkpOworICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5n
IGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0CisgICAgICAgIC8vIHNrZXRjaHks
IGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgorICAgICAgICBtX3NoZWxs
LT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEsICZ2YWx1ZXMpOworICAgIH0K
KyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAvLyBTaW5jZSBvbmx5IG9uZSBzY3JpcHQgd2Fz
IGFkZGVkLCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKKyAgICBpZiAodmFsdWVzLnNpemUo
KSA9PSAxICYmICF2YWx1ZXNbMF0uSXNFbXB0eSgpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHNjcmlwdFZhbHVlID0gdmFsdWVzWzBdOworICAgICAgICAvLyBGSVhNRTogVGhlcmUg
YXJlIG1hbnkgbW9yZSB0eXBlcyB0aGF0IGNhbiBiZSBoYW5kbGVkLgorICAgICAgICBpZiAoc2Ny
aXB0VmFsdWUtPklzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIHY4OjpTdHJpbmc6OkFzY2lpVmFs
dWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7CisgICAgICAgICAgICByZXN1bHQtPnNldChzdGQ6OnN0
cmluZygqYXNjaWlWOCkpOworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc0Jvb2xl
YW4oKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub0Jvb2xlYW4oKS0+
VmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bWJlcigpKSB7Cisg
ICAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9OdW1iZXIo
KS0+VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVsbCgpKQor
ICAgICAgICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVu
dHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgLy8gVGhpcyByZWxpZXMg
b24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJp
dAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0
cyBkby4KKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAx
LCAxKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRz
WzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5zZXRJc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4oCisgICAgICAgIGFyZ3VtZW50c1swXS50b0ludDMyKCksCisg
ICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMV0pKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgeworICAgICAgICBtX3NoZWxsLT5w
cmVmZXJlbmNlcygpLT5hbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWU7CisgICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMo
KTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV9zaGVs
bC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0RGlzcGxheWluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQo
YXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKKworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgp
KSB7CisgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CisgICAgICAgIG1fc2hlbGwt
PmFwcGx5UHJlZmVyZW5jZXMoKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250
ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKKyAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0UnVubmluZ0luc2VjdXJl
Q29udGVudEFsbG93ZWQoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKK30KKworLy8gTmVlZCB0aGVzZSBjb252ZXJzaW9ucyBiZWNhdXNlIHRo
ZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGZvciBib29sZWFucworLy8gbWF5IHZhcnkgLSBmb3IgZXhh
bXBsZSwgb24gbWFjICIxIiBhbmQgIjAiIGFyZSB1c2VkIGZvciBib29sZWFuLgorYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50JiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNCb29sKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jv
b2xlYW4oKTsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
LnRvSW50MzIoKTsKKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICBzdHJpbmcg
dmFsdWVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpOworICAgICAgICBpZiAodmFsdWVTdHJpbmcg
PT0gInRydWUiIHx8IHZhbHVlU3RyaW5nID09ICIxIikKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gImZhbHNlIiB8fCB2YWx1ZVN0cmluZyA9PSAi
MCIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGxvZ0Vycm9yVG9Db25z
b2xlKCJJbnZhbGlkIHZhbHVlLiBFeHBlY3RlZCBib29sZWFuIHZhbHVlLiIpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworaW50MzJfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRv
SW50MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7CisgICAgaWYgKHZhbHVlLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKCk7
CisgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmluZ1NvdXJjZS5kYXRhKCk7CisgICAg
ICAgIGNoYXIqIGVuZDsKKyAgICAgICAgbG9uZyBudW1iZXIgPSBzdHJ0b2woc291cmNlLCAmZW5k
LCAxMCk7CisgICAgICAgIGlmIChlbmQgPT0gc291cmNlICsgc3RyaW5nU291cmNlLmxlbmd0aCgp
ICYmIG51bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgJiYgbnVtYmVyIDw9
IG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihudW1iZXIpOworICAgIH0KKyAgICBsb2dFcnJvclRvQ29uc29sZSgi
SW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgaW50ZWdlciB2YWx1ZS4iKTsK
KyAgICByZXR1cm4gMDsKK30KKworV2ViU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpjcHBW
YXJpYW50VG9XZWJTdHJpbmcoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKCF2
YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZhbGlkIHZh
bHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBzdHJpbmcgdmFsdWUuIik7CisgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUudG9TdHJpbmcoKSk7Cit9CisKK1ZlY3RvcjxXZWJTdHJpbmc+IExheW91dFRlc3RDb250
cm9sbGVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheShjb25zdCBDcHBWYXJpYW50JiB2YWx1
ZSkKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgbG9nRXJyb3JUb0Nv
bnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHByZWZlcmVuY2UuIEV4cGVjdGVkIG9iamVjdCB2YWx1
ZS4iKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJTdHJpbmc+KCk7CisgICAgfQorICAgIFZl
Y3RvcjxXZWJTdHJpbmc+IHJlc3VsdFZlY3RvcjsKKyAgICBWZWN0b3I8c3RyaW5nPiBzdHJpbmdW
ZWN0b3IgPSB2YWx1ZS50b1N0cmluZ1ZlY3RvcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3RyaW5nVmVjdG9yLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5k
KFdlYlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nVmVjdG9yW2ldLmNfc3RyKCkpKTsKKyAgICByZXR1
cm4gcmVzdWx0VmVjdG9yOworfQorCisvLyBTZXRzIG1hcCBiYXNlZCBvbiBzY3JpcHRGb250UGFp
cnMsIGEgY29sbGFwc2VkIHZlY3RvciBvZiBwYWlycyBvZiBJU08gMTU5MjQKKy8vIGZvdXItbGV0
dGVyIHNjcmlwdCBjb2RlIGFuZCBmb250IHN1Y2ggYXM6CisvLyB7ICJBcmFiIiwgIk15IEFyYWJp
YyBGb250IiwgIkdyZWsiLCAiTXkgR3JlZWsgRm9udCIgfQorc3RhdGljIHZvaWQgc2V0Rm9udE1h
cChXZWJQcmVmZXJlbmNlczo6U2NyaXB0Rm9udEZhbWlseU1hcCYgbWFwLCBjb25zdCBWZWN0b3I8
V2ViU3RyaW5nPiYgc2NyaXB0Rm9udFBhaXJzKQoreworICAgIG1hcC5jbGVhcigpOworICAgIHNp
emVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSArIDEgPCBzY3JpcHRGb250UGFpcnMuc2l6ZSgpKSB7
CisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc2NyaXB0ID0gc2NyaXB0Rm9udFBhaXJzW2krK107
CisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZm9udCA9IHNjcmlwdEZvbnRQYWlyc1tpKytdOwor
CisgICAgICAgIGludDMyX3QgY29kZSA9IHVfZ2V0UHJvcGVydHlWYWx1ZUVudW0oVUNIQVJfU0NS
SVBULCBzY3JpcHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmIChjb2RlID49IDAgJiYgY29k
ZSA8IFVTQ1JJUFRfQ09ERV9MSU1JVCkKKyAgICAgICAgICAgIG1hcC5zZXQoc3RhdGljX2Nhc3Q8
aW50Pihjb2RlKSwgZm9udCk7CisgICAgfQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc3RyaW5nIGtleSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAg
IENwcFZhcmlhbnQgdmFsdWUgPSBhcmd1bWVudHNbMV07CisgICAgV2ViUHJlZmVyZW5jZXMqIHBy
ZWZzID0gbV9zaGVsbC0+cHJlZmVyZW5jZXMoKTsKKyAgICBpZiAoa2V5ID09ICJXZWJLaXRTdGFu
ZGFyZEZvbnQiKQorICAgICAgICBwcmVmcy0+c3RhbmRhcmRGb250RmFtaWx5ID0gY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEZpeGVkRm9u
dCIpCisgICAgICAgIHByZWZzLT5maXhlZEZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJp
bmcodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2VyaWZGb250IikKKyAgICAg
ICAgcHJlZnMtPnNlcmlmRm9udEZhbWlseSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1ZSk7
CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRTYW5zU2VyaWZGb250IikKKyAgICAgICAgcHJl
ZnMtPnNhbnNTZXJpZkZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOwor
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Q3Vyc2l2ZUZvbnQiKQorICAgICAgICBwcmVmcy0+
Y3Vyc2l2ZUZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOworICAgIGVs
c2UgaWYgKGtleSA9PSAiV2ViS2l0RmFudGFzeUZvbnQiKQorICAgICAgICBwcmVmcy0+ZmFudGFz
eUZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOworICAgIGVsc2UgaWYg
KGtleSA9PSAiV2ViS2l0U3RhbmRhcmRGb250TWFwIikKKyAgICAgICAgc2V0Rm9udE1hcChwcmVm
cy0+c3RhbmRhcmRGb250TWFwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheSh2YWx1ZSkpOwor
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Rml4ZWRGb250TWFwIikKKyAgICAgICAgc2V0Rm9u
dE1hcChwcmVmcy0+Zml4ZWRGb250TWFwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheSh2YWx1
ZSkpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2VyaWZGb250TWFwIikKKyAgICAgICAg
c2V0Rm9udE1hcChwcmVmcy0+c2VyaWZGb250TWFwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJh
eSh2YWx1ZSkpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2Fuc1NlcmlmRm9udE1hcCIp
CisgICAgICAgIHNldEZvbnRNYXAocHJlZnMtPnNhbnNTZXJpZkZvbnRNYXAsIGNwcFZhcmlhbnRU
b1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRDdXJz
aXZlRm9udE1hcCIpCisgICAgICAgIHNldEZvbnRNYXAocHJlZnMtPmN1cnNpdmVGb250TWFwLCBj
cHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheSh2YWx1ZSkpOworICAgIGVsc2UgaWYgKGtleSA9PSAi
V2ViS2l0RmFudGFzeUZvbnRNYXAiKQorICAgICAgICBzZXRGb250TWFwKHByZWZzLT5mYW50YXN5
Rm9udE1hcCwgY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkodmFsdWUpKTsKKyAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdERlZmF1bHRGb250U2l6ZSIpCisgICAgICAgIHByZWZzLT5kZWZhdWx0
Rm9udFNpemUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09
ICJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIpCisgICAgICAgIHByZWZzLT5kZWZhdWx0Rml4
ZWRGb250U2l6ZSA9IGNwcFZhcmlhbnRUb0ludDMyKHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkg
PT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCisgICAgICAgIHByZWZzLT5taW5pbXVtRm9udFNp
emUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJL
aXRNaW5pbXVtTG9naWNhbEZvbnRTaXplIikKKyAgICAgICAgcHJlZnMtPm1pbmltdW1Mb2dpY2Fs
Rm9udFNpemUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09
ICJXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSIpCisgICAgICAgIHByZWZzLT5kZWZhdWx0
VGV4dEVuY29kaW5nTmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1ZSk7CisgICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpCisgICAgICAgIHByZWZzLT5q
YXZhU2NyaXB0RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYg
KGtleSA9PSAiV2ViS2l0V2ViU2VjdXJpdHlFbmFibGVkIikKKyAgICAgICAgcHJlZnMtPndlYlNl
Y3VyaXR5RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtl
eSA9PSAiV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSIpCisgICAg
ICAgIHByZWZzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5ID0gY3BwVmFy
aWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXREaXNwbGF5SW1h
Z2VzS2V5IikKKyAgICAgICAgcHJlZnMtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA9IGNwcFZh
cmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0UGx1Z2luc0Vu
YWJsZWQiKQorICAgICAgICBwcmVmcy0+cGx1Z2luc0VuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29s
KHZhbHVlKTsKKyAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERPTVBhc3RlQWxsb3dlZFByZWZl
cmVuY2VLZXkiKQorICAgICAgICBwcmVmcy0+RE9NUGFzdGVBbGxvd2VkID0gY3BwVmFyaWFudFRv
Qm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkUHJlZmVyZW5jZUtleSIpCisgICAgICAgIHByZWZzLT5kZXZlbG9wZXJFeHRyYXNFbmFi
bGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJL
aXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0IikKKyAgICAgICAgcHJlZnMtPnNocmlua3NT
dGFuZGFsb25lSW1hZ2VzVG9GaXQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNl
IGlmIChrZXkgPT0gIldlYktpdFRleHRBcmVhc0FyZVJlc2l6YWJsZSIpCisgICAgICAgIHByZWZz
LT50ZXh0QXJlYXNBcmVSZXNpemFibGUgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBl
bHNlIGlmIChrZXkgPT0gIldlYktpdEphdmFFbmFibGVkIikKKyAgICAgICAgcHJlZnMtPmphdmFF
bmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpCisgICAgICAgIHByZWZzLT51c2VzUGFn
ZUNhY2hlID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVmZXJlbmNlS2V5IikKKyAgICAgICAgcHJl
ZnMtPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwor
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCIp
CisgICAgICAgIHByZWZzLT5qYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkID0gY3BwVmFyaWFu
dFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRYU1NBdWRpdG9yRW5h
YmxlZCIpCisgICAgICAgIHByZWZzLT5YU1NBdWRpdG9yRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jv
b2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0TG9jYWxTdG9yYWdlRW5hYmxl
ZFByZWZlcmVuY2VLZXkiKQorICAgICAgICBwcmVmcy0+bG9jYWxTdG9yYWdlRW5hYmxlZCA9IGNw
cFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIikKKyAgICAgICAgcHJlZnMtPm9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOworICAgIGVs
c2UgaWYgKGtleSA9PSAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiKQorICAgICAgICBw
cmVmcy0+dGFic1RvTGlua3MgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdFdlYkdMRW5hYmxlZCIpCisgICAgICAgIHByZWZzLT5leHBlcmltZW50
YWxXZWJHTEVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBlbHNlIGlmIChr
ZXkgPT0gIldlYktpdENTU1JlZ2lvbnNFbmFibGVkIikKKyAgICAgICAgcHJlZnMtPmV4cGVyaW1l
bnRhbENTU1JlZ2lvbnNFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxlZCIpCisgICAgICAgIHByZWZz
LT5leHBlcmltZW50YWxDU1NHcmlkTGF5b3V0RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFs
dWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
IikKKyAgICAgICAgcHJlZnMtPmh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCA9IGNwcFZhcmlhbnRU
b0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RW5hYmxlQ2FyZXRCcm93
c2luZyIpCisgICAgICAgIHByZWZzLT5jYXJldEJyb3dzaW5nRW5hYmxlZCA9IGNwcFZhcmlhbnRU
b0Jvb2wodmFsdWUpOworICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0QWxsb3dEaXNwbGF5aW5n
SW5zZWN1cmVDb250ZW50IikKKyAgICAgICAgcHJlZnMtPmFsbG93RGlzcGxheU9mSW5zZWN1cmVD
b250ZW50ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRBbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQiKQorICAgICAgICBwcmVmcy0+YWxsb3dS
dW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKKyAgICBl
bHNlIGlmIChrZXkgPT0gIldlYktpdENTU0N1c3RvbUZpbHRlckVuYWJsZWQiKQorICAgICAgICBw
cmVmcy0+Y3NzQ3VzdG9tRmlsdGVyRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwor
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0V2ViQXVkaW9FbmFibGVkIikgeworICAgICAgICBB
U1NFUlQoY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0
cmluZyBtZXNzYWdlKCJJbnZhbGlkIG5hbWUgZm9yIHByZWZlcmVuY2U6ICIpOworICAgICAgICBt
ZXNzYWdlLmFwcGVuZChrZXkpOworICAgICAgICBsb2dFcnJvclRvQ29uc29sZShtZXNzYWdlKTsK
KyAgICB9CisgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcHJpbnRmKCJDT05TT0xFIE1FU1NBR0U6IEphdmFT
Y3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBMYXlvdXRUZXN0Q29udHJvbGxl
clxuIik7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKKyAgICAgICAgfHwgIWFyZ3VtZW50
c1syXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdlYktpdDo6V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygp
KSk7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJT
ZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCisgICAgICAgIHVy
bCwKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCisgICAgICAg
IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAorICAgICAgICBhcmd1bWVudHNb
M10udG9Cb29sZWFuKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwg
IWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCisgICAgICAgIHx8ICFhcmd1bWVudHNbMl0uaXNTdHJp
bmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOworICAgIGlm
ICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViU2VjdXJpdHlQb2xp
Y3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAorICAgICAgICB1cmwsCisgICAg
ICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAorICAgICAgICBjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKKyAgICAgICAgYXJndW1lbnRzWzNdLnRvQm9v
bGVhbigpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFz
ZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICB3ZWJraXRfc3VwcG9ydDo6Q2xlYXJBbGxE
YXRhYmFzZXMoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VR
dW90YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmICgoYXJndW1lbnRzLnNpemUoKSA+
PSAxKSAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlNldERhdGFiYXNlUXVvdGEoYXJndW1lbnRzWzBdLnRvSW50MzIoKSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSkKKyAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkuY19z
dHIoKSk7Cit9CisKKy8vIFBhcnNlIGEgc2luZ2xlIGFyZ3VtZW50LiBUaGUgbWV0aG9kIHJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhcmd1bWVudCB0aGF0CisvLyBpcyBhIG51bWJlciBvciBp
ZiB0aGVyZSBpcyBubyBhcmd1bWVudCBhdCBhbGwuIEl0IHJldHVybnMgZmFsc2Ugb25seSBpZiB0
aGVyZQorLy8gaXMgc29tZSBhcmd1bWVudCB0aGF0IGlzIG5vdCBhIG51bWJlci4gVGhlIHZhbHVl
IHBhcmFtZXRlciBpcyBmaWxsZWQgd2l0aCB0aGUKKy8vIHBhcnNlZCBudW1iZXIsIG9yIGdpdmVu
IHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50Lgorc3RhdGljIGJvb2wgcGFyc2VD
cHBBcmd1bWVudEludDMyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBpbnQgYXJn
SW5kZXgsIGludCogdmFsdWUsIGludCBkZWZhdWx0VmFsdWUpCit7CisgICAgaWYgKHN0YXRpY19j
YXN0PGludD4oYXJndW1lbnRzLnNpemUoKSkgPiBhcmdJbmRleCkgeworICAgICAgICBpZiAoIWFy
Z3VtZW50c1thcmdJbmRleF0uaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgKnZhbHVlID0gYXJndW1lbnRzW2FyZ0luZGV4XS50b0ludDMyKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAqdmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlUGFnZVNpemVQYXJhbWV0ZXJzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGFyZ09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCogcGFnZVdpZHRoSW5QaXhlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIHBhZ2VIZWlnaHRJblBpeGVscykKK3sKKyAgICAvLyBXZWJLaXQgaXMgdXNp
bmcgdGhlIHdpbmRvdyB3aWR0aC9oZWlnaHQgb2YgRHVtcFJlbmRlclRyZWUgYXMgdGhlCisgICAg
Ly8gZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFnZSBzaXplLgorICAgIC8vIEZJWE1FOiBzaGFyZSB0
aGUgZGVmYXVsdCB2YWx1ZXMgd2l0aCBvdGhlciBwb3J0cy4KKyAgICBpbnQgYXJnQ291bnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpIC0gYXJnT2Zmc2V0OworICAgIGlmIChh
cmdDb3VudCAmJiBhcmdDb3VudCAhPSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQsIHBhZ2VXaWR0aElu
UGl4ZWxzLCA4MDApCisgICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRz
LCBhcmdPZmZzZXQgKyAxLCBwYWdlSGVpZ2h0SW5QaXhlbHMsIDYwMCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGFyc2VQYWdlTnVt
YmVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBpbnQgYXJnT2Zmc2V0LCBpbnQq
IHBhZ2VOdW1iZXIpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUo
KSkgPiBhcmdPZmZzZXQgKyAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFwYXJz
ZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQsIHBhZ2VOdW1iZXIsIDApKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IHBhcnNlUGFnZU51bWJlclNpemVNYXJnaW5zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBpbnQgYXJnT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBwYWdlTnVtYmVyLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbWFyZ2luVG9wLCBpbnQqIG1hcmdpblJp
Z2h0LCBpbnQqIG1hcmdpbkJvdHRvbSwgaW50KiBtYXJnaW5MZWZ0KQoreworICAgIGludCBhcmdD
b3VudCA9IHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUoKSkgLSBhcmdPZmZzZXQ7Cisg
ICAgaWYgKGFyZ0NvdW50ICYmIGFyZ0NvdW50ICE9IDcpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCwgcGFn
ZU51bWJlciwgMCkKKyAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMs
IGFyZ09mZnNldCArIDEsIHdpZHRoLCAwKQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudElu
dDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsgMiwgaGVpZ2h0LCAwKQorICAgICAgICB8fCAhcGFy
c2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0ICsgMywgbWFyZ2luVG9wLCAw
KQorICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0
ICsgNCwgbWFyZ2luUmlnaHQsIDApCisgICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIo
YXJndW1lbnRzLCBhcmdPZmZzZXQgKyA1LCBtYXJnaW5Cb3R0b20sIDApCisgICAgICAgIHx8ICFw
YXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyA2LCBtYXJnaW5MZWZ0
LCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcmludGluZyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHNldElzUHJpbnRpbmcodHJ1
ZSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoIiIpOworICAg
IGludCBwYWdlTnVtYmVyID0gMDsKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQg
PSAwOworICAgIGludCBtYXJnaW5Ub3AgPSAwOworICAgIGludCBtYXJnaW5SaWdodCA9IDA7Cisg
ICAgaW50IG1hcmdpbkJvdHRvbSA9IDA7CisgICAgaW50IG1hcmdpbkxlZnQgPSAwOworICAgIGlm
ICghcGFyc2VQYWdlTnVtYmVyU2l6ZU1hcmdpbnMoYXJndW1lbnRzLCAwLCAmcGFnZU51bWJlciwg
JndpZHRoLCAmaGVpZ2h0LCAmbWFyZ2luVG9wLCAmbWFyZ2luUmlnaHQsICZtYXJnaW5Cb3R0b20s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWFyZ2luTGVmdCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+
bWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYlNp
emUgcGFnZVNpemUod2lkdGgsIGhlaWdodCk7CisgICAgZnJhbWUtPnBhZ2VTaXplQW5kTWFyZ2lu
c0luUGl4ZWxzKHBhZ2VOdW1iZXIsIHBhZ2VTaXplLCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBt
YXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpOworICAgIHN0cmluZ3N0cmVhbSByZXN1bHRTdHJpbmc7
CisgICAgcmVzdWx0U3RyaW5nIDw8ICIoIiA8PCBwYWdlU2l6ZS53aWR0aCA8PCAiLCAiIDw8IHBh
Z2VTaXplLmhlaWdodCA8PCAiKSAiIDw8IG1hcmdpblRvcCA8PCAiICIgPDwgbWFyZ2luUmlnaHQg
PDwgIiAiCisgICAgICAgICAgICAgICAgIDw8IG1hcmdpbkJvdHRvbSA8PCAiICIgPDwgbWFyZ2lu
TGVmdDsKKyAgICByZXN1bHQtPnNldChyZXN1bHRTdHJpbmcuc3RyKCkpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXQoZmFsc2UpOworICAgIGludCBwYWdlSW5kZXggPSAwOworICAgIGlmICghcGFyc2VQYWdlTnVt
YmVyKGFyZ3VtZW50cywgMCwgJnBhZ2VJbmRleCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJG
cmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQtPnNldChmcmFtZS0+aGFzQ3VzdG9t
UGFnZVNpemVTdHlsZShwYWdlSW5kZXgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGFnZVByb3BlcnR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoIiIpOworICAgIGludCBwYWdlTnVtYmVy
ID0gMDsKKyAgICBpZiAoIXBhcnNlUGFnZU51bWJlcihhcmd1bWVudHMsIDEsICZwYWdlTnVtYmVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCkt
Pm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJT
aXplIHBhZ2VTaXplKDgwMCwgODAwKTsKKyAgICBmcmFtZS0+cHJpbnRCZWdpbihwYWdlU2l6ZSk7
CisgICAgcmVzdWx0LT5zZXQoZnJhbWUtPnBhZ2VQcm9wZXJ0eShjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzBdKSwgcGFnZU51bWJlcikudXRmOCgpKTsKKyAgICBmcmFtZS0+cHJpbnRF
bmQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGludCBwYWdlV2lkdGhJblBpeGVscyA9IDA7CisgICAg
aW50IHBhZ2VIZWlnaHRJblBpeGVscyA9IDA7CisgICAgaWYgKCFwYXJzZVBhZ2VTaXplUGFyYW1l
dGVycyhhcmd1bWVudHMsIDAsICZwYWdlV2lkdGhJblBpeGVscywgJnBhZ2VIZWlnaHRJblBpeGVs
cykpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hlbGwtPndl
YlZpZXcoKS0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFdlYlByaW50UGFyYW1zIHByaW50UGFyYW1zKFdlYlNpemUocGFnZVdpZHRoSW5QaXhlbHMs
IHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgIGludCBudW1iZXJPZlBhZ2VzID0gZnJhbWUtPnBy
aW50QmVnaW4ocHJpbnRQYXJhbXMpOworICAgIGZyYW1lLT5wcmludEVuZCgpOworICAgIHJlc3Vs
dC0+c2V0KG51bWJlck9mUGFnZXMpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxs
LT53aW5kb3dMaXN0KCk7CisgICAgaW50IG51bWJlck9mUmVxdWVzdHMgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykKKyAgICAgICAgbnVtYmVy
T2ZSZXF1ZXN0cyArPSB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+bnVt
YmVyT2ZQZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzKCk7CisgICAgcmVzdWx0LT5zZXQobnVtYmVy
T2ZSZXF1ZXN0cyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvZ0Vycm9yVG9D
b25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIG1fc2hlbGwtPndlYlZpZXdI
b3N0KCktPmRpZEFkZE1lc3NhZ2VUb0NvbnNvbGUoCisgICAgICAgIFdlYkNvbnNvbGVNZXNzYWdl
KFdlYkNvbnNvbGVNZXNzYWdlOjpMZXZlbEVycm9yLCBXZWJTdHJpbmc6OmZyb21VVEY4KHRleHQp
KSwKKyAgICAgICAgV2ViU3RyaW5nKCksIDApOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAh
YXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NoZWxsLT5k
cnREZXZUb29sc0FnZW50KCktPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYXJndW1lbnRzWzBdLnRv
SW50MzIoKSwgYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmZlZTAwMDAs
IDB4ZmYwMGVlMDAsIDB4ZmYwMDAwMDAsIDB4ZmZjMGMwYzApOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAh
YXJndW1lbnRzWzFdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBXZWJWaWV3OjphZGRVc2VyU2NyaXB0KAorICAgICAgICBjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwKKyAgICAg
ICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlclNjcmlwdEluamVjdEF0
RG9jdW1lbnRTdGFydCA6IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50RW5kLAor
ICAgICAgICBhcmd1bWVudHNbMl0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyQ29udGVudElu
amVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJblRvcEZyYW1lT25s
eSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpKQorICAgICAg
ICByZXR1cm47CisgICAgV2ViVmlldzo6YWRkVXNlclN0eWxlU2hlZXQoCisgICAgICAgIGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpLAor
ICAgICAgICBhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyQ29udGVudElu
amVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJblRvcEZyYW1lT25s
eSwKKyAgICAgICAgLy8gQ2hyb21pdW0gZGVmYXVsdHMgdG8gSW5qZWN0SW5TdWJzZXF1ZW50RG9j
dW1lbnRzLCBidXQgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAgLy8gd2l0aCB0aGUgb3RoZXIg
cG9ydHMnIERSVHMsIHdlIHVzZSBVc2VyU3R5bGVJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzLgor
ICAgICAgICBXZWJWaWV3OjpVc2VyU3R5bGVJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCA2IHx8ICFh
cmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1
bWVudHNbMl0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1szXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbNF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1s1XS5pc051bWJlcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJEZXZpY2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICBvcmllbnRh
dGlvbi5zZXROdWxsKGZhbHNlKTsKKyAgICBpZiAoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKQor
ICAgICAgICBvcmllbnRhdGlvbi5zZXRBbHBoYShhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7Cisg
ICAgaWYgKGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKSkKKyAgICAgICAgb3JpZW50YXRpb24uc2V0
QmV0YShhcmd1bWVudHNbM10udG9Eb3VibGUoKSk7CisgICAgaWYgKGFyZ3VtZW50c1s0XS50b0Jv
b2xlYW4oKSkKKyAgICAgICAgb3JpZW50YXRpb24uc2V0R2FtbWEoYXJndW1lbnRzWzVdLnRvRG91
YmxlKCkpOworCisgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgY2FsbCBzZXRPcmllbnRhdGlvbiBv
biB0aGUgbWFpbiBwYWdlJ3MgbW9jayBzaW5jZSB0aGlzIGlzIGFsbCB0aGF0IHRoZQorICAgIC8v
IHRlc3RzIHJlcXVpcmUuIElmIG5lY2Vzc2FyeSwgd2UgY291bGQgZ2V0IGEgbGlzdCBvZiBXZWJW
aWV3SG9zdHMgZnJvbSB0aGUgVGVzdFNoZWxsIGFuZAorICAgIC8vIGNhbGwgc2V0T3JpZW50YXRp
b24gb24gZWFjaCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suCisgICAgbV9zaGVsbC0+d2Vi
Vmlld0hvc3QoKS0+ZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCktPnNldE9yaWVudGF0aW9u
KG9yaWVudGF0aW9uKTsKK30KKworLy8gRklYTUU6IEZvciBncmVhdGVyIHRlc3QgZmxleGliaWxp
dHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNldCBlYWNoIHBhZ2UncyBnZW9sb2NhdGlvbiBtb2Nr
IGluZGl2aWR1YWxseS4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MjM2OAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAx
IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8
V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+d2luZG93TGlzdCgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykKKyAgICAgICAgd2lu
ZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBlcm1pc3Npb24oYXJndW1l
bnRzWzBdLnRvQm9vbGVhbigpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1
bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBWZWN0b3I8V2ViVmlld0hvc3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+
d2luZG93TGlzdCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXpl
KCk7IGkrKykKKyAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCkt
PnNldFBvc2l0aW9uKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpLCBhcmd1bWVudHNbMV0udG9Eb3Vi
bGUoKSwgYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkg
fHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9y
PFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgIHdp
bmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRFcnJvcihhcmd1bWVudHNb
MF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKK30KKworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygp
IHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
KiBjb250cm9sbGVyID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c3BlZWNoSW5wdXRDb250cm9s
bGVyTW9jaygpKQorICAgICAgICBjb250cm9sbGVyLT5hZGRNb2NrUmVjb2duaXRpb25SZXN1bHQo
Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGFyZ3VtZW50c1sxXS50b0RvdWJs
ZSgpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNb
MF0uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyKiBjb250cm9sbGVyID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c3BlZWNo
SW5wdXRDb250cm9sbGVyTW9jaygpKQorICAgICAgICBjb250cm9sbGVyLT5zZXREdW1wUmVjdChh
cmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFND
UklQVEVEX1NQRUVDSCkKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIqIHJlY29nbml6ZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5tb2NrU3BlZWNo
UmVjb2duaXplcigpKQorICAgICAgICByZWNvZ25pemVyLT5hZGRNb2NrUmVzdWx0KGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAy
IHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChNb2NrV2ViU3BlZWNoUmVjb2duaXplciogcmVj
b2duaXplciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPm1vY2tTcGVlY2hSZWNvZ25pemVyKCkp
CisgICAgICAgIHJlY29nbml6ZXItPnNldEVycm9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGNw
cFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoZmFsc2Up
OworICAgIGlmIChNb2NrV2ViU3BlZWNoUmVjb2duaXplciogcmVjb2duaXplciA9IG1fc2hlbGwt
PndlYlZpZXdIb3N0KCktPm1vY2tTcGVlY2hSZWNvZ25pemVyKCkpCisgICAgICAgIHJlc3VsdC0+
c2V0KHJlY29nbml6ZXItPndhc0Fib3J0ZWQoKSk7Cit9CisjZW5kaWYKKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3Vt
ZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQp
OworICAgIGlmICghaW5wdXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaW5wdXQtPmlz
U3BlZWNoSW5wdXRFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlucHV0LT5zdGFy
dFNwZWVjaElucHV0KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJl
ZUFzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5sYXll
clRyZWVBc1RleHQobV9zaG93RGVidWdMYXllclRyZWUpLnV0ZjgoKSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Omxvc2VDb21wb3NpdG9yQ29udGV4dChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqKQoreworICAgIGludCBudW1UaW1lczsKKyAgICBpZiAo
YXJncy5zaXplKCkgPT0gMSB8fCAhYXJnc1swXS5pc051bWJlcigpKQorICAgICAgICBudW1UaW1l
cyA9IDE7CisgICAgZWxzZQorICAgICAgICBudW1UaW1lcyA9IGFyZ3NbMF0udG9JbnQzMigpOwor
ICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+bG9zZUNvbXBvc2l0b3JDb250ZXh0KG51bVRpbWVzKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIFdl
YkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3Nb
MF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQtPnNldChlbGVtZW50LmRvY3VtZW50KCkuZnJh
bWUoKS0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0ZjgoKSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJGaW5kT3B0aW9ucyBmaW5kT3B0aW9uczsKKyAgICBib29sIHdyYXBBcm91bmQgPSBmYWxz
ZTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6
OnN0cmluZz4gb3B0aW9uc0FycmF5ID0gYXJndW1lbnRzWzFdLnRvU3RyaW5nVmVjdG9yKCk7Cisg
ICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IHRydWU7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvcHRpb25zQXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBvcHRpb24gPSBvcHRpb25zQXJyYXlbaV07CisgICAgICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBhbGwgdGhlIG9wdGlvbnMsIHNvIHdlIGNhbiBydW4gZmluZFN0cmlu
Zy5odG1sIHRvby4KKyAgICAgICAgICAgIGlmIChvcHRpb24gPT0gIkNhc2VJbnNlbnNpdGl2ZSIp
CisgICAgICAgICAgICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gZmFsc2U7CisgICAgICAg
ICAgICBlbHNlIGlmIChvcHRpb24gPT0gIkJhY2t3YXJkcyIpCisgICAgICAgICAgICAgICAgZmlu
ZE9wdGlvbnMuZm9yd2FyZCA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9uID09
ICJXcmFwQXJvdW5kIikKKyAgICAgICAgICAgICAgICB3cmFwQXJvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+
bWFpbkZyYW1lKCk7CisgICAgY29uc3QgYm9vbCBmaW5kUmVzdWx0ID0gZnJhbWUtPmZpbmQoMCwg
Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGZpbmRPcHRpb25zLCB3cmFwQXJv
dW5kLCAwKTsKKyAgICByZXN1bHQtPnNldChmaW5kUmVzdWx0KTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc051
bWJlcigpKQorICAgICAgICByZXR1cm47CisgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXR0aW5n
cygpLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZhbChhcmd1bWVudHNbMF0udG9Eb3VibGUoKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNb
MV0uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsK
KyAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmpl
Y3RWYWx1ZSwgJmVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1l
bnQqIGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOworICAgIGlmICghaW5wdXQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlucHV0LT5zZXRBdXRvZmlsbGVkKGFyZ3VtZW50c1sx
XS52YWx1ZS5ib29sVmFsdWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRW
YWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSAhPSAyKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQ7Cisg
ICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0
VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5wdXRFbGVtZW50
KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKKyAgICBpZiAoIWlucHV0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnB1dC0+c2V0VmFsdWUoY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1sxXSksIHRydWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQoreworICAgIC8vIE5vdCBJbXBs
ZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2Fs
U3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCit7
CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxlbWVudGVkCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxl
bWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopCit7CisgICAgLy8gTm90IEltcGxl
bWVudGVkCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0g
MSAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAgICAgIG1fc2hvdWxkU3RheU9uUGFnZUFm
dGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7CisKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5h
YmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPCAgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICByZXR1
cm47CisgICAgYm9vbCBlbmFibGVGaXhlZExheW91dCA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4o
KTsKKyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmVuYWJsZUZpeGVkTGF5b3V0TW9kZShlbmFibGVG
aXhlZExheW91dCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZpeGVkTGF5
b3V0U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgIDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCB3aWR0aCA9IGFyZ3VtZW50c1swXS50b0lu
dDMyKCk7CisgICAgaW50IGhlaWdodCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7CisgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRGaXhlZExheW91dFNpemUoV2ViU2l6ZSh3aWR0aCwgaGVpZ2h0
KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbGVjdGlvbkFzTWFya3VwKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+c2VsZWN0aW9u
QXNNYXJrdXAoKS51dGY4KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3Jr
ZXJUaHJlYWRDb3VudChDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoc3Rh
dGljX2Nhc3Q8aW50PihXZWJXb3JrZXJJbmZvOjpkZWRpY2F0ZWRXb3JrZXJDb3VudCgpKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGN0eCA9
IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPm1haW5Xb3JsZFNjcmlwdENvbnRleHQo
KTsKKyAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5zZWxl
Y3Rpb25Bc01hcmt1cCgpLnV0ZjgoKSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNzY29wZShj
dHgpOworCisgICAgV2ViS2l0OjpXZWJJbnRlbnRSZXF1ZXN0KiByZXF1ZXN0ID0gbV9zaGVsbC0+
d2ViVmlld0hvc3QoKS0+Y3VycmVudEludGVudFJlcXVlc3QoKTsKKyAgICBpZiAocmVxdWVzdC0+
aXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgV2ViS2l0OjpXZWJDU3RyaW5nIHJlcGx5ID0gY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1swXSkudXRmOCgpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdjh2YWx1ZSA9IHY4OjpTdHJpbmc6Ok5ldyhyZXBseS5kYXRhKCksIHJlcGx5Lmxlbmd0aCgp
KTsKKyAgICAgICAgcmVxdWVzdC0+cG9zdFJlc3VsdChXZWJLaXQ6OldlYlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6c2VyaWFsaXplKHY4dmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdjh2YWx1ZSA9IHY4OjpTdHJpbmc6Ok5ldygiRVJST1IiKTsKKyAg
ICAgICAgcmVxdWVzdC0+cG9zdEZhaWx1cmUoV2ViS2l0OjpXZWJTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OnNlcmlhbGl6ZSh2OHZhbHVlKSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCAgMykKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY3R4ID0gbV9zaGVsbC0+
d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bWFpbldvcmxkU2NyaXB0Q29udGV4dCgpOworICAgIHJl
c3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFzTWFy
a3VwKCkudXRmOCgpKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY3Njb3BlKGN0eCk7CisKKyAg
ICBXZWJTdHJpbmcgYWN0aW9uID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7
CisgICAgV2ViU3RyaW5nIHR5cGUgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFd
KTsKKyAgICBXZWJLaXQ6OldlYkNTdHJpbmcgZGF0YSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhh
cmd1bWVudHNbMl0pLnV0ZjgoKTsKKyAgICBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFs
aXplZERhdGEgPSBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnNlcmlhbGl6ZSgKKyAgICAgICAg
djg6OlN0cmluZzo6TmV3KGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKSk7CisKKyAgICBXZWJJ
bnRlbnQgaW50ZW50ID0gV2ViSW50ZW50OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBzZXJpYWxpemVk
RGF0YS50b1N0cmluZygpLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpLCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPigpKTsKKworICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmRlbGl2ZXJJ
bnRlbnQoaW50ZW50LCAwLCBtX2ludGVudENsaWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisjaWYgT1MoTElOVVgp
IHx8IE9TKEFORFJPSUQpCisgICAgLy8gU2luY2UgRm9udENvbmZpZyBkb2Vzbid0IHByb3ZpZGUg
YSB2YXJpYWJsZSB0byBjb250cm9sIHN1YnBpeGVsIHBvc2l0aW9uaW5nLCB3ZSdsbCBmYWxsIGJh
Y2sKKyAgICAvLyB0byBzZXR0aW5nIGl0IGdsb2JhbGx5IGZvciBhbGwgZm9udHMuCisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAg
V2ViRm9udFJlbmRlcmluZzo6c2V0U3VicGl4ZWxQb3NpdGlvbmluZyhhcmd1bWVudHNbMF0udmFs
dWUuYm9vbFZhbHVlKTsKKyNlbmRpZgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCitjbGFz
cyBJbnZva2VDYWxsYmFja1Rhc2sgOiBwdWJsaWMgTWV0aG9kVGFzazxMYXlvdXRUZXN0Q29udHJv
bGxlcj4geworcHVibGljOgorICAgIEludm9rZUNhbGxiYWNrVGFzayhMYXlvdXRUZXN0Q29udHJv
bGxlciogb2JqZWN0LCBQYXNzT3duQXJyYXlQdHI8Q3BwVmFyaWFudD4gY2FsbGJhY2tBcmd1bWVu
dHMsIHVpbnQzMl90IG51bWJlck9mQXJndW1lbnRzKQorICAgICAgICA6IE1ldGhvZFRhc2s8TGF5
b3V0VGVzdENvbnRyb2xsZXI+KG9iamVjdCkKKyAgICAgICAgLCBtX2NhbGxiYWNrQXJndW1lbnRz
KGNhbGxiYWNrQXJndW1lbnRzKQorICAgICAgICAsIG1fbnVtYmVyT2ZBcmd1bWVudHMobnVtYmVy
T2ZBcmd1bWVudHMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlk
KCkKKyAgICB7CisgICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OworICAgICAgICBtX2Nh
bGxiYWNrQXJndW1lbnRzWzBdLmludm9rZURlZmF1bHQobV9jYWxsYmFja0FyZ3VtZW50cy5nZXQo
KSwgbV9udW1iZXJPZkFyZ3VtZW50cywgaW52b2tlUmVzdWx0KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgT3duQXJyYXlQdHI8Q3BwVmFyaWFudD4gbV9jYWxsYmFja0FyZ3VtZW50czsKKyAgICB1
aW50MzJfdCBtX251bWJlck9mQXJndW1lbnRzOworfTsKKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAy
IHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmbG9hdCB2YWx1ZSA9IGFyZ3VtZW50c1swXS52
YWx1ZS5kb3VibGVWYWx1ZTsKKyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldERldmljZVNjYWxl
RmFjdG9yKHZhbHVlKTsKKworICAgIE93bkFycmF5UHRyPENwcFZhcmlhbnQ+IGNhbGxiYWNrQXJn
dW1lbnRzID0gYWRvcHRBcnJheVB0cihuZXcgQ3BwVmFyaWFudFsxXSk7CisgICAgY2FsbGJhY2tB
cmd1bWVudHNbMF0uc2V0KGFyZ3VtZW50c1sxXSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cisg
ICAgcG9zdFRhc2sobmV3IEludm9rZUNhbGxiYWNrVGFzayh0aGlzLCBjYWxsYmFja0FyZ3VtZW50
cy5yZWxlYXNlKCksIDEpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1
Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzQm9vbCgpKSB7CisgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPnBsdWdpbnNFbmFi
bGVkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOworICAgICAgICBtX3NoZWxsLT5hcHBseVBy
ZWZlcmVuY2VzKCk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9zaGVsbC0+d2Vi
VmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUs
IHRydWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0
eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSkgeworICAgICAgICBzdHJpbmcgbmV3VmlzaWJpbGl0eSA9IGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpOworICAgICAgICBpZiAobmV3VmlzaWJpbGl0eSA9PSAidmlzaWJsZSIpCisgICAgICAgICAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0
eVN0YXRlVmlzaWJsZSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09
ICJoaWRkZW4iKQorICAgICAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5
U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwgZmFsc2UpOworICAgICAgICBlbHNl
IGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQorICAgICAgICAgICAgbV9zaGVsbC0+
d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXJl
bmRlciwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmV2aWV3
IikKKyAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdl
YlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29s
KQoreworICAgIC8vIE5vdCBJbXBsZW1lbnRlZAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRUZXh0RGlyZWN0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIE1hcCBhIGRpcmVjdGlvbiBuYW1lIHRvIGEgV2ViVGV4dERpcmVj
dGlvbiB2YWx1ZS4KKyAgICBzdGQ6OnN0cmluZyBkaXJlY3Rpb25OYW1lID0gYXJndW1lbnRzWzBd
LnRvU3RyaW5nKCk7CisgICAgV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAg
ICBpZiAoZGlyZWN0aW9uTmFtZSA9PSAiYXV0byIpCisgICAgICAgIGRpcmVjdGlvbiA9IFdlYktp
dDo6V2ViVGV4dERpcmVjdGlvbkRlZmF1bHQ7CisgICAgZWxzZSBpZiAoZGlyZWN0aW9uTmFtZSA9
PSAicnRsIikKKyAgICAgICAgZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9uUmln
aHRUb0xlZnQ7CisgICAgZWxzZSBpZiAoZGlyZWN0aW9uTmFtZSA9PSAibHRyIikKKyAgICAgICAg
ZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFRleHREaXJl
Y3Rpb24oZGlyZWN0aW9uKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXVk
aW9EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBDaGVjayB0aGF0IHBhc3NlZC1pbiBvYmplY3QgaXMsIGluIGZhY3QsIGFuIEFycmF5QnVm
ZmVyVmlldy4KKyAgICBOUE9iamVjdCogbnBvYmplY3QgPSBOUFZBUklBTlRfVE9fT0JKRUNUKGFy
Z3VtZW50c1swXSk7CisgICAgaWYgKCFucG9iamVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghV2ViQmluZGluZ3M6OmdldEFycmF5QnVmZmVyVmlldyhucG9iamVjdCwgJm1fYXVkaW9EYXRh
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2hvdWxkRHVtcEFzQXVkaW8odHJ1ZSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhh
dmlvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
IDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGFz
Q3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOworfQor
CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRp
ZExvc2VQb2ludGVyTG9jayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGlkTG9zZVBvaW50ZXJMb2NrKCk7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+
c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KCk7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvaW50ZXJMb2NrV2ls
bEZhaWxTeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRQb2ludGVyTG9ja1dpbGxG
YWlsU3luY2hyb25vdXNseSgpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorI2VuZGlmCisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRleHRTdXJyb3VuZGluZ05vZGUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDQgfHwgIWFyZ3VtZW50
c1swXS5pc09iamVjdCgpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRz
WzJdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1szXS5pc051bWJlcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJOb2RlIG5vZGU7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0Tm9kZShh
cmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZub2RlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG5vZGUuaXNOdWxsKCkgfHwgIW5vZGUuaXNUZXh0Tm9kZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJQb2ludCBwb2ludChhcmd1bWVudHNbMV0udG9JbnQzMigpLCBhcmd1
bWVudHNbMl0udG9JbnQzMigpKTsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSBhcmd1bWVudHNb
M10udG9JbnQzMigpOworCisgICAgV2ViU3Vycm91bmRpbmdUZXh0IHN1cnJvdW5kaW5nVGV4dDsK
KyAgICBzdXJyb3VuZGluZ1RleHQuaW5pdGlhbGl6ZShub2RlLCBwb2ludCwgbWF4TGVuZ3RoKTsK
KyAgICBpZiAoc3Vycm91bmRpbmdUZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICByZXN1bHQtPnNldChzdXJyb3VuZGluZ1RleHQudGV4dENvbnRlbnQoKS51dGY4KCkpOworfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyLmgiCiAKICNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSAi
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIgpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSB7IH0KIH07CiAKLUxheW91dFRlc3RDb250cm9s
bGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcihUZXN0U2hlbGwqIHNoZWxsKQorRHVtcFJlbmRlclRy
ZWVUZXN0UnVubmVyOjpEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIoVGVzdFNoZWxsKiBzaGVsbCkK
ICAgICA6IG1fc2hlbGwoc2hlbGwpCiAgICAgLCBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyhmYWxz
ZSkKICAgICAsIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSkKQEAgLTEwNywxNzgg
KzEwNywxNzggQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbAogICAg
IC8vIEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29jaWF0ZXMgbWV0aG9kcyBvZiB0aGlzIGNs
YXNzIHdpdGggdGhlIG5hbWVzCiAgICAgLy8gdGhleSB3aWxsIHVzZSB3aGVuIGNhbGxlZCBieSBK
YXZhU2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2YgdGhvc2UKICAgICAvLyBuYW1lcyB0byB0
aGVpciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxsaW5nIGJpbmRUb0phdmFTY3JpcHQoKSAo
ZGVmaW5lZAotICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8gTGF5b3V0VGVz
dENvbnRyb2xsZXIpLgotICAgIGJpbmRNZXRob2QoImFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWci
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcpOworICAg
IC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8gRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyKS4KKyAgICBiaW5kTWV0aG9kKCJhZGRGaWxlVG9QYXN0ZWJvYXJkT25EcmFnIiwgJkR1bXBS
ZW5kZXJUcmVlVGVzdFJ1bm5lcjo6YWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyk7CiAjaWYgRU5B
QkxFKElOUFVUX1NQRUVDSCkKLSAgICBiaW5kTWV0aG9kKCJhZGRNb2NrU3BlZWNoSW5wdXRSZXN1
bHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KTsKKyAgICBiaW5kTWV0aG9kKCJh
ZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjphZGRN
b2NrU3BlZWNoSW5wdXRSZXN1bHQpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hJbnB1
dER1bXBSZWN0IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0
RHVtcFJlY3QpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICBiaW5k
TWV0aG9kKCJhZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKTsKLSAgICBiaW5kTWV0aG9kKCJ3YXNNb2NrU3Bl
ZWNoUmVjb2duaXRpb25BYm9ydGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjp3YXNNb2NrU3Bl
ZWNoUmVjb2duaXRpb25BYm9ydGVkKTsKKyAgICBiaW5kTWV0aG9kKCJhZGRNb2NrU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hSZWNvZ25p
dGlvbkVycm9yIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29n
bml0aW9uRXJyb3IpOworICAgIGJpbmRNZXRob2QoIndhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFi
b3J0ZWQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjp3YXNNb2NrU3BlZWNoUmVjb2duaXRp
b25BYm9ydGVkKTsKICNlbmRpZgotICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeSk7Ci0gICAgYmluZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkVXNlclNjcmlwdCk7Ci0gICAgYmluZE1ldGhvZCgiYWRkVXNlclN0eWxlU2hl
ZXQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTsKLSAgICBiaW5k
TWV0aG9kKCJjbGVhckFsbERhdGFiYXNlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
bGxEYXRhYmFzZXMpOwotICAgIGJpbmRNZXRob2QoImNsb3NlV2ViSW5zcGVjdG9yIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcik7CisgICAgYmluZE1ldGhvZCgiYWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjph
ZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CisgICAgYmluZE1ldGhvZCgiYWRkVXNlclNj
cmlwdCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQpOworICAgIGJp
bmRNZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6
YWRkVXNlclN0eWxlU2hlZXQpOworICAgIGJpbmRNZXRob2QoImNsZWFyQWxsRGF0YWJhc2VzIiwg
JkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOworICAgIGJpbmRN
ZXRob2QoImNsb3NlV2ViSW5zcGVjdG9yIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6Y2xv
c2VXZWJJbnNwZWN0b3IpOwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgYmluZE1ldGhv
ZCgiZGlkTG9zZVBvaW50ZXJMb2NrIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaWRMb3NlUG9p
bnRlckxvY2spOworICAgIGJpbmRNZXRob2QoImRpZExvc2VQb2ludGVyTG9jayIsICZEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9jayk7CiAjZW5kaWYKLSAgICBiaW5k
TWV0aG9kKCJkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRp
c2FibGVBdXRvUmVzaXplTW9kZSk7Ci0gICAgYmluZE1ldGhvZCgiZGlzYWJsZUltYWdlTG9hZGlu
ZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyk7Ci0gICAgYmlu
ZE1ldGhvZCgiZGlzcGxheSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSk7Ci0gICAg
YmluZE1ldGhvZCgiZGlzcGxheUludmFsaWRhdGVkUmVnaW9uIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24pOwotICAgIGJpbmRNZXRob2QoImR1bXBBc1Rl
eHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBBc1RleHQpOwotICAgIGJpbmRNZXRob2Qo
ImR1bXBCYWNrRm9yd2FyZExpc3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBCYWNrRm9y
d2FyZExpc3QpOwotICAgIGJpbmRNZXRob2QoImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZHVtcENoaWxkRnJhbWVzQXNUZXh0KTsKLSAgICBiaW5kTWV0aG9k
KCJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMpOwotICAgIGJpbmRNZXRob2QoImR1bXBEYXRh
YmFzZUNhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wRWRpdGluZ0NhbGxiYWNrcyIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBG
cmFtZUxvYWRDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2si
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spOwot
ICAgIGJpbmRNZXRob2QoImR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyk7
Ci0gICAgYmluZE1ldGhvZCgiZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgi
ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1
bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wU2VsZWN0
aW9uUmVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFNlbGVjdGlvblJlY3QpOwotICAg
IGJpbmRNZXRob2QoImR1bXBTdGF0dXNDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wVGl0bGVDaGFu
Z2VzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wVGl0bGVDaGFuZ2VzKTsKLSAgICBiaW5k
TWV0aG9kKCJkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1
bXBDcmVhdGVWaWV3IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ3JlYXRlVmlldyk7Ci0g
ICAgYmluZE1ldGhvZCgiZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRX
aXRoSWQpOwotICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7Ci0gICAgYmluZE1ldGhvZCgiZXZh
bHVhdGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldl
Ykluc3BlY3Rvcik7Ci0gICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KTsKLSAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbik7Ci0gICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsKLSAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlv
bkNvbG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMp
OworICAgIGJpbmRNZXRob2QoImRpc2FibGVBdXRvUmVzaXplTW9kZSIsICZEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OmRpc2FibGVBdXRvUmVzaXplTW9kZSk7CisgICAgYmluZE1ldGhvZCgiZGlz
YWJsZUltYWdlTG9hZGluZyIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmRpc2FibGVJbWFn
ZUxvYWRpbmcpOworICAgIGJpbmRNZXRob2QoImRpc3BsYXkiLCAmRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpkaXNwbGF5KTsKKyAgICBiaW5kTWV0aG9kKCJkaXNwbGF5SW52YWxpZGF0ZWRSZWdp
b24iLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24p
OworICAgIGJpbmRNZXRob2QoImR1bXBBc1RleHQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVy
OjpkdW1wQXNUZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wQmFja0ZvcndhcmRMaXN0IiwgJkR1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcEJhY2tGb3J3YXJkTGlzdCk7CisgICAgYmluZE1l
dGhvZCgiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6
ZHVtcENoaWxkRnJhbWVzQXNUZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wQ2hpbGRGcmFtZVNj
cm9sbFBvc2l0aW9ucyIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmR1bXBDaGlsZEZyYW1l
U2Nyb2xsUG9zaXRpb25zKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wRGF0YWJhc2VDYWxsYmFja3Mi
LCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkdW1wRGF0YWJhc2VDYWxsYmFja3MpOworICAg
IGJpbmRNZXRob2QoImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MpOworICAgIGJpbmRNZXRob2QoImR1bXBGcmFtZUxv
YWRDYWxsYmFja3MiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrIiwg
JkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayk7
CisgICAgYmluZE1ldGhvZCgiZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MiLCAm
RHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxi
YWNrcyk7CisgICAgYmluZE1ldGhvZCgiZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyIsICZEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIGJp
bmRNZXRob2QoImR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzIiwgJkR1bXBSZW5kZXJUcmVl
VGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMpOworICAgIGJpbmRNZXRo
b2QoImR1bXBTZWxlY3Rpb25SZWN0IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcFNl
bGVjdGlvblJlY3QpOworICAgIGJpbmRNZXRob2QoImR1bXBTdGF0dXNDYWxsYmFja3MiLCAmRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpkdW1wV2luZG93U3RhdHVzQ2hhbmdlcyk7CisgICAgYmlu
ZE1ldGhvZCgiZHVtcFRpdGxlQ2hhbmdlcyIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmR1
bXBUaXRsZUNoYW5nZXMpOworICAgIGJpbmRNZXRob2QoImR1bXBQZXJtaXNzaW9uQ2xpZW50Q2Fs
bGJhY2tzIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcFBlcm1pc3Npb25DbGllbnRD
YWxsYmFja3MpOworICAgIGJpbmRNZXRob2QoImR1bXBDcmVhdGVWaWV3IiwgJkR1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcpOworICAgIGJpbmRNZXRob2QoImVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1l
dGhvZCgiZW5hYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpl
bmFibGVBdXRvUmVzaXplTW9kZSk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVJbldlYkluc3Bl
Y3RvciIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Ip
OworICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJkR1bXBS
ZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOworICAg
IGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUi
LCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW4iLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4pOworICAgIGJpbmRNZXRob2QoImV4ZWNDb21tYW5kIiwgJkR1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQpOworICAgIGJpbmRNZXRob2QoImZvcmNlUmVkU2Vs
ZWN0aW9uQ29sb3JzIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6Zm9yY2VSZWRTZWxlY3Rp
b25Db2xvcnMpOwogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAgIGJpbmRNZXRob2QoImdy
YW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24pOworICAgIGJpbmRNZXRob2QoImdy
YW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24iLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKTsKICNlbmRpZgotICAgIGJp
bmRNZXRob2QoImZpbmRTdHJpbmciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcp
OwotICAgIGJpbmRNZXRob2QoImlzQ29tbWFuZEVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmlzQ29tbWFuZEVuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoImhhc0N1c3RvbVBhZ2VTaXpl
U3R5bGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUpOwot
ICAgIGJpbmRNZXRob2QoImxheWVyVHJlZUFzVGV4dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bGF5ZXJUcmVlQXNUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJsb3NlQ29tcG9zaXRvckNvbnRleHQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk7Ci0gICAgYmlu
ZE1ldGhvZCgibWFya2VyVGV4dEZvckxpc3RJdGVtIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpt
YXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOwotICAgIGJpbmRNZXRob2QoIm5vdGlmeURvbmUiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUpOwotICAgIGJpbmRNZXRob2QoIm51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKTsKLSAgICBiaW5kTWV0aG9kKCJudW1iZXJPZlBhZ2VzIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKTsKLSAgICBiaW5kTWV0aG9kKCJudW1iZXJPZlBlbmRp
bmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKLSAgICBiaW5k
TWV0aG9kKCJvYmpDSWRlbnRpdHlJc0VxdWFsIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvYmpD
SWRlbnRpdHlJc0VxdWFsKTsKLSAgICBiaW5kTWV0aG9kKCJvdmVycmlkZVByZWZlcmVuY2UiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSk7Ci0gICAgYmluZE1ldGhv
ZCgicGFnZVByb3BlcnR5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkpOwot
ICAgIGJpbmRNZXRob2QoInBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyk7Ci0gICAgYmluZE1ldGhvZCgi
cGF0aFRvTG9jYWxSZXNvdXJjZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxS
ZXNvdXJjZSk7Ci0gICAgYmluZE1ldGhvZCgicGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKTsKLSAgICBiaW5kTWV0aG9kKCJwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZCk7Ci0gICAgYmluZE1ldGhvZCgicXVldWVCYWNrTmF2aWdhdGlvbiIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbik7Ci0gICAgYmluZE1ldGhv
ZCgicXVldWVGb3J3YXJkTmF2aWdhdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVG
b3J3YXJkTmF2aWdhdGlvbik7Ci0gICAgYmluZE1ldGhvZCgicXVldWVMb2FkaW5nU2NyaXB0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOwotICAgIGJpbmRNZXRo
b2QoInF1ZXVlTG9hZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKTsKLSAgICBi
aW5kTWV0aG9kKCJxdWV1ZUxvYWRIVE1MU3RyaW5nIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpx
dWV1ZUxvYWRIVE1MU3RyaW5nKTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZU5vbkxvYWRpbmdTY3Jp
cHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk7Ci0gICAg
YmluZE1ldGhvZCgicXVldWVSZWxvYWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlUmVs
b2FkKTsKLSAgICBiaW5kTWV0aG9kKCJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OwotICAgIGJpbmRNZXRob2QoInJlcGFpbnRTd2VlcEhvcml6b250YWxseSIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KTsKLSAgICBiaW5kTWV0aG9kKCJy
ZXNldFBhZ2VWaXNpYmlsaXR5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNp
YmlsaXR5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBY2NlcHRzRWRpdGluZyIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcpOwotICAgIGJpbmRNZXRob2QoInNldEFsbG93
RGlzcGxheU9mSW5zZWN1cmVDb250ZW50IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxv
d0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVB
Y2Nlc3NGcm9tRmlsZVVSTHMpOwotICAgIGJpbmRNZXRob2QoInNldEFsbG93UnVubmluZ09mSW5z
ZWN1cmVDb250ZW50IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1J1bm5pbmdPZklu
c2VjdXJlQ29udGVudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBbHdheXNBY2NlcHRDb29raWVz
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQpOwotICAgIGJpbmRNZXRob2Qo
InNldEF1dG9maWxsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQpOwot
ICAgIGJpbmRNZXRob2QoInNldENhbk9wZW5XaW5kb3dzIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRDYW5PcGVuV2luZG93cyk7Ci0gICAgYmluZE1ldGhvZCgic2V0Q2xvc2VSZW1haW5pbmdX
aW5kb3dzV2hlbkNvbXBsZXRlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRDbG9zZVJlbWFp
bmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpOwotICAgIGJpbmRNZXRob2QoInNldEN1c3RvbVBvbGlj
eURlbGVnYXRlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0RGF0YWJhc2VRdW90YSIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RGF0YWJhc2VRdW90YSk7Ci0gICAgYmluZE1ldGhvZCgic2V0RGVmZXJNYWluUmVz
b3VyY2VEYXRhTG9hZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJNYWluUmVzb3Vy
Y2VEYXRhTG9hZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvclVSTFNjaGVtZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXVkaW9EYXRhIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdWRpb0RhdGEpOwotICAgIGJpbmRNZXRob2QoInNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRJY29uRGF0YWJhc2VFbmFibGVk
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKTsKLSAgICBiaW5kTWV0
aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TWluaW11bVRpbWVySW50ZXJ2YWwpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tEZXZpY2VPcmll
bnRhdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9u
KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2VvbG9jYXRpb25FcnJvciIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IpOwotICAgIGJpbmRNZXRob2QoInNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbik7Ci0gICAgYmluZE1ldGhvZCgic2V0UGFnZVZpc2liaWxpdHki
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KTsKLSAgICBiaW5kTWV0
aG9kKCJzZXRQbHVnaW5zRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2lu
c0VuYWJsZWQpOworICAgIGJpbmRNZXRob2QoImZpbmRTdHJpbmciLCAmRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpmaW5kU3RyaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJpc0NvbW1hbmRFbmFibGVk
IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk7CisgICAgYmlu
ZE1ldGhvZCgiaGFzQ3VzdG9tUGFnZVNpemVTdHlsZSIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUpOworICAgIGJpbmRNZXRob2QoImxheWVyVHJlZUFz
VGV4dCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmxheWVyVHJlZUFzVGV4dCk7CisgICAg
YmluZE1ldGhvZCgibG9zZUNvbXBvc2l0b3JDb250ZXh0IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJtYXJrZXJUZXh0
Rm9yTGlzdEl0ZW0iLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlz
dEl0ZW0pOworICAgIGJpbmRNZXRob2QoIm5vdGlmeURvbmUiLCAmRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpub3RpZnlEb25lKTsKKyAgICBiaW5kTWV0aG9kKCJudW1iZXJPZkFjdGl2ZUFuaW1h
dGlvbnMiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMpOworICAgIGJpbmRNZXRob2QoIm51bWJlck9mUGFnZXMiLCAmRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpudW1iZXJPZlBhZ2VzKTsKKyAgICBiaW5kTWV0aG9kKCJudW1iZXJPZlBlbmRpbmdH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
OiBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk7CisgICAgYmlu
ZE1ldGhvZCgib2JqQ0lkZW50aXR5SXNFcXVhbCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
Om9iakNJZGVudGl0eUlzRXF1YWwpOworICAgIGJpbmRNZXRob2QoIm92ZXJyaWRlUHJlZmVyZW5j
ZSIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSk7CisgICAg
YmluZE1ldGhvZCgicGFnZVByb3BlcnR5IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cGFn
ZVByb3BlcnR5KTsKKyAgICBiaW5kTWV0aG9kKCJwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyIs
ICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKTsK
KyAgICBiaW5kTWV0aG9kKCJwYXRoVG9Mb2NhbFJlc291cmNlIiwgJkR1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZSk7CisgICAgYmluZE1ldGhvZCgicGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhvZCgicGF1
c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKTsKKyAgICBiaW5kTWV0
aG9kKCJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cXVl
dWVCYWNrTmF2aWdhdGlvbik7CisgICAgYmluZE1ldGhvZCgicXVldWVGb3J3YXJkTmF2aWdhdGlv
biIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOwor
ICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZGluZ1NjcmlwdCIsICZEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdCk7CisgICAgYmluZE1ldGhvZCgicXVldWVMb2FkIiwg
JkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cXVldWVMb2FkKTsKKyAgICBiaW5kTWV0aG9kKCJx
dWV1ZUxvYWRIVE1MU3RyaW5nIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cXVldWVMb2Fk
SFRNTFN0cmluZyk7CisgICAgYmluZE1ldGhvZCgicXVldWVOb25Mb2FkaW5nU2NyaXB0IiwgJkR1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KTsKKyAgICBiaW5k
TWV0aG9kKCJxdWV1ZVJlbG9hZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlUmVs
b2FkKTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIs
ICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KTsKKyAgICBiaW5kTWV0aG9kKCJyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkiLCAmRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOworICAgIGJpbmRN
ZXRob2QoInJlc2V0UGFnZVZpc2liaWxpdHkiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpy
ZXNldFBhZ2VWaXNpYmlsaXR5KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBY2NlcHRzRWRpdGluZyIs
ICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCIsICZEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMiLCAmRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOworICAgIGJpbmRNZXRo
b2QoInNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50IiwgJkR1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQpOworICAgIGJpbmRNZXRo
b2QoInNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzIiwgJkR1bXBSZW5kZXJUcmVl
VGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMpOworICAgIGJp
bmRNZXRob2QoInNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBdXRvZmlsbGVkIiwg
JkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZCk7CisgICAgYmluZE1ldGhv
ZCgic2V0Q2FuT3BlbldpbmRvd3MiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRDYW5P
cGVuV2luZG93cyk7CisgICAgYmluZE1ldGhvZCgic2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hl
bkNvbXBsZXRlIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0Q2xvc2VSZW1haW5pbmdX
aW5kb3dzV2hlbkNvbXBsZXRlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZSIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRl
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXREYXRhYmFzZVF1b3RhIiwgJkR1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSk7CisgICAgYmluZE1ldGhvZCgic2V0RGVmZXJNYWlu
UmVzb3VyY2VEYXRhTG9hZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldERlZmVyTWFp
blJlc291cmNlRGF0YUxvYWQpOworICAgIGJpbmRNZXRob2QoInNldERvbWFpblJlbGF4YXRpb25G
b3JiaWRkZW5Gb3JVUkxTY2hlbWUiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXREb21h
aW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRB
dWRpb0RhdGEiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRBdWRpb0RhdGEpOworICAg
IGJpbmRNZXRob2QoInNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIsICZEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik7CisgICAgYmluZE1ldGhvZCgic2V0
SWNvbkRhdGFiYXNlRW5hYmxlZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEljb25E
YXRhYmFzZUVuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNldEphdmFTY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIs
ICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCAmRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOworICAgIGJpbmRNZXRob2QoInNl
dE1vY2tHZW9sb2NhdGlvbkVycm9yIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0TW9j
a0dlb2xvY2F0aW9uRXJyb3IpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24pOworICAgIGJpbmRNZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJkR1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkpOworICAgIGJpbmRNZXRob2QoInNldFBs
dWdpbnNFbmFibGVkIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJs
ZWQpOwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgYmluZE1ldGhvZCgic2V0UG9pbnRl
ckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
b2ludGVyTG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkpOwotICAgIGJpbmRNZXRob2QoInNldFBv
aW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSk7CisgICAgYmluZE1ldGhvZCgic2V0
UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseSIsICZEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KTsKICNlbmRp
ZgotICAgIGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdFbmFibGVkIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0
UE9TSVhMb2NhbGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXRQcmludGluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJp
bnRpbmcpOwotICAgIGJpbmRNZXRob2QoInNldFNjcm9sbGJhclBvbGljeSIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUZXh0
U3VicGl4ZWxQb3NpdGlvbmluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dFN1YnBp
eGVsUG9zaXRpb25pbmcpOwotICAgIGJpbmRNZXRob2QoInNldEJhY2tpbmdTY2FsZUZhY3RvciIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKTsKLSAgICBiaW5k
TWV0aG9kKCJzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0U3Rv
cFByb3Zpc2lvbmFsRnJhbWVMb2FkcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcFBy
b3Zpc2lvbmFsRnJhbWVMb2Fkcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0VGFiS2V5Q3ljbGVzVGhy
b3VnaEVsZW1lbnRzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMpOwotICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRWYWx1
ZUZvclVzZXIiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcik7Ci0gICAg
YmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwpOwotICAgIGJpbmRNZXRob2QoInNldFdpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRXaW5kb3dJc0tleSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkp
OwotICAgIGJpbmRNZXRob2QoInNldFhTU0F1ZGl0b3JFbmFibGVkIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzaG93V2Vi
SW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCIsICZEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRQ
T1NJWExvY2FsZSIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRQcmludGluZyIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
OnNldFByaW50aW5nKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRTY3JvbGxiYXJQb2xpY3kiLCAmRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3kpOworICAgIGJpbmRNZXRo
b2QoInNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQiLCAmRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyIsICZEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRC
YWNraW5nU2NhbGVGYWN0b3IiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRCYWNraW5n
U2NhbGVGYWN0b3IpOworICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZCk7CisgICAgYmluZE1ldGhvZCgic2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyIsICZEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMpOworICAg
IGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZEdW1wUmVuZGVy
VHJlZVRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7CisgICAgYmlu
ZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRFbmFibGVkIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbik7CisgICAgYmluZE1ldGhvZCgic2V0VmFsdWVGb3JVc2VyIiwgJkR1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlciIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNl
dFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRXaWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVy
OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QpOworICAgIGJpbmRNZXRo
b2QoInNldFdpbmRvd0lzS2V5IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0V2luZG93
SXNLZXkpOworICAgIGJpbmRNZXRob2QoInNldFhTU0F1ZGl0b3JFbmFibGVkIiwgJkR1bXBSZW5k
ZXJUcmVlVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQpOworICAgIGJpbmRNZXRob2Qo
InNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgJkR1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworICAgIGJpbmRN
ZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzaG93
V2ViSW5zcGVjdG9yKTsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBiaW5kTWV0aG9k
KCJzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2spOworICAgIGJpbmRNZXRob2QoInNp
bXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5l
cjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2spOwogI2VuZGlmCi0gICAgYmluZE1l
dGhvZCgic3RhcnRTcGVlY2hJbnB1dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVl
Y2hJbnB1dCk7Ci0gICAgYmluZE1ldGhvZCgidGVzdFJlcGFpbnQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnRlc3RSZXBhaW50KTsKLSAgICBiaW5kTWV0aG9kKCJ3YWl0Rm9yUG9saWN5RGVsZWdh
dGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSk7Ci0gICAg
YmluZE1ldGhvZCgid2FpdFVudGlsRG9uZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVu
dGlsRG9uZSk7Ci0gICAgYmluZE1ldGhvZCgid2luZG93Q291bnQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndpbmRvd0NvdW50KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUZXh0RGlyZWN0aW9uIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRJbWFnZXNBbGxvd2VkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJbWFnZXNBbGxv
d2VkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTY3JpcHRzQWxsb3dlZCIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U2NyaXB0c0FsbG93ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFN0b3JhZ2VB
bGxvd2VkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlQWxsb3dlZCk7Ci0gICAg
YmluZE1ldGhvZCgic2V0UGx1Z2luc0FsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFBsdWdpbnNBbGxvd2VkKTsKKyAgICBiaW5kTWV0aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJkR1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dCk7CisgICAgYmluZE1ldGhv
ZCgidGVzdFJlcGFpbnQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjp0ZXN0UmVwYWludCk7
CisgICAgYmluZE1ldGhvZCgid2FpdEZvclBvbGljeURlbGVnYXRlIiwgJkR1bXBSZW5kZXJUcmVl
VGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKTsKKyAgICBiaW5kTWV0aG9kKCJ3YWl0
VW50aWxEb25lIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSk7Cisg
ICAgYmluZE1ldGhvZCgid2luZG93Q291bnQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjp3
aW5kb3dDb3VudCk7CisgICAgYmluZE1ldGhvZCgic2V0VGV4dERpcmVjdGlvbiIsICZEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOworICAgIGJpbmRNZXRob2QoInNl
dEltYWdlc0FsbG93ZWQiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRJbWFnZXNBbGxv
d2VkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRTY3JpcHRzQWxsb3dlZCIsICZEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OnNldFNjcmlwdHNBbGxvd2VkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRTdG9y
YWdlQWxsb3dlZCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBbGxvd2Vk
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zQWxsb3dlZCIsICZEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OnNldFBsdWdpbnNBbGxvd2VkKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJl
IHN0dWJzLgotICAgIGJpbmRNZXRob2QoImFib3J0TW9kYWwiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFib3J0TW9kYWwpOwotICAgIGJpbmRNZXRob2QoImFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9i
amVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWNjZXNzU3RvcmVkV2ViU2NyaXB0T2JqZWN0
KTsKLSAgICBiaW5kTWV0aG9kKCJhZGREaXNhbGxvd2VkVVJMIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjphZGREaXNhbGxvd2VkVVJMKTsKLSAgICBiaW5kTWV0aG9kKCJhcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNh
Y2hlRGlza1VzYWdlRm9yT3JpZ2luKTsKLSAgICBiaW5kTWV0aG9kKCJjYWxsU2hvdWxkQ2xvc2VP
bldlYlZpZXciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dyk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk7Ci0gICAgYmluZE1ldGhv
ZCgiY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoImNsZWFy
QmFja0ZvcndhcmRMaXN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJk
TGlzdCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEFzV2ViQXJjaGl2ZSIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZHVtcEFzV2ViQXJjaGl2ZSk7Ci0gICAgYmluZE1ldGhvZCgia2VlcFdlYkhpc3Rv
cnkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KTsKLSAgICBiaW5kTWV0
aG9kKCJvYmpDQ2xhc3NOYW1lT2YiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNDbGFzc05h
bWVPZik7Ci0gICAgYmluZE1ldGhvZCgic2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOwot
ICAgIGJpbmRNZXRob2QoInNldENhbGxDbG9zZU9uV2ViVmlld3MiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldENhbGxDbG9zZU9uV2ViVmlld3MpOwotICAgIGJpbmRNZXRob2QoInNldE1haW5G
cmFtZUlzRmlyc3RSZXNwb25kZXIiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFt
ZUlzRmlyc3RSZXNwb25kZXIpOwotICAgIGJpbmRNZXRob2QoInNldFByaXZhdGVCcm93c2luZ0Vu
YWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQp
OwotICAgIGJpbmRNZXRob2QoInNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSk7Ci0g
ICAgYmluZE1ldGhvZCgic3RvcmVXZWJTY3JpcHRPYmplY3QiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0b3JlV2ViU2NyaXB0T2JqZWN0KTsKLSAgICBiaW5kTWV0aG9kKCJkZWxldGVBbGxMb2Nh
bFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk7
Ci0gICAgYmluZE1ldGhvZCgibG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4pOwotICAgIGJp
bmRNZXRob2QoIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk7Ci0gICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3Jh
Z2VGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoIm9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlm
aWNhdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnMpOwotICAgIGJpbmRNZXRob2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOwotICAgIGJpbmRNZXRob2QoInNldFNo
b3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCk7Ci0g
ICAgYmluZE1ldGhvZCgiZW5hYmxlRml4ZWRMYXlvdXRNb2RlIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjplbmFibGVGaXhlZExheW91dE1vZGUpOwotICAgIGJpbmRNZXRob2QoInNldEZpeGVkTGF5
b3V0U2l6ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Rml4ZWRMYXlvdXRTaXplKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZWxlY3Rpb25Bc01hcmt1cCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2VsZWN0aW9uQXNNYXJrdXApOwotICAgIGJpbmRNZXRob2QoInNldEhhc0N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVl
bkJlaGF2aW9yKTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXh0U3Vycm91bmRpbmdOb2RlIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjp0ZXh0U3Vycm91bmRpbmdOb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJh
Ym9ydE1vZGFsIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCk7CisgICAg
YmluZE1ldGhvZCgiYWNjZXNzU3RvcmVkV2ViU2NyaXB0T2JqZWN0IiwgJkR1bXBSZW5kZXJUcmVl
VGVzdFJ1bm5lcjo6YWNjZXNzU3RvcmVkV2ViU2NyaXB0T2JqZWN0KTsKKyAgICBiaW5kTWV0aG9k
KCJhZGREaXNhbGxvd2VkVVJMIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6YWRkRGlzYWxs
b3dlZFVSTCk7CisgICAgYmluZE1ldGhvZCgiYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9y
aWdpbiIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNh
Z2VGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoImNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyIs
ICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyk7Cisg
ICAgYmluZE1ldGhvZCgiY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyIsICZEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMpOworICAgIGJpbmRNZXRob2Qo
ImNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbiIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik7CisgICAgYmluZE1ldGhvZCgiY2xl
YXJCYWNrRm9yd2FyZExpc3QiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpjbGVhckJhY2tG
b3J3YXJkTGlzdCk7CisgICAgYmluZE1ldGhvZCgiZHVtcEFzV2ViQXJjaGl2ZSIsICZEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OmR1bXBBc1dlYkFyY2hpdmUpOworICAgIGJpbmRNZXRob2QoImtl
ZXBXZWJIaXN0b3J5IiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3Rvcnkp
OworICAgIGJpbmRNZXRob2QoIm9iakNDbGFzc05hbWVPZiIsICZEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6Om9iakNDbGFzc05hbWVPZik7CisgICAgYmluZE1ldGhvZCgic2V0QXBwbGljYXRpb25D
YWNoZU9yaWdpblF1b3RhIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRDYWxsQ2xvc2VPbldlYlZp
ZXdzIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0Q2FsbENsb3NlT25XZWJWaWV3cyk7
CisgICAgYmluZE1ldGhvZCgic2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsICZEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIpOworICAgIGJp
bmRNZXRob2QoInNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCAmRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRV
c2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJzdG9y
ZVdlYlNjcmlwdE9iamVjdCIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnN0b3JlV2ViU2Ny
aXB0T2JqZWN0KTsKKyAgICBiaW5kTWV0aG9kKCJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCAmRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRN
ZXRob2QoImxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbiIsICZEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbik7CisgICAgYmluZE1ldGhv
ZCgib3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpv
cmlnaW5zV2l0aExvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9y
YWdlRm9yT3JpZ2luIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZGVsZXRlTG9jYWxTdG9y
YWdlRm9yT3JpZ2luKTsKKyAgICBiaW5kTWV0aG9kKCJvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFj
a2VyTm90aWZpY2F0aW9ucyk7CisgICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFnZSIsICZE
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRNZXRo
b2QoInNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkIiwgJkR1bXBS
ZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZv
cmVVbmxvYWQpOworICAgIGJpbmRNZXRob2QoImVuYWJsZUZpeGVkTGF5b3V0TW9kZSIsICZEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZSk7CisgICAgYmluZE1l
dGhvZCgic2V0Rml4ZWRMYXlvdXRTaXplIiwgJkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0
Rml4ZWRMYXlvdXRTaXplKTsKKyAgICBiaW5kTWV0aG9kKCJzZWxlY3Rpb25Bc01hcmt1cCIsICZE
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFya3VwKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IiLCAmRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IpOworICAgIGJpbmRNZXRob2Qo
InRleHRTdXJyb3VuZGluZ05vZGUiLCAmRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjp0ZXh0U3Vy
cm91bmRpbmdOb2RlKTsKIAogICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdo
ZW4gYW4gdW5rbm93biBtZXRob2QgaXMgaW52b2tlZC4KLSAgICBiaW5kRmFsbGJhY2tNZXRob2Qo
JkxheW91dFRlc3RDb250cm9sbGVyOjpmYWxsYmFja01ldGhvZCk7CisgICAgYmluZEZhbGxiYWNr
TWV0aG9kKCZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmZhbGxiYWNrTWV0aG9kKTsKIAogICAg
IC8vIFNoYXJlZCBwcm9wZXJ0aWVzLgogICAgIC8vIGdsb2JhbEZsYWcgaXMgdXNlZCBieSBhIG51
bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4KQEAgLTI4OSwyMSArMjg5LDIxIEBAIExheW91dFRlc3RD
b250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGwKICAgICBiaW5kUHJvcGVydHkoInRpdGxlVGV4
dERpcmVjdGlvbiIsICZtX3RpdGxlVGV4dERpcmVjdGlvbik7CiAgICAgYmluZFByb3BlcnR5KCJw
bGF0Zm9ybU5hbWUiLCAmbV9wbGF0Zm9ybU5hbWUpOwogICAgIGJpbmRQcm9wZXJ0eSgiaW50ZXJj
ZXB0UG9zdE1lc3NhZ2UiLCAmbV9pbnRlcmNlcHRQb3N0TWVzc2FnZSk7Ci0gICAgYmluZFByb3Bl
cnR5KCJ3b3JrZXJUaHJlYWRDb3VudCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhy
ZWFkQ291bnQpOwotICAgIGJpbmRNZXRob2QoInNlbmRXZWJJbnRlbnRSZXNwb25zZSIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKTsKLSAgICBiaW5kTWV0aG9k
KCJkZWxpdmVyV2ViSW50ZW50IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50
ZW50KTsKKyAgICBiaW5kUHJvcGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJkR1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQpOworICAgIGJpbmRNZXRob2QoInNlbmRX
ZWJJbnRlbnRSZXNwb25zZSIsICZEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNlbmRXZWJJbnRl
bnRSZXNwb25zZSk7CisgICAgYmluZE1ldGhvZCgiZGVsaXZlcldlYkludGVudCIsICZEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OmRlbGl2ZXJXZWJJbnRlbnQpOwogfQogCi1MYXlvdXRUZXN0Q29u
dHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKK0R1bXBSZW5kZXJUcmVlVGVzdFJ1bm5l
cjo6fkR1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcigpCiB7CiB9CiAKLUxheW91dFRlc3RDb250cm9s
bGVyOjpXb3JrUXVldWU6On5Xb3JrUXVldWUoKQorRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpX
b3JrUXVldWU6On5Xb3JrUXVldWUoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6cHJvY2Vzc1dvcmtTb29uKCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpXb3JrUXVldWU6OnByb2Nlc3NXb3JrU29vbigpCiB7CiAgICAg
aWYgKG1fY29udHJvbGxlci0+bV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+dG9wTG9hZGluZ0ZyYW1l
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpXb3JrUXVldWU6OnByCiAgICAgICAgIG1fY29udHJvbGxlci0+bV9zaGVsbC0+
dGVzdEZpbmlzaGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1
ZTo6cHJvY2Vzc1dvcmsoKQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OldvcmtRdWV1
ZTo6cHJvY2Vzc1dvcmsoKQogewogICAgIFRlc3RTaGVsbCogc2hlbGwgPSBtX2NvbnRyb2xsZXIt
Pm1fc2hlbGw7CiAgICAgLy8gUXVpdCBkb2luZyB3b3JrIG9uY2UgYSBsb2FkIGlzIGluIHByb2dy
ZXNzLgpAQCAtMzMwLDE0ICszMzAsMTQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29y
a1F1ZXVlOjpwcgogICAgICAgICBzaGVsbC0+dGVzdEZpbmlzaGVkKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6cmVzZXQoKQordm9pZCBEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OldvcmtRdWV1ZTo6cmVzZXQoKQogewogICAgIG1fZnJvemVuID0gZmFsc2U7
CiAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkKICAgICAgICAgZGVsZXRlIG1fcXVldWUu
dGFrZUZpcnN0KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6
YWRkV29yayhXb3JrSXRlbSogd29yaykKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpX
b3JrUXVldWU6OmFkZFdvcmsoV29ya0l0ZW0qIHdvcmspCiB7CiAgICAgaWYgKG1fZnJvemVuKSB7
CiAgICAgICAgIGRlbGV0ZSB3b3JrOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6YWQKICAgICBtX3F1ZXVlLmFwcGVuZCh3b3JrKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4dChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OmR1bXBBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBBc1RleHQgPSB0cnVlOwogICAgIG1f
Z2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBmYWxzZTsKQEAgLTM1OCw5OCArMzU4LDk4IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBBc1RleHQoY28KICAgICByZXN1bHQtPnNldE51bGwo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcERhdGFiYXNlQ2FsbGJhY2tz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpkdW1wRGF0YWJhc2VDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIERvIG5vdGhpbmc7IHdlIGRv
bid0IHVzZSB0aGlzIGZsYWcgYW55d2hlcmUgZm9yIG5vdwogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRWRpdGluZ0NhbGxiYWNrcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5k
ZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZHVtcEVkaXRpbmdDYWxsYmFja3Mg
PSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkdW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkdW1wQmFja0Zv
cndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICBtX2R1bXBCYWNrRm9yd2FyZExpc3QgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBGcmFtZUxvYWRDYWxs
YmFja3MgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJh
Y2sgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZHVtcFJlc291cmNlUmVzcG9uc2VN
SU1FVHlwZXMgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQ
b3NpdGlvbnMgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkdW1wQ2hpbGRGcmFtZXNBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
OmR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQgPSB0cnVlOwogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wV2lu
ZG93U3RhdHVzQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcFdpbmRvd1N0YXR1c0NoYW5n
ZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1f
ZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpkdW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSB0cnVlOwogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcFBlcm1pc3Npb25D
bGllbnRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MgPSB0cnVlOwogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ3Jl
YXRlVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZHVtcENyZWF0ZVZpZXcgPSB0
cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBY2NlcHRzRWRpdGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEFj
Y2VwdHNFZGl0aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1sw
XS5pc0Jvb2woKSkKICAgICAgICAgbV9hY2NlcHRzRWRpdGluZyA9IGFyZ3VtZW50c1swXS52YWx1
ZS5ib29sVmFsdWU7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OndhaXRVbnRpbERvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OndhaXRVbnRpbERv
bmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlm
ICghd2Via2l0X3N1cHBvcnQ6OkJlaW5nRGVidWdnZWQoKSkKICAgICAgICAgcG9zdERlbGF5ZWRU
YXNrKG5ldyBOb3RpZnlEb25lVGltZWRPdXRUYXNrKHRoaXMpLCBtX3NoZWxsLT5sYXlvdXRUZXN0
VGltZW91dCgpKTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojp3YWl0VW50aWxEb25lCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6Om5vdGlmeURvbmUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIFRl
c3QgZGlkbid0IHRpbWVvdXQuIEtpbGwgdGhlIHRpbWVvdXQgdGltZXIuCiAgICAgbV90YXNrTGlz
dC5yZXZva2VBbGwoKTsKQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpub3RpZnlEb25lKGNvCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCkKK3Zv
aWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1Rp
bWVvdXQpCiB7CiAgICAgaWYgKG1fd2FpdFVudGlsRG9uZSAmJiAhbV9zaGVsbC0+d2ViVmlld0hv
c3QoKS0+dG9wTG9hZGluZ0ZyYW1lKCkgJiYgbV93b3JrUXVldWUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGlmIChpc1RpbWVvdXQpCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29tcGxldGVOb3RpZgogICAgIG1fd2FpdFVudGlsRG9uZSA9IGZhbHNlOwogfQog
Ci1jbGFzcyBXb3JrSXRlbUJhY2tGb3J3YXJkIDogcHVibGljIExheW91dFRlc3RDb250cm9sbGVy
OjpXb3JrSXRlbSB7CitjbGFzcyBXb3JrSXRlbUJhY2tGb3J3YXJkIDogcHVibGljIER1bXBSZW5k
ZXJUcmVlVGVzdFJ1bm5lcjo6V29ya0l0ZW0gewogcHVibGljOgogICAgIFdvcmtJdGVtQmFja0Zv
cndhcmQoaW50IGRpc3RhbmNlKSA6IG1fZGlzdGFuY2UoZGlzdGFuY2UpIHsgfQogICAgIGJvb2wg
cnVuKFRlc3RTaGVsbCogc2hlbGwpCkBAIC00OTAsMjEgKzQ5MCwyMSBAQCBwcml2YXRlOgogICAg
IGludCBtX2Rpc3RhbmNlOwogfTsKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVC
YWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmln
YXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzTnVt
YmVyKCkpCiAgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtQmFja0Zvcndh
cmQoLWFyZ3VtZW50c1swXS50b0ludDMyKCkpKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBE
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCiAgICAgICAg
IG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtQmFja0ZvcndhcmQoYXJndW1lbnRzWzBd
LnRvSW50MzIoKSkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi1jbGFzcyBXb3JrSXRl
bVJlbG9hZCA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0geworY2xhc3Mg
V29ya0l0ZW1SZWxvYWQgOiBwdWJsaWMgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpXb3JrSXRl
bSB7CiBwdWJsaWM6CiAgICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKICAgICB7CkBAIC01
MTMsMTMgKzUxMywxMyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cXVldWVSZWxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX3dvcmtRdWV1
ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbVJlbG9hZCk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9
CiAKLWNsYXNzIFdvcmtJdGVtTG9hZGluZ1NjcmlwdCA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6V29ya0l0ZW0geworY2xhc3MgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0IDogcHVibGljIER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6V29ya0l0ZW0gewogcHVibGljOgogICAgIFdvcmtJdGVt
TG9hZGluZ1NjcmlwdChjb25zdCBzdHJpbmcmIHNjcmlwdCkgOiBtX3NjcmlwdChzY3JpcHQpIHsg
fQogICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCkBAIC01MzIsNyArNTMyLDcgQEAgcHJp
dmF0ZToKICAgICBzdHJpbmcgbV9zY3JpcHQ7CiB9OwogCi1jbGFzcyBXb3JrSXRlbU5vbkxvYWRp
bmdTY3JpcHQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKK2NsYXNz
IFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdCA6IHB1YmxpYyBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OldvcmtJdGVtIHsKIHB1YmxpYzoKICAgICBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQoY29u
c3Qgc3RyaW5nJiBzY3JpcHQpIDogbV9zY3JpcHQoc2NyaXB0KSB7IH0KICAgICBib29sIHJ1bihU
ZXN0U2hlbGwqIHNoZWxsKQpAQCAtNTQ1LDIxICs1NDUsMjEgQEAgcHJpdmF0ZToKICAgICBzdHJp
bmcgbV9zY3JpcHQ7CiB9OwogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRp
bmdTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkp
CiAgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZGluZ1NjcmlwdChh
cmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCiAgICAgICAgIG1fd29y
a1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChhcmd1bWVudHNbMF0u
dG9TdHJpbmcoKSkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi1jbGFzcyBXb3JrSXRl
bUxvYWQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtIHsKK2NsYXNzIFdv
cmtJdGVtTG9hZCA6IHB1YmxpYyBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OldvcmtJdGVtIHsK
IHB1YmxpYzoKICAgICBXb3JrSXRlbUxvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0
cmluZyYgdGFyZ2V0KQogICAgICAgICA6IG1fdXJsKHVybCkKQEAgLTU3NSw3ICs1NzUsNyBAQCBw
cml2YXRlOgogICAgIFdlYlN0cmluZyBtX3RhcmdldDsKIH07CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnF1ZXVlTG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlTG9h
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQog
ewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSkgewogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFdlYlVSTDo6cmVzb2x2ZSgpIGFuZCBh
dm9pZCBHVVJMLgpAQCAtNTkxLDcgKzU5MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnF1ZXVlTG9hZChjb24KICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotY2xhc3MgV29ya0l0
ZW1Mb2FkSFRNTFN0cmluZyA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0g
IHsKK2NsYXNzIFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcgOiBwdWJsaWMgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpXb3JrSXRlbSAgewogcHVibGljOgogICAgIFdvcmtJdGVtTG9hZEhUTUxTdHJp
bmcoY29uc3Qgc3RkOjpzdHJpbmcmIGh0bWwsIGNvbnN0IFdlYlVSTCYgYmFzZVVSTCkKICAgICAg
ICAgOiBtX2h0bWwoaHRtbCkKQEAgLTYxMyw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgIFdlYlVS
TCBtX3VucmVhY2hhYmxlVVJMOwogfTsKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhU
TUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkpIHsKICAgICAgICAgc3RyaW5nIGh0bWwgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKQEAgLTYyOCw3ICs2MjgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxv
YWRIVE1MCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9iakNJZGVudGl0eUlzRXF1YWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpv
YmpDSWRlbnRpdHlJc0VxdWFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyKSB7CiAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIHRvIHJldHVybiBhbiBlcnJvci4KQEAg
LTYzOCw3ICs2MzgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYmpDSWRlbnRpdHlJ
CiAgICAgcmVzdWx0LT5zZXQoYXJndW1lbnRzWzBdLmlzRXF1YWwoYXJndW1lbnRzWzFdKSk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVUZXN0UnVubmVyOjpyZXNldCgpCiB7CiAgICAgaWYgKG1fc2hlbGwpIHsKICAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRab29tTGV2ZWwoZmFsc2UsIDApOwpAQCAtNzA3LDcgKzcwNyw3
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKICNlbmRpZgogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhdGlvbkNoYW5nZURvbmUoKQordm9pZCBEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCiB7CiAgICAgbV93ZWJIaXN0
b3J5SXRlbUNvdW50LnNldChtX3NoZWxsLT5uYXZpZ2F0aW9uRW50cnlDb3VudCgpKTsKIApAQCAt
NzE4LDcyICs3MTgsNzIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYXRpb25DaGFu
ZwogICAgICAgICBtX3dvcmtRdWV1ZS5wcm9jZXNzV29ya1Nvb24oKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cG9saWN5RGVsZWdhdGVEb25lKCkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVUZXN0UnVubmVyOjpwb2xpY3lEZWxlZ2F0ZURvbmUoKQogewogICAgIEFTU0VSVChtX3dhaXRV
bnRpbERvbmUpOwogICAgIG1fc2hlbGwtPnRlc3RGaW5pc2hlZCgpOwogICAgIG1fd2FpdFVudGls
RG9uZSA9IGZhbHNlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYW5PcGVu
V2luZG93cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fY2FuT3BlbldpbmRvd3Mg
PSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAgICAgICBtX3NoZWxs
LT53ZWJWaWV3KCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhhcmd1bWVudHNbMF0u
dG9Cb29sZWFuKCkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjp3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6d2luZG93Q291bnQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3Vs
dC0+c2V0KHN0YXRpY19jYXN0PGludD4obV9zaGVsbC0+d2luZG93Q291bnQoKSkpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRDbG9zZVJlbWFpbmluZ1dpbmRv
d3NXaGVuQ29tcGxldGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRz
WzBdLmlzQm9vbCgpKQogICAgICAgICBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWU7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwKQogICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0QWxsQ29va2ll
cyhjcHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFy
Z3VtZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXR0aW5n
cygpLT5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjcHBWYXJpYW50VG9Cb29s
KGFyZ3VtZW50c1swXSkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzaG93
V2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
IHsKICAgICBtX3NoZWxsLT5zaG93RGV2VG9vbHMoKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5k
ZXJUcmVlVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+Y2xvc2VEZXZUb29s
cygpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXaW5kb3dJc0tleShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFdpbmRv
d0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkKICAgICAgICAgbV9zaGVsbC0+c2V0Rm9jdXMobV9zaGVsbC0+d2ViVmlldygpLCBhcmd1
bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewogICAgICAg
ICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uID0gYXJndW1l
bnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSA/IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA6IFdlYlVS
TCgpOwpAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVz
ZXJTdHlsZVMKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKICAgICAgICAgbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uID0gd2Via2l0X3N1cHBvcnQ6OkxvY2FsRmlsZVRvRGF0YVVSTCgKQEAgLTgw
Myw3ICs4MDMsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTCiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIG1fc2hlbGwtPnByZWZlcmVu
Y2VzKCktPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJv
b2xWYWx1ZTsKQEAgLTgxMiw3ICs4MTIsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBdXRob3JBbmRVCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZXhl
Y0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKQEAgLTgyOSw3ICs4MjksNyBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChjCiAgICAgbV9zaGVsbC0+d2Vi
VmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRG
OChjb21tYW5kKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSkpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6aXNDb21tYW5kRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpA
QCAtODQxLDcgKzg0MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVu
YWIKICAgICByZXN1bHQtPnNldChydik7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0
UG9wdXBCbG9ja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIGJvb2wgYmxvY2tQb3B1cHMgPSBhcmd1bWVu
dHNbMF0udG9Cb29sZWFuKCk7CkBAIC04NTEsNzggKzg1MSw3OCBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQb3B1cEJsb2NrCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEltYWdlc0FsbG93ZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVUZXN0UnVubmVyOjpzZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlz
c2lvbnMoKS0+c2V0SW1hZ2VzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
Y3JpcHRzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFNjcmlwdHNBbGxv
d2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKICAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0U2NyaXB0c0FsbG93ZWQo
YXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZUFsbG93ZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVUZXN0UnVubmVyOjpzZXRTdG9yYWdlQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAgIG1fc2hlbGwtPndlYlBl
cm1pc3Npb25zKCktPnNldFN0b3JhZ2VBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBsdWdpbnNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0UGx1Z2lu
c0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQogICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRQbHVnaW5zQWxs
b3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmls
aXR5TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1v
ZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8v
IFdlIGhhdmUgbm8gbmVlZCB0byBzdXBwb3J0IERhc2hib2FyZCBDb21wYXRpYmlsaXR5IE1vZGUg
KG1hYy1vbmx5KQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpj
bGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGlj
YXRpb24gY2FjaGUgcXVvdGFzLgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgYW4gb3JpZ2lu
LgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxp
Y2F0aW9uIGNhY2hlIHF1b3Rhcy4KICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBnZXR0aW5nIG9yaWdpbnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNhY2hlcy4KICAg
ICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBw
bGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6YXBwbGlj
YXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdl
dHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGUgZm9yIGFuIG9yaWdpbi4K
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3ko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQuCiAgICAgLy8gQ3VycmVudGx5IG9ubHkgaGFzIGEgbm9uLW51bGwgaW1w
bGVtZW50YXRpb24gb24gUVQuCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIGJvb2wgZW5h
YmxlID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKQEAgLTkzNCwxNCArOTM0LDE0IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGkKICAgICByZXN1bHQtPnNl
dE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURl
bGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fc2hlbGwtPndlYlZp
ZXdIb3N0KCktPndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwogICAgIG1fd2FpdFVudGlsRG9uZSA9
IHRydWU7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKICAgICAgICAgc3RyaW5n
IGhlYWRlciA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwpAQCAtOTUxLDIxICs5NTEsMjEgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZQogICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAgICAgICBtX3NoZWxsLT53ZWJW
aWV3SG9zdCgpLT5zZXRCbG9ja1JlZGlyZWN0cyhhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVl
KTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAgIG1fc2hlbGwtPndlYlZp
ZXdIb3N0KCktPnNldFJlcXVlc3RSZXR1cm5OdWxsKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFs
dWUpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cGF0
aFRvTG9jYWxSZXNvdXJjZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQpAQCAtMTAwMywzMyAr
MTAwMywzMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlCiAgICAg
cmVzdWx0LT5zZXQod2Via2l0X3N1cHBvcnQ6OlJld3JpdGVMYXlvdXRUZXN0c1VSTCh1cmwpLnNw
ZWMoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9h
cmRPbkRyYWcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogICAgIG1fc2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCA9IHRydWU7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwogICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHRydWU7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAg
IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChhcmd1
bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzQm9vbCgpKQogICAgICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRTZWxlY3RUcmFp
bGluZ1doaXRlc3BhY2VFbmFibGVkKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKK2Jvb2wgRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChjb25zdCBXZWJTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJT
dHJpbmcmIGVsZW1lbnRJZCkKIHsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53
ZWJWaWV3KCktPm1haW5GcmFtZSgpOwogICAgIGlmICghd2ViRnJhbWUpCkBAIC0xMDQ1LDcgKzEw
NDUsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvCiAgICAgcmV0
dXJuIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQsIGFuaW1hdGlvbk5h
bWUsIHRpbWUpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRv
dWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKK2Jvb2wgRHVtcFJlbmRlclRy
ZWVUZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3Qg
V2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVs
ZW1lbnRJZCkKIHsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCkt
Pm1haW5GcmFtZSgpOwogICAgIGlmICghd2ViRnJhbWUpCkBAIC0xMDYxLDcgKzEwNjEsNyBAQCBi
b29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpCiAgICAgcmV0dXJuIGNvbnRy
b2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHRpbWUp
OwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0
ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCitib29sIER1bXBS
ZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQogewogICAgIFdlYkZyYW1lKiB3ZWJGcmFt
ZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKCF3ZWJGcmFtZSkK
QEAgLTEwNzUsNyArMTA3NSw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnRE
b2VzQXUKICAgICByZXR1cm4gaW5wdXRFbGVtZW50LmF1dG9Db21wbGV0ZSgpOwogfQogCi1pbnQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpCitpbnQgRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKQogewogICAg
IFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7CiAg
ICAgaWYgKCF3ZWJGcmFtZSkKQEAgLTEwODgsNyArMTA4OCw3IEBAIGludCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmUKICAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5l
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldChm
YWxzZSk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1swXS5pc1N0
cmluZygpICYmIGFyZ3VtZW50c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc1N0cmlu
ZygpKSB7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpw
YXVzZUFuaW1hdGlvCiAgICAgfQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNl
dChmYWxzZSk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1swXS5p
c1N0cmluZygpICYmIGFyZ3VtZW50c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc1N0
cmluZygpKSB7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpwYXVzZVRyYW5zaXRpCiAgICAgfQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewog
ICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1CiAgICAgcmVzdWx0LT5zZXQoZWxlbWVu
dERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGVsZW1lbnRJZCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVy
VHJlZVRlc3RSdW5uZXI6OmVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgIT0gNCkgewogICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CkBAIC0xMTM4LDcgKzEx
MzgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzCiAgICAgcmVz
dWx0LT5zZXQodHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVB
dXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmRpc2FibGVBdXRvUmVz
aXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9MikgewogICAgICAgICByZXN1bHQt
PnNldChmYWxzZSk7CkBAIC0xMTU0LDMxICsxMTU0LDMxIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRpc2FibGVBdXRvUmUKICAgICByZXN1bHQtPnNldCh0cnVlKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0KG51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucygpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdl
TG9hZGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZGlzYWJsZUltYWdlTG9hZGluZyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+cHJlZmVy
ZW5jZXMoKS0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5ID0gZmFsc2U7CiAgICAgbV9zaGVsbC0+
YXBwbHlQcmVmZXJlbmNlcygpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICAvLyBXZSBkb24ndCB1c2UgdGhlIFdlYktpdCBpY29uIGRh
dGFiYXNlLgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQobV9zaGVsbC0+d2ViVmlldygpLT5kaXNwYXRjaEJl
Zm9yZVVubG9hZEV2ZW50KCkpOwogfQogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9u
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2
b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVy
bWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5p
c1N0cmluZygpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKQEAgLTExOTAsNyArMTE5
MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE4KICAgICByZXN1
bHQtPnNldCh0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVE
ZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzaW11
bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9
IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0KGZh
bHNlKTsKQEAgLTEyMDUsMTQgKzEyMDUsMTQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2ltdWxhdGVEZXNrdAogfQogI2VuZGlmCiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpIHx8ICFh
cmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbihjcHBWYXJpYW50VG9Cb29sKGFy
Z3VtZW50c1swXSksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxKQogICAgICAgICBtX2RlZmVyTWFpblJlc291
cmNlRGF0YUxvYWQgPSBjcHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSk7CkBAIC0xMjIyLDIz
ICsxMjIyLDIzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyTWFpblIKIC8v
IFVuaW1wbGVtZW50ZWQgc3R1YnMKIC8vCiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1
bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkdW1wQXNXZWJBcmNo
aXZlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBTZWxlY3Rpb25SZWN0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6ZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBTZWxl
Y3Rpb25SZWN0ID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmRp
c3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICBXZWJWaWV3SG9zdCogaG9zdCA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCk7CiAg
ICAgY29uc3QgV2ViS2l0OjpXZWJTaXplJiBzaXplID0gbV9zaGVsbC0+d2ViVmlldygpLT5zaXpl
KCk7CkBAIC0xMjQ5LDcgKzEyNDksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNw
bGF5KGNvbnN0CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6OmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIFdlYlZpZXdIb3N0KiBob3N0ID0g
bV9zaGVsbC0+d2ViVmlld0hvc3QoKTsKICAgICBob3N0LT5wYWludEludmFsaWRhdGVkUmVnaW9u
KCk7CkBAIC0xMjU3LDU5ICsxMjU3LDU5IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRp
c3BsYXlJbnZhbGkKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnRlc3RSZXBhaW50KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX3Rlc3RS
ZXBhaW50ID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVy
OjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQogewogICAgIG1fc3dlZXBIb3Jpem9udGFsbHkgPSB0cnVlOwogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJh
Y2tGb3J3YXJkTGlzdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmNsZWFyQmFja0Zvcndh
cmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmtlZXBXZWJIaXN0b3J5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCAg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmtlZXBX
ZWJIaXN0b3J5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCAgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzdG9yZVdlYlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OnN0b3JlV2ViU2NyaXB0T2JqZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBE
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYmpD
Q2xhc3NOYW1lT2YoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpvYmpDQ2xhc3NOYW1lT2Yo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YWRkRGlzYWxsb3dlZFVSTChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFkZERpc2FsbG93
ZWRVUkwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0Q2FsbENsb3NlT25XZWJWaWV3cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
OnNldENhbGxDbG9zZU9uV2ViVmlld3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1
bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNj
cmlwdENhbkFjY2Vzc0NsaXBib2FyZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEph
dmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2Vz
KCktPmphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9v
bFZhbHVlOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SmF2YVNjcmlwdAogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewogICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNl
cygpLT5YU1NBdWRpdG9yRW5hYmxlZCA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CkBA
IC0xMzI3LDcgKzEzMjcsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRp
dG9yCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIFdlYlZlY3Rvcjx2ODo6TG9j
YWw8djg6OlZhbHVlPiA+IHZhbHVlczsKQEAgLTEzNTcsNyArMTM1Nyw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXAKICAgICB9CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50
c1sxXS5pc1N0cmluZygpKSB7CiAgICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwpAQCAtMTM2OCw3ICsxMzY4LDcgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcAogICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIApAQCAtMTM4MCw3ICsxMzgw
LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXbwogICAgICAgICBX
ZWJTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjcHBWYXJpYW50VG9XZWJTdHJpbmco
YXJndW1lbnRzWzFdKSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxv
d1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewogICAgICAgICBtX3NoZWxsLT5w
cmVmZXJlbmNlcygpLT5hbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWU7CkBAIC0xMzg5LDcgKzEzODksNyBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250
ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3Vy
ZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQogICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXREaXNwbGF5aW5n
SW5zZWN1cmVDb250ZW50QWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwpAQCAtMTM5
Nyw3ICsxMzk3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dEaXNwbAog
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVy
OjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIG1fc2hlbGwtPnByZWZl
cmVuY2VzKCktPmFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IGFyZ3VtZW50c1swXS52YWx1
ZS5ib29sVmFsdWU7CkBAIC0xNDA2LDcgKzE0MDYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBbGxvd0ZpbGVBCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQog
ICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRSdW5uaW5nSW5zZWN1cmVDb250
ZW50QWxsb3dlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKQEAgLTE0MTYsNyArMTQx
Niw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmkKIAogLy8gTmVl
ZCB0aGVzZSBjb252ZXJzaW9ucyBiZWNhdXNlIHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGZvciBi
b29sZWFucwogLy8gbWF5IHZhcnkgLSBmb3IgZXhhbXBsZSwgb24gbWFjICIxIiBhbmQgIjAiIGFy
ZSB1c2VkIGZvciBib29sZWFuLgotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFu
dFRvQm9vbChjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKK2Jvb2wgRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS5pc0Jvb2woKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigpOwpA
QCAtMTQzMyw3ICsxNDMzLDcgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFu
dFRvQgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50MzJfdCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCitpbnQzMl90IER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFu
dCYgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiB2
YWx1ZS50b0ludDMyKCk7CkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBpbnQzMl90IExheW91dFRlc3RD
b250cm9sbGVyOjpjcHBWYXJpYW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLVdlYlN0cmluZyBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQm
IHZhbHVlKQorV2ViU3RyaW5nIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRv
V2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNT
dHJpbmcoKSkgewogICAgICAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3Ig
cHJlZmVyZW5jZS4gRXhwZWN0ZWQgc3RyaW5nIHZhbHVlLiIpOwpAQCAtMTQ1OCw3ICsxNDU4LDcg
QEAgV2ViU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpjcHBWYXJpYQogICAgIHJldHVybiBX
ZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlLnRvU3RyaW5nKCkpOwogfQogCi1WZWN0b3I8V2ViU3Ry
aW5nPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29u
c3QgQ3BwVmFyaWFudCYgdmFsdWUpCitWZWN0b3I8V2ViU3RyaW5nPiBEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNvbnN0IENwcFZhcmlhbnQmIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBsb2dFcnJvclRv
Q29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgb2JqZWN0IHZh
bHVlLiIpOwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAgc3RhdGljIHZvaWQgc2V0Rm9udE1hcChXZWJQ
cmVmZXJlbmNlczo6UwogICAgIH0KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
IT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCkBAIC0xNTkxLDEzICsxNTkxLDEzIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICBtX3NoZWxsLT5h
cHBseVByZWZlcmVuY2VzKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZhbGxi
YWNrTWV0aG9kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3Zv
aWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpmYWxsYmFja01ldGhvZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcHJpbnRmKCJDT05TT0xFIE1F
U1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBMYXlvdXRU
ZXN0Q29udHJvbGxlclxuIik7CisgICAgcHJpbnRmKCJDT05TT0xFIE1FU1NBR0U6IEphdmFTY3Jp
cHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXJcbiIpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CiAKQEAgLTE2MTYsNyArMTYxNiw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE9yaWdpbkFjY2UKICAgICAgICAgYXJndW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogCkBAIC0xNjM1LDIwICsxNjM1LDIwIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkEKICAgICAgICAgYXJndW1l
bnRzWzNdLnRvQm9vbGVhbigpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpjbGVhckFsbERhdGFi
YXNlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIHdlYmtpdF9zdXBwb3J0OjpDbGVhckFs
bERhdGFiYXNlcygpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFz
ZVF1b3RhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmICgoYXJndW1lbnRzLnNpemUoKSA+PSAxKSAmJiBh
cmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNldERhdGFi
YXNlUXVvdGEoYXJndW1lbnRzWzBdLnRvSW50MzIoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0
UE9TSVhMb2NhbGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA9PSAxICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKQpAQCAtMTcxNSwxMyArMTcxNSwx
MyBAQCBzdGF0aWMgYm9vbCBwYXJzZVBhZ2VOdW1iZXJTaXplTWFyZ2lucyhjCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaW50aW5nKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBzZXRJc1ByaW50aW5nKHRy
dWUpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQoIiIpOwogICAg
IGludCBwYWdlTnVtYmVyID0gMDsKQEAgLTE3NDYsNyArMTc0Niw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWEKICAgICByZXN1bHQtPnNldChyZXN1bHRTdHJpbmcu
c3RyKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNDdXN0b21QYWdlU2l6
ZVN0eWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHls
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQog
ewogICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKICAgICBpbnQgcGFnZUluZGV4ID0gMDsKQEAgLTE3
NTgsNyArMTc1OCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0N1c3RvbVBhZ2UK
ICAgICByZXN1bHQtPnNldChmcmFtZS0+aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShwYWdlSW5kZXgp
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBS
ZW5kZXJUcmVlVGVzdFJ1bm5lcjo6cGFnZVByb3BlcnR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQoIiIpOwog
ICAgIGludCBwYWdlTnVtYmVyID0gMDsKQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eSgKICAgICBmcmFtZS0+cHJpbnRFbmQoKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVy
VHJlZVRlc3RSdW5uZXI6Om51bWJlck9mUGFnZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAg
ICBpbnQgcGFnZVdpZHRoSW5QaXhlbHMgPSAwOwpAQCAtMTc5Miw3ICsxNzkyLDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcwogICAgIHJlc3VsdC0+c2V0KG51bWJl
ck9mUGFnZXMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRp
bmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiAgICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1f
c2hlbGwtPndpbmRvd0xpc3QoKTsKQEAgLTE4MDIsMTQgKzE4MDIsMTQgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaQogICAgIHJlc3VsdC0+c2V0KG51bWJlck9mUmVx
dWVzdHMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsb2dFcnJvclRvQ29uc29s
ZShjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVy
Ojpsb2dFcnJvclRvQ29uc29sZShjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKIHsKICAgICBtX3No
ZWxsLT53ZWJWaWV3SG9zdCgpLT5kaWRBZGRNZXNzYWdlVG9Db25zb2xlKAogICAgICAgICBXZWJD
b25zb2xlTWVzc2FnZShXZWJDb25zb2xlTWVzc2FnZTo6TGV2ZWxFcnJvciwgV2ViU3RyaW5nOjpm
cm9tVVRGOCh0ZXh0KSksCiAgICAgICAgIFdlYlN0cmluZygpLCAwKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwo
KTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKQEAgLTE4MTcsMTMgKzE4MTcsMTMgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIG1fc2hlbGwtPmRy
dERldlRvb2xzQWdlbnQoKS0+ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihhcmd1bWVudHNbMF0udG9J
bnQzMigpLCBhcmd1bWVudHNbMV0udG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFNlbGVjdGlvbkNvbG9ycygweGZmZWUwMDAwLCAweGZm
MDBlZTAwLCAweGZmMDAwMDAwLCAweGZmYzBjMGMwKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFkZFVz
ZXJTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29s
KCkgfHwgIWFyZ3VtZW50c1syXS5pc0Jvb2woKSkKQEAgLTE4MzQsNyArMTgzNCw3IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQKICAgICAgICAgYXJndW1lbnRzWzJd
LnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZyYW1lcyA6IFdl
YlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHkpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RS
dW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJn
dW1lbnRzWzFdLmlzQm9vbCgpKQpAQCAtMTg0Nyw3ICsxODQ3LDcgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlUwogICAgICAgICBXZWJWaWV3OjpVc2VyU3R5bGVJbmpl
Y3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCA2IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50
c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sz
XS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbNF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1s1XS5p
c051bWJlcigpKQpAQCAtMTg3MCw3ICsxODcwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TW9ja0RldmljZQogCiAvLyBGSVhNRTogRm9yIGdyZWF0ZXIgdGVzdCBmbGV4aWJpbGl0
eSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2V0IGVhY2ggcGFnZSdzIGdlb2xvY2F0aW9uIG1vY2sg
aW5kaXZpZHVhbGx5LgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyMzY4Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwg
IWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKQEAgLTE4ODAsNyArMTg4MCw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW8KICAgICAgICAgd2luZG93TGlzdFtpXS0+Z2Vv
bG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBlcm1pc3Npb24oYXJndW1lbnRzWzBdLnRvQm9vbGVh
bigpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSkKQEAgLTE4OTAsNyArMTg5MCw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICAgICAgd2luZG93TGlz
dFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBvc2l0aW9uKGFyZ3VtZW50c1swXS50
b0RvdWJsZSgpLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSwgYXJndW1lbnRzWzJdLnRvRG91Ymxl
KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25F
cnJvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9y
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8
ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCkBA
IC0xOTAwLDEzICsxOTAwLDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tH
ZW9sb2MKICAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNl
dEVycm9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMV0pKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmFib3J0TW9kYWwoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51
bGwoKTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8
ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpCkBA
IC0xOTE2LDcgKzE5MTYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3Bl
ZWNoCiAgICAgICAgIGNvbnRyb2xsZXItPmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCksIGNw
cFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQpAQCAtMTkyOCw3ICsxOTI4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja1NwZWVjaAogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCkBAIC0x
OTM4LDcgKzE5MzgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNo
CiAgICAgICAgIHJlY29nbml6ZXItPmFkZE1vY2tSZXN1bHQoY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1swXSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQpAQCAtMTk0OCw3
ICsxOTQ4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaAogICAg
ICAgICByZWNvZ25pemVyLT5zZXRFcnJvcihhcmd1bWVudHNbMF0udG9JbnQzMigpLCBjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6
Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKICAgICBpZiAo
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9z
dCgpLT5tb2NrU3BlZWNoUmVjb2duaXplcigpKQpAQCAtMTk1Niw3ICsxOTU2LDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2FzTW9ja1NwZWVjaAogfQogI2VuZGlmCiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgIT0gMSkKQEAgLTE5NzYsMTIgKzE5NzYsMTIgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbgogICAgIGlucHV0LT5zdGFydFNwZWVjaElu
cHV0KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpsYXllclRyZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQobV9zaGVs
bC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bGF5ZXJUcmVlQXNUZXh0KG1fc2hvd0RlYnVnTGF5
ZXJUcmVlKS51dGY4KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpsb3NlQ29t
cG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KikK
K3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KikKIHsKICAgICBpbnQgbnVtVGlt
ZXM7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKQEAg
LTE5OTEsNyArMTk5MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxvc2VDb21wb3Np
dG8KICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1l
cyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRl
bShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgV2ViRWxlbWVu
dCBlbGVtZW50OwogICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJnc1swXS52YWx1
ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQpAQCAtMjAwMCw3ICsyMDAwLDcgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvcgogICAgICAgICByZXN1bHQtPnNldChlbGVt
ZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0
ZjgoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVt
cFJlbmRlclRyZWVUZXN0UnVubmVyOjpmaW5kU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjAyOCw3ICsyMDI4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhj
bwogICAgIHJlc3VsdC0+c2V0KGZpbmRSZXN1bHQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKQEAg
LTIwMzYsNyArMjAzNiw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1U
aW0KICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldE1pbmltdW1UaW1lcklu
dGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldEF1
dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSAyIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCkBAIC0yMDUzLDcgKzIwNTMsNyBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkCiAgICAgaW5wdXQtPnNldEF1
dG9maWxsZWQoYXJndW1lbnRzWzFdLnZhbHVlLmJvb2xWYWx1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5u
ZXI6OnNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpICE9IDIpCkBAIC0yMDcwLDM3ICsyMDcwLDM3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXMKICAgICBpbnB1dC0+c2V0VmFsdWUoY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksIHRydWUpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqKQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCopCiB7CiAgICAgLy8gTm90IEltcGxlbWVudGVkCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCit2b2lkIER1bXBSZW5kZXJUcmVlVGVz
dFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKIHsKICAgICAvLyBOb3QgSW1wbGVtZW50ZWQK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQordm9pZCBEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKIHsKICAgICAvLyBOb3QgSW1wbGVt
ZW50ZWQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdl
Rm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikK
K3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQogewogICAg
IC8vIE5vdCBJbXBsZW1lbnRlZAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKQordm9pZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6Om9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
CiB7CiAgICAgLy8gTm90IEltcGxlbWVudGVkCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
Cit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKIHsKICAgICAvLyBOb3QgSW1wbGVtZW50ZWQK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRTaG91
bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID09IDEgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAgICAgICBtX3Nob3VsZFN0
YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVh
bigpOwpAQCAtMjEwOCw3ICsyMTA4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U2hvdWxkU3RheQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjplbmFibGVGaXhlZExheW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVu
bmVyOjplbmFibGVGaXhlZExheW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA8ICAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCkBAIC0y
MTE3LDcgKzIxMTcsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVGaXhlZExh
CiAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5lbmFibGVGaXhlZExheW91dE1vZGUoZW5hYmxlRml4
ZWRMYXlvdXQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGaXhlZExheW91
dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAg
ICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAyIHx8ICFh
cmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCkBAIC0y
MTI3LDE3ICsyMTI3LDE3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZpeGVkTGF5
b3UKICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldEZpeGVkTGF5b3V0U2l6ZShXZWJTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VsZWN0aW9u
QXNNYXJrdXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlv
bkFzTWFya3VwKCkudXRmOCgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29y
a2VyVGhyZWFkQ291bnQoQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBy
ZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+KFdlYldvcmtlckluZm86OmRlZGljYXRlZFdvcmtl
ckNvdW50KCkpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVu
dFJlc3BvbnNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2VuZFdlYkludGVudFJlc3Bv
bnNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD4gY3R4ID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bWFpbldvcmxkU2NyaXB0
Q29udGV4dCgpOwpAQCAtMjE1OSw3ICsyMTU5LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2VuZFdlYkludGVudAogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lcjo6ZGVsaXZlcldlYkludGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgIDMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIxODAsNyArMjE4MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRlbGl2ZXJXZWJJbnQKICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgp
LT5kZWxpdmVySW50ZW50KGludGVudCwgMCwgbV9pbnRlbnRDbGllbnQuZ2V0KCkpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBE
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAjaWYg
T1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCiAgICAgLy8gU2luY2UgRm9udENvbmZpZyBkb2Vzbid0
IHByb3ZpZGUgYSB2YXJpYWJsZSB0byBjb250cm9sIHN1YnBpeGVsIHBvc2l0aW9uaW5nLCB3ZSds
bCBmYWxsIGJhY2sKQEAgLTIxOTEsMTAgKzIxOTEsMTAgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VGV4dFN1YnBpeAogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi1jbGFzcyBJ
bnZva2VDYWxsYmFja1Rhc2sgOiBwdWJsaWMgTWV0aG9kVGFzazxMYXlvdXRUZXN0Q29udHJvbGxl
cj4geworY2xhc3MgSW52b2tlQ2FsbGJhY2tUYXNrIDogcHVibGljIE1ldGhvZFRhc2s8RHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyPiB7CiBwdWJsaWM6Ci0gICAgSW52b2tlQ2FsbGJhY2tUYXNrKExh
eW91dFRlc3RDb250cm9sbGVyKiBvYmplY3QsIFBhc3NPd25BcnJheVB0cjxDcHBWYXJpYW50PiBj
YWxsYmFja0FyZ3VtZW50cywgdWludDMyX3QgbnVtYmVyT2ZBcmd1bWVudHMpCi0gICAgICAgIDog
TWV0aG9kVGFzazxMYXlvdXRUZXN0Q29udHJvbGxlcj4ob2JqZWN0KQorICAgIEludm9rZUNhbGxi
YWNrVGFzayhEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIqIG9iamVjdCwgUGFzc093bkFycmF5UHRy
PENwcFZhcmlhbnQ+IGNhbGxiYWNrQXJndW1lbnRzLCB1aW50MzJfdCBudW1iZXJPZkFyZ3VtZW50
cykKKyAgICAgICAgOiBNZXRob2RUYXNrPER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcj4ob2JqZWN0
KQogICAgICAgICAsIG1fY2FsbGJhY2tBcmd1bWVudHMoY2FsbGJhY2tBcmd1bWVudHMpCiAgICAg
ICAgICwgbV9udW1iZXJPZkFyZ3VtZW50cyhudW1iZXJPZkFyZ3VtZW50cykKICAgICB7CkBAIC0y
MjExLDcgKzIyMTEsNyBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZBcmd1bWVu
dHM7CiB9OwogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0
b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8
ICFhcmd1bWVudHNbMV0uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIyNSw3ICsy
MjI1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYQogICAgIHBv
c3RUYXNrKG5ldyBJbnZva2VDYWxsYmFja1Rhc2sodGhpcywgY2FsbGJhY2tBcmd1bWVudHMucmVs
ZWFzZSgpLCAxKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNF
bmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAg
ICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPnBsdWdpbnNFbmFibGVkID0gYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpOwpAQCAtMjIzNCwxMiArMjIzNCwxMiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQbHVnaW5zRW5hCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRl
clRyZWVUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+d2ViVmll
dygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUsIHRy
dWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CiAgICAgICAg
IHN0cmluZyBuZXdWaXNpYmlsaXR5ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7CkBAIC0yMjU0
LDEyICsyMjU0LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmkK
ICAgICB9CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtE
ZXRlY3Rpb25FbmFibGVkKGJvb2wpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKIHsKICAgICAvLyBOb3QgSW1wbGVt
ZW50ZWQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQt
PnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNb
MF0uaXNTdHJpbmcoKSkKQEAgLTIyODAsNyArMjI4MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFRleHREaXJlY3QKICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFRleHREaXJl
Y3Rpb24oZGlyZWN0aW9uKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXVk
aW9EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0QXVkaW9EYXRhKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiAKQEAgLTIyOTcsNyArMjI5Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEF1ZGlvRGF0YSgKICAgICBzZXRTaG91bGREdW1wQXNBdWRpbyh0cnVlKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJl
aGF2aW9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVl
bkJlaGF2aW9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPCAgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQpAQCAtMjMwNiwyNiArMjMwNiwyNiBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXNDdXN0b21GCiB9CiAKICNpZiBFTkFC
TEUoUE9JTlRFUl9MT0NLKQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlkTG9zZVBvaW50
ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RHVtcFJlbmRlclRyZWVUZXN0UnVubmVyOjpkaWRMb3NlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fc2hlbGwtPndlYlZpZXdI
b3N0KCktPmRpZExvc2VQb2ludGVyTG9jaygpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsQXN5bmNo
cm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hy
b25vdXNseShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJv
bm91c2x5KCk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRHVtcFJlbmRlclRyZWVUZXN0
UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+d2ViVmlld0hv
c3QoKS0+c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoKTsKICAgICByZXN1bHQt
PnNldE51bGwoKTsKIH0KICNlbmRpZgogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp0ZXh0
U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit2b2lkIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjo6dGV4dFN1cnJvdW5k
aW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgNCB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVy
KCkpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZVRl
c3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIuaAkocmV2aXNpb24gMTI1MzM1KQkoZnJvbSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOjEyNTMzNSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUGF3ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICBMYXlvdXRUZXN0Q29u
dHJvbGxlciBjbGFzczoKKyAgQm91bmQgdG8gYSBKYXZhU2NyaXB0IHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlciBvYmplY3QgdXNpbmcgdGhlCisgIENwcEJvdW5kQ2xhc3M6OmJpbmRUb0phdmFz
Y3JpcHQoKSwgdGhpcyBhbGxvd3MgbGF5b3V0IHRlc3RzIHRoYXQgYXJlIHJ1biBpbgorICB0aGUg
dGVzdF9zaGVsbCAob3IsIGluIHByaW5jaXBsZSwgYW55IHdlYiBwYWdlIGxvYWRlZCBpbnRvIGEg
Y2xpZW50IGFwcCBidWlsdAorICB3aXRoIHRoaXMgY2xhc3MpIHRvIGNvbnRyb2wgdmFyaW91cyBh
c3BlY3RzIG9mIGhvdyB0aGUgdGVzdHMgYXJlIHJ1biBhbmQgd2hhdAorICBzb3J0IG9mIG91dHB1
dCB0aGV5IHByb2R1Y2UuCisqLworCisjaWZuZGVmIExheW91dFRlc3RDb250cm9sbGVyX2gKKyNk
ZWZpbmUgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgor
CitjbGFzcyBUZXN0U2hlbGw7CisKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGlj
IFRlc3RSdW5uZXIgeworcHVibGljOgorICAgIC8vIEJ1aWxkcyB0aGUgcHJvcGVydHkgYW5kIG1l
dGhvZCBsaXN0cyBuZWVkZWQgdG8gYmluZCB0aGlzIGNsYXNzIHRvIGEgSlMKKyAgICAvLyBvYmpl
Y3QuCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKik7CisKKyAgICB+TGF5b3V0
VGVzdENvbnRyb2xsZXIoKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhh
dCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIHBhZ2VzIGFzCisgICAgLy8gcGxhaW4gdGV4
dCwgcmF0aGVyIHRoYW4gYXMgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZW5kZXJlcidz
IHN0YXRlLgorICAgIC8vIEl0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB3aGV0aGVyIHRv
IGR1bXAgcGl4ZWxzIHJlc3VsdHMgb3Igbm90LgorICAgIHZvaWQgZHVtcEFzVGV4dChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBzZXQgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5l
CisgICAgLy8gb2YgZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBkYXRhYmFzZSBjb21tYW5kLiBJ
dCBzaG91bGQgdGFrZSBubworICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZSBhbnkgdGhhdCBt
YXkgYmUgcHJlc2VudC4gSG93ZXZlciwgYXQgdGhlIG1vbWVudCwgd2UKKyAgICAvLyBkb24ndCBo
YXZlIGFueSBEQiBmdW5jdGlvbiB0aGF0IHByaW50cyBtZXNzYWdlcywgc28gZm9yIG5vdyB0aGlz
IGZ1bmN0aW9uCisgICAgLy8gZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICB2b2lkIGR1bXBEYXRh
YmFzZUNhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwg
dG8gcHJpbnQgYSBsaW5lIG9mCisgICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBlZGl0
aW5nIGNvbW1hbmQuIEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kCisgICAgLy8gaWdub3JlcyBh
bnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAgICB2b2lkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rp
b24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUg
b2YKKyAgICAvLyBkZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGZyYW1lIGxvYWQgY2FsbGJhY2su
IEl0IHRha2VzIG5vIGFyZ3VtZW50cywgYW5kCisgICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkg
YmUgcHJlc2VudC4KKyAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEg
ZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgorICAgIC8v
IGRlc2NyaXB0aXZlIHRleHQgZm9yIHRoZSBwcm9ncmVzcyBmaW5pc2hlZCBjYWxsYmFjay4gSXQg
dGFrZXMgbm8KKyAgICAvLyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBw
cmVzZW50LgorICAgIHZvaWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMg
YSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lIG9mCisgICAg
Ly8gdXNlciBnZXN0dXJlIHN0YXR1cyB0ZXh0IGZvciBzb21lIGZyYW1lIGxvYWQgY2FsbGJhY2tz
LiBJdCB0YWtlcyBubworICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5
IGJlIHByZXNlbnQuCisgICAgdm9pZCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNr
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0
IGEgdGV4dAorICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4g
SXQgaWdub3JlcyBhbGwgYXJndW1lbnRzLgorICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgb3V0IHRo
ZQorICAgIC8vIHNjcm9sbCBvZmZzZXRzIG9mIHRoZSBjaGlsZCBmcmFtZXMuIEl0IGlnbm9yZXMg
YWxsLgorICAgIHZvaWQgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEg
ZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHJlY3Vyc2l2ZWx5CisgICAgLy8gZHVt
cCBhbGwgZnJhbWVzIGFzIHBsYWluIHRleHQgaWYgdGhlIGR1bXBBc1RleHQgZmxhZyBpcyBzZXQu
CisgICAgLy8gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkg
YmUgcHJlc2VudC4KKyAgICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRz
IGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYSBkZXNjcmlwdGl2ZQor
ICAgIC8vIGxpbmUgZm9yIGVhY2ggcmVzb3VyY2UgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8g
YXJndW1lbnRzLCBhbmQgaWdub3JlcworICAgIC8vIGFueSB0aGF0IG1heSBiZSBwcmVzZW50Lgor
ICAgIHZvaWQgZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7ICAgIAorICAgIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZs
YWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIHRoZSBNSU1FIHR5cGUKKyAgICAv
LyBmb3IgZWFjaCByZXNvdXJjZSB0aGF0IHdhcyBsb2FkZWQuIEl0IHRha2VzIG5vIGFyZ3VtZW50
cywgYW5kIGlnbm9yZXMgYW55CisgICAgLy8gdGhhdCBtYXkgYmUgcHJlc2VudC4KKyAgICB2b2lk
IGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxs
cyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIGFsbCBjYWxscworICAgIC8vIHRvIHdpbmRvdy5zdGF0
dXMoKS4KKyAgICAvLyBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0
IG1heSBiZSBwcmVzZW50LgorICAgIHZvaWQgZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBz
ZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYWxsIGNhbGxzIHRv
CisgICAgLy8gV2ViVmlld0NsaWVudDo6Y3JlYXRlVmlldygpLgorICAgIC8vIEl0IHRha2VzIG5v
IGFyZ3VtZW50cywgYW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCisgICAgdm9p
ZCBkdW1wQ3JlYXRlVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICAvLyBXaGVuIGNhbGxlZCB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCwgdGhpcyBzZXRzIGEg
ZmxhZyB0aGF0IGNvbnRyb2xzCisgICAgLy8gd2hldGhlciBjb250ZW50LWVkaXRhYmxlIGVsZW1l
bnRzIGFjY2VwdCBlZGl0aW5nIGZvY3VzIHdoZW4gYW4gZWRpdGluZworICAgIC8vIGF0dGVtcHQg
aXMgbWFkZS4gSXQgaWdub3JlcyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuCisgICAgdm9pZCBz
ZXRBY2NlcHRzRWRpdGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICAvLyBGdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB3aW5kb3dzLiBCeSBkZWZhdWx0IHdl
IGJsb2NrIGFsbCBuZXcgd2luZG93cy4KKyAgICB2b2lkIHdpbmRvd0NvdW50KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldENhbk9wZW5XaW5kb3dzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldENsb3NlUmVt
YWluaW5nV2luZG93c1doZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBCeSBkZWZhdWx0LCB0ZXN0cyBlbmQgd2hlbiBwYWdlIGxvYWQgaXMg
Y29tcGxldGUuIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQKKyAgICAvLyB0byBkZWxheSB0aGUgY29t
cGxldGlvbiBvZiB0aGUgdGVzdCB1bnRpbCBub3RpZnlEb25lIGlzIGNhbGxlZC4KKyAgICB2b2lk
IHdhaXRVbnRpbERvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgbm90aWZ5RG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICAvLyBNZXRob2RzIGZvciBhZGRpbmcgYWN0aW9ucyB0byB0aGUgd29yayBxdWV1ZS4gVXNl
ZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgLy8gd2FpdFVudGlsRG9uZS9ub3RpZnlEb25lIGFi
b3ZlLgorICAgIHZvaWQgcXVldWVCYWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHF1ZXVlUmVsb2FkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHF1ZXVlTG9hZGluZ1Nj
cmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBxdWV1
ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgcXVldWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIHF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworCisgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBuYW1lZCAib2JqQyIgdG8gbWF0
Y2ggdGhlIE1hYyB2ZXJzaW9uLCBpdCBhY3R1YWxseSB0ZXN0cworICAgIC8vIHRoZSBpZGVudGl0
eSBvZiBpdHMgdHdvIGFyZ3VtZW50cyBpbiBDKysuCisgICAgdm9pZCBvYmpDSWRlbnRpdHlJc0Vx
dWFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENoYW5n
ZXMgdGhlIGNvb2tpZSBwb2xpY3kgZnJvbSB0aGUgZGVmYXVsdCB0byBhbGxvdyBhbGwgY29va2ll
cy4KKyAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2hhbmdlcyBhc3luY2hyb25vdXMgc3BlbGxjaGVj
a2luZyBmbGFnIG9uIHRoZSBzZXR0aW5ncy4KKyAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwor
ICAgIC8vIFNob3dzIERldlRvb2xzIHdpbmRvdy4KKyAgICB2b2lkIHNob3dXZWJJbnNwZWN0b3Io
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2xvc2VXZWJJ
bnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8g
R2l2ZXMgZm9jdXMgdG8gdGhlIHdpbmRvdy4KKyAgICB2b2lkIHNldFdpbmRvd0lzS2V5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIE1ldGhvZCB0aGF0IGNv
bnRyb2xzIHdoZXRoZXIgcHJlc3NpbmcgVGFiIGtleSBjeWNsZXMgdGhyb3VnaCBwYWdlIGVsZW1l
bnRzCisgICAgLy8gb3IgaW5zZXJ0cyBhICdcdCcgY2hhciBpbiB0ZXh0IGFyZWEKKyAgICB2b2lk
IHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICAvLyBQYXNzZXMgdGhyb3VnaCB0byBXZWJQcmVmZXJlbmNlcyB3
aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gaGF2ZSBhIGN1c3RvbQorICAgIC8vIHN0eWxlIHNoZWV0
LgorICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gUGFzc2VzIHRoaXMg
cHJlZmVyZW5jZSB0aHJvdWdoIHRvIFdlYlNldHRpbmdzLgorICAgIHZvaWQgc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
CisgICAgLy8gUHV0cyBXZWJraXQgaW4gImRhc2hib2FyZCBjb21wYXRpYmlsaXR5IG1vZGUiLCB3
aGljaCBpcyB1c2VkIGluIG9ic2N1cmUKKyAgICAvLyBNYWMtb25seSBjaXJjdW1zdGFuY2VzLiBJ
dCdzIG5vdCByZWFsbHkgbmVjZXNzYXJ5LCBhbmQgd2lsbCBtb3N0IGxpa2VseQorICAgIC8vIG5l
dmVyIGJlIHVzZWQgYnkgQ2hyb21lLCBidXQgc29tZSBsYXlvdXQgdGVzdHMgZGVwZW5kIG9uIGl0
cyBwcmVzZW5jZS4KKyAgICB2b2lkIHNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgc2V0U2Nyb2xs
YmFyUG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8v
IENhdXNlcyBuYXZpZ2F0aW9uIGFjdGlvbnMganVzdCBwcmludG91dCB0aGUgaW50ZW5kZWQgbmF2
aWdhdGlvbiBpbnN0ZWFkCisgICAgLy8gb2YgdGFraW5nIHlvdSB0byB0aGUgcGFnZS4gVGhpcyBp
cyB1c2VkIGZvciBjYXNlcyBsaWtlIG1haWx0bywgd2hlcmUgeW91CisgICAgLy8gZG9uJ3QgYWN0
dWFsbHkgd2FudCB0byBvcGVuIHRoZSBtYWlsIHByb2dyYW0uCisgICAgdm9pZCBzZXRDdXN0b21Q
b2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBEZWxheXMgY29tcGxldGlvbiBvZiB0aGUgdGVzdCB1bnRpbCB0aGUgcG9saWN5IGRlbGVn
YXRlIHJ1bnMuCisgICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2F1c2VzIFdpbGxTZW5kUmVxdWVzdCB0
byBjbGVhciBjZXJ0YWluIGhlYWRlcnMuCisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RDbGVh
ckhlYWRlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBD
YXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIGJsb2NrIHJlZGlyZWN0cy4KKyAgICB2b2lkIHNldFdp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIHJldHVy
biBhbiBlbXB0eSByZXF1ZXN0LgorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051
bGwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ29udmVy
dHMgYSBVUkwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxvY2FsIG1hcHBpbmcu
CisgICAgdm9pZCBwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKworICAgIC8vIFNldHMgYSBib29sIHN1Y2ggdGhhdCB3aGVuIGEgZHJhZyBp
cyBzdGFydGVkLCB3ZSBmaWxsIHRoZSBkcmFnIGNsaXBib2FyZAorICAgIC8vIHdpdGggYSBmYWtl
IGZpbGUgb2JqZWN0LgorICAgIHZvaWQgYWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBFeGVjdXRlcyBhbiBpbnRl
cm5hbCBjb21tYW5kIChzdXBlcnNldCBvZiBkb2N1bWVudC5leGVjQ29tbWFuZCgpIGNvbW1hbmRz
KS4KKyAgICB2b2lkIGV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKworICAgIC8vIENoZWNrcyBpZiBhbiBpbnRlcm5hbCBjb21tYW5kIGlzIGN1cnJlbnRs
eSBhdmFpbGFibGUuCisgICAgdm9pZCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFNldCB0aGUgV2ViUHJlZmVyZW5jZSB0aGF0
IGNvbnRyb2xzIHdlYmtpdCdzIHBvcHVwIGJsb2NraW5nLgorICAgIHZvaWQgc2V0UG9wdXBCbG9j
a2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gSWYgdHJ1ZSwgY2F1c2VzIHByb3Zpc2lvbmFsIGZyYW1lIGxvYWRzIHRvIGJlIHN0b3BwZWQg
Zm9yIHRoZSByZW1haW5kZXIgb2YKKyAgICAvLyB0aGUgdGVzdC4KKyAgICB2b2lkIHNldFN0b3BQ
cm92aXNpb25hbEZyYW1lTG9hZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworCisgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgc21hcnQgaW5zZXJ0L2RlbGV0ZS4gVGhpcyBp
cyBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgdm9pZCBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gRW5hYmxl
IG9yIGRpc2FibGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBzZWxlY3Rpb24gb24gZG91YmxlIGNsaWNr
LgorICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBlbGVtZW50RG9lc0F1dG9Db21w
bGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworICAgIHZvaWQgZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworICAgIHZvaWQgZGlzYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkaXNh
YmxlSW1hZ2VMb2FkaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworICAgIHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgLy8g
R3JhbnRzIHBlcm1pc3Npb24gZm9yIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhbiBvcmlnaW4K
KyAgICB2b2lkIGdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIC8vIFNpbXVsYXRlcyBhIGNsaWNrIG9uIGEg
ZGVza3RvcCBub3RpZmljYXRpb24uCisgICAgdm9pZCBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRp
b25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKwor
ICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXREZWZlck1haW5SZXNv
dXJjZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAg
IC8vIERlYWxzIHdpdGggV2ViIEF1ZGlvIFdBViBmaWxlIGRhdGEuCisgICAgdm9pZCBzZXRBdWRp
b0RhdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIGNvbnN0IFdl
YktpdDo6V2ViQXJyYXlCdWZmZXJWaWV3JiBhdWRpb0RhdGEoKSBjb25zdCB7IHJldHVybiBtX2F1
ZGlvRGF0YTsgfSAKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgc3R1YnMuCisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBhbnkgb2YgdGhlc2UgdGhhdCBhcmUgbmVlZGVkIHRvIHBhc3Mg
dGhlIGxheW91dCB0ZXN0cy4KKyAgICB2b2lkIGR1bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRNYWluRnJhbWVJ
c0ZpcnN0UmVzcG9uZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIGRpc3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjbGVhckJhY2tGb3J3YXJk
TGlzdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBrZWVw
V2ViSGlzdG9yeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9p
ZCBzdG9yZVdlYlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBhY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgb2JqQ0NsYXNzTmFtZU9mKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGFkZERpc2FsbG93ZWRVUkwo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2FsbFNob3Vs
ZENsb3NlT25XZWJWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIHNldENhbGxDbG9zZU9uV2ViVmlld3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNl
dEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRBbGxvd1J1bm5p
bmdPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMg
Y2FsbGVkIHdoZW4gYSBub25leGlzdGVudCBtZXRob2QgaXMgY2FsbGVkIG9uCisgICAgLy8gdGhl
IGxheW91dCB0ZXN0IGNvbnRyb2xsZXIgb2JqZWN0LgorICAgIC8vIEl0IGlzIHVzZWZ1bGwgdG8g
Y2F0Y2ggdHlwb3MgaW4gdGhlIEphdmFTY3JpcHQgY29kZSAoYSBmZXcgbGF5b3V0IHRlc3RzCisg
ICAgLy8gZG8gaGF2ZSB0eXBvcyBpbiB0aGVtKSBhbmQgaXQgYWxsb3dzIHRoZSBzY3JpcHQgdG8g
Y29udGludWUgcnVubmluZyBpbgorICAgIC8vIHRoYXQgY2FzZSAoYXMgdGhlIE1hYyBkb2VzKS4K
KyAgICB2b2lkIGZhbGxiYWNrTWV0aG9kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKworICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdo
aXRlbGlzdGluZy4KKyAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIENsZWFycyBhbGwgYXBwbGljYXRpb24gY2FjaGVzLgorICAgIHZvaWQgY2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgLy8gQ2xlYXJzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCisgICAg
dm9pZCBjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIC8vIFJldHVybnMgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGlj
YXRpb24gY2FjaGVzLgorICAgIHZvaWQgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICAvLyBTZXRzIHRoZSBhcHBsaWNh
dGlvbiBjYWNoZSBxdW90YSBmb3IgdGhlIGxvY2FsaG9zdCBvcmlnaW4uCisgICAgdm9pZCBzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIC8vIFJldHVybnMgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2Fj
aGVzIGZvciBhbiBvcmlnaW4uCisgICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9y
T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENs
ZWFycyBhbGwgZGF0YWJhc2VzLgorICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgcXVv
dGEgZm9yIGFsbCBvcmlnaW5zCisgICAgdm9pZCBzZXREYXRhYmFzZVF1b3RhKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENhbGxzIHNldGxvY2FsZShMQ19B
TEwsIC4uLikgZm9yIGEgc3BlY2lmaWVkIGxvY2FsZS4KKyAgICAvLyBSZXNldHMgYmV0d2VlbiB0
ZXN0cy4KKyAgICB2b2lkIHNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKworICAgIC8vIENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdl
dHRlZCB0byBwcmludGVkIHBhZ2VzLgorICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gR2V0cyB0aGUgcGFnZSBzaXplIGFu
ZCBtYXJnaW5zIGZvciBhIHByaW50ZWQgcGFnZS4KKyAgICB2b2lkIHBhZ2VTaXplQW5kTWFyZ2lu
c0luUGl4ZWxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9tIHBhZ2Ugc2l6
ZSBzdHlsZSBmb3IKKyAgICAvLyBwcmludGluZy4KKyAgICB2b2lkIGhhc0N1c3RvbVBhZ2VTaXpl
U3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gR2V0
cyB0aGUgcGFnZS1yZWxhdGVkIHByb3BlcnR5IGZvciBwcmludGVkIGNvbnRlbnQKKyAgICB2b2lk
IHBhZ2VQcm9wZXJ0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gYmUgcHJpbnRlZC4KKyAgICB2b2lkIG51
bWJlck9mUGFnZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gR2V0cyB0aGUgbnVtYmVyIG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb25zIHJlcXVlc3RzIHBl
bmRpbmcuCisgICAgdm9pZCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBBbGxv
d3MgbGF5b3V0IHRlc3RzIHRvIGV4ZWMgc2NyaXB0cyBhdCBXZWJJbnNwZWN0b3Igc2lkZS4KKyAg
ICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworCisgICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24gY29sb3JzIGZvciB0ZXN0
aW5nIHVuZGVyIExpbnV4LgorICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQWRkcyBhIHVzZXIgc2Ny
aXB0IG9yIHVzZXIgc3R5bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50byBuZXcgZG9jdW1lbnRz
LgorICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBEZXZpY2VPcmllbnRhdGlvbiByZWxhdGVkIGZ1bmN0
aW9ucworICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEdlb2xvY2F0aW9uIHJlbGF0ZWQgZnVuY3Rp
b25zLgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tH
ZW9sb2NhdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwor
ICAgIC8vIEVtcHR5IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0IG1vZGVs
IGV4cG9zZWQgYnkgZ2xvYmFsIExheW91dFRlc3RDb250cm9sbGVyLgorICAgIHZvaWQgYWJvcnRN
b2RhbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBTcGVl
Y2ggaW5wdXQgcmVsYXRlZCBmdW5jdGlvbnMuCisjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKKyAg
ICB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKyNpZiBFTkFCTEUoU0NSSVBU
RURfU1BFRUNIKQorICAgIHZvaWQgYWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldE1vY2tTcGVlY2hS
ZWNvZ25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIHdhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworI2VuZGlmCisgICAgdm9pZCBzdGFydFNwZWVjaElucHV0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgbGF5ZXJUcmVl
QXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KTsK
KworICAgIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJncywgQ3BwVmFyaWFudCogcmVzdWx0KTsKKworICAgIHZvaWQgbWFya2VyVGV4dEZvckxpc3RJ
dGVtKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGZpbmRT
dHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBz
ZXRNaW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisKKyAgICAvLyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnB1dCBl
bGVtZW50IGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgYm9vbGVhbi4KKyAgICAvLyBG
b3J3YXJkcyB0aGUgc2V0QXV0b2ZpbGxlZCgpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCisgICAgdm9p
ZCBzZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwor
ICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQg
YW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcgdmFsdWUuCisgICAgLy8gRm9y
d2FyZHMgdGhlIHNldFZhbHVlRm9yVXNlcigpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCisgICAgdm9p
ZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
CisgICAgLy8gTG9jYWxTdG9yYWdlIG9yaWdpbi1yZWxhdGVkCisgICAgdm9pZCBkZWxldGVBbGxM
b2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGxvY2FsU3RvcmFnZURpc2tVc2Fn
ZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9p
ZCBvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gV2ViUGVybWlzc2lvbkNsaWVudCBy
ZWxhdGVkLgorICAgIHZvaWQgc2V0SW1hZ2VzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRTY3JpcHRzQWxsb3dlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRTdG9yYWdlQWxsb3dlZChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRQbHVnaW5zQWxs
b3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkdW1w
UGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBwbHVnaW5zLgorICAgIHZvaWQgc2V0
UGx1Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gU3dpdGNoIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwYWdlLgorICAgIHZvaWQgc2V0UGFn
ZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgcmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisKKyAgICAvLyBDaGFuZ2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZvY3VzZWQgZWxlbWVu
dC4KKyAgICB2b2lkIHNldFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworCisgICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0Jl
Zm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2
b2lkIGVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisgICAgdm9pZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBTd2l0Y2ggdGhlIGxpbmsgZGV0
ZWN0aW9uLgorICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCk7
CisKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2Nr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFBvaW50
ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHNldFBvaW50ZXJMb2NrV2lsbEZhaWxBc3luY2hyb25vdXNseShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisjZW5kaWYKKworICAgIHZvaWQg
d29ya2VyVGhyZWFkQ291bnQoQ3BwVmFyaWFudCopOworCisgICAgLy8gRXhwZWN0cyBvbmUgc3Ry
aW5nIGFyZ3VtZW50IGZvciBzZW5kaW5nIHN1Y2Nlc3NmdWwgcmVzdWx0LCB6ZXJvCisgICAgLy8g
YXJndW1lbnRzIGZvciBzZW5kaW5nIGEgZmFpbHVyZSByZXN1bHQuCisgICAgdm9pZCBzZW5kV2Vi
SW50ZW50UmVzcG9uc2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gQ2F1c2UgdGhlIHdlYiBpbnRlbnQgdG8gYmUgZGVsaXZlcmVkIHRvIHRoaXMgY29udGV4
dC4KKyAgICB2b2lkIGRlbGl2ZXJXZWJJbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworCisgICAgLy8gRW5hYmxlcyBvciBkaXNhYmxlcyBzdWJwaXhlbCBwb3NpdGlv
bmluZyAoaS5lLiBmcmFjdGlvbmFsIFggcG9zaXRpb25zIGZvcgorICAgIC8vIGdseXBocykgaW4g
dGV4dCByZW5kZXJpbmcgb24gTGludXguIFNpbmNlIHRoaXMgbWV0aG9kIGNoYW5nZXMgZ2xvYmFs
CisgICAgLy8gc2V0dGluZ3MsIHRlc3RzIHRoYXQgY2FsbCBpdCBtdXN0IHVzZSB0aGVpciBvd24g
Y3VzdG9tIGZvbnQgZmFtaWx5IGZvcgorICAgIC8vIGFsbCB0ZXh0IHRoYXQgdGhleSByZW5kZXIu
IElmIG5vdCwgYW4gYWxyZWFkeS1jYWNoZWQgc3R5bGUgd2lsbCBiZSB1c2VkLAorICAgIC8vIHJl
c3VsdGluZyBpbiB0aGUgY2hhbmdlZCBzZXR0aW5nIGJlaW5nIGlnbm9yZWQuCisgICAgdm9pZCBz
ZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBVc2VkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAg
ICB2b2lkIHNldEJhY2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHRleHQgc3Vycm91bmRpbmcgYSBwb3Np
dGlvbiBpbiBhIHRleHQgbm9kZS4KKyAgICAvLyBFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0
byBiZSBhIHRleHQgbm9kZSwgdGhlIHNlY29uZCBhbmQgdGhpcmQgdG8gYmUKKyAgICAvLyBwb2lu
dCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgbm9kZSBhbmQgdGhlIGZvdXJ0aCB0aGUgbWF4
aW11bSB0ZXh0CisgICAgLy8gbGVuZ3RoIHRvIHJldHJpZXZlLgorICAgIHZvaWQgdGV4dFN1cnJv
dW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKK3B1Ymxp
YzoKKyAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG5vdCBleHBvc2VkIHRvIEphdmFT
Y3JpcHQuCisgICAgdm9pZCBzZXRXb3JrUXVldWVGcm96ZW4oYm9vbCBmcm96ZW4pIHsgbV93b3Jr
UXVldWUuc2V0RnJvemVuKGZyb3plbik7IH0KKworICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8o
KSBjb25zdCB7IHJldHVybiBtX2R1bXBBc0F1ZGlvOyB9IAorICAgIHZvaWQgc2V0U2hvdWxkRHVt
cEFzQXVkaW8oYm9vbCBkdW1wQXNBdWRpbykgeyBtX2R1bXBBc0F1ZGlvID0gZHVtcEFzQXVkaW87
IH0gCisgICAgYm9vbCBzaG91bGREdW1wQXNUZXh0KCkgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9
CisgICAgdm9pZCBzZXRTaG91bGREdW1wQXNUZXh0KGJvb2wgdmFsdWUpIHsgbV9kdW1wQXNUZXh0
ID0gdmFsdWU7IH0KKyAgICBib29sIHNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgeyByZXR1
cm4gbV9kdW1wRWRpdGluZ0NhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsgfQorICAgIHZv
aWQgc2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVlKSB7IG1fZHVtcEZy
YW1lTG9hZENhbGxiYWNrcyA9IHZhbHVlOyB9CisgICAgYm9vbCBzaG91bGREdW1wUHJvZ3Jlc3NG
aW5pc2hlZENhbGxiYWNrKCkgeyByZXR1cm4gbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNr
OyB9CisgICAgdm9pZCBzZXRTaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGJvb2wg
dmFsdWUpIHsgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdmFsdWU7IH0KKyAgICBi
b29sIHNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkgeyByZXR1cm4g
bV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0U2hv
dWxkRHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkgeyBtX2R1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzID0gdmFsdWU7IH0KKyAgICBib29sIHNo
b3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSB7cmV0dXJuIG1fZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrczsgfQorICAgIHZvaWQgc2V0U2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1F
VHlwZXMoYm9vbCB2YWx1ZSkgeyBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzID0gdmFs
dWU7IH0KKyAgICBib29sIHNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkge3Jl
dHVybiBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOyB9CisgICAgYm9vbCBzaG91bGRE
dW1wU3RhdHVzQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlczsg
fQorICAgIGJvb2wgc2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSB7IHJldHVybiBtX2R1bXBTZWxl
Y3Rpb25SZWN0OyB9CisgICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkgeyByZXR1
cm4gbV9kdW1wQmFja0ZvcndhcmRMaXN0OyB9CisgICAgYm9vbCBzaG91bGREdW1wVGl0bGVDaGFu
Z2VzKCkgeyByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOyB9CisgICAgYm9vbCBzaG91bGREdW1w
UGVybWlzc2lvbkNsaWVudENhbGxiYWNrcygpIHsgcmV0dXJuIG1fZHVtcFBlcm1pc3Npb25DbGll
bnRDYWxsYmFja3M7IH0KKyAgICBib29sIHNob3VsZER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRp
b25zKCkgeyByZXR1cm4gbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQorICAgIGJv
b2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgeyByZXR1cm4gbV9kdW1wQ2hpbGRGcmFt
ZXNBc1RleHQ7IH0KKyAgICBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgeyByZXR1
cm4gbV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsgfQorICAgIHZvaWQgc2V0U2hvdWxkR2VuZXJhdGVQ
aXhlbFJlc3VsdHMoYm9vbCB2YWx1ZSkgeyBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0gdmFsdWU7
IH0KKyAgICBib29sIHNob3VsZER1bXBDcmVhdGVWaWV3KCkgeyByZXR1cm4gbV9kdW1wQ3JlYXRl
VmlldzsgfQorICAgIGJvb2wgYWNjZXB0c0VkaXRpbmcoKSB7IHJldHVybiBtX2FjY2VwdHNFZGl0
aW5nOyB9CisgICAgYm9vbCBjYW5PcGVuV2luZG93cygpIHsgcmV0dXJuIG1fY2FuT3BlbldpbmRv
d3M7IH0KKyAgICBib29sIHNob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQoKSB7IHJldHVybiBtX3No
b3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQ7IH0KKyAgICBib29sIHN0b3BQcm92aXNpb25hbEZyYW1l
TG9hZHMoKSB7IHJldHVybiBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7IH0KKyAgICBib29s
IGRlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoKSB7IHJldHVybiBtX2RlZmVyTWFpblJlc291cmNl
RGF0YUxvYWQ7IH0KKyAgICB2b2lkIHNldFNob3dEZWJ1Z0xheWVyVHJlZShib29sIHZhbHVlKSB7
IG1fc2hvd0RlYnVnTGF5ZXJUcmVlID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFRpdGxlVGV4dERp
cmVjdGlvbihXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24gZGlyKQorICAgIHsKKyAgICAgICAgbV90
aXRsZVRleHREaXJlY3Rpb24uc2V0KGRpciA9PSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25MZWZ0
VG9SaWdodCA/ICJsdHIiIDogInJ0bCIpOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkSW50ZXJj
ZXB0UG9zdE1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW50ZXJjZXB0UG9zdE1l
c3NhZ2UuaXNCb29sKCkgJiYgbV9pbnRlcmNlcHRQb3N0TWVzc2FnZS50b0Jvb2xlYW4oKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldElzUHJpbnRpbmcoYm9vbCB2YWx1ZSkgeyBtX2lzUHJpbnRpbmcg
PSB2YWx1ZTsgfQorICAgIGJvb2wgaXNQcmludGluZygpIHsgcmV0dXJuIG1faXNQcmludGluZzsg
fQorCisgICAgYm9vbCB0ZXN0UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7
IH0KKyAgICBib29sIHN3ZWVwSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gbV9zd2VlcEhv
cml6b250YWxseTsgfQorCisgICAgdm9pZCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3Io
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIGJvb2wgaGFzQ3VzdG9t
RnVsbFNjcmVlbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDdXN0b21GdWxsU2NyZWVu
QmVoYXZpb3I7IH0KKworICAgIC8vIENhbGxlZCBieSB0aGUgd2VidmlldyBkZWxlZ2F0ZSB3aGVu
IHRoZSB0b3BsZXZlbCBmcmFtZSBsb2FkIGlzIGRvbmUuCisgICAgdm9pZCBsb2NhdGlvbkNoYW5n
ZURvbmUoKTsKKworICAgIC8vIENhbGxlZCBieSB0aGUgd2VidmlldyBkZWxlZ2F0ZSB3aGVuIHRo
ZSBwb2xpY3kgZGVsZWdhdGUgcnVucyBpZiB0aGUKKyAgICAvLyB3YWl0Rm9yUG9saWN5RGVsZWdh
dGUgd2FzIGNhbGxlZC4KKyAgICB2b2lkIHBvbGljeURlbGVnYXRlRG9uZSgpOworCisgICAgLy8g
UmVpbml0aWFsaXplcyBhbGwgc3RhdGljIHZhbHVlcy4gVGhlIHJlc2V0KCkgbWV0aG9kIHNob3Vs
ZCBiZSBjYWxsZWQKKyAgICAvLyBiZWZvcmUgdGhlIHN0YXJ0IG9mIGVhY2ggdGVzdCAoY3VycmVu
dGx5IGZyb20gVGVzdFNoZWxsOjpydW5GaWxlVGVzdCkuCisgICAgdm9pZCByZXNldCgpOworCisg
ICAgLy8gQSBzaW5nbGUgaXRlbSBpbiB0aGUgd29yayBxdWV1ZS4KKyAgICBjbGFzcyBXb3JrSXRl
bSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrSXRlbSgpIHsgfQorCisgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0YXJ0ZWQgYSBsb2FkLgorICAgICAgICB2aXJ0
dWFsIGJvb2wgcnVuKFRlc3RTaGVsbCopID0gMDsKKyAgICB9OworCisgICAgVGFza0xpc3QqIHRh
c2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KKworICAgIGJvb2wgc2hvdWxkU3RheU9u
UGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0
YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFdvcmtJdGVtOworICAgIGZyaWVuZCBjbGFzcyBXb3JrUXVldWU7CisKKyAgICAv
LyBIZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIGV2ZW50cyBxdWV1ZWQgYnkgbWV0aG9kcyBsaWtl
IHF1ZXVlTG9hZCBvcgorICAgIC8vIHF1ZXVlU2NyaXB0LgorICAgIGNsYXNzIFdvcmtRdWV1ZSB7
CisgICAgcHVibGljOgorICAgICAgICBXb3JrUXVldWUoTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIpIDogbV9mcm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikgeyB9
CisgICAgICAgIHZpcnR1YWwgfldvcmtRdWV1ZSgpOworICAgICAgICB2b2lkIHByb2Nlc3NXb3Jr
U29vbigpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2xhc3MgYmV0d2Vl
biB0ZXN0cy4KKyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgICAgIHZvaWQgYWRkV29yayhX
b3JrSXRlbSopOworCisgICAgICAgIHZvaWQgc2V0RnJvemVuKGJvb2wgZnJvemVuKSB7IG1fZnJv
emVuID0gZnJvemVuOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fcXVldWUu
aXNFbXB0eSgpOyB9CisgICAgICAgIFRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7Cisg
ICAgICAgIGNsYXNzIFdvcmtRdWV1ZVRhc2s6IHB1YmxpYyBNZXRob2RUYXNrPFdvcmtRdWV1ZT4g
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBXb3JrUXVldWVUYXNrKFdvcmtRdWV1ZSog
b2JqZWN0KTogTWV0aG9kVGFzazxXb3JrUXVldWU+KG9iamVjdCkgeyB9CisgICAgICAgICAgICB2
aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPnByb2Nlc3NXb3JrKCk7IH0KKyAg
ICAgICAgfTsKKworICAgICAgICBUYXNrTGlzdCBtX3Rhc2tMaXN0OworICAgICAgICBEZXF1ZTxX
b3JrSXRlbSo+IG1fcXVldWU7CisgICAgICAgIGJvb2wgbV9mcm96ZW47CisgICAgICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgfTsKKworICAgIC8vIFN1cHBvcnQg
Zm9yIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICBib29sIGNwcFZhcmlhbnRUb0Jvb2woY29uc3Qg
Q3BwVmFyaWFudCYpOworICAgIGludDMyX3QgY3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFy
aWFudCYpOworICAgIFdlYktpdDo6V2ViU3RyaW5nIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhjb25z
dCBDcHBWYXJpYW50Jik7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBjcHBWYXJpYW50
VG9XZWJTdHJpbmdBcnJheShjb25zdCBDcHBWYXJpYW50Jik7CisKKyAgICB2b2lkIGxvZ0Vycm9y
VG9Db25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgICAgdm9pZCBjb21wbGV0ZU5vdGlmeURv
bmUoYm9vbCBpc1RpbWVvdXQpOworICAgIGNsYXNzIE5vdGlmeURvbmVUaW1lZE91dFRhc2s6IHB1
YmxpYyBNZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVyPiB7CisgICAgcHVibGljOgorICAg
ICAgICBOb3RpZnlEb25lVGltZWRPdXRUYXNrKExheW91dFRlc3RDb250cm9sbGVyKiBvYmplY3Qp
OiBNZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVyPihvYmplY3QpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPmNvbXBsZXRlTm90aWZ5RG9uZSh0
cnVlKTsgfQorICAgIH07CisKKworICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZWxlbWVudElkKTsKKyAgICBib29sIHBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYg
cHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVsZW1l
bnRJZCk7CisgICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKKyAgICBpbnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRp
b25zKCk7CisKKyAgICAvLyBVc2VkIGZvciB0ZXN0IHRpbWVvdXRzLgorICAgIFRhc2tMaXN0IG1f
dGFza0xpc3Q7CisKKyAgICAvLyBOb24tb3duaW5nIHBvaW50ZXIuIFRoZSBMYXlvdXRUZXN0Q29u
dHJvbGxlciBpcyBvd25lZCBieSB0aGUgaG9zdC4KKyAgICBUZXN0U2hlbGwqIG1fc2hlbGw7CisK
KyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHByb2R1Y2UgYSBwbGFpbiB0ZXh0
IGR1bXAgcmF0aGVyIHRoYW4gYQorICAgIC8vIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJl
bmRlcmVyLgorICAgIGJvb2wgbV9kdW1wQXNUZXh0OworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRl
c3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBiYXNlNjQgZW5jb2RlZCBXQVZFIGZpbGUuCisgICAgYm9v
bCBtX2R1bXBBc0F1ZGlvOworCisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCB3
cml0ZSBhIGRlc2NyaXB0aXZlIGxpbmUgZm9yIGVhY2ggZWRpdGluZworICAgIC8vIGNvbW1hbmQu
CisgICAgYm9vbCBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzOworCisgICAgLy8gSWYgdHJ1ZSwgdGhl
IHRlc3Rfc2hlbGwgd2lsbCBkcmF3IHRoZSBib3VuZHMgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9u
IHJlY3QKKyAgICAvLyB0YWtpbmcgcG9zc2libGUgdHJhbnNmb3JtcyBvZiB0aGUgc2VsZWN0aW9u
IHJlY3QgaW50byBhY2NvdW50LgorICAgIGJvb2wgbV9kdW1wU2VsZWN0aW9uUmVjdDsKKworICAg
IC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGlu
ZSBmb3IgZWFjaCBmcmFtZQorICAgIC8vIGxvYWQgY2FsbGJhY2suCisgICAgYm9vbCBtX2R1bXBG
cmFtZUxvYWRDYWxsYmFja3M7CisKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxs
IG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZm9yIHRoZSBwcm9ncmVzcworICAgIC8vIGZpbmlz
aGVkIGNhbGxiYWNrLgorICAgIGJvb2wgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwor
CisgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBsaW5lIG9mIHRo
ZSB1c2VyIGdlc3R1cmUgc3RhdHVzCisgICAgLy8gdGV4dCBmb3Igc29tZSBmcmFtZSBsb2FkIGNh
bGxiYWNrcy4KKyAgICBib29sIG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3M7
CisKKyAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2NyaXB0
aXZlIGxpbmUgZm9yIGVhY2ggcmVzb3VyY2UKKyAgICAvLyBsb2FkIGNhbGxiYWNrLgorICAgIGJv
b2wgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAgIAorICAgIC8vIElmIHRydWUsIHRo
ZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IHRoZSBNSU1FIHR5cGUgZm9yIGVhY2ggcmVzb3VyY2Ug
dGhhdCAKKyAgICAvLyB3YXMgbG9hZGVkLgorICAgIGJvb2wgbV9kdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlczsKKworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgcHJvZHVj
ZSBhIGR1bXAgb2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IGFzCisgICAgLy8gd2VsbC4KKyAgICBi
b29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKKworICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3No
ZWxsIHdpbGwgcHJpbnQgb3V0IHRoZSBjaGlsZCBmcmFtZSBzY3JvbGwgb2Zmc2V0cyBhcworICAg
IC8vIHdlbGwuCisgICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOworCisg
ICAgLy8gSWYgdHJ1ZSBhbmQgaWYgZHVtcF9hc190ZXh0XyBpcyB0cnVlLCB0aGUgdGVzdF9zaGVs
bCB3aWxsIHJlY3Vyc2l2ZWx5CisgICAgLy8gZHVtcCBhbGwgZnJhbWVzIGFzIHBsYWluIHRleHQu
CisgICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsKKworICAgIC8vIElmIHRydWUsIHRo
ZSB0ZXN0X3NoZWxsIHdpbGwgZHVtcCBhbGwgY2hhbmdlcyB0byB3aW5kb3cuc3RhdHVzLgorICAg
IGJvb2wgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlczsKKworICAgIC8vIElmIHRydWUsIG91dHB1
dCBhIG1lc3NhZ2Ugd2hlbiB0aGUgcGFnZSB0aXRsZSBpcyBjaGFuZ2VkLgorICAgIGJvb2wgbV9k
dW1wVGl0bGVDaGFuZ2VzOworCisgICAgLy8gSWYgdHJ1ZSwgb3V0cHV0IGEgZGVzY3JpcHRpdmUg
bGluZSBlYWNoIHRpbWUgYSBwZXJtaXNzaW9uIGNsaWVudAorICAgIC8vIGNhbGxiYWNrIGlzIGlu
dm9rZWQuIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBhbGxvd0ltYWdlLgorICAgIGJv
b2wgbV9kdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrczsKKworICAgIC8vIElmIHRydWUsIHRo
ZSB0ZXN0X3NoZWxsIHdpbGwgZ2VuZXJhdGUgcGl4ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1v
ZGUKKyAgICBib29sIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHM7CisKKyAgICAvLyBJZiB0cnVlLCBv
dXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGVhY2ggdGltZSBXZWJWaWV3Q2xpZW50OjpjcmVhdGVW
aWV3CisgICAgLy8gaXMgaW52b2tlZC4KKyAgICBib29sIG1fZHVtcENyZWF0ZVZpZXc7CisKKyAg
ICAvLyBJZiB0cnVlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgZWRpdGFibGUuIFRo
aXMgdmFsdWUgaXMgcmV0dXJuZWQKKyAgICAvLyBmcm9tIHZhcmlvdXMgZWRpdGluZyBjYWxsYmFj
a3MgdGhhdCBhcmUgY2FsbGVkIGp1c3QgYmVmb3JlIGVkaXQgb3BlcmF0aW9ucworICAgIC8vIGFy
ZSBhbGxvd2VkLgorICAgIGJvb2wgbV9hY2NlcHRzRWRpdGluZzsKKworICAgIC8vIElmIHRydWUs
IG5ldyB3aW5kb3dzIGNhbiBiZSBvcGVuZWQgdmlhIGphdmFzY3JpcHQgb3IgYnkgcGx1Z2lucy4g
QnkKKyAgICAvLyBkZWZhdWx0LCBzZXQgdG8gZmFsc2UgYW5kIGNhbiBiZSB0b2dnbGVkIHRvIHRy
dWUgdXNpbmcKKyAgICAvLyBzZXRDYW5PcGVuV2luZG93cygpLgorICAgIGJvb2wgbV9jYW5PcGVu
V2luZG93czsKKworICAgIC8vIFdoZW4gcmVzZXQgaXMgY2FsbGVkLCBnbyB0aHJvdWdoIGFuZCBj
bG9zZSBhbGwgYnV0IHRoZSBtYWluIHRlc3Qgc2hlbGwKKyAgICAvLyB3aW5kb3cuIEJ5IGRlZmF1
bHQsIHNldCB0byB0cnVlIGJ1dCB0b2dnbGVkIHRvIGZhbHNlIHVzaW5nCisgICAgLy8gc2V0Q2xv
c2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkuCisgICAgYm9vbCBtX2Nsb3NlUmVtYWlu
aW5nV2luZG93czsKKworICAgIC8vIElmIHRydWUsIHBpeGVsIGR1bXAgd2lsbCBiZSBwcm9kdWNl
ZCBhcyBhIHNlcmllcyBvZiAxcHgtdGFsbCwgdmlldy13aWRlCisgICAgLy8gaW5kaXZpZHVhbCBw
YWludHMgb3ZlciB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3LgorICAgIGJvb2wgbV90ZXN0UmVwYWlu
dDsKKyAgICAvLyBJZiB0cnVlIGFuZCB0ZXN0X3JlcGFpbnRfIGlzIHRydWUgYXMgd2VsbCwgcGl4
ZWwgZHVtcCB3aWxsIGJlIHByb2R1Y2VkIGFzCisgICAgLy8gYSBzZXJpZXMgb2YgMXB4LXdpZGUs
IHZpZXctdGFsbCBwYWludHMgYWNyb3NzIHRoZSB3aWR0aCBvZiB0aGUgdmlldy4KKyAgICBib29s
IG1fc3dlZXBIb3Jpem9udGFsbHk7CisKKyAgICAvLyBJZiB0cnVlIGFuZCBhIGRyYWcgc3RhcnRz
LCBhZGRzIGEgZmlsZSB0byB0aGUgZHJhZyZkcm9wIGNsaXBib2FyZC4KKyAgICBib29sIG1fc2hv
dWxkQWRkRmlsZVRvUGFzdGVib2FyZDsKKworICAgIC8vIElmIHRydWUsIHN0b3BzIHByb3Zpc2lv
bmFsIGZyYW1lIGxvYWRzIGR1cmluZyB0aGUKKyAgICAvLyBEaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lIGNhbGxiYWNrLgorICAgIGJvb2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRz
OworCisgICAgLy8gSWYgdHJ1ZSwgZG9uJ3QgZHVtcCBvdXRwdXQgdW50aWwgbm90aWZ5RG9uZSBp
cyBjYWxsZWQuCisgICAgYm9vbCBtX3dhaXRVbnRpbERvbmU7CisKKyAgICAvLyBJZiBmYWxzZSwg
YWxsIG5ldyByZXF1ZXN0cyB3aWxsIG5vdCBkZWZlciB0aGUgbWFpbiByZXNvdXJjZSBkYXRhIGxv
YWQuCisgICAgYm9vbCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7CisKKyAgICAvLyBJZiB0
cnVlLCB3ZSB3aWxsIHNob3cgZXh0ZW5kZWQgaW5mb3JtYXRpb24gaW4gdGhlIGdyYXBoaWNzIGxh
eWVyIHRyZWUuCisgICAgYm9vbCBtX3Nob3dEZWJ1Z0xheWVyVHJlZTsKKworICAgIC8vIElmIHRy
dWUsIGxheW91dCBpcyB0byB0YXJnZXQgcHJpbnRlZCBwYWdlcy4KKyAgICBib29sIG1faXNQcmlu
dGluZzsKKworICAgIFdvcmtRdWV1ZSBtX3dvcmtRdWV1ZTsKKworICAgIENwcFZhcmlhbnQgbV9n
bG9iYWxGbGFnOworCisgICAgLy8gQm91bmQgdmFyaWFibGUgY291bnRpbmcgdGhlIG51bWJlciBv
ZiB0b3AgVVJMcyB2aXNpdGVkLgorICAgIENwcFZhcmlhbnQgbV93ZWJIaXN0b3J5SXRlbUNvdW50
OworCisgICAgLy8gQm91bmQgdmFyaWFibGUgdHJhY2tpbmcgdGhlIGRpcmVjdGlvbmFsaXR5IG9m
IHRoZSA8dGl0bGU+IHRhZy4KKyAgICBDcHBWYXJpYW50IG1fdGl0bGVUZXh0RGlyZWN0aW9uOwor
CisgICAgLy8gQm91bmQgdmFyaWFibGUgdG8gcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgcGxhdGZv
cm0gKGNocm9taXVtKS4KKyAgICBDcHBWYXJpYW50IG1fcGxhdGZvcm1OYW1lOworCisgICAgLy8g
Qm91bmQgdmFyaWFibGUgdG8gc2V0IHdoZXRoZXIgcG9zdE1lc3NhZ2VzIHNob3VsZCBiZSBpbnRl
cmNlcHRlZCBvciBub3QKKyAgICBDcHBWYXJpYW50IG1faW50ZXJjZXB0UG9zdE1lc3NhZ2U7CisK
KyAgICBXZWJLaXQ6OldlYlVSTCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247CisKKyAgICAvLyBX
QVYgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBXZWJLaXQ6OldlYkFycmF5QnVmZmVy
VmlldyBtX2F1ZGlvRGF0YTsKKworICAgIC8vIE1vY2sgb2JqZWN0IGZvciB0ZXN0aW5nIGRlbGl2
ZXJpbmcgd2ViIGludGVudHMuCisgICAgT3duUHRyPFdlYktpdDo6V2ViRGVsaXZlcmVkSW50ZW50
Q2xpZW50PiBtX2ludGVudENsaWVudDsKKworICAgIGJvb2wgbV9zaG91bGRTdGF5T25QYWdlQWZ0
ZXJIYW5kbGluZ0JlZm9yZVVubG9hZDsKKworICAgIC8vIElmIHRydWUsIGNhbGxzIHRvIFdlYlZp
ZXdIb3N0OjplbnRlci9leGl0RnVsbFNjcmVlbk5vdyB3aWxsIG5vdCByZXN1bHQgaW4gCisgICAg
Ly8gY2FsbHMgdG8gRG9jdW1lbnQ6OndpbGwvZGlkL0VudGVyL0V4aXRGdWxsU2NyZWVuLgorICAg
IGJvb2wgbV9oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7Cit9OworCisjZW5kaWYgLy8gTGF5
b3V0VGVzdENvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RHVtcFJlbmRlclRyZWVUZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyLmgJKHJldmlzaW9uIDEyNTMz
NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlVGVzdFJ1
bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOCArMzAsMjggQEAKICAqLwogCiAvKgotICBM
YXlvdXRUZXN0Q29udHJvbGxlciBjbGFzczoKLSAgQm91bmQgdG8gYSBKYXZhU2NyaXB0IHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlciBvYmplY3QgdXNpbmcgdGhlCisgIER1bXBSZW5kZXJUcmVl
VGVzdFJ1bm5lciBjbGFzczoKKyAgQm91bmQgdG8gYSBKYXZhU2NyaXB0IHdpbmRvdy50ZXN0UnVu
bmVyIG9iamVjdCB1c2luZyB0aGUKICAgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2YXNjcmlwdCgp
LCB0aGlzIGFsbG93cyBsYXlvdXQgdGVzdHMgdGhhdCBhcmUgcnVuIGluCiAgIHRoZSB0ZXN0X3No
ZWxsIChvciwgaW4gcHJpbmNpcGxlLCBhbnkgd2ViIHBhZ2UgbG9hZGVkIGludG8gYSBjbGllbnQg
YXBwIGJ1aWx0CiAgIHdpdGggdGhpcyBjbGFzcykgdG8gY29udHJvbCB2YXJpb3VzIGFzcGVjdHMg
b2YgaG93IHRoZSB0ZXN0cyBhcmUgcnVuIGFuZCB3aGF0CiAgIHNvcnQgb2Ygb3V0cHV0IHRoZXkg
cHJvZHVjZS4KICovCiAKLSNpZm5kZWYgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAotI2RlZmluZSBM
YXlvdXRUZXN0Q29udHJvbGxlcl9oCisjaWZuZGVmIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcl9o
CisjZGVmaW5lIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcl9oCiAKLSNpbmNsdWRlICJUZXN0UnVu
bmVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci9UZXN0UnVubmVyLmgiCiAKIGNsYXNzIFRlc3RT
aGVsbDsKIAotY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgOiBwdWJsaWMgVGVzdFJ1bm5lciB7
CitjbGFzcyBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIgOiBwdWJsaWMgVGVzdFJ1bm5lciB7CiBw
dWJsaWM6CiAgICAgLy8gQnVpbGRzIHRoZSBwcm9wZXJ0eSBhbmQgbWV0aG9kIGxpc3RzIG5lZWRl
ZCB0byBiaW5kIHRoaXMgY2xhc3MgdG8gYSBKUwogICAgIC8vIG9iamVjdC4KLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlcihUZXN0U2hlbGwqKTsKKyAgICBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIo
VGVzdFNoZWxsKik7CiAKLSAgICB+TGF5b3V0VGVzdENvbnRyb2xsZXIoKTsKKyAgICB+RHVtcFJl
bmRlclRyZWVUZXN0UnVubmVyKCk7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFn
IHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gZHVtcCBwYWdlcyBhcwogICAgIC8vIHBsYWlu
IHRleHQsIHJhdGhlciB0aGFuIGFzIGEgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVuZGVy
ZXIncyBzdGF0ZS4KQEAgLTM0NSw3ICszNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAKLSAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0
eSB3aXRoIG9iamVjdCBtb2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBMYXlvdXRUZXN0Q29udHJvbGxl
ci4KKyAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0eSB3aXRoIG9iamVjdCBt
b2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIuCiAgICAgdm9p
ZCBhYm9ydE1vZGFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAogICAg
IC8vIFNwZWVjaCBpbnB1dCByZWxhdGVkIGZ1bmN0aW9ucy4KQEAgLTUyOCw3ICs1MjgsNyBAQCBw
cml2YXRlOgogICAgIC8vIHF1ZXVlU2NyaXB0LgogICAgIGNsYXNzIFdvcmtRdWV1ZSB7CiAgICAg
cHVibGljOgotICAgICAgICBXb3JrUXVldWUoTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpIDogbV9mcm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikgeyB9CisgICAg
ICAgIFdvcmtRdWV1ZShEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIqIGNvbnRyb2xsZXIpIDogbV9m
cm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikgeyB9CiAgICAgICAgIHZpcnR1
YWwgfldvcmtRdWV1ZSgpOwogICAgICAgICB2b2lkIHByb2Nlc3NXb3JrU29vbigpOwogCkBAIC01
NTIsNyArNTUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgVGFza0xpc3QgbV90YXNrTGlzdDsKICAg
ICAgICAgRGVxdWU8V29ya0l0ZW0qPiBtX3F1ZXVlOwogICAgICAgICBib29sIG1fZnJvemVuOwot
ICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgICAgICBEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXIqIG1fY29udHJvbGxlcjsKICAgICB9OwogCiAgICAgLy8gU3Vw
cG9ydCBmb3Igb3ZlcnJpZGVQcmVmZXJlbmNlLgpAQCAtNTYzLDkgKzU2Myw5IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGxvZ0Vycm9yVG9Db25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJik7CiAgICAg
dm9pZCBjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpOwotICAgIGNsYXNzIE5vdGlm
eURvbmVUaW1lZE91dFRhc2s6IHB1YmxpYyBNZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVy
PiB7CisgICAgY2xhc3MgTm90aWZ5RG9uZVRpbWVkT3V0VGFzazogcHVibGljIE1ldGhvZFRhc2s8
RHVtcFJlbmRlclRyZWVUZXN0UnVubmVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBOb3RpZnlE
b25lVGltZWRPdXRUYXNrKExheW91dFRlc3RDb250cm9sbGVyKiBvYmplY3QpOiBNZXRob2RUYXNr
PExheW91dFRlc3RDb250cm9sbGVyPihvYmplY3QpIHsgfQorICAgICAgICBOb3RpZnlEb25lVGlt
ZWRPdXRUYXNrKER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lciogb2JqZWN0KTogTWV0aG9kVGFzazxE
dW1wUmVuZGVyVHJlZVRlc3RSdW5uZXI+KG9iamVjdCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBydW5JZlZhbGlkKCkgeyBtX29iamVjdC0+Y29tcGxldGVOb3RpZnlEb25lKHRydWUpOyB9CiAg
ICAgfTsKIApAQCAtNTc4LDcgKzU3OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlZCBmb3IgdGVz
dCB0aW1lb3V0cy4KICAgICBUYXNrTGlzdCBtX3Rhc2tMaXN0OwogCi0gICAgLy8gTm9uLW93bmlu
ZyBwb2ludGVyLiBUaGUgTGF5b3V0VGVzdENvbnRyb2xsZXIgaXMgb3duZWQgYnkgdGhlIGhvc3Qu
CisgICAgLy8gTm9uLW93bmluZyBwb2ludGVyLiBUaGUgRHVtcFJlbmRlclRyZWVUZXN0UnVubmVy
IGlzIG93bmVkIGJ5IHRoZSBob3N0LgogICAgIFRlc3RTaGVsbCogbV9zaGVsbDsKIAogICAgIC8v
IElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgcHJvZHVjZSBhIHBsYWluIHRleHQgZHVtcCBy
YXRoZXIgdGhhbiBhCkBAIC03MTcsNCArNzE3LDQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFz
Q3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yOwogfTsKIAotI2VuZGlmIC8vIExheW91dFRlc3RDb250
cm9sbGVyX2gKKyNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXJfaApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzNTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhd2VsIEhhamRhbiAocGhhamRhbi5qckBj
aHJvbWl1bS5vcmcpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCi0KLSNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCi0jaW5jbHVkZSAiTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyLmgiCi0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0jaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29uc29s
ZU1lc3NhZ2UuaCIKLSNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUg
IldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIgotI2luY2x1ZGUgIldlYkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5oIgotI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgi
Ci0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudE1v
Y2suaCIKLSNpbmNsdWRlICJXZWJJREJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiV2ViSW5wdXRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiV2ViSW50ZW50LmgiCi0jaW5jbHVkZSAiV2ViSW50ZW50UmVxdWVz
dC5oIgotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvblByZXNl
bnRlci5oIgotI2luY2x1ZGUgIldlYlBlcm1pc3Npb25zLmgiCi0jaW5jbHVkZSAiV2ViUHJpbnRQ
YXJhbXMuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJTZWN1
cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViU3Vy
cm91bmRpbmdUZXh0LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIldlYlZpZXdI
b3N0LmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW5mby5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkRhdGEuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJM
LmgiCi0jaW5jbHVkZSAidjgvaW5jbHVkZS92OC5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0
L3dlYmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNjdHlw
ZT4KLSNpbmNsdWRlIDxjbG9jYWxlPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8bGlt
aXRzPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5E
Uk9JRCkKLSNpbmNsdWRlICJsaW51eC9XZWJGb250UmVuZGVyaW5nLmgiCi0jZW5kaWYKLQotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKLQotY2xhc3MgRW1wdHlXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQgOiBwdWJs
aWMgV2ViS2l0OjpXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQgewotcHVibGljOgotICAgIEVtcHR5
V2ViRGVsaXZlcmVkSW50ZW50Q2xpZW50KCkgeyB9Ci0gICAgfkVtcHR5V2ViRGVsaXZlcmVkSW50
ZW50Q2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFJlc3VsdChjb25zdCBXZWJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUmIGRhdGEpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBw
b3N0RmFpbHVyZShjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIGRhdGEpIGNvbnN0IHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9Ci19OwotCi1MYXlvdXRUZXN0Q29udHJv
bGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKiBzaGVsbCkKLSAgICA6IG1fc2hl
bGwoc2hlbGwpCi0gICAgLCBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyhmYWxzZSkKLSAgICAsIG1f
ZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSkKLSAgICAsIG1fc2hvd0RlYnVnTGF5ZXJU
cmVlKGZhbHNlKQotICAgICwgbV93b3JrUXVldWUodGhpcykKLSAgICAsIG1faW50ZW50Q2xpZW50
KGFkb3B0UHRyKG5ldyBFbXB0eVdlYkRlbGl2ZXJlZEludGVudENsaWVudCkpCi0gICAgLCBtX3No
b3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGZhbHNlKQotewotCi0gICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgbWFwIHRoYXQgYXNzb2NpYXRlcyBtZXRob2RzIG9mIHRoaXMgY2xh
c3Mgd2l0aCB0aGUgbmFtZXMKLSAgICAvLyB0aGV5IHdpbGwgdXNlIHdoZW4gY2FsbGVkIGJ5IEph
dmFTY3JpcHQuIFRoZSBhY3R1YWwgYmluZGluZyBvZiB0aG9zZQotICAgIC8vIG5hbWVzIHRvIHRo
ZWlyIG1ldGhvZHMgd2lsbCBiZSBkb25lIGJ5IGNhbGxpbmcgYmluZFRvSmF2YVNjcmlwdCgpIChk
ZWZpbmVkCi0gICAgLy8gYnkgQ3BwQm91bmRDbGFzcywgdGhlIHBhcmVudCB0byBMYXlvdXRUZXN0
Q29udHJvbGxlcikuCi0gICAgYmluZE1ldGhvZCgiYWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyk7Ci0jaWYg
RU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICBiaW5kTWV0aG9kKCJhZGRNb2NrU3BlZWNoSW5wdXRS
ZXN1bHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk7
Ci0gICAgYmluZE1ldGhvZCgic2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KTsKLSNlbmRpZgotI2lmIEVO
QUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgYmluZE1ldGhvZCgiYWRkTW9ja1NwZWVjaFJlY29n
bml0aW9uUmVzdWx0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJv
cik7Ci0gICAgYmluZE1ldGhvZCgid2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCk7Ci0j
ZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwotICAg
IGJpbmRNZXRob2QoImFkZFVzZXJTY3JpcHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVz
ZXJTY3JpcHQpOwotICAgIGJpbmRNZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJB
bGxEYXRhYmFzZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTsK
LSAgICBiaW5kTWV0aG9kKCJjbG9zZVdlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xvc2VXZWJJbnNwZWN0b3IpOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgYmlu
ZE1ldGhvZCgiZGlkTG9zZVBvaW50ZXJMb2NrIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaWRM
b3NlUG9pbnRlckxvY2spOwotI2VuZGlmCi0gICAgYmluZE1ldGhvZCgiZGlzYWJsZUF1dG9SZXNp
emVNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUpOwot
ICAgIGJpbmRNZXRob2QoImRpc2FibGVJbWFnZUxvYWRpbmciLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcpOwotICAgIGJpbmRNZXRob2QoImRpc3BsYXkiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkpOwotICAgIGJpbmRNZXRob2QoImRpc3BsYXlJbnZh
bGlkYXRlZFJlZ2lvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheUludmFsaWRhdGVk
UmVnaW9uKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQXNUZXh0IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wQXNUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQmFja0ZvcndhcmRMaXN0Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQmFja0ZvcndhcmRMaXN0KTsKLSAgICBiaW5kTWV0
aG9kKCJkdW1wQ2hpbGRGcmFtZXNBc1RleHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBD
aGlsZEZyYW1lc0FzVGV4dCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcENoaWxkRnJhbWVTY3JvbGxQ
b3NpdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9z
aXRpb25zKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wRGF0YWJhc2VDYWxsYmFja3MiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmR1bXBEYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgi
ZHVtcEVkaXRpbmdDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0
aG9kKCJkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wVXNl
ckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBSZXNvdXJjZVJlc3BvbnNlTUlN
RVR5cGVzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVU
eXBlcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFNlbGVjdGlvblJlY3QiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmR1bXBTZWxlY3Rpb25SZWN0KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wU3RhdHVz
Q2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wV2luZG93U3RhdHVzQ2hhbmdl
cyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFRpdGxlQ2hhbmdlcyIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcFRpdGxlQ2hhbmdlcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFBlcm1pc3Npb25D
bGllbnRDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBQZXJtaXNzaW9uQ2xp
ZW50Q2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQ3JlYXRlVmlldyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZHVtcENyZWF0ZVZpZXcpOwotICAgIGJpbmRNZXRob2QoImVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKTsKLSAgICBiaW5kTWV0aG9k
KCJlbmFibGVBdXRvUmVzaXplTW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5hYmxlQXV0
b1Jlc2l6ZU1vZGUpOwotICAgIGJpbmRNZXRob2QoImV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwotICAgIGJpbmRN
ZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk7Ci0gICAgYmluZE1ldGhvZCgiZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOwotICAgIGJpbmRN
ZXRob2QoImV4ZWNDb21tYW5kIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk7
Ci0gICAgYmluZE1ldGhvZCgiZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKTsKLSNpZiBFTkFCTEUoTk9USUZJQ0FU
SU9OUykKLSAgICBiaW5kTWV0aG9kKCJncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9u
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNz
aW9uKTsKLSNlbmRpZgotICAgIGJpbmRNZXRob2QoImZpbmRTdHJpbmciLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmZpbmRTdHJpbmcpOwotICAgIGJpbmRNZXRob2QoImlzQ29tbWFuZEVuYWJsZWQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQpOwotICAgIGJpbmRNZXRo
b2QoImhhc0N1c3RvbVBhZ2VTaXplU3R5bGUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0N1
c3RvbVBhZ2VTaXplU3R5bGUpOwotICAgIGJpbmRNZXRob2QoImxheWVyVHJlZUFzVGV4dCIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJs
b3NlQ29tcG9zaXRvckNvbnRleHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxvc2VDb21wb3Np
dG9yQ29udGV4dCk7Ci0gICAgYmluZE1ldGhvZCgibWFya2VyVGV4dEZvckxpc3RJdGVtIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOwotICAgIGJpbmRNZXRo
b2QoIm5vdGlmeURvbmUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUpOwotICAg
IGJpbmRNZXRob2QoIm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKTsKLSAgICBiaW5kTWV0aG9kKCJudW1iZXJP
ZlBhZ2VzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKTsKLSAgICBiaW5k
TWV0aG9kKCJudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKTsKLSAgICBiaW5kTWV0aG9kKCJvYmpDSWRlbnRpdHlJc0VxdWFsIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpvYmpDSWRlbnRpdHlJc0VxdWFsKTsKLSAgICBiaW5kTWV0aG9kKCJv
dmVycmlkZVByZWZlcmVuY2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVy
ZW5jZSk7Ci0gICAgYmluZE1ldGhvZCgicGFnZVByb3BlcnR5IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpwYWdlUHJvcGVydHkpOwotICAgIGJpbmRNZXRob2QoInBhZ2VTaXplQW5kTWFyZ2luc0lu
UGl4ZWxzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVs
cyk7Ci0gICAgYmluZE1ldGhvZCgicGF0aFRvTG9jYWxSZXNvdXJjZSIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZSk7Ci0gICAgYmluZE1ldGhvZCgicGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKTsKLSAgICBiaW5kTWV0aG9kKCJwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7Ci0gICAgYmluZE1ldGhvZCgicXVl
dWVCYWNrTmF2aWdhdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdh
dGlvbik7Ci0gICAgYmluZE1ldGhvZCgicXVldWVGb3J3YXJkTmF2aWdhdGlvbiIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbik7Ci0gICAgYmluZE1ldGhvZCgi
cXVldWVMb2FkaW5nU2NyaXB0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRpbmdT
Y3JpcHQpOwotICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZCIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVMb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWRIVE1MU3RyaW5nIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKTsKLSAgICBiaW5kTWV0aG9k
KCJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTm9u
TG9hZGluZ1NjcmlwdCk7Ci0gICAgYmluZE1ldGhvZCgicXVldWVSZWxvYWQiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnF1ZXVlUmVsb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkpOwotICAgIGJpbmRNZXRob2QoInJlcGFpbnRTd2VlcEhvcml6
b250YWxseSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5
KTsKLSAgICBiaW5kTWV0aG9kKCJyZXNldFBhZ2VWaXNpYmlsaXR5IiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBY2NlcHRz
RWRpdGluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcpOwotICAg
IGJpbmRNZXRob2QoInNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgYmlu
ZE1ldGhvZCgic2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOwotICAgIGJpbmRNZXRob2Qo
InNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50IiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRBbHdheXNBY2NlcHRDb29raWVzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNB
Y2NlcHRDb29raWVzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5h
YmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQpOwotICAgIGJpbmRNZXRob2QoInNldEF1dG9maWxsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEF1dG9maWxsZWQpOwotICAgIGJpbmRNZXRob2QoInNldENhbk9wZW5XaW5kb3dzIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYW5PcGVuV2luZG93cyk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpOwotICAgIGJpbmRN
ZXRob2QoInNldEN1c3RvbVBvbGljeURlbGVnYXRlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0RGF0YWJhc2VRdW90
YSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSk7Ci0gICAgYmluZE1l
dGhvZCgic2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0RG9t
YWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSk7Ci0gICAgYmluZE1l
dGhvZCgic2V0QXVkaW9EYXRhIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdWRpb0RhdGEp
OwotICAgIGJpbmRNZXRob2QoInNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRJY29uRGF0YWJhc2VFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0
YWJhc2VFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwpOwotICAgIGJpbmRNZXRo
b2QoInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2NrR2VvbG9jYXRp
b25FcnJvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3Ip
OwotICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik7Ci0gICAgYmluZE1ldGhv
ZCgic2V0UGFnZVZpc2liaWxpdHkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNp
YmlsaXR5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zRW5hYmxlZCIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQpOwotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0sp
Ci0gICAgYmluZE1ldGhvZCgic2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5Iiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsQXN5bmNocm9ub3Vz
bHkpOwotICAgIGJpbmRNZXRob2QoInNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25v
dXNseSk7Ci0jZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQpOwotICAgIGJp
bmRNZXRob2QoInNldFBPU0lYTG9jYWxlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQT1NJ
WExvY2FsZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0UHJpbnRpbmciLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFByaW50aW5nKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTY3JvbGxiYXJQb2xpY3ki
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeSk7Ci0gICAgYmluZE1l
dGhvZCgic2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCk7Ci0gICAgYmluZE1l
dGhvZCgic2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRCYWNraW5n
U2NhbGVGYWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rv
cik7Ci0gICAgYmluZE1ldGhvZCgic2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOwotICAgIGJpbmRN
ZXRob2QoInNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMpOwotICAgIGJpbmRNZXRob2QoInNldFRh
YktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbik7Ci0gICAgYmluZE1l
dGhvZCgic2V0VmFsdWVGb3JVc2VyIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZv
clVzZXIpOwotICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcik7Ci0g
ICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKTsKLSAgICBiaW5kTWV0
aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0V2luZG93SXNLZXkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFdpbmRvd0lzS2V5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRYU1NBdWRpdG9yRW5hYmxlZCIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQpOwotICAgIGJpbmRNZXRo
b2QoInNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0gICAgYmluZE1l
dGhvZCgic2hvd1dlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYklu
c3BlY3Rvcik7Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgYmluZE1ldGhvZCgic2lt
dWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2siLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNp
bXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKTsKLSNlbmRpZgotICAgIGJpbmRNZXRob2Qo
InN0YXJ0U3BlZWNoSW5wdXQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5w
dXQpOwotICAgIGJpbmRNZXRob2QoInRlc3RSZXBhaW50IiwgJkxheW91dFRlc3RDb250cm9sbGVy
Ojp0ZXN0UmVwYWludCk7Ci0gICAgYmluZE1ldGhvZCgid2FpdEZvclBvbGljeURlbGVnYXRlIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUpOwotICAgIGJpbmRN
ZXRob2QoIndhaXRVbnRpbERvbmUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRVbnRpbERv
bmUpOwotICAgIGJpbmRNZXRob2QoIndpbmRvd0NvdW50IiwgJkxheW91dFRlc3RDb250cm9sbGVy
Ojp3aW5kb3dDb3VudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0VGV4dERpcmVjdGlvbiIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbik7Ci0gICAgYmluZE1ldGhvZCgic2V0
SW1hZ2VzQWxsb3dlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SW1hZ2VzQWxsb3dlZCk7
Ci0gICAgYmluZE1ldGhvZCgic2V0U2NyaXB0c0FsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFNjcmlwdHNBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTdG9yYWdlQWxsb3dl
ZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZUFsbG93ZWQpOwotICAgIGJpbmRN
ZXRob2QoInNldFBsdWdpbnNBbGxvd2VkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVn
aW5zQWxsb3dlZCk7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBzdHVicy4KLSAgICBiaW5k
TWV0aG9kKCJhYm9ydE1vZGFsIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKTsK
LSAgICBiaW5kTWV0aG9kKCJhY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdCk7Ci0gICAgYmluZE1ldGhv
ZCgiYWRkRGlzYWxsb3dlZFVSTCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dl
ZFVSTCk7Ci0gICAgYmluZE1ldGhvZCgiYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdp
biIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9y
aWdpbik7Ci0gICAgYmluZE1ldGhvZCgiY2FsbFNob3VsZENsb3NlT25XZWJWaWV3IiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOwotICAgIGJpbmRNZXRo
b2QoImNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQWxsQXBwbGljYXRpb25DYWNoZXMpOwotICAgIGJpbmRNZXRob2QoImNsZWFyQXBwbGljYXRp
b25DYWNoZUZvck9yaWdpbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlv
bkNhY2hlRm9yT3JpZ2luKTsKLSAgICBiaW5kTWV0aG9kKCJjbGVhckJhY2tGb3J3YXJkTGlzdCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QpOwotICAgIGJpbmRN
ZXRob2QoImR1bXBBc1dlYkFyY2hpdmUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBBc1dl
YkFyY2hpdmUpOwotICAgIGJpbmRNZXRob2QoImtlZXBXZWJIaXN0b3J5IiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSk7Ci0gICAgYmluZE1ldGhvZCgib2JqQ0NsYXNzTmFt
ZU9mIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvYmpDQ2xhc3NOYW1lT2YpOwotICAgIGJpbmRN
ZXRob2QoInNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSIsICZMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRDYWxsQ2xvc2VPbldlYlZpZXdzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWxsQ2xv
c2VPbldlYlZpZXdzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9u
ZGVyIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVy
KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwotICAgIGJpbmRNZXRob2QoInN0
b3JlV2ViU2NyaXB0T2JqZWN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzdG9yZVdlYlNjcmlw
dE9iamVjdCk7Ci0gICAgYmluZE1ldGhvZCgiZGVsZXRlQWxsTG9jYWxTdG9yYWdlIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOwotICAgIGJpbmRNZXRob2Qo
ImxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKTsKLSAgICBiaW5kTWV0aG9kKCJvcmlnaW5z
V2l0aExvY2FsU3RvcmFnZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UpOwotICAgIGJpbmRNZXRob2QoImRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbiIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKTsKLSAg
ICBiaW5kTWV0aG9kKCJvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zIiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKTsKLSAg
ICBiaW5kTWV0aG9kKCJzeW5jTG9jYWxTdG9yYWdlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
eW5jTG9jYWxTdG9yYWdlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTaG91bGRTdGF5T25QYWdlQWZ0
ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2hvdWxk
U3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQpOwotICAgIGJpbmRNZXRob2QoImVu
YWJsZUZpeGVkTGF5b3V0TW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5hYmxlRml4ZWRM
YXlvdXRNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRGaXhlZExheW91dFNpemUiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEZpeGVkTGF5b3V0U2l6ZSk7Ci0gICAgYmluZE1ldGhvZCgic2Vs
ZWN0aW9uQXNNYXJrdXAiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbGVjdGlvbkFzTWFya3Vw
KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcik7Ci0gICAg
YmluZE1ldGhvZCgidGV4dFN1cnJvdW5kaW5nTm9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
dGV4dFN1cnJvdW5kaW5nTm9kZSk7Ci0KLSAgICAvLyBUaGUgZmFsbGJhY2sgbWV0aG9kIGlzIGNh
bGxlZCB3aGVuIGFuIHVua25vd24gbWV0aG9kIGlzIGludm9rZWQuCi0gICAgYmluZEZhbGxiYWNr
TWV0aG9kKCZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmFsbGJhY2tNZXRob2QpOwotCi0gICAgLy8g
U2hhcmVkIHByb3BlcnRpZXMuCi0gICAgLy8gZ2xvYmFsRmxhZyBpcyB1c2VkIGJ5IGEgbnVtYmVy
IG9mIGxheW91dCB0ZXN0cyBpbgotICAgIC8vIExheW91dFRlc3RzXGh0dHBcdGVzdHNcc2VjdXJp
dHlcZGF0YVVSTC4KLSAgICBiaW5kUHJvcGVydHkoImdsb2JhbEZsYWciLCAmbV9nbG9iYWxGbGFn
KTsKLSAgICAvLyB3ZWJIaXN0b3J5SXRlbUNvdW50IGlzIHVzZWQgYnkgdGVzdHMgaW4gTGF5b3V0
VGVzdHNcaHR0cFx0ZXN0c1xoaXN0b3J5Ci0gICAgYmluZFByb3BlcnR5KCJ3ZWJIaXN0b3J5SXRl
bUNvdW50IiwgJm1fd2ViSGlzdG9yeUl0ZW1Db3VudCk7Ci0gICAgYmluZFByb3BlcnR5KCJ0aXRs
ZVRleHREaXJlY3Rpb24iLCAmbV90aXRsZVRleHREaXJlY3Rpb24pOwotICAgIGJpbmRQcm9wZXJ0
eSgicGxhdGZvcm1OYW1lIiwgJm1fcGxhdGZvcm1OYW1lKTsKLSAgICBiaW5kUHJvcGVydHkoImlu
dGVyY2VwdFBvc3RNZXNzYWdlIiwgJm1faW50ZXJjZXB0UG9zdE1lc3NhZ2UpOwotICAgIGJpbmRQ
cm9wZXJ0eSgid29ya2VyVGhyZWFkQ291bnQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondvcmtl
clRocmVhZENvdW50KTsKLSAgICBiaW5kTWV0aG9kKCJzZW5kV2ViSW50ZW50UmVzcG9uc2UiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZSk7Ci0gICAgYmluZE1l
dGhvZCgiZGVsaXZlcldlYkludGVudCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldl
YkludGVudCk7Ci19Ci0KLUxheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xs
ZXIoKQotewotfQotCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjp+V29ya1F1ZXVl
KCkKLXsKLSAgICByZXNldCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3Jr
UXVldWU6OnByb2Nlc3NXb3JrU29vbigpCi17Ci0gICAgaWYgKG1fY29udHJvbGxlci0+bV9zaGVs
bC0+d2ViVmlld0hvc3QoKS0+dG9wTG9hZGluZ0ZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gV2UgZGVsYXkgcHJvY2Vz
c2luZyBxdWV1ZWQgd29yayB0byBhdm9pZCByZWN1cnNpb24gcHJvYmxlbXMuCi0gICAgICAgIHBv
c3RUYXNrKG5ldyBXb3JrUXVldWVUYXNrKHRoaXMpKTsKLSAgICB9IGVsc2UgaWYgKCFtX2NvbnRy
b2xsZXItPm1fd2FpdFVudGlsRG9uZSkKLSAgICAgICAgbV9jb250cm9sbGVyLT5tX3NoZWxsLT50
ZXN0RmluaXNoZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVl
Ojpwcm9jZXNzV29yaygpCi17Ci0gICAgVGVzdFNoZWxsKiBzaGVsbCA9IG1fY29udHJvbGxlci0+
bV9zaGVsbDsKLSAgICAvLyBRdWl0IGRvaW5nIHdvcmsgb25jZSBhIGxvYWQgaXMgaW4gcHJvZ3Jl
c3MuCi0gICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBib29sIHN0YXJ0
ZWRMb2FkID0gbV9xdWV1ZS5maXJzdCgpLT5ydW4oc2hlbGwpOwotICAgICAgICBkZWxldGUgbV9x
dWV1ZS50YWtlRmlyc3QoKTsKLSAgICAgICAgaWYgKHN0YXJ0ZWRMb2FkKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9jb250cm9sbGVyLT5tX3dhaXRVbnRpbERvbmUg
JiYgIXNoZWxsLT53ZWJWaWV3SG9zdCgpLT50b3BMb2FkaW5nRnJhbWUoKSkKLSAgICAgICAgc2hl
bGwtPnRlc3RGaW5pc2hlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3Jr
UXVldWU6OnJlc2V0KCkKLXsKLSAgICBtX2Zyb3plbiA9IGZhbHNlOwotICAgIHdoaWxlICghbV9x
dWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgIGRlbGV0ZSBtX3F1ZXVlLnRha2VGaXJzdCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6OmFkZFdvcmsoV29ya0l0ZW0q
IHdvcmspCi17Ci0gICAgaWYgKG1fZnJvemVuKSB7Ci0gICAgICAgIGRlbGV0ZSB3b3JrOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcXVldWUuYXBwZW5kKHdvcmspOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQXNUZXh0ID0gdHJ1
ZTsKLSAgICBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0gZmFsc2U7Ci0KLSAgICAvLyBPcHRpb25h
bCBwYXJhbWF0ZXIsIGRlc2NyaWJpbmcgd2hldGhlciBpdCdzIGFsbG93ZWQgdG8gZHVtcCBwaXhl
bCByZXN1bHRzIGluIGR1bXBBc1RleHQgbW9kZS4KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX2dlbmVyYXRlUGl4ZWxSZXN1
bHRzID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKLQotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRGF0YWJhc2VDYWxsYmFj
a3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8v
IERvIG5vdGhpbmc7IHdlIGRvbid0IHVzZSB0aGlzIGZsYWcgYW55d2hlcmUgZm9yIG5vdwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
RWRpdGluZ0NhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBCYWNrRm9yd2Fy
ZExpc3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IG1fZHVtcEJhY2tGb3J3YXJkTGlzdCA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcEZy
YW1lTG9hZENhbGxiYWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFBy
b2dyZXNzRmluaXNoZWRDYWxsYmFjayA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSB0cnVl
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQgPSB0cnVl
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wV2luZG93U3RhdHVzQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlcyA9IHRydWU7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1
bXBUaXRsZUNoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBQZXJtaXNzaW9uQ2xpZW50
Q2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBtX2R1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzID0gdHJ1ZTsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENyZWF0ZVZp
ZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1f
ZHVtcENyZWF0ZVZpZXcgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fYWNjZXB0
c0VkaXRpbmcgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VW50aWxEb25lKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoIXdl
YmtpdF9zdXBwb3J0OjpCZWluZ0RlYnVnZ2VkKCkpCi0gICAgICAgIHBvc3REZWxheWVkVGFzayhu
ZXcgTm90aWZ5RG9uZVRpbWVkT3V0VGFzayh0aGlzKSwgbV9zaGVsbC0+bGF5b3V0VGVzdFRpbWVv
dXQoKSk7Ci0gICAgbV93YWl0VW50aWxEb25lID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gVGVzdCBkaWRuJ3Qg
dGltZW91dC4gS2lsbCB0aGUgdGltZW91dCB0aW1lci4KLSAgICBtX3Rhc2tMaXN0LnJldm9rZUFs
bCgpOwotCi0gICAgY29tcGxldGVOb3RpZnlEb25lKGZhbHNlKTsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcGxldGVOb3RpZnlEb25l
KGJvb2wgaXNUaW1lb3V0KQotewotICAgIGlmIChtX3dhaXRVbnRpbERvbmUgJiYgIW1fc2hlbGwt
PndlYlZpZXdIb3N0KCktPnRvcExvYWRpbmdGcmFtZSgpICYmIG1fd29ya1F1ZXVlLmlzRW1wdHko
KSkgewotICAgICAgICBpZiAoaXNUaW1lb3V0KQotICAgICAgICAgICAgbV9zaGVsbC0+dGVzdFRp
bWVkT3V0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc2hlbGwtPnRlc3RGaW5pc2hl
ZCgpOwotICAgIH0KLSAgICBtX3dhaXRVbnRpbERvbmUgPSBmYWxzZTsKLX0KLQotY2xhc3MgV29y
a0l0ZW1CYWNrRm9yd2FyZCA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0g
ewotcHVibGljOgotICAgIFdvcmtJdGVtQmFja0ZvcndhcmQoaW50IGRpc3RhbmNlKSA6IG1fZGlz
dGFuY2UoZGlzdGFuY2UpIHsgfQotICAgIGJvb2wgcnVuKFRlc3RTaGVsbCogc2hlbGwpCi0gICAg
ewotICAgICAgICBzaGVsbC0+Z29Ub09mZnNldChtX2Rpc3RhbmNlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7IC8vIEZJWE1FOiBEaWQgaXQgcmVhbGx5IHN0YXJ0IGEgbmF2aWdhdGlvbj8KLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fZGlzdGFuY2U7Ci19OwotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICBtX3dvcmtRdWV1ZS5hZGRX
b3JrKG5ldyBXb3JrSXRlbUJhY2tGb3J3YXJkKC1hcmd1bWVudHNbMF0udG9JbnQzMigpKSk7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1
ZXVlRm9yd2FyZE5hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdv
cmtJdGVtQmFja0ZvcndhcmQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSkpOwotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi1jbGFzcyBXb3JrSXRlbVJlbG9hZCA6IHB1YmxpYyBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6V29ya0l0ZW0gewotcHVibGljOgotICAgIGJvb2wgcnVuKFRlc3RTaGVsbCog
c2hlbGwpCi0gICAgewotICAgICAgICBzaGVsbC0+cmVsb2FkKCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLX07Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlUmVsb2Fk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3dv
cmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbVJlbG9hZCk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLWNsYXNzIFdvcmtJdGVtTG9hZGluZ1NjcmlwdCA6IHB1YmxpYyBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6V29ya0l0ZW0gewotcHVibGljOgotICAgIFdvcmtJdGVtTG9hZGluZ1Njcmlw
dChjb25zdCBzdHJpbmcmIHNjcmlwdCkgOiBtX3NjcmlwdChzY3JpcHQpIHsgfQotICAgIGJvb2wg
cnVuKFRlc3RTaGVsbCogc2hlbGwpCi0gICAgewotICAgICAgICBzaGVsbC0+d2ViVmlldygpLT5t
YWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9t
VVRGOChtX3NjcmlwdCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIEZJWE1FOiBEaWQgaXQg
cmVhbGx5IHN0YXJ0IGEgbmF2aWdhdGlvbj8KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RyaW5n
IG1fc2NyaXB0OwotfTsKLQotY2xhc3MgV29ya0l0ZW1Ob25Mb2FkaW5nU2NyaXB0IDogcHVibGlj
IExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgV29ya0l0ZW1O
b25Mb2FkaW5nU2NyaXB0KGNvbnN0IHN0cmluZyYgc2NyaXB0KSA6IG1fc2NyaXB0KHNjcmlwdCkg
eyB9Ci0gICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKLSAgICB7Ci0gICAgICAgIHNoZWxs
LT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShX
ZWJTdHJpbmc6OmZyb21VVEY4KG1fc2NyaXB0KSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIHN0cmluZyBtX3NjcmlwdDsKLX07Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgbV93b3JrUXVldWUu
YWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0KGFyZ3VtZW50c1swXS50b1N0cmluZygp
KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhu
ZXcgV29ya0l0ZW1Ob25Mb2FkaW5nU2NyaXB0KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWNsYXNzIFdvcmtJdGVtTG9hZCA6IHB1YmxpYyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0gewotcHVibGljOgotICAgIFdvcmtJdGVtTG9h
ZChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiB0YXJnZXQpCi0gICAgICAgIDog
bV91cmwodXJsKQotICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkgeyB9Ci0gICAgYm9vbCBydW4o
VGVzdFNoZWxsKiBzaGVsbCkKLSAgICB7Ci0gICAgICAgIHNoZWxsLT53ZWJWaWV3SG9zdCgpLT5s
b2FkVVJMRm9yRnJhbWUobV91cmwsIG1fdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7IC8v
IEZJWE1FOiBEaWQgaXQgcmVhbGx5IHN0YXJ0IGEgbmF2aWdhdGlvbj8KLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgV2ViVVJMIG1fdXJsOwotICAgIFdlYlN0cmluZyBtX3RhcmdldDsKLX07Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IFdlYlVSTDo6cmVzb2x2ZSgpIGFuZCBhdm9pZCBHVVJMLgotICAgICAgICBHVVJM
IGN1cnJlbnRVUkwgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgp
LnVybCgpOwotICAgICAgICBHVVJMIGZ1bGxVUkwgPSBjdXJyZW50VVJMLlJlc29sdmUoYXJndW1l
bnRzWzBdLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIHN0cmluZyB0YXJnZXQgPSAiIjsKLSAgICAg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAxICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQot
ICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAg
bV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkKGZ1bGxVUkwsIFdlYlN0cmluZzo6
ZnJvbVVURjgodGFyZ2V0KSkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
Y2xhc3MgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6V29ya0l0ZW0gIHsKLXB1YmxpYzoKLSAgICBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGNvbnN0
IHN0ZDo6c3RyaW5nJiBodG1sLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwpCi0gICAgICAgIDogbV9o
dG1sKGh0bWwpCi0gICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpIHsgfQotICAgIFdvcmtJdGVt
TG9hZEhUTUxTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGh0bWwsIGNvbnN0IFdlYlVSTCYgYmFz
ZVVSTCwgY29uc3QgV2ViVVJMJiB1bnJlYWNoYWJsZVVSTCkKLSAgICAgICAgOiBtX2h0bWwoaHRt
bCkKLSAgICAgICAgLCBtX2Jhc2VVUkwoYmFzZVVSTCkKLSAgICAgICAgLCBtX3VucmVhY2hhYmxl
VVJMKHVucmVhY2hhYmxlVVJMKSB7IH0KLSAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQot
ICAgIHsKLSAgICAgICAgc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmxvYWRIVE1MU3Ry
aW5nKAotICAgICAgICAgICAgV2ViS2l0OjpXZWJEYXRhKG1faHRtbC5kYXRhKCksIG1faHRtbC5s
ZW5ndGgoKSksIG1fYmFzZVVSTCwgbV91bnJlYWNoYWJsZVVSTCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnN0cmluZyBtX2h0bWw7Ci0gICAgV2Vi
VVJMIG1fYmFzZVVSTDsKLSAgICBXZWJVUkwgbV91bnJlYWNoYWJsZVVSTDsKLX07Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgc3Ry
aW5nIGh0bWwgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICAgICAgV2ViVVJMIGJhc2VV
UkwoR1VSTCgiIikpOwotICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1l
bnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBiYXNlVVJMID0gV2ViVVJMKEdVUkwoYXJn
dW1lbnRzWzFdLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAy
ICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKQotICAgICAgICAgICAgbV93b3JrUXVldWUuYWRk
V29yayhuZXcgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhodG1sLCBiYXNlVVJMLCBXZWJVUkwoR1VS
TChhcmd1bWVudHNbMl0udG9TdHJpbmcoKSkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcoaHRtbCwgYmFz
ZVVSTCkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNFcXVhbChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgMikgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyB0byByZXR1
cm4gYW4gZXJyb3IuCi0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0KGFyZ3VtZW50c1swXS5pc0VxdWFsKGFyZ3VtZW50c1sx
XSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCgpCi17Ci0gICAgaWYg
KG1fc2hlbGwpIHsKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRab29tTGV2ZWwoZmFs
c2UsIDApOwotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyh0cnVlKTsKLSNpZiAhT1MoREFSV0lOKSAmJiAhT1MoV0lORE9XUykgLy8gQWN0
dWFsbHksIFRPT0xLSVRfR1RLCi0gICAgICAgIC8vIChDb25zdGFudHMgY29waWVkIGJlY2F1c2Ug
d2UgY2FuJ3QgZGVwZW5kIG9uIHRoZSBoZWFkZXIgdGhhdCBkZWZpbmVkCi0gICAgICAgIC8vIHRo
ZW0gZnJvbSB0aGlzIGZpbGUuKQotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFNlbGVj
dGlvbkNvbG9ycygweGZmMWU5MGZmLCAweGZmMDAwMDAwLCAweGZmYzhjOGM4LCAweGZmMzIzMjMy
KTsKLSNlbmRpZgotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnJlbW92ZUFsbFVzZXJDb250
ZW50KCk7Ci0gICAgICAgIFdlYktpdDo6V2ViU2l6ZSBlbXB0eTsKLSAgICAgICAgbV9zaGVsbC0+
d2ViVmlldygpLT5kaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoKTsKLSAgICAgICAgbV9zaGVsbC0+d2Vi
VmlldygpLT5zZXREZXZpY2VTY2FsZUZhY3RvcigxKTsKLSAgICB9Ci0gICAgbV9kdW1wQXNUZXh0
ID0gZmFsc2U7Ci0gICAgbV9kdW1wQXNBdWRpbyA9IGZhbHNlOwotICAgIG1fZHVtcENyZWF0ZVZp
ZXcgPSBmYWxzZTsKLSAgICBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAgbV9k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hl
ZENhbGxiYWNrID0gZmFsc2U7Ci0gICAgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxi
YWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyA9IGZhbHNlOwot
ICAgIG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBC
YWNrRm9yd2FyZExpc3QgPSBmYWxzZTsKLSAgICBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRp
b25zID0gZmFsc2U7Ci0gICAgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQgPSBmYWxzZTsKLSAgICBt
X2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzID0gZmFsc2U7Ci0gICAgbV9kdW1wU2VsZWN0aW9uUmVj
dCA9IGZhbHNlOwotICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9IGZhbHNlOwotICAgIG1fZHVtcFBl
cm1pc3Npb25DbGllbnRDYWxsYmFja3MgPSBmYWxzZTsKLSAgICBtX2dlbmVyYXRlUGl4ZWxSZXN1
bHRzID0gdHJ1ZTsKLSAgICBtX2FjY2VwdHNFZGl0aW5nID0gdHJ1ZTsKLSAgICBtX3dhaXRVbnRp
bERvbmUgPSBmYWxzZTsKLSAgICBtX2Nhbk9wZW5XaW5kb3dzID0gZmFsc2U7Ci0gICAgbV90ZXN0
UmVwYWludCA9IGZhbHNlOwotICAgIG1fc3dlZXBIb3Jpem9udGFsbHkgPSBmYWxzZTsKLSAgICBt
X3Nob3VsZEFkZEZpbGVUb1Bhc3RlYm9hcmQgPSBmYWxzZTsKLSAgICBtX3N0b3BQcm92aXNpb25h
bEZyYW1lTG9hZHMgPSBmYWxzZTsKLSAgICBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSB0
cnVlOwotICAgIG1fZ2xvYmFsRmxhZy5zZXQoZmFsc2UpOwotICAgIG1fd2ViSGlzdG9yeUl0ZW1D
b3VudC5zZXQoMCk7Ci0gICAgbV90aXRsZVRleHREaXJlY3Rpb24uc2V0KCJsdHIiKTsKLSAgICBt
X3BsYXRmb3JtTmFtZS5zZXQoImNocm9taXVtIik7Ci0gICAgbV9pbnRlcmNlcHRQb3N0TWVzc2Fn
ZS5zZXQoZmFsc2UpOwotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IFdlYlVSTCgpOwot
ICAgIG1faXNQcmludGluZyA9IGZhbHNlOwotCi0gICAgd2Via2l0X3N1cHBvcnQ6OlNldEFjY2Vw
dEFsbENvb2tpZXMoZmFsc2UpOwotICAgIFdlYlNlY3VyaXR5UG9saWN5OjpyZXNldE9yaWdpbkFj
Y2Vzc1doaXRlbGlzdHMoKTsKLQotICAgIC8vIFJlc2V0IHRoZSBkZWZhdWx0IHF1b3RhIGZvciBl
YWNoIG9yaWdpbiB0byA1TUIKLSAgICB3ZWJraXRfc3VwcG9ydDo6U2V0RGF0YWJhc2VRdW90YSg1
ICogMTAyNCAqIDEwMjQpOwotCi0gICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwotCi0gICAgaWYg
KG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzKQotICAgICAgICBtX3NoZWxsLT5jbG9zZVJlbWFpbmlu
Z1dpbmRvd3MoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzID0g
dHJ1ZTsKLSAgICBtX3dvcmtRdWV1ZS5yZXNldCgpOwotICAgIG1fdGFza0xpc3QucmV2b2tlQWxs
KCk7Ci0gICAgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCA9IGZh
bHNlOwotICAgIG1faGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gZmFsc2U7Ci0jaWYgT1Mo
TElOVVgpIHx8IE9TKEFORFJPSUQpCi0gICAgV2ViRm9udFJlbmRlcmluZzo6c2V0U3VicGl4ZWxQ
b3NpdGlvbmluZyhmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bG9jYXRpb25DaGFuZ2VEb25lKCkKLXsKLSAgICBtX3dlYkhpc3RvcnlJdGVtQ291bnQuc2V0
KG1fc2hlbGwtPm5hdmlnYXRpb25FbnRyeUNvdW50KCkpOwotCi0gICAgLy8gTm8gbW9yZSBuZXcg
d29yayBhZnRlciB0aGUgZmlyc3QgY29tcGxldGUgbG9hZC4KLSAgICBtX3dvcmtRdWV1ZS5zZXRG
cm96ZW4odHJ1ZSk7Ci0KLSAgICBpZiAoIW1fd2FpdFVudGlsRG9uZSkKLSAgICAgICAgbV93b3Jr
UXVldWUucHJvY2Vzc1dvcmtTb29uKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnBvbGljeURlbGVnYXRlRG9uZSgpCi17Ci0gICAgQVNTRVJUKG1fd2FpdFVudGlsRG9uZSk7Ci0g
ICAgbV9zaGVsbC0+dGVzdEZpbmlzaGVkKCk7Ci0gICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbk9wZW5XaW5kb3dzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2Nhbk9wZW5X
aW5kb3dzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KHN0YXRpY19jYXN0PGludD4obV9z
aGVsbC0+d2luZG93Q291bnQoKSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX2Nsb3NlUmVtYWlu
aW5nV2luZG93cyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2Vw
dENvb2tpZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDApCi0gICAgICAgIHdlYmtpdF9z
dXBwb3J0OjpTZXRBY2NlcHRBbGxDb29raWVzKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBd
KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9zaGVsbC0+
d2ViVmlldygpLT5zZXR0aW5ncygpLT5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChjcHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3NoZWxsLT5z
aG93RGV2VG9vbHMoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9zaGVsbC0+Y2xvc2VEZXZUb29scygp
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRXaW5kb3dJc0tleShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVu
dHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPnNldEZvY3VzKG1fc2hlbGwtPndlYlZp
ZXcoKSwgYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29s
KCkpIHsKLSAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+dXNlclN0eWxlU2hlZXRMb2Nh
dGlvbiA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUgPyBtX3VzZXJTdHlsZVNoZWV0TG9j
YXRpb24gOiBXZWJVUkwoKTsKLSAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwot
ICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb24gPSB3ZWJraXRfc3VwcG9ydDo6TG9jYWxGaWxlVG9EYXRhVVJMKAotICAgICAg
ICAgICAgd2Via2l0X3N1cHBvcnQ6OlJld3JpdGVMYXlvdXRUZXN0c1VSTChhcmd1bWVudHNbMF0u
dG9TdHJpbmcoKSkpOwotICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT51c2VyU3R5bGVT
aGVldExvY2F0aW9uID0gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwotICAgICAgICBtX3NoZWxs
LT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkp
IHsKLSAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+YXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBtX3NoZWxsLT5h
cHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0
cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0cmluZyBjb21tYW5kID0gYXJn
dW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmFsdWUoIiIpOwotICAgIC8v
IElnbm9yZSB0aGUgc2Vjb25kIHBhcmFtZXRlciAod2hpY2ggaXMgdXNlckludGVyZmFjZSkKLSAg
ICAvLyBzaW5jZSB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0aW9uLgotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID49IDMgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpCi0gICAg
ICAgIHZhbHVlID0gYXJndW1lbnRzWzJdLnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBOb3RlOiB3ZWJr
aXQncyB2ZXJzaW9uIGRvZXMgbm90IHJldHVybiB0aGUgYm9vbGVhbiwgc28gbmVpdGhlciBkbyB3
ZS4KLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlQ29tbWFu
ZChXZWJTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkg
ewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICBi
b29sIHJ2ID0gbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+aXNDb21tYW5kRW5h
YmxlZChXZWJTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpKTsKLSAgICByZXN1bHQtPnNldChydik7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkg
ewotICAgICAgICBib29sIGJsb2NrUG9wdXBzID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwot
ICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NB
dXRvbWF0aWNhbGx5ID0gIWJsb2NrUG9wdXBzOwotICAgICAgICBtX3NoZWxsLT5hcHBseVByZWZl
cmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViUGVy
bWlzc2lvbnMoKS0+c2V0SW1hZ2VzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTY3JpcHRzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVu
dHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCktPnNldFNj
cmlwdHNBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VBbGxvd2Vk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkK
LSAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+c2V0U3RvcmFnZUFsbG93ZWQoYXJn
dW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0FsbG93ZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxs
LT53ZWJQZXJtaXNzaW9ucygpLT5zZXRQbHVnaW5zQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29s
ZWFuKCkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gV2UgaGF2ZSBubyBuZWVkIHRv
IHN1cHBvcnQgRGFzaGJvYXJkIENvbXBhdGliaWxpdHkgTW9kZSAobWFjLW9ubHkpCi0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxs
QXBwbGljYXRpb25DYWNoZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBj
YWNoZSBxdW90YXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgYW4gb3JpZ2lu
LgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9y
dCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGlj
YXRpb24gY2FjaGVzLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBj
YWNoZSBmb3IgYW4gb3JpZ2luLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCi0g
ICAgLy8gQ3VycmVudGx5IG9ubHkgaGFzIGEgbm9uLW51bGwgaW1wbGVtZW50YXRpb24gb24gUVQu
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYm
IGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBib29sIGVuYWJsZSA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIGJvb2wgcGVybWlzc2l2ZSA9IGZhbHNlOwot
ICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzQm9vbCgp
KQotICAgICAgICAgICAgcGVybWlzc2l2ZSA9IGFyZ3VtZW50c1sxXS52YWx1ZS5ib29sVmFsdWU7
Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldEN1c3RvbVBvbGljeURlbGVnYXRl
KGVuYWJsZSwgcGVybWlzc2l2ZSk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fc2hlbGwtPndl
YlZpZXdIb3N0KCktPndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwotICAgIG1fd2FpdFVudGlsRG9u
ZSA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmlu
ZyBoZWFkZXIgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKCFoZWFkZXIu
ZW1wdHkoKSkKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPmFkZENsZWFySGVh
ZGVyKFN0cmluZzo6ZnJvbVVURjgoaGVhZGVyLmNfc3RyKCkpKTsKLSAgICB9Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbGxTZW5k
UmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4g
MCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0
KCktPnNldEJsb2NrUmVkaXJlY3RzKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCkt
PnNldFJlcXVlc3RSZXR1cm5OdWxsKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRo
VG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPD0gMCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN0cmluZyB1cmwgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSNpZiBPUyhX
SU5ET1dTKQotICAgIGlmICghdXJsLmZpbmQoIi90bXAvIikpIHsKLSAgICAgICAgLy8gV2Ugd2Fu
dCBhIHRlbXAgZmlsZS4KLSAgICAgICAgY29uc3QgdW5zaWduZWQgdGVtcFByZWZpeExlbmd0aCA9
IDU7Ci0gICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gTUFYX1BBVEg7Ci0gICAgICAgIE93bkFy
cmF5UHRyPFdDSEFSPiB0ZW1wUGF0aCA9IGFkb3B0QXJyYXlQdHIobmV3IFdDSEFSW2J1ZmZlclNp
emVdKTsKLSAgICAgICAgRFdPUkQgdGVtcExlbmd0aCA9IDo6R2V0VGVtcFBhdGhXKGJ1ZmZlclNp
emUsIHRlbXBQYXRoLmdldCgpKTsKLSAgICAgICAgaWYgKHRlbXBMZW5ndGggKyB1cmwubGVuZ3Ro
KCkgLSB0ZW1wUHJlZml4TGVuZ3RoICsgMSA+IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgICAgIGJ1
ZmZlclNpemUgPSB0ZW1wTGVuZ3RoICsgdXJsLmxlbmd0aCgpIC0gdGVtcFByZWZpeExlbmd0aCAr
IDE7Ci0gICAgICAgICAgICB0ZW1wUGF0aCA9IGFkb3B0QXJyYXlQdHIobmV3IFdDSEFSW2J1ZmZl
clNpemVdKTsKLSAgICAgICAgICAgIHRlbXBMZW5ndGggPSBHZXRUZW1wUGF0aFcoYnVmZmVyU2l6
ZSwgdGVtcFBhdGguZ2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKHRlbXBMZW5ndGggPCBidWZm
ZXJTaXplKTsKLSAgICAgICAgfQotICAgICAgICBzdHJpbmcgcmVzdWx0UGF0aChXZWJTdHJpbmco
dGVtcFBhdGguZ2V0KCksIHRlbXBMZW5ndGgpLnV0ZjgoKSk7Ci0gICAgICAgIHJlc3VsdFBhdGgu
YXBwZW5kKHVybC5zdWJzdHIodGVtcFByZWZpeExlbmd0aCkpOwotICAgICAgICByZXN1bHQtPnNl
dChyZXN1bHRQYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8g
U29tZSBsYXlvdXQgdGVzdHMgdXNlIGZpbGU6Ly8vLyB3aGljaCB3ZSByZXNvbHZlIGFzIGEgVU5D
IHBhdGguIE5vcm1hbGl6ZQotICAgIC8vIHRoZW0gdG8ganVzdCBmaWxlOi8vLy4KLSAgICBzdHJp
bmcgbG93ZXJVcmwgPSB1cmw7Ci0gICAgdHJhbnNmb3JtKGxvd2VyVXJsLmJlZ2luKCksIGxvd2Vy
VXJsLmVuZCgpLCBsb3dlclVybC5iZWdpbigpLCA6OnRvbG93ZXIpOwotICAgIHdoaWxlICghbG93
ZXJVcmwuZmluZCgiZmlsZTovLy8vIikpIHsKLSAgICAgICAgdXJsID0gdXJsLnN1YnN0cigwLCA4
KSArIHVybC5zdWJzdHIoOSk7Ci0gICAgICAgIGxvd2VyVXJsID0gbG93ZXJVcmwuc3Vic3RyKDAs
IDgpICsgbG93ZXJVcmwuc3Vic3RyKDkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldCh3ZWJraXRf
c3VwcG9ydDo6UmV3cml0ZUxheW91dFRlc3RzVVJMKHVybCkuc3BlYygpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRmlsZVRvUGFzdGVib2FyZE9uRHJhZyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgbV9zaG91bGRBZGRGaWxlVG9QYXN0ZWJvYXJkID0gdHJ1ZTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci0gICAgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzID0gdHJ1ZTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAg
ICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGFy
Z3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0gICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAo
IXdlYkZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJBbmltYXRpb25Db250
cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAg
ICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkVsZW1l
bnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJ
ZCk7Ci0gICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgYW5pbWF0
aW9uTmFtZSwgdGltZSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQotewotICAgIFdlYkZy
YW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYg
KCF3ZWJGcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViQW5pbWF0aW9uQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCk7Ci0g
ICAgaWYgKCFjb250cm9sbGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJFbGVt
ZW50IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChlbGVtZW50
SWQpOwotICAgIGlmIChlbGVtZW50LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBwcm9w
ZXJ0eU5hbWUsIHRpbWUpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50
SWQpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWlu
RnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBXZWJFbGVtZW50IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJ
ZChlbGVtZW50SWQpOwotICAgIGlmIChlbGVtZW50LmlzTnVsbCgpIHx8ICFlbGVtZW50Lmhhc1Rh
Z05hbWUoImlucHV0IikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYklucHV0RWxl
bWVudCBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LnRvPFdlYklucHV0RWxlbWVudD4oKTsKLSAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LmF1dG9Db21wbGV0ZSgpOwotfQotCi1pbnQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpCi17Ci0gICAgV2ViRnJhbWUqIHdl
YkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZy
YW1lKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBj
b250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiBjb250cm9sbGVyLT5u
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChm
YWxzZSk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1swXS5pc1N0
cmluZygpICYmIGFyZ3VtZW50c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc1N0cmlu
ZygpKSB7Ci0gICAgICAgIFdlYlN0cmluZyBhbmltYXRpb25OYW1lID0gY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1swXSk7Ci0gICAgICAgIGRvdWJsZSB0aW1lID0gYXJndW1lbnRzWzFd
LnRvRG91YmxlKCk7Ci0gICAgICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzJdKTsKLSAgICAgICAgcmVzdWx0LT5zZXQocGF1c2VBbmltYXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoYW5pbWF0aW9uTmFtZSwgdGltZSwgZWxlbWVudElkKSk7
Ci0gICAgfQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpICYmIGFyZ3VtZW50
c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFdl
YlN0cmluZyBwcm9wZXJ0eU5hbWUgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBd
KTsKLSAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVudHNbMV0udG9Eb3VibGUoKTsKLSAgICAg
ICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNb
Ml0pOwotICAgICAgICByZXN1bHQtPnNldChwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQocHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdp
dGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0
cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFy
Z3VtZW50c1swXSk7Ci0gICAgcmVzdWx0LT5zZXQoZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JF
bGVtZW50V2l0aElkKGVsZW1lbnRJZCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjplbmFibGVBdXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQpIHsK
LSAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGludCBtaW5XaWR0aCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1swXSk7Ci0gICAgaW50
IG1pbkhlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1sxXSk7Ci0gICAgV2ViS2l0
OjpXZWJTaXplIG1pblNpemUobWluV2lkdGgsIG1pbkhlaWdodCk7Ci0KLSAgICBpbnQgbWF4V2lk
dGggPSBjcHBWYXJpYW50VG9JbnQzMihhcmd1bWVudHNbMl0pOwotICAgIGludCBtYXhIZWlnaHQg
PSBjcHBWYXJpYW50VG9JbnQzMihhcmd1bWVudHNbM10pOwotICAgIFdlYktpdDo6V2ViU2l6ZSBt
YXhTaXplKG1heFdpZHRoLCBtYXhIZWlnaHQpOwotCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5l
bmFibGVBdXRvUmVzaXplTW9kZShtaW5TaXplLCBtYXhTaXplKTsKLSAgICByZXN1bHQtPnNldCh0
cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUF1dG9SZXNpemVN
b2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0yKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0
KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgbmV3V2lkdGggPSBjcHBW
YXJpYW50VG9JbnQzMihhcmd1bWVudHNbMF0pOwotICAgIGludCBuZXdIZWlnaHQgPSBjcHBWYXJp
YW50VG9JbnQzMihhcmd1bWVudHNbMV0pOwotICAgIFdlYktpdDo6V2ViU2l6ZSBuZXdTaXplKG5l
d1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0V2lu
ZG93UmVjdChXZWJSZWN0KDAsIDAsIG5ld1NpemUud2lkdGgsIG5ld1NpemUuaGVpZ2h0KSk7Ci0g
ICAgbV9zaGVsbC0+d2ViVmlldygpLT5kaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoKTsKLSAgICBtX3No
ZWxsLT53ZWJWaWV3KCktPnJlc2l6ZShuZXdTaXplKTsKLSAgICByZXN1bHQtPnNldCh0cnVlKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPmxvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSA9IGZhbHNlOwotICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5j
ZXMoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSBXZWJLaXQgaWNvbiBk
YXRhYmFzZS4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3
KCktPmRpc3BhdGNoQmVmb3JlVW5sb2FkRXZlbnQoKSk7Ci19Ci0KLSNpZiBFTkFCTEUoTk9USUZJ
Q0FUSU9OUykKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE5vdGlmaWNh
dGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdB
Q1lfTk9USUZJQ0FUSU9OUykKLSAgICBtX3NoZWxsLT5ub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+
Z3JhbnRQZXJtaXNzaW9uKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pKTsKLSNl
bmRpZgotICAgIHJlc3VsdC0+c2V0KHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBFTkFCTEUoTk9USUZJ
Q0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIGlmIChtX3NoZWxs
LT5ub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+c2ltdWxhdGVDbGljayhjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzBdKSkpCi0gICAgICAgIHJlc3VsdC0+c2V0KHRydWUpOwotICAgIGVs
c2UKLSNlbmRpZgotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVS
TFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5p
c0Jvb2woKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW4oY3BwVmFy
aWFudFRvQm9vbChhcmd1bWVudHNbMF0pLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzFdKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyTWFpblJlc291
cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxKQotICAgICAgICBtX2Rl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSBjcHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSk7
Ci19Ci0KLS8vCi0vLyBVbmltcGxlbWVudGVkIHN0dWJzCi0vLwotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkdW1wQXNXZWJBcmNoaXZlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBTZWxlY3Rpb25SZWN0ID0gdHJ1ZTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxh
eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIFdlYlZpZXdIb3N0KiBob3N0ID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKTsKLSAgICBj
b25zdCBXZWJLaXQ6OldlYlNpemUmIHNpemUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPnNpemUoKTsK
LSAgICBXZWJSZWN0IHJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwotICAgIGhv
c3QtPnVwZGF0ZVBhaW50UmVjdChyZWN0KTsKLSAgICBob3N0LT5wYWludEludmFsaWRhdGVkUmVn
aW9uKCk7Ci0gICAgaG9zdC0+ZGlzcGxheVJlcGFpbnRNYXNrKCk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXlJbnZhbGlkYXRl
ZFJlZ2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIFdlYlZpZXdIb3N0KiBob3N0ID0gbV9zaGVsbC0+d2ViVmlld0hvc3QoKTsK
LSAgICBob3N0LT5wYWludEludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgaG9zdC0+ZGlzcGxheVJl
cGFpbnRNYXNrKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBtX3Rlc3RSZXBhaW50ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVwYWludFN3ZWVwSG9y
aXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBtX3N3ZWVwSG9yaXpvbnRhbGx5ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2Vl
cFdlYkhpc3RvcnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsICBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN0b3JlV2ViU2NyaXB0T2JqZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9i
amVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpvYmpDQ2xhc3NOYW1lT2YoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWxsQ2xvc2VPbldlYlZp
ZXdzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBi
b2FyZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29s
KCkpIHsKLSAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+amF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZCA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIG1fc2hl
bGwtPmFwcGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAg
ICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5YU1NBdWRpdG9yRW5hYmxlZCA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMo
KTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgV2ViVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFs
dWU+ID4gdmFsdWVzOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1lbnRz
WzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV2Vi
U2NyaXB0U291cmNlIHNvdXJjZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7
Ci0gICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIHRoZSBpZnJhbWUgZm9jdXNpbmcgaXRzZWxmIHdo
ZW4gaXQgbG9hZHMuIFRoaXMgaXMgYSBiaXQKLSAgICAgICAgLy8gc2tldGNoeSwgYnV0IGl0IHNl
ZW1zIHRvIGJlIHdoYXQgb3RoZXIgdGVzdHMgZG8uCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXco
KS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoYXJndW1lbnRz
WzBdLnRvSW50MzIoKSwgJnNvdXJjZSwgMSwgMSwgJnZhbHVlcyk7Ci0gICAgfQotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIC8vIFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3YXMgYWRkZWQsIG9u
bHkgb25lIHJlc3VsdCBpcyBleHBlY3RlZAotICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDEgJiYg
IXZhbHVlc1swXS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gc2Ny
aXB0VmFsdWUgPSB2YWx1ZXNbMF07Ci0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgbWFueSBt
b3JlIHR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQuCi0gICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+
SXNTdHJpbmcoKSkgewotICAgICAgICAgICAgdjg6OlN0cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4
KHNjcmlwdFZhbHVlKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0KHN0ZDo6c3RyaW5nKCphc2Np
aVY4KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzQm9vbGVhbigpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvQm9vbGVhbigpLT5WYWx1ZSgpKTsK
LSAgICAgICAgZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGlmIChzY3JpcHRWYWx1ZS0+SXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0
KHNjcmlwdFZhbHVlLT5Ub0ludDMyKCktPlZhbHVlKCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJlcigpLT5WYWx1ZSgp
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkpCi0gICAgICAgICAg
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIH0KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0
cmluZygpKSB7Ci0gICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgaWZy
YW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0Ci0gICAgICAg
IC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgotICAg
ICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEpOwotICAg
IH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPnNldElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbigKLSAgICAgICAgYXJndW1lbnRzWzBdLnRvSW50MzIoKSwKLSAgICAgICAgV2Vi
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFy
Z3VtZW50c1sxXSkpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAg
JiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2Vz
KCktPmFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzID0gYXJndW1lbnRzWzBdLnZhbHVl
LmJvb2xWYWx1ZTsKLSAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0K
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJQZXJt
aXNzaW9ucygpLT5zZXREaXNwbGF5aW5nSW5zZWN1cmVDb250ZW50QWxsb3dlZChhcmd1bWVudHNb
MF0udG9Cb29sZWFuKCkpOwotCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAg
ICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+YWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzID0g
YXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKLSAgICAgICAgbV9zaGVsbC0+YXBwbHlQcmVm
ZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAg
ICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRSdW5uaW5nSW5zZWN1cmVDb250ZW50QWxs
b3dlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLQotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi0vLyBOZWVkIHRoZXNlIGNvbnZlcnNpb25zIGJlY2F1c2UgdGhlIGZvcm1hdCBv
ZiB0aGUgdmFsdWUgZm9yIGJvb2xlYW5zCi0vLyBtYXkgdmFyeSAtIGZvciBleGFtcGxlLCBvbiBt
YWMgIjEiIGFuZCAiMCIgYXJlIHVzZWQgZm9yIGJvb2xlYW4uCi1ib29sIExheW91dFRlc3RDb250
cm9sbGVyOjpjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigpOwot
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigp
OwotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmluZyB2YWx1ZVN0cmlu
ZyA9IHZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAidHJ1ZSIg
fHwgdmFsdWVTdHJpbmcgPT0gIjEiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGlmICh2YWx1ZVN0cmluZyA9PSAiZmFsc2UiIHx8IHZhbHVlU3RyaW5nID09ICIwIikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFs
aWQgdmFsdWUuIEV4cGVjdGVkIGJvb2xlYW4gdmFsdWUuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1pbnQzMl90IExheW91dFRlc3RDb250cm9sbGVyOjpjcHBWYXJpYW50VG9JbnQzMihjb25z
dCBDcHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoKTsKLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewot
ICAgICAgICBzdHJpbmcgc3RyaW5nU291cmNlID0gdmFsdWUudG9TdHJpbmcoKTsKLSAgICAgICAg
Y29uc3QgY2hhciogc291cmNlID0gc3RyaW5nU291cmNlLmRhdGEoKTsKLSAgICAgICAgY2hhciog
ZW5kOwotICAgICAgICBsb25nIG51bWJlciA9IHN0cnRvbChzb3VyY2UsICZlbmQsIDEwKTsKLSAg
ICAgICAgaWYgKGVuZCA9PSBzb3VyY2UgKyBzdHJpbmdTb3VyY2UubGVuZ3RoKCkgJiYgbnVtYmVy
ID49IG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSAmJiBudW1iZXIgPD0gbnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1heCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG51bWJlcik7Ci0gICAgfQotICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZhbGlkIHZh
bHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBpbnRlZ2VyIHZhbHVlLiIpOwotICAgIHJldHVy
biAwOwotfQotCi1XZWJTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNwcFZhcmlhbnRUb1dl
YlN0cmluZyhjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHBy
ZWZlcmVuY2UuIEV4cGVjdGVkIHN0cmluZyB2YWx1ZS4iKTsKLSAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZS50b1N0
cmluZygpKTsKLX0KLQotVmVjdG9yPFdlYlN0cmluZz4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNw
cFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQotewotICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52
YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgb2JqZWN0IHZhbHVlLiIpOwotICAg
ICAgICByZXR1cm4gVmVjdG9yPFdlYlN0cmluZz4oKTsKLSAgICB9Ci0gICAgVmVjdG9yPFdlYlN0
cmluZz4gcmVzdWx0VmVjdG9yOwotICAgIFZlY3RvcjxzdHJpbmc+IHN0cmluZ1ZlY3RvciA9IHZh
bHVlLnRvU3RyaW5nVmVjdG9yKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdW
ZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoV2ViU3RyaW5n
Ojpmcm9tVVRGOChzdHJpbmdWZWN0b3JbaV0uY19zdHIoKSkpOwotICAgIHJldHVybiByZXN1bHRW
ZWN0b3I7Ci19Ci0KLS8vIFNldHMgbWFwIGJhc2VkIG9uIHNjcmlwdEZvbnRQYWlycywgYSBjb2xs
YXBzZWQgdmVjdG9yIG9mIHBhaXJzIG9mIElTTyAxNTkyNAotLy8gZm91ci1sZXR0ZXIgc2NyaXB0
IGNvZGUgYW5kIGZvbnQgc3VjaCBhczoKLS8vIHsgIkFyYWIiLCAiTXkgQXJhYmljIEZvbnQiLCAi
R3JlayIsICJNeSBHcmVlayBGb250IiB9Ci1zdGF0aWMgdm9pZCBzZXRGb250TWFwKFdlYlByZWZl
cmVuY2VzOjpTY3JpcHRGb250RmFtaWx5TWFwJiBtYXAsIGNvbnN0IFZlY3RvcjxXZWJTdHJpbmc+
JiBzY3JpcHRGb250UGFpcnMpCi17Ci0gICAgbWFwLmNsZWFyKCk7Ci0gICAgc2l6ZV90IGkgPSAw
OwotICAgIHdoaWxlIChpICsgMSA8IHNjcmlwdEZvbnRQYWlycy5zaXplKCkpIHsKLSAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBzY3JpcHQgPSBzY3JpcHRGb250UGFpcnNbaSsrXTsKLSAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBmb250ID0gc2NyaXB0Rm9udFBhaXJzW2krK107Ci0KLSAgICAgICAg
aW50MzJfdCBjb2RlID0gdV9nZXRQcm9wZXJ0eVZhbHVlRW51bShVQ0hBUl9TQ1JJUFQsIHNjcmlw
dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgaWYgKGNvZGUgPj0gMCAmJiBjb2RlIDwgVVNDUklQ
VF9DT0RFX0xJTUlUKQotICAgICAgICAgICAgbWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KGNvZGUp
LCBmb250KTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRl
UHJlZmVyZW5jZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzdHJpbmcga2V5ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgQ3BwVmFyaWFu
dCB2YWx1ZSA9IGFyZ3VtZW50c1sxXTsKLSAgICBXZWJQcmVmZXJlbmNlcyogcHJlZnMgPSBtX3No
ZWxsLT5wcmVmZXJlbmNlcygpOwotICAgIGlmIChrZXkgPT0gIldlYktpdFN0YW5kYXJkRm9udCIp
Ci0gICAgICAgIHByZWZzLT5zdGFuZGFyZEZvbnRGYW1pbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJp
bmcodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Rml4ZWRGb250IikKLSAgICAg
ICAgcHJlZnMtPmZpeGVkRm9udEZhbWlseSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1ZSk7
Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRTZXJpZkZvbnQiKQotICAgICAgICBwcmVmcy0+
c2VyaWZGb250RmFtaWx5ID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsKLSAgICBlbHNl
IGlmIChrZXkgPT0gIldlYktpdFNhbnNTZXJpZkZvbnQiKQotICAgICAgICBwcmVmcy0+c2Fuc1Nl
cmlmRm9udEZhbWlseSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoa2V5ID09ICJXZWJLaXRDdXJzaXZlRm9udCIpCi0gICAgICAgIHByZWZzLT5jdXJzaXZlRm9u
dEZhbWlseSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5
ID09ICJXZWJLaXRGYW50YXN5Rm9udCIpCi0gICAgICAgIHByZWZzLT5mYW50YXN5Rm9udEZhbWls
eSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRTdGFuZGFyZEZvbnRNYXAiKQotICAgICAgICBzZXRGb250TWFwKHByZWZzLT5zdGFuZGFy
ZEZvbnRNYXAsIGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7Ci0gICAgZWxzZSBp
ZiAoa2V5ID09ICJXZWJLaXRGaXhlZEZvbnRNYXAiKQotICAgICAgICBzZXRGb250TWFwKHByZWZz
LT5maXhlZEZvbnRNYXAsIGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7Ci0gICAg
ZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRTZXJpZkZvbnRNYXAiKQotICAgICAgICBzZXRGb250TWFw
KHByZWZzLT5zZXJpZkZvbnRNYXAsIGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7
Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRTYW5zU2VyaWZGb250TWFwIikKLSAgICAgICAg
c2V0Rm9udE1hcChwcmVmcy0+c2Fuc1NlcmlmRm9udE1hcCwgY3BwVmFyaWFudFRvV2ViU3RyaW5n
QXJyYXkodmFsdWUpKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEN1cnNpdmVGb250TWFw
IikKLSAgICAgICAgc2V0Rm9udE1hcChwcmVmcy0+Y3Vyc2l2ZUZvbnRNYXAsIGNwcFZhcmlhbnRU
b1dlYlN0cmluZ0FycmF5KHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRGYW50
YXN5Rm9udE1hcCIpCi0gICAgICAgIHNldEZvbnRNYXAocHJlZnMtPmZhbnRhc3lGb250TWFwLCBj
cHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGtleSA9PSAi
V2ViS2l0RGVmYXVsdEZvbnRTaXplIikKLSAgICAgICAgcHJlZnMtPmRlZmF1bHRGb250U2l6ZSA9
IGNwcFZhcmlhbnRUb0ludDMyKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERl
ZmF1bHRGaXhlZEZvbnRTaXplIikKLSAgICAgICAgcHJlZnMtPmRlZmF1bHRGaXhlZEZvbnRTaXpl
ID0gY3BwVmFyaWFudFRvSW50MzIodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0
TWluaW11bUZvbnRTaXplIikKLSAgICAgICAgcHJlZnMtPm1pbmltdW1Gb250U2l6ZSA9IGNwcFZh
cmlhbnRUb0ludDMyKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdE1pbmltdW1M
b2dpY2FsRm9udFNpemUiKQotICAgICAgICBwcmVmcy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSA9
IGNwcFZhcmlhbnRUb0ludDMyKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lIikKLSAgICAgICAgcHJlZnMtPmRlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkg
PT0gIldlYktpdEphdmFTY3JpcHRFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPmphdmFTY3JpcHRF
bmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRXZWJTZWN1cml0eUVuYWJsZWQiKQotICAgICAgICBwcmVmcy0+d2ViU2VjdXJpdHlFbmFi
bGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJL
aXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5IikKLSAgICAgICAgcHJlZnMt
PmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkgPSBjcHBWYXJpYW50VG9Cb29s
KHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERpc3BsYXlJbWFnZXNLZXkiKQot
ICAgICAgICBwcmVmcy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5ID0gY3BwVmFyaWFudFRvQm9v
bCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpCi0g
ICAgICAgIHByZWZzLT5wbHVnaW5zRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwot
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RE9NUGFzdGVBbGxvd2VkUHJlZmVyZW5jZUtleSIp
Ci0gICAgICAgIHByZWZzLT5ET01QYXN0ZUFsbG93ZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVl
KTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERldmVsb3BlckV4dHJhc0VuYWJsZWRQcmVm
ZXJlbmNlS2V5IikKLSAgICAgICAgcHJlZnMtPmRldmVsb3BlckV4dHJhc0VuYWJsZWQgPSBjcHBW
YXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFNocmlua3NT
dGFuZGFsb25lSW1hZ2VzVG9GaXQiKQotICAgICAgICBwcmVmcy0+c2hyaW5rc1N0YW5kYWxvbmVJ
bWFnZXNUb0ZpdCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9
PSAiV2ViS2l0VGV4dEFyZWFzQXJlUmVzaXphYmxlIikKLSAgICAgICAgcHJlZnMtPnRleHRBcmVh
c0FyZVJlc2l6YWJsZSA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtl
eSA9PSAiV2ViS2l0SmF2YUVuYWJsZWQiKQotICAgICAgICBwcmVmcy0+amF2YUVuYWJsZWQgPSBj
cHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFVzZXNQ
YWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikKLSAgICAgICAgcHJlZnMtPnVzZXNQYWdlQ2FjaGUgPSBj
cHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFBhZ2VD
YWNoZVN1cHBvcnRzUGx1Z2luc1ByZWZlcmVuY2VLZXkiKQotICAgICAgICBwcmVmcy0+cGFnZUNh
Y2hlU3VwcG9ydHNQbHVnaW5zID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoa2V5ID09ICJXZWJLaXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIikKLSAgICAgICAg
cHJlZnMtPmphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgPSBjcHBWYXJpYW50VG9Cb29sKHZh
bHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFhTU0F1ZGl0b3JFbmFibGVkIikKLSAg
ICAgICAgcHJlZnMtPlhTU0F1ZGl0b3JFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7
Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRMb2NhbFN0b3JhZ2VFbmFibGVkUHJlZmVyZW5j
ZUtleSIpCi0gICAgICAgIHByZWZzLT5sb2NhbFN0b3JhZ2VFbmFibGVkID0gY3BwVmFyaWFudFRv
Qm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRPZmZsaW5lV2ViQXBwbGlj
YXRpb25DYWNoZUVuYWJsZWQiKQotICAgICAgICBwcmVmcy0+b2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5
ID09ICJXZWJLaXRUYWJUb0xpbmtzUHJlZmVyZW5jZUtleSIpCi0gICAgICAgIHByZWZzLT50YWJz
VG9MaW5rcyA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAi
V2ViS2l0V2ViR0xFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPmV4cGVyaW1lbnRhbFdlYkdMRW5h
YmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2Vi
S2l0Q1NTUmVnaW9uc0VuYWJsZWQiKQotICAgICAgICBwcmVmcy0+ZXhwZXJpbWVudGFsQ1NTUmVn
aW9uc0VuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkg
PT0gIldlYktpdENTU0dyaWRMYXlvdXRFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPmV4cGVyaW1l
bnRhbENTU0dyaWRMYXlvdXRFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAg
ZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKQotICAgICAg
ICBwcmVmcy0+aHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1
ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRFbmFibGVDYXJldEJyb3dzaW5nIikKLSAg
ICAgICAgcHJlZnMtPmNhcmV0QnJvd3NpbmdFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1
ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRBbGxvd0Rpc3BsYXlpbmdJbnNlY3VyZUNv
bnRlbnQiKQotICAgICAgICBwcmVmcy0+YWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQgPSBj
cHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEFsbG93
UnVubmluZ0luc2VjdXJlQ29udGVudCIpCi0gICAgICAgIHByZWZzLT5hbGxvd1J1bm5pbmdPZklu
c2VjdXJlQ29udGVudCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtl
eSA9PSAiV2ViS2l0Q1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCIpCi0gICAgICAgIHByZWZzLT5jc3ND
dXN0b21GaWx0ZXJFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBp
ZiAoa2V5ID09ICJXZWJLaXRXZWJBdWRpb0VuYWJsZWQiKSB7Ci0gICAgICAgIEFTU0VSVChjcHBW
YXJpYW50VG9Cb29sKHZhbHVlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RyaW5nIG1lc3Nh
Z2UoIkludmFsaWQgbmFtZSBmb3IgcHJlZmVyZW5jZTogIik7Ci0gICAgICAgIG1lc3NhZ2UuYXBw
ZW5kKGtleSk7Ci0gICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKG1lc3NhZ2UpOwotICAgIH0KLSAg
ICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZhbGxiYWNrTWV0aG9kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBwcmludGYoIkNPTlNPTEUgTUVTU0FHRTogSmF2YVNjcmlwdCBFUlJP
UjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uIExheW91dFRlc3RDb250cm9sbGVyXG4iKTsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8
ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzU3Ry
aW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICBp
ZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlNlY3VyaXR5UG9s
aWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgKLSAgICAgICAgdXJsLAotICAgICAg
ICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwKLSAgICAgICAgY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCi0gICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xl
YW4oKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRz
WzFdLmlzU3RyaW5nKCkKLSAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpIHx8ICFh
cmd1bWVudHNbM10uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdDo6V2Vi
VVJMIHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0gICAgaWYgKCF1cmwuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJTZWN1cml0eVBvbGljeTo6cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCi0gICAgICAgIHVybCwKLSAgICAgICAgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMl0pLAotICAgICAgICBhcmd1bWVudHNbM10udG9Cb29sZWFuKCkpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotICAgIHdlYmtpdF9zdXBwb3J0OjpDbGVhckFsbERhdGFiYXNlcygp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKChhcmd1bWVudHMuc2l6ZSgpID49IDEpICYmIGFy
Z3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0RGF0YWJh
c2VRdW90YShhcmd1bWVudHNbMF0udG9JbnQzMigpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA9PSAxICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAg
ICBzZXRsb2NhbGUoTENfQUxMLCBhcmd1bWVudHNbMF0udG9TdHJpbmcoKS5jX3N0cigpKTsKLX0K
LQotLy8gUGFyc2UgYSBzaW5nbGUgYXJndW1lbnQuIFRoZSBtZXRob2QgcmV0dXJucyB0cnVlIGlm
IHRoZXJlIGlzIGFuIGFyZ3VtZW50IHRoYXQKLS8vIGlzIGEgbnVtYmVyIG9yIGlmIHRoZXJlIGlz
IG5vIGFyZ3VtZW50IGF0IGFsbC4gSXQgcmV0dXJucyBmYWxzZSBvbmx5IGlmIHRoZXJlCi0vLyBp
cyBzb21lIGFyZ3VtZW50IHRoYXQgaXMgbm90IGEgbnVtYmVyLiBUaGUgdmFsdWUgcGFyYW1ldGVy
IGlzIGZpbGxlZCB3aXRoIHRoZQotLy8gcGFyc2VkIG51bWJlciwgb3IgZ2l2ZW4gdGhlIGRlZmF1
bHQgaWYgdGhlcmUgaXMgbm8gYXJndW1lbnQuCi1zdGF0aWMgYm9vbCBwYXJzZUNwcEFyZ3VtZW50
SW50MzIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGludCBhcmdJbmRleCwgaW50
KiB2YWx1ZSwgaW50IGRlZmF1bHRWYWx1ZSkKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pihh
cmd1bWVudHMuc2l6ZSgpKSA+IGFyZ0luZGV4KSB7Ci0gICAgICAgIGlmICghYXJndW1lbnRzW2Fy
Z0luZGV4XS5pc051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAq
dmFsdWUgPSBhcmd1bWVudHNbYXJnSW5kZXhdLnRvSW50MzIoKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgICp2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGJvb2wgcGFyc2VQYWdlU2l6ZVBhcmFtZXRlcnMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYXJnT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBw
YWdlV2lkdGhJblBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogcGFnZUhlaWdodEluUGl4ZWxzKQotewotICAgIC8vIFdlYktpdCBpcyB1c2luZyB0aGUgd2lu
ZG93IHdpZHRoL2hlaWdodCBvZiBEdW1wUmVuZGVyVHJlZSBhcyB0aGUKLSAgICAvLyBkZWZhdWx0
IHZhbHVlIG9mIHRoZSBwYWdlIHNpemUuCi0gICAgLy8gRklYTUU6IHNoYXJlIHRoZSBkZWZhdWx0
IHZhbHVlcyB3aXRoIG90aGVyIHBvcnRzLgotICAgIGludCBhcmdDb3VudCA9IHN0YXRpY19jYXN0
PGludD4oYXJndW1lbnRzLnNpemUoKSkgLSBhcmdPZmZzZXQ7Ci0gICAgaWYgKGFyZ0NvdW50ICYm
IGFyZ0NvdW50ICE9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXBhcnNlQ3Bw
QXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCwgcGFnZVdpZHRoSW5QaXhlbHMsIDgw
MCkKLSAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNl
dCArIDEsIHBhZ2VIZWlnaHRJblBpeGVscywgNjAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VOdW1iZXIoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGludCBhcmdPZmZzZXQsIGludCogcGFnZU51bWJl
cikKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pihhcmd1bWVudHMuc2l6ZSgpKSA+IGFyZ09m
ZnNldCArIDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXBhcnNlQ3BwQXJndW1l
bnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCwgcGFnZU51bWJlciwgMCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VQYWdl
TnVtYmVyU2l6ZU1hcmdpbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGludCBh
cmdPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBh
Z2VOdW1iZXIsIGludCogd2lkdGgsIGludCogaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBtYXJnaW5Ub3AsIGludCogbWFyZ2luUmlnaHQsIGludCog
bWFyZ2luQm90dG9tLCBpbnQqIG1hcmdpbkxlZnQpCi17Ci0gICAgaW50IGFyZ0NvdW50ID0gc3Rh
dGljX2Nhc3Q8aW50Pihhcmd1bWVudHMuc2l6ZSgpKSAtIGFyZ09mZnNldDsKLSAgICBpZiAoYXJn
Q291bnQgJiYgYXJnQ291bnQgIT0gNykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
cGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBwYWdlTnVtYmVyLCAw
KQotICAgICAgICB8fCAhcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0
ICsgMSwgd2lkdGgsIDApCi0gICAgICAgIHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1l
bnRzLCBhcmdPZmZzZXQgKyAyLCBoZWlnaHQsIDApCi0gICAgICAgIHx8ICFwYXJzZUNwcEFyZ3Vt
ZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyAzLCBtYXJnaW5Ub3AsIDApCi0gICAgICAg
IHx8ICFwYXJzZUNwcEFyZ3VtZW50SW50MzIoYXJndW1lbnRzLCBhcmdPZmZzZXQgKyA0LCBtYXJn
aW5SaWdodCwgMCkKLSAgICAgICAgfHwgIXBhcnNlQ3BwQXJndW1lbnRJbnQzMihhcmd1bWVudHMs
IGFyZ09mZnNldCArIDUsIG1hcmdpbkJvdHRvbSwgMCkKLSAgICAgICAgfHwgIXBhcnNlQ3BwQXJn
dW1lbnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCArIDYsIG1hcmdpbkxlZnQsIDApKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgc2V0SXNQcmludGluZyh0cnVlKTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNp
emVBbmRNYXJnaW5zSW5QaXhlbHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldCgiIik7Ci0gICAgaW50IHBhZ2VO
dW1iZXIgPSAwOwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAg
aW50IG1hcmdpblRvcCA9IDA7Ci0gICAgaW50IG1hcmdpblJpZ2h0ID0gMDsKLSAgICBpbnQgbWFy
Z2luQm90dG9tID0gMDsKLSAgICBpbnQgbWFyZ2luTGVmdCA9IDA7Ci0gICAgaWYgKCFwYXJzZVBh
Z2VOdW1iZXJTaXplTWFyZ2lucyhhcmd1bWVudHMsIDAsICZwYWdlTnVtYmVyLCAmd2lkdGgsICZo
ZWlnaHQsICZtYXJnaW5Ub3AsICZtYXJnaW5SaWdodCwgJm1hcmdpbkJvdHRvbSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXJnaW5MZWZ0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViU2l6ZSBwYWdlU2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBmcmFtZS0+cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMo
cGFnZU51bWJlciwgcGFnZVNpemUsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRv
bSwgbWFyZ2luTGVmdCk7Ci0gICAgc3RyaW5nc3RyZWFtIHJlc3VsdFN0cmluZzsKLSAgICByZXN1
bHRTdHJpbmcgPDwgIigiIDw8IHBhZ2VTaXplLndpZHRoIDw8ICIsICIgPDwgcGFnZVNpemUuaGVp
Z2h0IDw8ICIpICIgPDwgbWFyZ2luVG9wIDw8ICIgIiA8PCBtYXJnaW5SaWdodCA8PCAiICIKLSAg
ICAgICAgICAgICAgICAgPDwgbWFyZ2luQm90dG9tIDw8ICIgIiA8PCBtYXJnaW5MZWZ0OwotICAg
IHJlc3VsdC0+c2V0KHJlc3VsdFN0cmluZy5zdHIoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChmYWxzZSk7
Ci0gICAgaW50IHBhZ2VJbmRleCA9IDA7Ci0gICAgaWYgKCFwYXJzZVBhZ2VOdW1iZXIoYXJndW1l
bnRzLCAwLCAmcGFnZUluZGV4KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHJlc3VsdC0+c2V0KGZyYW1lLT5oYXNDdXN0b21QYWdlU2l6ZVN0
eWxlKHBhZ2VJbmRleCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJv
cGVydHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldCgiIik7Ci0gICAgaW50IHBhZ2VOdW1iZXIgPSAwOwotICAg
IGlmICghcGFyc2VQYWdlTnVtYmVyKGFyZ3VtZW50cywgMSwgJnBhZ2VOdW1iZXIpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYlNpemUgcGFnZVNp
emUoODAwLCA4MDApOwotICAgIGZyYW1lLT5wcmludEJlZ2luKHBhZ2VTaXplKTsKLSAgICByZXN1
bHQtPnNldChmcmFtZS0+cGFnZVByb3BlcnR5KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVu
dHNbMF0pLCBwYWdlTnVtYmVyKS51dGY4KCkpOwotICAgIGZyYW1lLT5wcmludEVuZCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgaW50IHBhZ2VXaWR0aEluUGl4ZWxzID0gMDsKLSAgICBpbnQgcGFnZUhl
aWdodEluUGl4ZWxzID0gMDsKLSAgICBpZiAoIXBhcnNlUGFnZVNpemVQYXJhbWV0ZXJzKGFyZ3Vt
ZW50cywgMCwgJnBhZ2VXaWR0aEluUGl4ZWxzLCAmcGFnZUhlaWdodEluUGl4ZWxzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5t
YWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViUHJp
bnRQYXJhbXMgcHJpbnRQYXJhbXMoV2ViU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdo
dEluUGl4ZWxzKSk7Ci0gICAgaW50IG51bWJlck9mUGFnZXMgPSBmcmFtZS0+cHJpbnRCZWdpbihw
cmludFBhcmFtcyk7Ci0gICAgZnJhbWUtPnByaW50RW5kKCk7Ci0gICAgcmVzdWx0LT5zZXQobnVt
YmVyT2ZQYWdlcyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xp
c3QoKTsKLSAgICBpbnQgbnVtYmVyT2ZSZXF1ZXN0cyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgaSsrKQotICAgICAgICBudW1iZXJPZlJlcXVlc3Rz
ICs9IHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5udW1iZXJPZlBlbmRp
bmdQZXJtaXNzaW9uUmVxdWVzdHMoKTsKLSAgICByZXN1bHQtPnNldChudW1iZXJPZlJlcXVlc3Rz
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9nRXJyb3JUb0NvbnNvbGUoY29u
c3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGlk
QWRkTWVzc2FnZVRvQ29uc29sZSgKLSAgICAgICAgV2ViQ29uc29sZU1lc3NhZ2UoV2ViQ29uc29s
ZU1lc3NhZ2U6OkxldmVsRXJyb3IsIFdlYlN0cmluZzo6ZnJvbVVURjgodGV4dCkpLAotICAgICAg
ICBXZWJTdHJpbmcoKSwgMCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNb
MV0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hlbGwtPmRydERldlRvb2xz
QWdlbnQoKS0+ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihhcmd1bWVudHNbMF0udG9JbnQzMigpLCBh
cmd1bWVudHNbMV0udG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZmVlMDAwMCwgMHhmZjAwZWUw
MCwgMHhmZjAwMDAwMCwgMHhmZmMwYzBjMCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNb
MV0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1syXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIFdlYlZpZXc6OmFkZFVzZXJTY3JpcHQoCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmlu
Zyhhcmd1bWVudHNbMF0pLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpLAotICAgICAgICBhcmd1bWVu
dHNbMV0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudFN0
YXJ0IDogV2ViVmlldzo6VXNlclNjcmlwdEluamVjdEF0RG9jdW1lbnRFbmQsCi0gICAgICAgIGFy
Z3VtZW50c1syXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5BbGxG
cmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluVG9wRnJhbWVPbmx5KTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1sw
XS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBXZWJWaWV3OjphZGRVc2VyU3R5bGVTaGVldCgKLSAgICAgICAgY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCi0gICAgICAgIGFy
Z3VtZW50c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5BbGxG
cmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluVG9wRnJhbWVPbmx5LAotICAgICAg
ICAvLyBDaHJvbWl1bSBkZWZhdWx0cyB0byBJbmplY3RJblN1YnNlcXVlbnREb2N1bWVudHMsIGJ1
dCBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyB3aXRoIHRoZSBvdGhlciBwb3J0cycgRFJU
cywgd2UgdXNlIFVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMuCi0gICAgICAgIFdl
YlZpZXc6OlVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDYgfHwgIWFyZ3VtZW50c1sw
XS5pc0Jvb2woKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5p
c0Jvb2woKSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1s0XS5pc0Jv
b2woKSB8fCAhYXJndW1lbnRzWzVdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFdlYkRldmljZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIG9yaWVudGF0aW9uLnNldE51
bGwoZmFsc2UpOwotICAgIGlmIChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpCi0gICAgICAgIG9y
aWVudGF0aW9uLnNldEFscGhhKGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsKLSAgICBpZiAoYXJn
dW1lbnRzWzJdLnRvQm9vbGVhbigpKQotICAgICAgICBvcmllbnRhdGlvbi5zZXRCZXRhKGFyZ3Vt
ZW50c1szXS50b0RvdWJsZSgpKTsKLSAgICBpZiAoYXJndW1lbnRzWzRdLnRvQm9vbGVhbigpKQot
ICAgICAgICBvcmllbnRhdGlvbi5zZXRHYW1tYShhcmd1bWVudHNbNV0udG9Eb3VibGUoKSk7Ci0K
LSAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBjYWxsIHNldE9yaWVudGF0aW9uIG9uIHRoZSBtYWlu
IHBhZ2UncyBtb2NrIHNpbmNlIHRoaXMgaXMgYWxsIHRoYXQgdGhlCi0gICAgLy8gdGVzdHMgcmVx
dWlyZS4gSWYgbmVjZXNzYXJ5LCB3ZSBjb3VsZCBnZXQgYSBsaXN0IG9mIFdlYlZpZXdIb3N0cyBm
cm9tIHRoZSBUZXN0U2hlbGwgYW5kCi0gICAgLy8gY2FsbCBzZXRPcmllbnRhdGlvbiBvbiBlYWNo
IERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay4KLSAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgp
LT5kZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKS0+c2V0T3JpZW50YXRpb24ob3JpZW50YXRp
b24pOwotfQotCi0vLyBGSVhNRTogRm9yIGdyZWF0ZXIgdGVzdCBmbGV4aWJpbGl0eSwgd2Ugc2hv
dWxkIGJlIGFibGUgdG8gc2V0IGVhY2ggcGFnZSdzIGdlb2xvY2F0aW9uIG1vY2sgaW5kaXZpZHVh
bGx5LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMzY4Ci12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFZlY3RvcjxXZWJWaWV3SG9z
dCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0KCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgaSsrKQotICAgICAgICB3aW5kb3dMaXN0W2ld
LT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UGVybWlzc2lvbihhcmd1bWVudHNbMF0udG9C
b29sZWFuKCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5p
c051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIFZlY3RvcjxXZWJWaWV3SG9zdCo+IHdpbmRvd0xpc3QgPSBtX3NoZWxsLT53aW5kb3dMaXN0
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dMaXN0LnNpemUoKTsgaSsrKQot
ICAgICAgICB3aW5kb3dMaXN0W2ldLT5nZW9sb2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRp
b24oYXJndW1lbnRzWzBdLnRvRG91YmxlKCksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpLCBhcmd1
bWVudHNbMl0udG9Eb3VibGUoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1l
bnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8V2ViVmlld0hv
c3QqPiB3aW5kb3dMaXN0ID0gbV9zaGVsbC0+d2luZG93TGlzdCgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7IGkrKykKLSAgICAgICAgd2luZG93TGlzdFtp
XS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldEVycm9yKGFyZ3VtZW50c1swXS50b0ludDMy
KCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3Vt
ZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrKCkp
Ci0gICAgICAgIGNvbnRyb2xsZXItPmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgYXJndW1lbnRzWzFdLnRvRG91YmxlKCksIGNwcFZh
cmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zcGVlY2hJbnB1dENvbnRy
b2xsZXJNb2NrKCkpCi0gICAgICAgIGNvbnRyb2xsZXItPnNldER1bXBSZWN0KGFyZ3VtZW50c1sw
XS52YWx1ZS5ib29sVmFsdWUpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0NSSVBURURfU1BF
RUNIKQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9u
UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVy
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChNb2NrV2ViU3BlZWNoUmVjb2duaXplciog
cmVjb2duaXplciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPm1vY2tTcGVlY2hSZWNvZ25pemVy
KCkpCi0gICAgICAgIHJlY29nbml6ZXItPmFkZE1vY2tSZXN1bHQoY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1swXSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3Vt
ZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiByZWNvZ25pemVyID0g
bV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+bW9ja1NwZWVjaFJlY29nbml6ZXIoKSkKLSAgICAgICAg
cmVjb2duaXplci0+c2V0RXJyb3IoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgY3BwVmFyaWFudFRv
V2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgaWYg
KE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiByZWNvZ25pemVyID0gbV9zaGVsbC0+d2ViVmlld0hv
c3QoKS0+bW9ja1NwZWVjaFJlY29nbml6ZXIoKSkKLSAgICAgICAgcmVzdWx0LT5zZXQocmVjb2du
aXplci0+d2FzQWJvcnRlZCgpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRWxlbWVudCBl
bGVtZW50OwotICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZh
bHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYklu
cHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7Ci0gICAgaWYg
KCFpbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hJbnB1
dEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXQtPnN0YXJ0U3BlZWNoSW5w
dXQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmxheWVyVHJlZUFzVGV4
dChtX3Nob3dEZWJ1Z0xheWVyVHJlZSkudXRmOCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
cywgQ3BwVmFyaWFudCopCi17Ci0gICAgaW50IG51bVRpbWVzOwotICAgIGlmIChhcmdzLnNpemUo
KSA9PSAxIHx8ICFhcmdzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIG51bVRpbWVzID0gMTsKLSAg
ICBlbHNlCi0gICAgICAgIG51bVRpbWVzID0gYXJnc1swXS50b0ludDMyKCk7Ci0gICAgbV9zaGVs
bC0+d2ViVmlldygpLT5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgV2ViRWxlbWVudCBl
bGVtZW50OwotICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJnc1swXS52YWx1ZS5v
YmplY3RWYWx1ZSwgJmVsZW1lbnQpKQotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBl
bHNlCi0gICAgICAgIHJlc3VsdC0+c2V0KGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpLT5tYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCkudXRmOCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAh
YXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkZpbmRP
cHRpb25zIGZpbmRPcHRpb25zOwotICAgIGJvb2wgd3JhcEFyb3VuZCA9IGZhbHNlOwotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID49IDIpIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBv
cHRpb25zQXJyYXkgPSBhcmd1bWVudHNbMV0udG9TdHJpbmdWZWN0b3IoKTsKLSAgICAgICAgZmlu
ZE9wdGlvbnMubWF0Y2hDYXNlID0gdHJ1ZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9wdGlvbnNBcnJheS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG9wdGlvbiA9IG9wdGlvbnNBcnJheVtpXTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBT
dXBwb3J0IGFsbCB0aGUgb3B0aW9ucywgc28gd2UgY2FuIHJ1biBmaW5kU3RyaW5nLmh0bWwgdG9v
LgotICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSAiQ2FzZUluc2Vuc2l0aXZlIikKLSAgICAgICAg
ICAgICAgICBmaW5kT3B0aW9ucy5tYXRjaENhc2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKG9wdGlvbiA9PSAiQmFja3dhcmRzIikKLSAgICAgICAgICAgICAgICBmaW5kT3B0aW9ucy5m
b3J3YXJkID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gIldyYXBBcm91
bmQiKQotICAgICAgICAgICAgICAgIHdyYXBBcm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUo
KTsKLSAgICBjb25zdCBib29sIGZpbmRSZXN1bHQgPSBmcmFtZS0+ZmluZCgwLCBjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgZmluZE9wdGlvbnMsIHdyYXBBcm91bmQsIDApOwot
ICAgIHJlc3VsdC0+c2V0KGZpbmRSZXN1bHQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldE1p
bmltdW1UaW1lckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2wo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50OwotICAgIGlmICgh
V2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAm
ZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQg
PSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW5wdXQtPnNldEF1dG9maWxsZWQoYXJndW1lbnRzWzFdLnZhbHVlLmJv
b2xWYWx1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNl
cihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdl
YkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVs
ZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0g
dG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlucHV0LT5zZXRWYWx1ZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1l
bnRzWzFdKSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCopCi17Ci0gICAgLy8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCi17Ci0gICAgLy8gTm90IEltcGxlbWVudGVkCi19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KikKLXsKLSAgICAvLyBO
b3QgSW1wbGVtZW50ZWQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KikKLXsKLSAgICAvLyBOb3QgSW1wbGVtZW50ZWQKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKLXsKLSAgICAvLyBOb3QgSW1wbGVtZW50ZWQKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKLXsKLSAgICAvLyBOb3QgSW1wbGVtZW50ZWQKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFu
ZGxpbmdCZWZvcmVVbmxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxICYmIGFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGlu
Z0JlZm9yZVVubG9hZCA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKLQotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVGaXhlZExh
eW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8ICAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBi
b29sIGVuYWJsZUZpeGVkTGF5b3V0ID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwotICAgIG1f
c2hlbGwtPndlYlZpZXcoKS0+ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGVuYWJsZUZpeGVkTGF5b3V0
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Rml4ZWRMYXlvdXRTaXplKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMiB8fCAh
YXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaW50IHdpZHRoID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAg
ICBpbnQgaGVpZ2h0ID0gYXJndW1lbnRzWzFdLnRvSW50MzIoKTsKLSAgICBtX3NoZWxsLT53ZWJW
aWV3KCktPnNldEZpeGVkTGF5b3V0U2l6ZShXZWJTaXplKHdpZHRoLCBoZWlnaHQpKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VsZWN0aW9uQXNNYXJrdXAoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5zZWxlY3Rpb25Bc01hcmt1cCgp
LnV0ZjgoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENv
dW50KENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxp
bnQ+KFdlYldvcmtlckluZm86OmRlZGljYXRlZFdvcmtlckNvdW50KCkpKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOwotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY3R4ID0gbV9zaGVsbC0+
d2ViVmlldygpLT5tYWluRnJhbWUoKS0+bWFpbldvcmxkU2NyaXB0Q29udGV4dCgpOwotICAgIHJl
c3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFzTWFy
a3VwKCkudXRmOCgpKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY3Njb3BlKGN0eCk7Ci0KLSAg
ICBXZWJLaXQ6OldlYkludGVudFJlcXVlc3QqIHJlcXVlc3QgPSBtX3NoZWxsLT53ZWJWaWV3SG9z
dCgpLT5jdXJyZW50SW50ZW50UmVxdWVzdCgpOwotICAgIGlmIChyZXF1ZXN0LT5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSkgewotICAg
ICAgICBXZWJLaXQ6OldlYkNTdHJpbmcgcmVwbHkgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzBdKS51dGY4KCk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OHZhbHVl
ID0gdjg6OlN0cmluZzo6TmV3KHJlcGx5LmRhdGEoKSwgcmVwbHkubGVuZ3RoKCkpOwotICAgICAg
ICByZXF1ZXN0LT5wb3N0UmVzdWx0KFdlYktpdDo6V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpz
ZXJpYWxpemUodjh2YWx1ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OHZhbHVlID0gdjg6OlN0cmluZzo6TmV3KCJFUlJPUiIpOwotICAgICAgICByZXF1
ZXN0LT5wb3N0RmFpbHVyZShXZWJLaXQ6OldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6c2VyaWFs
aXplKHY4dmFsdWUpKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8ICAzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgc2Nv
cGU7Ci0gICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjdHggPSBtX3NoZWxsLT53ZWJWaWV3KCkt
Pm1haW5GcmFtZSgpLT5tYWluV29ybGRTY3JpcHRDb250ZXh0KCk7Ci0gICAgcmVzdWx0LT5zZXQo
bV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+c2VsZWN0aW9uQXNNYXJrdXAoKS51dGY4
KCkpOwotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjc2NvcGUoY3R4KTsKLQotICAgIFdlYlN0cmlu
ZyBhY3Rpb24gPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKTsKLSAgICBXZWJT
dHJpbmcgdHlwZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pOwotICAgIFdl
YktpdDo6V2ViQ1N0cmluZyBkYXRhID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sy
XSkudXRmOCgpOwotICAgIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkRGF0YSA9
IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKAotICAgICAgICB2ODo6U3RyaW5n
OjpOZXcoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpKTsKLQotICAgIFdlYkludGVudCBpbnRl
bnQgPSBXZWJJbnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIHNlcmlhbGl6ZWREYXRhLnRvU3Ry
aW5nKCksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCkpOwot
Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+ZGVsaXZlckludGVudChpbnRl
bnQsIDAsIG1faW50ZW50Q2xpZW50LmdldCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5E
Uk9JRCkKLSAgICAvLyBTaW5jZSBGb250Q29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhIHZhcmlhYmxl
IHRvIGNvbnRyb2wgc3VicGl4ZWwgcG9zaXRpb25pbmcsIHdlJ2xsIGZhbGwgYmFjawotICAgIC8v
IHRvIHNldHRpbmcgaXQgZ2xvYmFsbHkgZm9yIGFsbCBmb250cy4KLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBXZWJGb250UmVu
ZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFs
dWUpOwotI2VuZGlmCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWNsYXNzIEludm9rZUNh
bGxiYWNrVGFzayA6IHB1YmxpYyBNZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVyPiB7Ci1w
dWJsaWM6Ci0gICAgSW52b2tlQ2FsbGJhY2tUYXNrKExheW91dFRlc3RDb250cm9sbGVyKiBvYmpl
Y3QsIFBhc3NPd25BcnJheVB0cjxDcHBWYXJpYW50PiBjYWxsYmFja0FyZ3VtZW50cywgdWludDMy
X3QgbnVtYmVyT2ZBcmd1bWVudHMpCi0gICAgICAgIDogTWV0aG9kVGFzazxMYXlvdXRUZXN0Q29u
dHJvbGxlcj4ob2JqZWN0KQotICAgICAgICAsIG1fY2FsbGJhY2tBcmd1bWVudHMoY2FsbGJhY2tB
cmd1bWVudHMpCi0gICAgICAgICwgbV9udW1iZXJPZkFyZ3VtZW50cyhudW1iZXJPZkFyZ3VtZW50
cykKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKQotICAgIHsK
LSAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7Ci0gICAgICAgIG1fY2FsbGJhY2tBcmd1
bWVudHNbMF0uaW52b2tlRGVmYXVsdChtX2NhbGxiYWNrQXJndW1lbnRzLmdldCgpLCBtX251bWJl
ck9mQXJndW1lbnRzLCBpbnZva2VSZXN1bHQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPd25B
cnJheVB0cjxDcHBWYXJpYW50PiBtX2NhbGxiYWNrQXJndW1lbnRzOwotICAgIHVpbnQzMl90IG1f
bnVtYmVyT2ZBcmd1bWVudHM7Ci19OwotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRC
YWNraW5nU2NhbGVGYWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3Vt
ZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGZsb2F0IHZhbHVlID0gYXJndW1lbnRzWzBdLnZhbHVlLmRvdWJs
ZVZhbHVlOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IodmFs
dWUpOwotCi0gICAgT3duQXJyYXlQdHI8Q3BwVmFyaWFudD4gY2FsbGJhY2tBcmd1bWVudHMgPSBh
ZG9wdEFycmF5UHRyKG5ldyBDcHBWYXJpYW50WzFdKTsKLSAgICBjYWxsYmFja0FyZ3VtZW50c1sw
XS5zZXQoYXJndW1lbnRzWzFdKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBwb3N0VGFz
ayhuZXcgSW52b2tlQ2FsbGJhY2tUYXNrKHRoaXMsIGNhbGxiYWNrQXJndW1lbnRzLnJlbGVhc2Uo
KSwgMSkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkp
IHsKLSAgICAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+cGx1Z2luc0VuYWJsZWQgPSBhcmd1
bWVudHNbMF0udG9Cb29sZWFuKCk7Ci0gICAgICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVyZW5jZXMo
KTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNl
dFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgdHJ1ZSk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAg
ICAgIHN0cmluZyBuZXdWaXNpYmlsaXR5ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAg
ICAgIGlmIChuZXdWaXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKLSAgICAgICAgICAgIG1fc2hlbGwt
PndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNp
YmxlLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gImhpZGRlbiIp
Ci0gICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQ
YWdlVmlzaWJpbGl0eVN0YXRlSGlkZGVuLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5ld1Zp
c2liaWxpdHkgPT0gInByZXJlbmRlciIpCi0gICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCkt
PnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyLCBmYWxz
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInByZXZpZXciKQotICAgICAg
ICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2li
aWxpdHlTdGF0ZVByZXZpZXcsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCi17Ci0gICAg
Ly8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRl
eHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gTWFwIGEgZGlyZWN0aW9uIG5hbWUgdG8gYSBXZWJUZXh0RGlyZWN0aW9uIHZhbHVl
LgotICAgIHN0ZDo6c3RyaW5nIGRpcmVjdGlvbk5hbWUgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKLSAgICBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgIGlmIChkaXJl
Y3Rpb25OYW1lID09ICJhdXRvIikKLSAgICAgICAgZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJUZXh0
RGlyZWN0aW9uRGVmYXVsdDsKLSAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJydGwiKQot
ICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25SaWdodFRvTGVmdDsK
LSAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJsdHIiKQotICAgICAgICBkaXJlY3Rpb24g
PSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25MZWZ0VG9SaWdodDsKLSAgICBlbHNlCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGV4dERpcmVjdGlvbihkaXJl
Y3Rpb24pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdWRpb0RhdGEoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAh
YXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNr
IHRoYXQgcGFzc2VkLWluIG9iamVjdCBpcywgaW4gZmFjdCwgYW4gQXJyYXlCdWZmZXJWaWV3Lgot
ICAgIE5QT2JqZWN0KiBucG9iamVjdCA9IE5QVkFSSUFOVF9UT19PQkpFQ1QoYXJndW1lbnRzWzBd
KTsKLSAgICBpZiAoIW5wb2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFXZWJCaW5k
aW5nczo6Z2V0QXJyYXlCdWZmZXJWaWV3KG5wb2JqZWN0LCAmbV9hdWRpb0RhdGEpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzZXRTaG91bGREdW1wQXNBdWRpbyh0cnVlKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMSB8fCAhYXJn
dW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9oYXNDdXN0b21GdWxs
U2NyZWVuQmVoYXZpb3IgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7Ci19Ci0KLSNpZiBFTkFC
TEUoUE9JTlRFUl9MT0NLKQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlkTG9zZVBvaW50
ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5kaWRMb3NlUG9pbnRlckxvY2soKTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9pbnRl
ckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5zZXRQb2ludGVy
TG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNo
cm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJv
bm91c2x5KCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6dGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNCB8fCAhYXJndW1lbnRzWzBdLmlzT2Jq
ZWN0KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFdlYk5vZGUgbm9kZTsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXROb2RlKGFyZ3VtZW50c1sw
XS52YWx1ZS5vYmplY3RWYWx1ZSwgJm5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bm9kZS5pc051bGwoKSB8fCAhbm9kZS5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYlBvaW50IHBvaW50KGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1syXS50
b0ludDMyKCkpOwotICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IGFyZ3VtZW50c1szXS50b0ludDMy
KCk7Ci0KLSAgICBXZWJTdXJyb3VuZGluZ1RleHQgc3Vycm91bmRpbmdUZXh0OwotICAgIHN1cnJv
dW5kaW5nVGV4dC5pbml0aWFsaXplKG5vZGUsIHBvaW50LCBtYXhMZW5ndGgpOwotICAgIGlmIChz
dXJyb3VuZGluZ1RleHQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdC0+
c2V0KHN1cnJvdW5kaW5nVGV4dC50ZXh0Q29udGVudCgpLnV0ZjgoKSk7Ci19CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmgJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXdlbCBIYWpkYW4gKHBoYWpkYW4uanJAY2hyb21pdW0u
b3JnKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qCi0gIExheW91dFRlc3RDb250cm9sbGVyIGNsYXNzOgotICBCb3VuZCB0byBhIEphdmFTY3Jp
cHQgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyIG9iamVjdCB1c2luZyB0aGUKLSAgQ3BwQm91
bmRDbGFzczo6YmluZFRvSmF2YXNjcmlwdCgpLCB0aGlzIGFsbG93cyBsYXlvdXQgdGVzdHMgdGhh
dCBhcmUgcnVuIGluCi0gIHRoZSB0ZXN0X3NoZWxsIChvciwgaW4gcHJpbmNpcGxlLCBhbnkgd2Vi
IHBhZ2UgbG9hZGVkIGludG8gYSBjbGllbnQgYXBwIGJ1aWx0Ci0gIHdpdGggdGhpcyBjbGFzcykg
dG8gY29udHJvbCB2YXJpb3VzIGFzcGVjdHMgb2YgaG93IHRoZSB0ZXN0cyBhcmUgcnVuIGFuZCB3
aGF0Ci0gIHNvcnQgb2Ygb3V0cHV0IHRoZXkgcHJvZHVjZS4KLSovCi0KLSNpZm5kZWYgTGF5b3V0
VGVzdENvbnRyb2xsZXJfaAotI2RlZmluZSBMYXlvdXRUZXN0Q29udHJvbGxlcl9oCi0KLSNpbmNs
dWRlICJUZXN0UnVubmVyLmgiCi0KLWNsYXNzIFRlc3RTaGVsbDsKLQotY2xhc3MgTGF5b3V0VGVz
dENvbnRyb2xsZXIgOiBwdWJsaWMgVGVzdFJ1bm5lciB7Ci1wdWJsaWM6Ci0gICAgLy8gQnVpbGRz
IHRoZSBwcm9wZXJ0eSBhbmQgbWV0aG9kIGxpc3RzIG5lZWRlZCB0byBiaW5kIHRoaXMgY2xhc3Mg
dG8gYSBKUwotICAgIC8vIG9iamVjdC4KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlcihUZXN0U2hl
bGwqKTsKLQotICAgIH5MYXlvdXRUZXN0Q29udHJvbGxlcigpOwotCi0gICAgLy8gVGhpcyBmdW5j
dGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgcGFnZXMg
YXMKLSAgICAvLyBwbGFpbiB0ZXh0LCByYXRoZXIgdGhhbiBhcyBhIHRleHQgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHJlbmRlcmVyJ3Mgc3RhdGUuCi0gICAgLy8gSXQgdGFrZXMgYW4gb3B0aW9uYWwg
YXJndW1lbnQsIHdoZXRoZXIgdG8gZHVtcCBwaXhlbHMgcmVzdWx0cyBvciBub3QuCi0gICAgdm9p
ZCBkdW1wQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHNldCBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9z
aGVsbCB0byBwcmludCBhIGxpbmUKLSAgICAvLyBvZiBkZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNo
IGRhdGFiYXNlIGNvbW1hbmQuIEl0IHNob3VsZCB0YWtlIG5vCi0gICAgLy8gYXJndW1lbnRzLCBh
bmQgaWdub3JlIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LiBIb3dldmVyLCBhdCB0aGUgbW9tZW50
LCB3ZQotICAgIC8vIGRvbid0IGhhdmUgYW55IERCIGZ1bmN0aW9uIHRoYXQgcHJpbnRzIG1lc3Nh
Z2VzLCBzbyBmb3Igbm93IHRoaXMgZnVuY3Rpb24KLSAgICAvLyBkb2Vzbid0IGRvIGFueXRoaW5n
LgotICAgIHZvaWQgZHVtcERhdGFiYXNlQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0
ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyBkZXNjcmlwdGl2
ZSB0ZXh0IGZvciBlYWNoIGVkaXRpbmcgY29tbWFuZC4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBh
bmQKLSAgICAvLyBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVt
cEVkaXRpbmdDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3No
ZWxsIHRvIHByaW50IGEgbGluZSBvZgotICAgIC8vIGRlc2NyaXB0aXZlIHRleHQgZm9yIGVhY2gg
ZnJhbWUgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQKLSAgICAvLyBp
Z25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcEZyYW1lTG9hZENh
bGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJp
bnQgYSBsaW5lIG9mCi0gICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgdGhlIHByb2dyZXNzIGZp
bmlzaGVkIGNhbGxiYWNrLiBJdCB0YWtlcyBubwotICAgIC8vIGFyZ3VtZW50cywgYW5kIGlnbm9y
ZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wUHJvZ3Jlc3NGaW5pc2hl
ZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBw
cmludCBhIGxpbmUgb2YKLSAgICAvLyB1c2VyIGdlc3R1cmUgc3RhdHVzIHRleHQgZm9yIHNvbWUg
ZnJhbWUgbG9hZCBjYWxsYmFja3MuIEl0IHRha2VzIG5vCi0gICAgLy8gYXJndW1lbnRzLCBhbmQg
aWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBVc2VyR2VzdHVy
ZUluRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVz
dF9zaGVsbCB0byBwcmludCBvdXQgYSB0ZXh0Ci0gICAgLy8gcmVwcmVzZW50YXRpb24gb2YgdGhl
IGJhY2svZm9yd2FyZCBsaXN0LiBJdCBpZ25vcmVzIGFsbCBhcmd1bWVudHMuCi0gICAgdm9pZCBk
dW1wQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9z
aGVsbCB0byBwcmludCBvdXQgdGhlCi0gICAgLy8gc2Nyb2xsIG9mZnNldHMgb2YgdGhlIGNoaWxk
IGZyYW1lcy4gSXQgaWdub3JlcyBhbGwuCi0gICAgdm9pZCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBv
c2l0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcmVj
dXJzaXZlbHkKLSAgICAvLyBkdW1wIGFsbCBmcmFtZXMgYXMgcGxhaW4gdGV4dCBpZiB0aGUgZHVt
cEFzVGV4dCBmbGFnIGlzIHNldC4KLSAgICAvLyBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBp
Z25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcENoaWxkRnJhbWVz
QXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICAKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8g
ZHVtcCBhIGRlc2NyaXB0aXZlCi0gICAgLy8gbGluZSBmb3IgZWFjaCByZXNvdXJjZSBsb2FkIGNh
bGxiYWNrLiBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzCi0gICAgLy8gYW55IHRo
YXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsgICAgCi0gICAgCi0gICAgLy8gVGhp
cyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAg
dGhlIE1JTUUgdHlwZQotICAgIC8vIGZvciBlYWNoIHJlc291cmNlIHRoYXQgd2FzIGxvYWRlZC4g
SXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkKLSAgICAvLyB0aGF0IG1heSBi
ZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBz
ZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYWxsIGNhbGxzCi0g
ICAgLy8gdG8gd2luZG93LnN0YXR1cygpLgotICAgIC8vIEl0IHRha2VzIG5vIGFyZ3VtZW50cywg
YW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wV2luZG93
U3RhdHVzQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwg
dG8gZHVtcCBhbGwgY2FsbHMgdG8KLSAgICAvLyBXZWJWaWV3Q2xpZW50OjpjcmVhdGVWaWV3KCku
Ci0gICAgLy8gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkg
YmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBDcmVhdGVWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFdoZW4gY2FsbGVkIHdpdGggYSBib29sZWFuIGFy
Z3VtZW50LCB0aGlzIHNldHMgYSBmbGFnIHRoYXQgY29udHJvbHMKLSAgICAvLyB3aGV0aGVyIGNv
bnRlbnQtZWRpdGFibGUgZWxlbWVudHMgYWNjZXB0IGVkaXRpbmcgZm9jdXMgd2hlbiBhbiBlZGl0
aW5nCi0gICAgLy8gYXR0ZW1wdCBpcyBtYWRlLiBJdCBpZ25vcmVzIGFueSBhZGRpdGlvbmFsIGFy
Z3VtZW50cy4KLSAgICB2b2lkIHNldEFjY2VwdHNFZGl0aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHdp
bmRvd3MuIEJ5IGRlZmF1bHQgd2UgYmxvY2sgYWxsIG5ldyB3aW5kb3dzLgotICAgIHZvaWQgd2lu
ZG93Q291bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIHRlc3RzIGVu
ZCB3aGVuIHBhZ2UgbG9hZCBpcyBjb21wbGV0ZS4gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZAotICAg
IC8vIHRvIGRlbGF5IHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0ZXN0IHVudGlsIG5vdGlmeURvbmUg
aXMgY2FsbGVkLgotICAgIHZvaWQgd2FpdFVudGlsRG9uZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBub3RpZnlEb25lKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIE1ldGhvZHMgZm9yIGFkZGluZyBhY3Rpb25zIHRv
IHRoZSB3b3JrIHF1ZXVlLiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKLSAgICAvLyB3YWl0VW50
aWxEb25lL25vdGlmeURvbmUgYWJvdmUuCi0gICAgdm9pZCBxdWV1ZUJhY2tOYXZpZ2F0aW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlRm9yd2Fy
ZE5hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgcXVldWVSZWxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgcXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBxdWV1ZUxvYWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBBbHRob3VnaCB0aGlzIGlz
IG5hbWVkICJvYmpDIiB0byBtYXRjaCB0aGUgTWFjIHZlcnNpb24sIGl0IGFjdHVhbGx5IHRlc3Rz
Ci0gICAgLy8gdGhlIGlkZW50aXR5IG9mIGl0cyB0d28gYXJndW1lbnRzIGluIEMrKy4KLSAgICB2
b2lkIG9iakNJZGVudGl0eUlzRXF1YWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gQ2hhbmdlcyB0aGUgY29va2llIHBvbGljeSBmcm9tIHRoZSBkZWZhdWx0
IHRvIGFsbG93IGFsbCBjb29raWVzLgotICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDaGFuZ2VzIGFz
eW5jaHJvbm91cyBzcGVsbGNoZWNraW5nIGZsYWcgb24gdGhlIHNldHRpbmdzLgotICAgIHZvaWQg
c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93LgotICAgIHZv
aWQgc2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0KLSAgICAvLyBHaXZlcyBmb2N1cyB0byB0aGUgd2luZG93LgotICAgIHZvaWQg
c2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0g
ICAgLy8gTWV0aG9kIHRoYXQgY29udHJvbHMgd2hldGhlciBwcmVzc2luZyBUYWIga2V5IGN5Y2xl
cyB0aHJvdWdoIHBhZ2UgZWxlbWVudHMKLSAgICAvLyBvciBpbnNlcnRzIGEgJ1x0JyBjaGFyIGlu
IHRleHQgYXJlYQotICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFBhc3NlcyB0aHJvdWdo
IHRvIFdlYlByZWZlcmVuY2VzIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBoYXZlIGEgY3VzdG9t
Ci0gICAgLy8gc3R5bGUgc2hlZXQuCi0gICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICAvLyBQYXNzZXMgdGhpcyBwcmVmZXJlbmNlIHRocm91Z2ggdG8gV2ViU2V0dGluZ3MuCi0g
ICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBQdXRzIFdlYmtpdCBpbiAiZGFzaGJvYXJkIGNv
bXBhdGliaWxpdHkgbW9kZSIsIHdoaWNoIGlzIHVzZWQgaW4gb2JzY3VyZQotICAgIC8vIE1hYy1v
bmx5IGNpcmN1bXN0YW5jZXMuIEl0J3Mgbm90IHJlYWxseSBuZWNlc3NhcnksIGFuZCB3aWxsIG1v
c3QgbGlrZWx5Ci0gICAgLy8gbmV2ZXIgYmUgdXNlZCBieSBDaHJvbWUsIGJ1dCBzb21lIGxheW91
dCB0ZXN0cyBkZXBlbmQgb24gaXRzIHByZXNlbmNlLgotICAgIHZvaWQgc2V0VXNlRGFzaGJvYXJk
Q29tcGF0aWJpbGl0eU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgdm9pZCBzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gQ2F1c2VzIG5hdmlnYXRpb24gYWN0aW9ucyBqdXN0IHByaW50
b3V0IHRoZSBpbnRlbmRlZCBuYXZpZ2F0aW9uIGluc3RlYWQKLSAgICAvLyBvZiB0YWtpbmcgeW91
IHRvIHRoZSBwYWdlLiBUaGlzIGlzIHVzZWQgZm9yIGNhc2VzIGxpa2UgbWFpbHRvLCB3aGVyZSB5
b3UKLSAgICAvLyBkb24ndCBhY3R1YWxseSB3YW50IHRvIG9wZW4gdGhlIG1haWwgcHJvZ3JhbS4K
LSAgICB2b2lkIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIERlbGF5cyBjb21wbGV0aW9uIG9mIHRoZSB0ZXN0IHVu
dGlsIHRoZSBwb2xpY3kgZGVsZWdhdGUgcnVucy4KLSAgICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxl
Z2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVz
ZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIGNsZWFyIGNlcnRhaW4gaGVhZGVycy4KLSAgICB2b2lkIHNl
dFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIENhdXNlcyBXaWxsU2VuZFJlcXVlc3QgdG8gYmxvY2sgcmVkaXJl
Y3RzLgotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENhdXNlcyBXaWxs
U2VuZFJlcXVlc3QgdG8gcmV0dXJuIGFuIGVtcHR5IHJlcXVlc3QuCi0gICAgdm9pZCBzZXRXaWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICAvLyBDb252ZXJ0cyBhIFVSTCBzdGFydGluZyB3aXRoIGZpbGU6Ly8vdG1wLyB0
byB0aGUgbG9jYWwgbWFwcGluZy4KLSAgICB2b2lkIHBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gU2V0cyBhIGJvb2wgc3Vj
aCB0aGF0IHdoZW4gYSBkcmFnIGlzIHN0YXJ0ZWQsIHdlIGZpbGwgdGhlIGRyYWcgY2xpcGJvYXJk
Ci0gICAgLy8gd2l0aCBhIGZha2UgZmlsZSBvYmplY3QuCi0gICAgdm9pZCBhZGRGaWxlVG9QYXN0
ZWJvYXJkT25EcmFnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIEV4ZWN1dGVzIGFuIGludGVybmFsIGNvbW1hbmQgKHN1cGVyc2V0IG9mIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCkgY29tbWFuZHMpLgotICAgIHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2hlY2tzIGlmIGFuIGludGVybmFs
IGNvbW1hbmQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS4KLSAgICB2b2lkIGlzQ29tbWFuZEVuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gU2V0IHRo
ZSBXZWJQcmVmZXJlbmNlIHRoYXQgY29udHJvbHMgd2Via2l0J3MgcG9wdXAgYmxvY2tpbmcuCi0g
ICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBJZiB0cnVlLCBjYXVzZXMgcHJvdmlzaW9uYWwgZnJhbWUg
bG9hZHMgdG8gYmUgc3RvcHBlZCBmb3IgdGhlIHJlbWFpbmRlciBvZgotICAgIC8vIHRoZSB0ZXN0
LgotICAgIHZvaWQgc2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzbWFydCBp
bnNlcnQvZGVsZXRlLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICB2b2lkIHNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHNlbGVj
dGlvbiBvbiBkb3VibGUgY2xpY2suCi0gICAgdm9pZCBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZv
aWQgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBlbmFibGVBdXRvUmVzaXplTW9kZShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkaXNhYmxlQXV0b1Jl
c2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGRpc2FibGVJbWFnZUxvYWRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVj
dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSNpZiBFTkFCTEUoTk9U
SUZJQ0FUSU9OUykKLSAgICAvLyBHcmFudHMgcGVybWlzc2lvbiBmb3IgZGVza3RvcCBub3RpZmlj
YXRpb25zIHRvIGFuIG9yaWdpbgotICAgIHZvaWQgZ3JhbnREZXNrdG9wTm90aWZpY2F0aW9uUGVy
bWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8gU2lt
dWxhdGVzIGEgY2xpY2sgb24gYSBkZXNrdG9wIG5vdGlmaWNhdGlvbi4KLSAgICB2b2lkIHNpbXVs
YXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gRGVhbHMgd2l0aCBXZWIgQXVkaW8gV0FWIGZpbGUgZGF0
YS4KLSAgICB2b2lkIHNldEF1ZGlvRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcmIGF1ZGlvRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9EYXRhOyB9IAotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBh
cmUgb25seSBzdHVicy4KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFueSBvZiB0aGVzZSB0aGF0
IGFyZSBuZWVkZWQgdG8gcGFzcyB0aGUgbGF5b3V0IHRlc3RzLgotICAgIHZvaWQgZHVtcEFzV2Vi
QXJjaGl2ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBk
dW1wVGl0bGVDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlzcGxheShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdGVzdFJlcGFpbnQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcmVwYWludFN3ZWVw
SG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGNsZWFyQmFja0ZvcndhcmRMaXN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGtlZXBXZWJIaXN0b3J5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHN0b3JlV2ViU2NyaXB0T2JqZWN0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9i
amVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvYmpD
Q2xhc3NOYW1lT2YoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgYWRkRGlzYWxsb3dlZFVSTChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3cyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZv
aWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvdmVycmlkZVByZWZlcmVuY2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNj
ZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlP
cmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhl
IGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIG5vbmV4aXN0ZW50IG1ldGhvZCBpcyBj
YWxsZWQgb24KLSAgICAvLyB0aGUgbGF5b3V0IHRlc3QgY29udHJvbGxlciBvYmplY3QuCi0gICAg
Ly8gSXQgaXMgdXNlZnVsbCB0byBjYXRjaCB0eXBvcyBpbiB0aGUgSmF2YVNjcmlwdCBjb2RlIChh
IGZldyBsYXlvdXQgdGVzdHMKLSAgICAvLyBkbyBoYXZlIHR5cG9zIGluIHRoZW0pIGFuZCBpdCBh
bGxvd3MgdGhlIHNjcmlwdCB0byBjb250aW51ZSBydW5uaW5nIGluCi0gICAgLy8gdGhhdCBjYXNl
IChhcyB0aGUgTWFjIGRvZXMpLgotICAgIHZvaWQgZmFsbGJhY2tNZXRob2QoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQWxsb3dzIGxheW91dCB0ZXN0cyB0
byBtYW5hZ2Ugb3JpZ2lucycgd2hpdGVsaXN0aW5nLgotICAgIHZvaWQgYWRkT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2xlYXJzIGFsbCBhcHBsaWNhdGlvbiBjYWNo
ZXMuCi0gICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICAvLyBDbGVhcnMgYW4gYXBwbGljYXRpb24gY2FjaGUg
Zm9yIGFuIG9yaWdpbi4KLSAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8gUmV0dXJucyBvcmln
aW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMuCi0gICAgdm9pZCBvcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IC8vIFNldHMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIHF1b3RhIGZvciB0aGUgbG9jYWxob3N0IG9y
aWdpbi4KLSAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8gUmV0dXJucyBkaXNrIHVzYWdlIGJ5
IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KLSAgICB2b2lkIGFwcGxpY2F0
aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotCi0gICAgLy8gQ2xlYXJzIGFsbCBkYXRhYmFzZXMuCi0gICAgdm9pZCBjbGVhckFs
bERhdGFiYXNlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8g
U2V0cyB0aGUgZGVmYXVsdCBxdW90YSBmb3IgYWxsIG9yaWdpbnMKLSAgICB2b2lkIHNldERhdGFi
YXNlUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
Q2FsbHMgc2V0bG9jYWxlKExDX0FMTCwgLi4uKSBmb3IgYSBzcGVjaWZpZWQgbG9jYWxlLgotICAg
IC8vIFJlc2V0cyBiZXR3ZWVuIHRlc3RzLgotICAgIHZvaWQgc2V0UE9TSVhMb2NhbGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2F1c2VzIGxheW91dCB0
byBoYXBwZW4gYXMgaWYgdGFyZ2V0dGVkIHRvIHByaW50ZWQgcGFnZXMuCi0gICAgdm9pZCBzZXRQ
cmludGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBH
ZXRzIHRoZSBwYWdlIHNpemUgYW5kIG1hcmdpbnMgZm9yIGEgcHJpbnRlZCBwYWdlLgotICAgIHZv
aWQgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHBhZ2UgYm94
IGhhcyBjdXN0b20gcGFnZSBzaXplIHN0eWxlIGZvcgotICAgIC8vIHByaW50aW5nLgotICAgIHZv
aWQgaGFzQ3VzdG9tUGFnZVNpemVTdHlsZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0KLSAgICAvLyBHZXRzIHRoZSBwYWdlLXJlbGF0ZWQgcHJvcGVydHkgZm9yIHByaW50
ZWQgY29udGVudAotICAgIHZvaWQgcGFnZVByb3BlcnR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEdldHMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBiZSBw
cmludGVkLgotICAgIHZvaWQgbnVtYmVyT2ZQYWdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgZ2VvbG9jYXRpb24gcGVy
bWlzc2lvbnMgcmVxdWVzdHMgcGVuZGluZy4KLSAgICB2b2lkIG51bWJlck9mUGVuZGluZ0dlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gZXhlYyBzY3JpcHRzIGF0IFdl
Ykluc3BlY3RvciBzaWRlLgotICAgIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBGb3JjZXMgdGhlIHNlbGVj
dGlvbiBjb2xvcnMgZm9yIHRlc3RpbmcgdW5kZXIgTGludXguCi0gICAgdm9pZCBmb3JjZVJlZFNl
bGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBBZGRzIGEgdXNlciBzY3JpcHQgb3IgdXNlciBzdHlsZSBzaGVldCB0byBiZSBpbmplY3Rl
ZCBpbnRvIG5ldyBkb2N1bWVudHMuCi0gICAgdm9pZCBhZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIERldmljZU9yaWVu
dGF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zCi0gICAgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gR2VvbG9j
YXRpb24gcmVsYXRlZCBmdW5jdGlvbnMuCi0gICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJp
dHkgd2l0aCBvYmplY3QgbW9kZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENvbnRyb2xs
ZXIuCi0gICAgdm9pZCBhYm9ydE1vZGFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIFNwZWVjaCBpbnB1dCByZWxhdGVkIGZ1bmN0aW9ucy4KLSNpZiBFTkFC
TEUoSU5QVVRfU1BFRUNIKQotICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldE1vY2tTcGVlY2hJ
bnB1dER1bXBSZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSNlbmRp
ZgotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgdm9pZCBhZGRNb2NrU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgc2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgd2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0jZW5kaWYKLSAgICB2b2lk
IHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgdm9pZCBsYXllclRyZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBD
cHBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgdm9p
ZCBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgZmluZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0KLSAgICB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUg
YSBib29sZWFuLgotICAgIC8vIEZvcndhcmRzIHRoZSBzZXRBdXRvZmlsbGVkKCkgY2FsbCB0byB0
aGUgZWxlbWVudC4KLSAgICB2b2lkIHNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8g
YmUgYW4gaW5wdXQgZWxlbWVudCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIHN0cmlu
ZyB2YWx1ZS4KLSAgICAvLyBGb3J3YXJkcyB0aGUgc2V0VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0
aGUgZWxlbWVudC4KLSAgICB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBMb2NhbFN0b3JhZ2Ugb3JpZ2luLXJlbGF0ZWQK
LSAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VG
b3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc3luY0xvY2Fs
U3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBX
ZWJQZXJtaXNzaW9uQ2xpZW50IHJlbGF0ZWQuCi0gICAgdm9pZCBzZXRJbWFnZXNBbGxvd2VkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldFNjcmlwdHNB
bGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNl
dFN0b3JhZ2VBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldFBsdWdpbnNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHBs
dWdpbnMuCi0gICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBTd2l0Y2ggdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBh
Z2UuCi0gICAgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENoYW5nZXMgdGhlIGRpcmVjdGlvbiBv
ZiB0aGUgZm9jdXNlZCBlbGVtZW50LgotICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNldFNob3VsZFN0YXlP
blBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6ZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNlbGVjdGlv
bkFzTWFya3VwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IFN3aXRjaCB0aGUgbGluayBkZXRlY3Rpb24uCi0gICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZChib29sKTsKLQotI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCi0gICAgdm9p
ZCBkaWRMb3NlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxs
RmFpbEFzeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSNlbmRpZgotCi0gICAgdm9pZCB3b3JrZXJUaHJlYWRDb3VudChDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBFeHBlY3RzIG9uZSBzdHJpbmcgYXJndW1lbnQgZm9yIHNlbmRpbmcgc3VjY2Vzc2Z1bCBy
ZXN1bHQsIHplcm8KLSAgICAvLyBhcmd1bWVudHMgZm9yIHNlbmRpbmcgYSBmYWlsdXJlIHJlc3Vs
dC4KLSAgICB2b2lkIHNlbmRXZWJJbnRlbnRSZXNwb25zZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVzZSB0aGUgd2ViIGludGVudCB0byBiZSBkZWxp
dmVyZWQgdG8gdGhpcyBjb250ZXh0LgotICAgIHZvaWQgZGVsaXZlcldlYkludGVudChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFbmFibGVzIG9yIGRpc2Fi
bGVzIHN1YnBpeGVsIHBvc2l0aW9uaW5nIChpLmUuIGZyYWN0aW9uYWwgWCBwb3NpdGlvbnMgZm9y
Ci0gICAgLy8gZ2x5cGhzKSBpbiB0ZXh0IHJlbmRlcmluZyBvbiBMaW51eC4gU2luY2UgdGhpcyBt
ZXRob2QgY2hhbmdlcyBnbG9iYWwKLSAgICAvLyBzZXR0aW5ncywgdGVzdHMgdGhhdCBjYWxsIGl0
IG11c3QgdXNlIHRoZWlyIG93biBjdXN0b20gZm9udCBmYW1pbHkgZm9yCi0gICAgLy8gYWxsIHRl
eHQgdGhhdCB0aGV5IHJlbmRlci4gSWYgbm90LCBhbiBhbHJlYWR5LWNhY2hlZCBzdHlsZSB3aWxs
IGJlIHVzZWQsCi0gICAgLy8gcmVzdWx0aW5nIGluIHRoZSBjaGFuZ2VkIHNldHRpbmcgYmVpbmcg
aWdub3JlZC4KLSAgICB2b2lkIHNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFVzZWQgdG8gc2V0IHRoZSBkZXZp
Y2Ugc2NhbGUgZmFjdG9yLgotICAgIHZvaWQgc2V0QmFja2luZ1NjYWxlRmFjdG9yKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFJldHJpZXZlcyB0aGUgdGV4
dCBzdXJyb3VuZGluZyBhIHBvc2l0aW9uIGluIGEgdGV4dCBub2RlLgotICAgIC8vIEV4cGVjdHMg
dGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdGV4dCBub2RlLCB0aGUgc2Vjb25kIGFuZCB0aGly
ZCB0byBiZQotICAgIC8vIHBvaW50IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBub2RlIGFu
ZCB0aGUgZm91cnRoIHRoZSBtYXhpbXVtIHRleHQKLSAgICAvLyBsZW5ndGggdG8gcmV0cmlldmUu
Ci0gICAgdm9pZCB0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLQotcHVibGljOgotICAgIC8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUg
bm90IGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KLSAgICB2b2lkIHNldFdvcmtRdWV1ZUZyb3plbihi
b29sIGZyb3plbikgeyBtX3dvcmtRdWV1ZS5zZXRGcm96ZW4oZnJvemVuKTsgfQotCi0gICAgYm9v
bCBzaG91bGREdW1wQXNBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcEFzQXVkaW87IH0gCi0g
ICAgdm9pZCBzZXRTaG91bGREdW1wQXNBdWRpbyhib29sIGR1bXBBc0F1ZGlvKSB7IG1fZHVtcEFz
QXVkaW8gPSBkdW1wQXNBdWRpbzsgfSAKLSAgICBib29sIHNob3VsZER1bXBBc1RleHQoKSB7IHJl
dHVybiBtX2R1bXBBc1RleHQ7IH0KLSAgICB2b2lkIHNldFNob3VsZER1bXBBc1RleHQoYm9vbCB2
YWx1ZSkgeyBtX2R1bXBBc1RleHQgPSB2YWx1ZTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSB7IHJldHVybiBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzOyB9Ci0gICAgYm9v
bCBzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJv
b2wgdmFsdWUpIHsgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gdmFsdWU7IH0KLSAgICBib29s
IHNob3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSB7IHJldHVybiBtX2R1bXBQcm9n
cmVzc0ZpbmlzaGVkQ2FsbGJhY2s7IH0KLSAgICB2b2lkIHNldFNob3VsZER1bXBQcm9ncmVzc0Zp
bmlzaGVkQ2FsbGJhY2soYm9vbCB2YWx1ZSkgeyBtX2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJh
Y2sgPSB2YWx1ZTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRD
YWxsYmFja3MoKSB7IHJldHVybiBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
OyB9Ci0gICAgdm9pZCBzZXRTaG91bGREdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNr
cyhib29sIHZhbHVlKSB7IG1fZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSB2
YWx1ZTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpIHtyZXR1
cm4gbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOyB9Ci0gICAgdm9pZCBzZXRTaG91bGREdW1w
UmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1fZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMgPSB2YWx1ZTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMoKSB7cmV0dXJuIG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXM7
IH0KLSAgICBib29sIHNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSB7IHJldHVybiBtX2R1bXBX
aW5kb3dTdGF0dXNDaGFuZ2VzOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wU2VsZWN0aW9uUmVjdCgp
IHsgcmV0dXJuIG1fZHVtcFNlbGVjdGlvblJlY3Q7IH0KLSAgICBib29sIHNob3VsZER1bXBCYWNr
Rm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7IH0KLSAgICBib29s
IHNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0K
LSAgICBib29sIHNob3VsZER1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKCkgeyByZXR1cm4g
bV9kdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrczsgfQotICAgIGJvb2wgc2hvdWxkRHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xs
UG9zaXRpb25zOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSB7IHJl
dHVybiBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsgfQotICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVQ
aXhlbFJlc3VsdHMoKSB7IHJldHVybiBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzOyB9Ci0gICAgdm9p
ZCBzZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhib29sIHZhbHVlKSB7IG1fZ2VuZXJhdGVQ
aXhlbFJlc3VsdHMgPSB2YWx1ZTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcENyZWF0ZVZpZXcoKSB7
IHJldHVybiBtX2R1bXBDcmVhdGVWaWV3OyB9Ci0gICAgYm9vbCBhY2NlcHRzRWRpdGluZygpIHsg
cmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7IH0KLSAgICBib29sIGNhbk9wZW5XaW5kb3dzKCkgeyBy
ZXR1cm4gbV9jYW5PcGVuV2luZG93czsgfQotICAgIGJvb2wgc2hvdWxkQWRkRmlsZVRvUGFzdGVi
b2FyZCgpIHsgcmV0dXJuIG1fc2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZDsgfQotICAgIGJvb2wg
c3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpIHsgcmV0dXJuIG1fc3RvcFByb3Zpc2lvbmFsRnJh
bWVMb2FkczsgfQotICAgIGJvb2wgZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCgpIHsgcmV0dXJu
IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZDsgfQotICAgIHZvaWQgc2V0U2hvd0RlYnVnTGF5
ZXJUcmVlKGJvb2wgdmFsdWUpIHsgbV9zaG93RGVidWdMYXllclRyZWUgPSB2YWx1ZTsgfQotICAg
IHZvaWQgc2V0VGl0bGVUZXh0RGlyZWN0aW9uKFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXIp
Ci0gICAgewotICAgICAgICBtX3RpdGxlVGV4dERpcmVjdGlvbi5zZXQoZGlyID09IFdlYktpdDo6
V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gImx0ciIgOiAicnRsIik7Ci0gICAgfQotCi0g
ICAgYm9vbCBzaG91bGRJbnRlcmNlcHRQb3N0TWVzc2FnZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9pbnRlcmNlcHRQb3N0TWVzc2FnZS5pc0Jvb2woKSAmJiBtX2ludGVyY2VwdFBvc3RNZXNz
YWdlLnRvQm9vbGVhbigpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SXNQcmludGluZyhib29sIHZh
bHVlKSB7IG1faXNQcmludGluZyA9IHZhbHVlOyB9Ci0gICAgYm9vbCBpc1ByaW50aW5nKCkgeyBy
ZXR1cm4gbV9pc1ByaW50aW5nOyB9Ci0KLSAgICBib29sIHRlc3RSZXBhaW50KCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXN0UmVwYWludDsgfQotICAgIGJvb2wgc3dlZXBIb3Jpem9udGFsbHkoKSBjb25z
dCB7IHJldHVybiBtX3N3ZWVwSG9yaXpvbnRhbGx5OyB9Ci0KLSAgICB2b2lkIHNldEhhc0N1c3Rv
bUZ1bGxTY3JlZW5CZWhhdmlvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgYm9vbCBoYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBt
X2hhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcjsgfQotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSB3
ZWJ2aWV3IGRlbGVnYXRlIHdoZW4gdGhlIHRvcGxldmVsIGZyYW1lIGxvYWQgaXMgZG9uZS4KLSAg
ICB2b2lkIGxvY2F0aW9uQ2hhbmdlRG9uZSgpOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSB3ZWJ2
aWV3IGRlbGVnYXRlIHdoZW4gdGhlIHBvbGljeSBkZWxlZ2F0ZSBydW5zIGlmIHRoZQotICAgIC8v
IHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSB3YXMgY2FsbGVkLgotICAgIHZvaWQgcG9saWN5RGVsZWdh
dGVEb25lKCk7Ci0KLSAgICAvLyBSZWluaXRpYWxpemVzIGFsbCBzdGF0aWMgdmFsdWVzLiBUaGUg
cmVzZXQoKSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZAotICAgIC8vIGJlZm9yZSB0aGUgc3RhcnQg
b2YgZWFjaCB0ZXN0IChjdXJyZW50bHkgZnJvbSBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KS4KLSAg
ICB2b2lkIHJlc2V0KCk7Ci0KLSAgICAvLyBBIHNpbmdsZSBpdGVtIGluIHRoZSB3b3JrIHF1ZXVl
LgotICAgIGNsYXNzIFdvcmtJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfldv
cmtJdGVtKCkgeyB9Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RhcnRlZCBh
IGxvYWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBydW4oVGVzdFNoZWxsKikgPSAwOwotICAgIH07
Ci0KLSAgICBUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQotCi0g
ICAgYm9vbCBzaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0K
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV29ya0l0ZW07Ci0gICAgZnJpZW5kIGNsYXNz
IFdvcmtRdWV1ZTsKLQotICAgIC8vIEhlbHBlciBjbGFzcyBmb3IgbWFuYWdpbmcgZXZlbnRzIHF1
ZXVlZCBieSBtZXRob2RzIGxpa2UgcXVldWVMb2FkIG9yCi0gICAgLy8gcXVldWVTY3JpcHQuCi0g
ICAgY2xhc3MgV29ya1F1ZXVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdvcmtRdWV1ZShMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlcikgOiBtX2Zyb3plbihmYWxzZSksIG1fY29udHJv
bGxlcihjb250cm9sbGVyKSB7IH0KLSAgICAgICAgdmlydHVhbCB+V29ya1F1ZXVlKCk7Ci0gICAg
ICAgIHZvaWQgcHJvY2Vzc1dvcmtTb29uKCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIHN0YXRl
IG9mIHRoZSBjbGFzcyBiZXR3ZWVuIHRlc3RzLgotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAg
ICAgICAgdm9pZCBhZGRXb3JrKFdvcmtJdGVtKik7Ci0KLSAgICAgICAgdm9pZCBzZXRGcm96ZW4o
Ym9vbCBmcm96ZW4pIHsgbV9mcm96ZW4gPSBmcm96ZW47IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5
KCkgeyByZXR1cm4gbV9xdWV1ZS5pc0VtcHR5KCk7IH0KLSAgICAgICAgVGFza0xpc3QqIHRhc2tM
aXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgcHJvY2Vzc1dvcmsoKTsKLSAgICAgICAgY2xhc3MgV29ya1F1ZXVlVGFzazogcHVibGljIE1l
dGhvZFRhc2s8V29ya1F1ZXVlPiB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFdvcmtR
dWV1ZVRhc2soV29ya1F1ZXVlKiBvYmplY3QpOiBNZXRob2RUYXNrPFdvcmtRdWV1ZT4ob2JqZWN0
KSB7IH0KLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyBtX29iamVjdC0+
cHJvY2Vzc1dvcmsoKTsgfQotICAgICAgICB9OwotCi0gICAgICAgIFRhc2tMaXN0IG1fdGFza0xp
c3Q7Ci0gICAgICAgIERlcXVlPFdvcmtJdGVtKj4gbV9xdWV1ZTsKLSAgICAgICAgYm9vbCBtX2Zy
b3plbjsKLSAgICAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKLSAgICB9
OwotCi0gICAgLy8gU3VwcG9ydCBmb3Igb3ZlcnJpZGVQcmVmZXJlbmNlLgotICAgIGJvb2wgY3Bw
VmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgaW50MzJfdCBjcHBWYXJpYW50
VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQmKTsKLSAgICBWZWN0b3I8V2ViS2l0OjpX
ZWJTdHJpbmc+IGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNvbnN0IENwcFZhcmlhbnQmKTsK
LQotICAgIHZvaWQgbG9nRXJyb3JUb0NvbnNvbGUoY29uc3Qgc3RkOjpzdHJpbmcmKTsKLSAgICB2
b2lkIGNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCk7Ci0gICAgY2xhc3MgTm90aWZ5
RG9uZVRpbWVkT3V0VGFzazogcHVibGljIE1ldGhvZFRhc2s8TGF5b3V0VGVzdENvbnRyb2xsZXI+
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE5vdGlmeURvbmVUaW1lZE91dFRhc2soTGF5b3V0VGVz
dENvbnRyb2xsZXIqIG9iamVjdCk6IE1ldGhvZFRhc2s8TGF5b3V0VGVzdENvbnRyb2xsZXI+KG9i
amVjdCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyBtX29iamVjdC0+
Y29tcGxldGVOb3RpZnlEb25lKHRydWUpOyB9Ci0gICAgfTsKLQotCi0gICAgYm9vbCBwYXVzZUFu
aW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgYW5p
bWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBlbGVtZW50
SWQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYgZWxlbWVudElkKTsKLSAgICBib29sIGVsZW1lbnREb2VzQXV0b0NvbXBs
ZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIGludCBu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKLQotICAgIC8vIFVzZWQgZm9yIHRlc3QgdGltZW91
dHMuCi0gICAgVGFza0xpc3QgbV90YXNrTGlzdDsKLQotICAgIC8vIE5vbi1vd25pbmcgcG9pbnRl
ci4gVGhlIExheW91dFRlc3RDb250cm9sbGVyIGlzIG93bmVkIGJ5IHRoZSBob3N0LgotICAgIFRl
c3RTaGVsbCogbV9zaGVsbDsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwg
cHJvZHVjZSBhIHBsYWluIHRleHQgZHVtcCByYXRoZXIgdGhhbiBhCi0gICAgLy8gdGV4dCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgcmVuZGVyZXIuCi0gICAgYm9vbCBtX2R1bXBBc1RleHQ7Ci0KLSAg
ICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGJhc2U2NCBlbmNvZGVk
IFdBVkUgZmlsZS4KLSAgICBib29sIG1fZHVtcEFzQXVkaW87Ci0KLSAgICAvLyBJZiB0cnVlLCB0
aGUgdGVzdF9zaGVsbCB3aWxsIHdyaXRlIGEgZGVzY3JpcHRpdmUgbGluZSBmb3IgZWFjaCBlZGl0
aW5nCi0gICAgLy8gY29tbWFuZC4KLSAgICBib29sIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7Ci0K
LSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIGRyYXcgdGhlIGJvdW5kcyBvZiB0
aGUgY3VycmVudCBzZWxlY3Rpb24gcmVjdAotICAgIC8vIHRha2luZyBwb3NzaWJsZSB0cmFuc2Zv
cm1zIG9mIHRoZSBzZWxlY3Rpb24gcmVjdCBpbnRvIGFjY291bnQuCi0gICAgYm9vbCBtX2R1bXBT
ZWxlY3Rpb25SZWN0OwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRw
dXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNoIGZyYW1lCi0gICAgLy8gbG9hZCBjYWxsYmFj
ay4KLSAgICBib29sIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsKLQotICAgIC8vIElmIHRydWUs
IHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBmb3IgdGhlIHBy
b2dyZXNzCi0gICAgLy8gZmluaXNoZWQgY2FsbGJhY2suCi0gICAgYm9vbCBtX2R1bXBQcm9ncmVz
c0ZpbmlzaGVkQ2FsbGJhY2s7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxs
IG91dHB1dCBhIGxpbmUgb2YgdGhlIHVzZXIgZ2VzdHVyZSBzdGF0dXMKLSAgICAvLyB0ZXh0IGZv
ciBzb21lIGZyYW1lIGxvYWQgY2FsbGJhY2tzLgotICAgIGJvb2wgbV9kdW1wVXNlckdlc3R1cmVJ
bkZyYW1lTG9hZENhbGxiYWNrczsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdp
bGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBmb3IgZWFjaCByZXNvdXJjZQotICAgIC8vIGxv
YWQgY2FsbGJhY2suCi0gICAgYm9vbCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAg
Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgdGhlIE1JTUUgdHlw
ZSBmb3IgZWFjaCByZXNvdXJjZSB0aGF0IAotICAgIC8vIHdhcyBsb2FkZWQuCi0gICAgYm9vbCBt
X2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRl
c3Rfc2hlbGwgd2lsbCBwcm9kdWNlIGEgZHVtcCBvZiB0aGUgYmFjayBmb3J3YXJkIGxpc3QgYXMK
LSAgICAvLyB3ZWxsLgotICAgIGJvb2wgbV9kdW1wQmFja0ZvcndhcmRMaXN0OwotCi0gICAgLy8g
SWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBwcmludCBvdXQgdGhlIGNoaWxkIGZyYW1lIHNj
cm9sbCBvZmZzZXRzIGFzCi0gICAgLy8gd2VsbC4KLSAgICBib29sIG1fZHVtcENoaWxkRnJhbWVT
Y3JvbGxQb3NpdGlvbnM7Ci0KLSAgICAvLyBJZiB0cnVlIGFuZCBpZiBkdW1wX2FzX3RleHRfIGlz
IHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgcmVjdXJzaXZlbHkKLSAgICAvLyBkdW1wIGFsbCBm
cmFtZXMgYXMgcGxhaW4gdGV4dC4KLSAgICBib29sIG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0Owot
Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBkdW1wIGFsbCBjaGFuZ2VzIHRv
IHdpbmRvdy5zdGF0dXMuCi0gICAgYm9vbCBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzOwotCi0g
ICAgLy8gSWYgdHJ1ZSwgb3V0cHV0IGEgbWVzc2FnZSB3aGVuIHRoZSBwYWdlIHRpdGxlIGlzIGNo
YW5nZWQuCi0gICAgYm9vbCBtX2R1bXBUaXRsZUNoYW5nZXM7Ci0KLSAgICAvLyBJZiB0cnVlLCBv
dXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGVhY2ggdGltZSBhIHBlcm1pc3Npb24gY2xpZW50Ci0g
ICAgLy8gY2FsbGJhY2sgaXMgaW52b2tlZC4gQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9y
IGFsbG93SW1hZ2UuCi0gICAgYm9vbCBtX2R1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzOwot
Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBnZW5lcmF0ZSBwaXhlbCByZXN1
bHRzIGluIGR1bXBBc1RleHQgbW9kZQotICAgIGJvb2wgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsK
LQotICAgIC8vIElmIHRydWUsIG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZWFjaCB0aW1lIFdl
YlZpZXdDbGllbnQ6OmNyZWF0ZVZpZXcKLSAgICAvLyBpcyBpbnZva2VkLgotICAgIGJvb2wgbV9k
dW1wQ3JlYXRlVmlldzsKLQotICAgIC8vIElmIHRydWUsIHRoZSBlbGVtZW50IHdpbGwgYmUgdHJl
YXRlZCBhcyBlZGl0YWJsZS4gVGhpcyB2YWx1ZSBpcyByZXR1cm5lZAotICAgIC8vIGZyb20gdmFy
aW91cyBlZGl0aW5nIGNhbGxiYWNrcyB0aGF0IGFyZSBjYWxsZWQganVzdCBiZWZvcmUgZWRpdCBv
cGVyYXRpb25zCi0gICAgLy8gYXJlIGFsbG93ZWQuCi0gICAgYm9vbCBtX2FjY2VwdHNFZGl0aW5n
OwotCi0gICAgLy8gSWYgdHJ1ZSwgbmV3IHdpbmRvd3MgY2FuIGJlIG9wZW5lZCB2aWEgamF2YXNj
cmlwdCBvciBieSBwbHVnaW5zLiBCeQotICAgIC8vIGRlZmF1bHQsIHNldCB0byBmYWxzZSBhbmQg
Y2FuIGJlIHRvZ2dsZWQgdG8gdHJ1ZSB1c2luZwotICAgIC8vIHNldENhbk9wZW5XaW5kb3dzKCku
Ci0gICAgYm9vbCBtX2Nhbk9wZW5XaW5kb3dzOwotCi0gICAgLy8gV2hlbiByZXNldCBpcyBjYWxs
ZWQsIGdvIHRocm91Z2ggYW5kIGNsb3NlIGFsbCBidXQgdGhlIG1haW4gdGVzdCBzaGVsbAotICAg
IC8vIHdpbmRvdy4gQnkgZGVmYXVsdCwgc2V0IHRvIHRydWUgYnV0IHRvZ2dsZWQgdG8gZmFsc2Ug
dXNpbmcKLSAgICAvLyBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoKS4KLSAg
ICBib29sIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzOwotCi0gICAgLy8gSWYgdHJ1ZSwgcGl4ZWwg
ZHVtcCB3aWxsIGJlIHByb2R1Y2VkIGFzIGEgc2VyaWVzIG9mIDFweC10YWxsLCB2aWV3LXdpZGUK
LSAgICAvLyBpbmRpdmlkdWFsIHBhaW50cyBvdmVyIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXcuCi0g
ICAgYm9vbCBtX3Rlc3RSZXBhaW50OwotICAgIC8vIElmIHRydWUgYW5kIHRlc3RfcmVwYWludF8g
aXMgdHJ1ZSBhcyB3ZWxsLCBwaXhlbCBkdW1wIHdpbGwgYmUgcHJvZHVjZWQgYXMKLSAgICAvLyBh
IHNlcmllcyBvZiAxcHgtd2lkZSwgdmlldy10YWxsIHBhaW50cyBhY3Jvc3MgdGhlIHdpZHRoIG9m
IHRoZSB2aWV3LgotICAgIGJvb2wgbV9zd2VlcEhvcml6b250YWxseTsKLQotICAgIC8vIElmIHRy
dWUgYW5kIGEgZHJhZyBzdGFydHMsIGFkZHMgYSBmaWxlIHRvIHRoZSBkcmFnJmRyb3AgY2xpcGJv
YXJkLgotICAgIGJvb2wgbV9zaG91bGRBZGRGaWxlVG9QYXN0ZWJvYXJkOwotCi0gICAgLy8gSWYg
dHJ1ZSwgc3RvcHMgcHJvdmlzaW9uYWwgZnJhbWUgbG9hZHMgZHVyaW5nIHRoZQotICAgIC8vIERp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgY2FsbGJhY2suCi0gICAgYm9vbCBtX3N0b3BQ
cm92aXNpb25hbEZyYW1lTG9hZHM7Ci0KLSAgICAvLyBJZiB0cnVlLCBkb24ndCBkdW1wIG91dHB1
dCB1bnRpbCBub3RpZnlEb25lIGlzIGNhbGxlZC4KLSAgICBib29sIG1fd2FpdFVudGlsRG9uZTsK
LQotICAgIC8vIElmIGZhbHNlLCBhbGwgbmV3IHJlcXVlc3RzIHdpbGwgbm90IGRlZmVyIHRoZSBt
YWluIHJlc291cmNlIGRhdGEgbG9hZC4KLSAgICBib29sIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRh
TG9hZDsKLQotICAgIC8vIElmIHRydWUsIHdlIHdpbGwgc2hvdyBleHRlbmRlZCBpbmZvcm1hdGlv
biBpbiB0aGUgZ3JhcGhpY3MgbGF5ZXIgdHJlZS4KLSAgICBib29sIG1fc2hvd0RlYnVnTGF5ZXJU
cmVlOwotCi0gICAgLy8gSWYgdHJ1ZSwgbGF5b3V0IGlzIHRvIHRhcmdldCBwcmludGVkIHBhZ2Vz
LgotICAgIGJvb2wgbV9pc1ByaW50aW5nOwotCi0gICAgV29ya1F1ZXVlIG1fd29ya1F1ZXVlOwot
Ci0gICAgQ3BwVmFyaWFudCBtX2dsb2JhbEZsYWc7Ci0KLSAgICAvLyBCb3VuZCB2YXJpYWJsZSBj
b3VudGluZyB0aGUgbnVtYmVyIG9mIHRvcCBVUkxzIHZpc2l0ZWQuCi0gICAgQ3BwVmFyaWFudCBt
X3dlYkhpc3RvcnlJdGVtQ291bnQ7Ci0KLSAgICAvLyBCb3VuZCB2YXJpYWJsZSB0cmFja2luZyB0
aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIDx0aXRsZT4gdGFnLgotICAgIENwcFZhcmlhbnQgbV90
aXRsZVRleHREaXJlY3Rpb247Ci0KLSAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byByZXR1cm4gdGhl
IG5hbWUgb2YgdGhpcyBwbGF0Zm9ybSAoY2hyb21pdW0pLgotICAgIENwcFZhcmlhbnQgbV9wbGF0
Zm9ybU5hbWU7Ci0KLSAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byBzZXQgd2hldGhlciBwb3N0TWVz
c2FnZXMgc2hvdWxkIGJlIGludGVyY2VwdGVkIG9yIG5vdAotICAgIENwcFZhcmlhbnQgbV9pbnRl
cmNlcHRQb3N0TWVzc2FnZTsKLQotICAgIFdlYktpdDo6V2ViVVJMIG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbjsKLQotICAgIC8vIFdBViBhdWRpbyBkYXRhIGlzIHN0b3JlZCBoZXJlLgotICAgIFdl
YktpdDo6V2ViQXJyYXlCdWZmZXJWaWV3IG1fYXVkaW9EYXRhOwotCi0gICAgLy8gTW9jayBvYmpl
Y3QgZm9yIHRlc3RpbmcgZGVsaXZlcmluZyB3ZWIgaW50ZW50cy4KLSAgICBPd25QdHI8V2ViS2l0
OjpXZWJEZWxpdmVyZWRJbnRlbnRDbGllbnQ+IG1faW50ZW50Q2xpZW50OwotCi0gICAgYm9vbCBt
X3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOwotCi0gICAgLy8gSWYg
dHJ1ZSwgY2FsbHMgdG8gV2ViVmlld0hvc3Q6OmVudGVyL2V4aXRGdWxsU2NyZWVuTm93IHdpbGwg
bm90IHJlc3VsdCBpbiAKLSAgICAvLyBjYWxscyB0byBEb2N1bWVudDo6d2lsbC9kaWQvRW50ZXIv
RXhpdEZ1bGxTY3JlZW4uCi0gICAgYm9vbCBtX2hhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcjsK
LX07Ci0KLSNlbmRpZiAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcl9oCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50ZXIuaAko
cmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTm90aWZp
Y2F0aW9uUHJlc2VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0NiwxMCBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgTm90aWZpY2F0aW9uUHJlc2VudGVyKFRlc3RTaGVsbCopIHsgfQog
ICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlcigpOwogCi0gICAgLy8gQ2FsbGVkIGJ5
IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlciB0byBzaW11bGF0ZSBhIHVzZXIgZ3JhbnRpbmcgcGVy
bWlzc2lvbi4KKyAgICAvLyBDYWxsZWQgYnkgdGhlIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lciB0
byBzaW11bGF0ZSBhIHVzZXIgZ3JhbnRpbmcgcGVybWlzc2lvbi4KICAgICB2b2lkIGdyYW50UGVy
bWlzc2lvbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgb3JpZ2luKTsKIAotICAgIC8vIENhbGxl
ZCBieSB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXIgdG8gc2ltdWxhdGUgYSB1c2VyIGNsaWNraW5n
IG9uIGEgbm90aWZpY2F0aW9uLgorICAgIC8vIENhbGxlZCBieSB0aGUgRHVtcFJlbmRlclRyZWVU
ZXN0UnVubmVyIHRvIHNpbXVsYXRlIGEgdXNlciBjbGlja2luZyBvbiBhIG5vdGlmaWNhdGlvbi4K
ICAgICBib29sIHNpbXVsYXRlQ2xpY2soY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG5vdGlmaWNh
dGlvbklkZW50aWZpZXIpOwogCiAgICAgLy8gV2ViS2l0OjpXZWJOb3RpZmljYXRpb25QcmVzZW50
ZXIgaW50ZXJmYWNlCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lu
Y2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKICNpbmNsdWRlICJEUlREZXZUb29sc0NsaWVudC5o
IgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJX
ZWJDb21wb3NpdG9yLmgiCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBUZXN0U2hlbGw6OmluaXRp
YWxpemUoKQogewogICAgIG1fd2ViUGVybWlzc2lvbnMgPSBhZG9wdFB0cihuZXcgV2ViUGVybWlz
c2lvbnModGhpcykpOwogICAgIG1fdGVzdEludGVyZmFjZXMgPSBhZG9wdFB0cihuZXcgVGVzdElu
dGVyZmFjZXMoKSk7Ci0gICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBM
YXlvdXRUZXN0Q29udHJvbGxlcih0aGlzKSk7CisgICAgbV90ZXN0UnVubmVyID0gYWRvcHRQdHIo
bmV3IER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcih0aGlzKSk7CiAjaWYgRU5BQkxFKE5PVElGSUNB
VElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKICAgICBtX25vdGlmaWNhdGlv
blByZXNlbnRlciA9IGFkb3B0UHRyKG5ldyBOb3RpZmljYXRpb25QcmVzZW50ZXIodGhpcykpOwog
I2VuZGlmCkBAIC0yNDEsMTEgKzI0MSwxMSBAQCB2b2lkIFRlc3RTaGVsbDo6cnVuRmlsZVRlc3Qo
Y29uc3QgVGVzdFBhCiAgICAgbV9wYXJhbXMgPSBwYXJhbXM7CiAgICAgc3RyaW5nIHRlc3RVcmwg
PSBtX3BhcmFtcy50ZXN0VXJsLnNwZWMoKTsKIAotICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIt
PnNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKHNob3VsZER1bXBQaXhlbHMpOworICAgIG1f
dGVzdFJ1bm5lci0+c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoc2hvdWxkRHVtcFBpeGVs
cyk7CiAKICAgICBpZiAodGVzdFVybC5maW5kKCJsb2FkaW5nLyIpICE9IHN0cmluZzo6bnBvcwog
ICAgICAgICB8fCB0ZXN0VXJsLmZpbmQoImxvYWRpbmdcXCIpICE9IHN0cmluZzo6bnBvcykKLSAg
ICAgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxi
YWNrcyh0cnVlKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKHRydWUpOwogCiAgICAgaWYgKHRlc3RVcmwuZmluZCgiY29tcG9zaXRpbmcvIikg
IT0gc3RyaW5nOjpucG9zIHx8IHRlc3RVcmwuZmluZCgiY29tcG9zaXRpbmdcXCIpICE9IHN0cmlu
Zzo6bnBvcykgewogICAgICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRl
b0VuYWJsZWQgPSB0cnVlOwpAQCAtMjU3LDggKzI1Nyw4IEBAIHZvaWQgVGVzdFNoZWxsOjpydW5G
aWxlVGVzdChjb25zdCBUZXN0UGEKIAogICAgIGlmICh0ZXN0VXJsLmZpbmQoIi9kdW1wQXNUZXh0
LyIpICE9IHN0cmluZzo6bnBvcwogICAgICAgICB8fCB0ZXN0VXJsLmZpbmQoIlxcZHVtcEFzVGV4
dFxcIikgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIt
PnNldFNob3VsZER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAgIG1fbGF5b3V0VGVzdENvbnRyb2xs
ZXItPnNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKKyAgICAgICAgbV90ZXN0
UnVubmVyLT5zZXRTaG91bGREdW1wQXNUZXh0KHRydWUpOworICAgICAgICBtX3Rlc3RSdW5uZXIt
PnNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAo
dGVzdFVybC5maW5kKCIvaW5zcGVjdG9yLyIpICE9IHN0cmluZzo6bnBvcwpAQCAtMjY2LDcgKzI2
Niw3IEBAIHZvaWQgVGVzdFNoZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGEKICAgICAgICAg
c2hvd0RldlRvb2xzKCk7CiAKICAgICBpZiAobV9wYXJhbXMuZGVidWdMYXllclRyZWUpCi0gICAg
ICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNob3dEZWJ1Z0xheWVyVHJlZSh0cnVlKTsK
KyAgICAgICAgbV90ZXN0UnVubmVyLT5zZXRTaG93RGVidWdMYXllclRyZWUodHJ1ZSk7CiAKICAg
ICBpZiAobV9kdW1wV2hlbkZpbmlzaGVkKQogICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGVzdEhl
YWRlcih0ZXN0VXJsLmNfc3RyKCkpOwpAQCAtMjk5LDcgKzI5OSw3IEBAIHZvaWQgVGVzdFNoZWxs
OjpyZXNldFRlc3RDb250cm9sbGVyKCkKICAgICByZXNldFdlYlNldHRpbmdzKCp3ZWJWaWV3KCkp
OwogICAgIG1fd2ViUGVybWlzc2lvbnMtPnJlc2V0KCk7CiAgICAgbV90ZXN0SW50ZXJmYWNlcy0+
cmVzZXRBbGwoKTsKLSAgICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5yZXNldCgpOworICAgIG1f
dGVzdFJ1bm5lci0+cmVzZXQoKTsKICAgICBtX3dlYlZpZXdIb3N0LT5yZXNldCgpOwogI2lmIEVO
QUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAg
bV9ub3RpZmljYXRpb25QcmVzZW50ZXItPnJlc2V0KCk7CkBAIC01NTYsMTQgKzU1NiwxNCBAQCB2
b2lkIFRlc3RTaGVsbDo6ZHVtcCgpCiAgICAgV2ViRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5t
YWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBz
aG91bGREdW1wQXNUZXh0ID0gbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2hvdWxkRHVtcEFzVGV4
dCgpOwotICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8gPSBtX2xheW91dFRlc3RDb250cm9sbGVy
LT5zaG91bGREdW1wQXNBdWRpbygpOwotICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3Vs
dHMgPSBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cygp
OwotICAgIGJvb2wgc2hvdWxkRHVtcEFzUHJpbnRlZCA9IG1fbGF5b3V0VGVzdENvbnRyb2xsZXIt
PmlzUHJpbnRpbmcoKTsKKyAgICBib29sIHNob3VsZER1bXBBc1RleHQgPSBtX3Rlc3RSdW5uZXIt
PnNob3VsZER1bXBBc1RleHQoKTsKKyAgICBib29sIHNob3VsZER1bXBBc0F1ZGlvID0gbV90ZXN0
UnVubmVyLT5zaG91bGREdW1wQXNBdWRpbygpOworICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhl
bFJlc3VsdHMgPSBtX3Rlc3RSdW5uZXItPnNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCk7Cisg
ICAgYm9vbCBzaG91bGREdW1wQXNQcmludGVkID0gbV90ZXN0UnVubmVyLT5pc1ByaW50aW5nKCk7
CiAgICAgYm9vbCBkdW1wZWRBbnl0aGluZyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZER1bXBB
c0F1ZGlvKSB7Ci0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQXJyYXlCdWZmZXJWaWV3JiB3ZWJB
cnJheUJ1ZmZlclZpZXcgPSBtX2xheW91dFRlc3RDb250cm9sbGVyLT5hdWRpb0RhdGEoKTsKKyAg
ICAgICAgY29uc3QgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcmIHdlYkFycmF5QnVmZmVyVmll
dyA9IG1fdGVzdFJ1bm5lci0+YXVkaW9EYXRhKCk7CiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVB
dWRpbyh3ZWJBcnJheUJ1ZmZlclZpZXcuYmFzZUFkZHJlc3MoKSwgd2ViQXJyYXlCdWZmZXJWaWV3
LmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVBdWRpb0Zvb3RlcigpOwog
ICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGVzdEZvb3Rlcih0cnVlKTsKQEAgLTU4Nyw3ICs1ODcs
NyBAQCB2b2lkIFRlc3RTaGVsbDo6ZHVtcCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHNob3VsZER1bXBBc1RleHQpIHsKLSAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZl
ID0gbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7
CisgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdFJ1bm5lci0+c2hvdWxkRHVtcENo
aWxkRnJhbWVzQXNUZXh0KCk7CiAgICAgICAgICAgICBzdHJpbmcgZGF0YVV0ZjggPSBzaG91bGRE
dW1wQXNQcmludGVkID8gZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoZnJhbWUsIHJlY3Vyc2l2ZSkg
OiBkdW1wRnJhbWVzQXNUZXh0KGZyYW1lLCByZWN1cnNpdmUpOwogICAgICAgICAgICAgaWYgKGZ3
cml0ZShkYXRhVXRmOC5jX3N0cigpLCAxLCBkYXRhVXRmOC5zaXplKCksIHN0ZG91dCkgIT0gZGF0
YVV0Zjguc2l6ZSgpKQogICAgICAgICAgICAgICAgIEZBVEFMKCJTaG9ydCB3cml0ZSB0byBzdGRv
dXQsIGRpc2sgZnVsbD9cbiIpOwpAQCAtNTk4LDEwICs1OTgsMTAgQEAgdm9pZCBUZXN0U2hlbGw6
OmR1bXAoKQogICAgICAgICAgICAgaWYgKG1fcGFyYW1zLmRlYnVnUmVuZGVyVHJlZSkKICAgICAg
ICAgICAgICAgICByZW5kZXJUZXh0QmVoYXZpb3IgfD0gV2ViRnJhbWU6OlJlbmRlckFzVGV4dERl
YnVnOwogICAgICAgICAgICAgcHJpbnRmKCIlcyIsIGZyYW1lLT5yZW5kZXJUcmVlQXNUZXh0KHJl
bmRlclRleHRCZWhhdmlvcikudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBib29sIHJlY3Vy
c2l2ZSA9IG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3VsZER1bXBDaGlsZEZyYW1lU2Nyb2xs
UG9zaXRpb25zKCk7CisgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdFJ1bm5lci0+
c2hvdWxkRHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKTsKICAgICAgICAgICAgIGR1bXBG
cmFtZVNjcm9sbFBvc2l0aW9uKGZyYW1lLCByZWN1cnNpdmUpOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkp
CisgICAgICAgIGlmIChtX3Rlc3RSdW5uZXItPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3QoKSkK
ICAgICAgICAgICAgIHByaW50ZigiJXMiLCBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cygpLmNfc3Ry
KCkpOwogICAgIH0KICAgICBpZiAoZHVtcGVkQW55dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBh
cmF0b3JzKQpAQCAtNjEzLDE4ICs2MTMsMTggQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAg
ICAgICAvLyBzdGRvdXQuCiAgICAgICAgIGR1bXBlZEFueXRoaW5nID0gdHJ1ZTsKICAgICAgICAg
bV93ZWJWaWV3LT5sYXlvdXQoKTsKLSAgICAgICAgaWYgKG1fbGF5b3V0VGVzdENvbnRyb2xsZXIt
PnRlc3RSZXBhaW50KCkpIHsKKyAgICAgICAgaWYgKG1fdGVzdFJ1bm5lci0+dGVzdFJlcGFpbnQo
KSkgewogICAgICAgICAgICAgV2ViU2l6ZSB2aWV3U2l6ZSA9IG1fd2ViVmlldy0+c2l6ZSgpOwog
ICAgICAgICAgICAgaW50IHdpZHRoID0gdmlld1NpemUud2lkdGg7CiAgICAgICAgICAgICBpbnQg
aGVpZ2h0ID0gdmlld1NpemUuaGVpZ2h0OwotICAgICAgICAgICAgaWYgKG1fbGF5b3V0VGVzdENv
bnRyb2xsZXItPnN3ZWVwSG9yaXpvbnRhbGx5KCkpIHsKKyAgICAgICAgICAgIGlmIChtX3Rlc3RS
dW5uZXItPnN3ZWVwSG9yaXpvbnRhbGx5KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKFdlYlJl
Y3QgY29sdW1uKDAsIDAsIDEsIGhlaWdodCk7IGNvbHVtbi54IDwgd2lkdGg7IGNvbHVtbi54Kysp
CiAgICAgICAgICAgICAgICAgICAgIG1fd2ViVmlld0hvc3QtPnBhaW50UmVjdChjb2x1bW4pOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBmb3IgKFdlYlJlY3QgbGluZSgw
LCAwLCB3aWR0aCwgMSk7IGxpbmUueSA8IGhlaWdodDsgbGluZS55KyspCiAgICAgICAgICAgICAg
ICAgICAgIG1fd2ViVmlld0hvc3QtPnBhaW50UmVjdChsaW5lKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChtX2xheW91dFRlc3RDb250cm9sbGVyLT5pc1ByaW50aW5nKCkpCisg
ICAgICAgIH0gZWxzZSBpZiAobV90ZXN0UnVubmVyLT5pc1ByaW50aW5nKCkpCiAgICAgICAgICAg
ICBtX3dlYlZpZXdIb3N0LT5wYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMoKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbV93ZWJWaWV3SG9zdC0+cGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpOwpA
QCAtNjMyLDcgKzYzMiw3IEBAIHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKICAgICAgICAgLy8gU2Vl
IGlmIHdlIG5lZWQgdG8gZHJhdyB0aGUgc2VsZWN0aW9uIGJvdW5kcyByZWN0LiBTZWxlY3Rpb24g
Ym91bmRzCiAgICAgICAgIC8vIHJlY3QgaXMgdGhlIHJlY3QgZW5jbG9zaW5nIHRoZSAocG9zc2li
bHkgdHJhbnNmb3JtZWQpIHNlbGVjdGlvbi4KICAgICAgICAgLy8gVGhlIHJlY3Qgc2hvdWxkIGJl
IGRyYXduIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgbGFpZCBvdXQgYW5kIHBhaW50ZWQuCi0gICAgICAg
IGlmIChtX2xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGREdW1wU2VsZWN0aW9uUmVjdCgpKSB7
CisgICAgICAgIGlmIChtX3Rlc3RSdW5uZXItPnNob3VsZER1bXBTZWxlY3Rpb25SZWN0KCkpIHsK
ICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc2VsZWN0aW9uIHJlY3QgLSBkcmF3IGEgcmVk
IDFweCBib3JkZXIgZW5jbG9zaW5nIHJlY3QKICAgICAgICAgICAgIFdlYlJlY3Qgd3IgPSBmcmFt
ZS0+c2VsZWN0aW9uQm91bmRzUmVjdCgpOwogICAgICAgICAgICAgaWYgKCF3ci5pc0VtcHR5KCkp
IHsKQEAgLTcyNiw4ICs3MjYsOCBAQCB2b2lkIFRlc3RTaGVsbDo6YmluZEpTT2JqZWN0c1RvV2lu
ZG93KFdlCiB7CiAgICAgV2ViVGVzdGluZ1N1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChm
cmFtZSk7CiAgICAgbV90ZXN0SW50ZXJmYWNlcy0+YmluZFRvKGZyYW1lKTsKLSAgICBtX2xheW91
dFRlc3RDb250cm9sbGVyLT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJsYXlvdXRUZXN0Q29udHJvbGxlciIpKTsKLSAgICBtX2xheW91dFRlc3RDb250cm9sbGVy
LT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXN0UnVubmVy
IikpOworICAgIG1fdGVzdFJ1bm5lci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgidGVzdFJ1bm5lciIpKTsKKyAgICBtX3Rlc3RSdW5uZXItPmJpbmRUb0phdmFz
Y3JpcHQoZnJhbWUsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRlc3RSdW5uZXIiKSk7CiB9CiAKIFdl
YlZpZXdIb3N0KiBUZXN0U2hlbGw6OmNyZWF0ZU5ld1dpbmRvdyhjb25zdCBXZWJLaXQ6OldlYlVS
TCYgdXJsKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgJ
KHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBACiAjZGVmaW5lIFRlc3RTaGVs
bF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgiCisjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiR2FtZXBhZENvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5v
dGlmaWNhdGlvblByZXNlbnRlci5oIgogI2luY2x1ZGUgIlRlc3RFdmVudFByaW50ZXIuaCIKICNp
bmNsdWRlICJUZXN0SW50ZXJmYWNlcy5oIgpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAg
V2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CiAg
ICAgLy8gUmV0dXJucyB0aGUgaG9zdCBmb3IgdGhlIG1haW4gV2ViVmlldy4KICAgICBXZWJWaWV3
SG9zdCogd2ViVmlld0hvc3QoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXdIb3N0LmdldCgpOyB9
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGxheW91dFRlc3RDb250cm9sbGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXlvdXRUZXN0Q29udHJvbGxlci5nZXQoKTsgfQorICAgIER1bXBSZW5kZXJU
cmVlVGVzdFJ1bm5lciogdGVzdFJ1bm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFJ1bm5lci5n
ZXQoKTsgfQogICAgIEV2ZW50U2VuZGVyKiBldmVudFNlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dGVzdEludGVyZmFjZXMtPmV2ZW50U2VuZGVyKCk7IH0KICAgICBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciogYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RJbnRl
cmZhY2VzLT5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOyB9CiAjaWYgRU5BQkxFKE5PVElGSUNB
VElPTlMpCkBAIC0xMTMsMTUgKzExMywxNSBAQCBwdWJsaWM6CiAgICAgaW50IG5hdmlnYXRpb25F
bnRyeUNvdW50KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEZvY3VzKFdlYktpdDo6V2ViV2lkZ2V0
KiwgYm9vbCBlbmFibGUpOwotICAgIGJvb2wgc2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIChtX3Rlc3RJc1ByZXBhcmluZyB8fCBtX3Rlc3RJc1BlbmRpbmcpICYm
IGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKTsg
fQotICAgIGJvb2wgc2hvdWxkRHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSBj
b25zdCB7IHJldHVybiAobV90ZXN0SXNQcmVwYXJpbmcgfHwgbV90ZXN0SXNQZW5kaW5nKSAmJiBs
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENh
bGxiYWNrcygpOyB9Ci0gICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkg
Y29uc3QgIHsgcmV0dXJuIChtX3Rlc3RJc1ByZXBhcmluZyB8fCBtX3Rlc3RJc1BlbmRpbmcpICYm
IGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KTsgfQotICAgIGJvb2wgc2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25z
dCAgeyByZXR1cm4gKG1fdGVzdElzUHJlcGFyaW5nIHx8IG1fdGVzdElzUGVuZGluZykgJiYgbGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMo
KTsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0
dXJuIChtX3Rlc3RJc1ByZXBhcmluZyB8fCBtX3Rlc3RJc1BlbmRpbmcpICYmIHRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpOyB9CisgICAgYm9vbCBzaG91bGREdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIChtX3Rlc3RJ
c1ByZXBhcmluZyB8fCBtX3Rlc3RJc1BlbmRpbmcpICYmIHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKTsgfQorICAgIGJvb2wgc2hvdWxkRHVt
cFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0ICB7IHJldHVybiAobV90ZXN0SXNQcmVwYXJp
bmcgfHwgbV90ZXN0SXNQZW5kaW5nKSAmJiB0ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoKTsgfQorICAgIGJvb2wgc2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VN
SU1FVHlwZXMoKSBjb25zdCAgeyByZXR1cm4gKG1fdGVzdElzUHJlcGFyaW5nIHx8IG1fdGVzdElz
UGVuZGluZykgJiYgdGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVU
eXBlcygpOyB9CiAgICAgdm9pZCBzZXRJc0xvYWRpbmcoYm9vbCBmbGFnKSB7IG1faXNMb2FkaW5n
ID0gZmxhZzsgfQogCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlciB0
byBzaWduYWwgdGVzdCBjb21wbGV0aW9uLgorICAgIC8vIENhbGxlZCBieSB0aGUgRHVtcFJlbmRl
clRyZWVUZXN0UnVubmVyIHRvIHNpZ25hbCB0ZXN0IGNvbXBsZXRpb24uCiAgICAgdm9pZCB0ZXN0
RmluaXNoZWQoKTsKLSAgICAvLyBDYWxsZWQgYnkgTGF5b3V0VGVzdENvbnRyb2xsZXIgd2hlbiBh
IHRlc3QgaGl0cyB0aGUgdGltZW91dCwgYnV0IGRvZXMgbm90CisgICAgLy8gQ2FsbGVkIGJ5IER1
bXBSZW5kZXJUcmVlVGVzdFJ1bm5lciB3aGVuIGEgdGVzdCBoaXRzIHRoZSB0aW1lb3V0LCBidXQg
ZG9lcyBub3QKICAgICAvLyBjYXVzZSBhIGhhbmcuIFdlIGNhbiBhdm9pZCBraWxsaW5nIFRlc3RT
aGVsbCBpbiB0aGlzIGNhc2UgYW5kIHN0aWxsIGR1bXAKICAgICAvLyB0aGUgdGVzdCByZXN1bHRz
LgogICAgIHZvaWQgdGVzdFRpbWVkT3V0KCk7CkBAIC0yMTEsNyArMjExLDcgQEAgcHJpdmF0ZToK
ICAgICBPd25QdHI8RFJURGV2VG9vbHNBZ2VudD4gbV9kcnREZXZUb29sc0FnZW50OwogICAgIE93
blB0cjxEUlREZXZUb29sc0NsaWVudD4gbV9kcnREZXZUb29sc0NsaWVudDsKICAgICBPd25QdHI8
VGVzdEludGVyZmFjZXM+IG1fdGVzdEludGVyZmFjZXM7Ci0gICAgT3duUHRyPExheW91dFRlc3RD
b250cm9sbGVyPiBtX2xheW91dFRlc3RDb250cm9sbGVyOworICAgIE93blB0cjxEdW1wUmVuZGVy
VHJlZVRlc3RSdW5uZXI+IG1fdGVzdFJ1bm5lcjsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykg
fHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogICAgIE93blB0cjxOb3RpZmljYXRpb25Q
cmVzZW50ZXI+IG1fbm90aWZpY2F0aW9uUHJlc2VudGVyOwogI2VuZGlmCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuY3BwCShyZXZpc2lv
biAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNzaW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9ucy5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIuaCIKICNpbmNs
dWRlICJUZXN0U2hlbGwuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCiAjaW5j
bHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCkBAIC00OSw3ICs0OSw3IEBAIFdlYlBlcm1pc3Npb25z
Ojp+V2ViUGVybWlzc2lvbnMoKQogYm9vbCBXZWJQZXJtaXNzaW9uczo6YWxsb3dJbWFnZShXZWJL
aXQ6OldlYkZyYW1lKiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3MsIGNvbnN0IFdlYktpdDo6V2Vi
VVJMJiBpbWFnZVVSTCkKIHsKICAgICBib29sIGFsbG93ZWQgPSBlbmFibGVkUGVyU2V0dGluZ3Mg
JiYgbV9pbWFnZXNBbGxvd2VkOwotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91
bGREdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcygpKQorICAgIGlmICh0ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKCkpCiAgICAgICAgIGZwcmludGYo
c3Rkb3V0LCAiUEVSTUlTU0lPTiBDTElFTlQ6IGFsbG93SW1hZ2UoJXMpOiAlc1xuIiwgbV9zaGVs
bC0+bm9ybWFsaXplTGF5b3V0VGVzdFVSTChpbWFnZVVSTC5zcGVjKCkpLmNfc3RyKCksIGFsbG93
ZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICByZXR1cm4gYWxsb3dlZDsKIH0KQEAgLTU3LDcg
KzU3LDcgQEAgYm9vbCBXZWJQZXJtaXNzaW9uczo6YWxsb3dJbWFnZShXZWJLaXQ6OgogYm9vbCBX
ZWJQZXJtaXNzaW9uczo6YWxsb3dTY3JpcHRGcm9tU291cmNlKFdlYktpdDo6V2ViRnJhbWUqLCBi
b29sIGVuYWJsZWRQZXJTZXR0aW5ncywgY29uc3QgV2ViS2l0OjpXZWJVUkwmIHNjcmlwdFVSTCkK
IHsKICAgICBib29sIGFsbG93ZWQgPSBlbmFibGVkUGVyU2V0dGluZ3MgJiYgbV9zY3JpcHRzQWxs
b3dlZDsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFBlcm1pc3Np
b25DbGllbnRDYWxsYmFja3MoKSkKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUGVy
bWlzc2lvbkNsaWVudENhbGxiYWNrcygpKQogICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlBFUk1J
U1NJT04gQ0xJRU5UOiBhbGxvd1NjcmlwdEZyb21Tb3VyY2UoJXMpOiAlc1xuIiwgbV9zaGVsbC0+
bm9ybWFsaXplTGF5b3V0VGVzdFVSTChzY3JpcHRVUkwuc3BlYygpKS5jX3N0cigpLCBhbGxvd2Vk
ID8gInRydWUiIDogImZhbHNlIik7CiAgICAgcmV0dXJuIGFsbG93ZWQ7CiB9CkBAIC0xMjYsNyAr
MTI2LDcgQEAgdm9pZCBXZWJQZXJtaXNzaW9uczo6cmVzZXQoKQogCiAvLyBQcml2YXRlIGZ1bmN0
aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUxheW91dFRlc3RDb250cm9sbGVyKiBXZWJQZXJtaXNzaW9uczo6bGF5b3V0VGVz
dENvbnRyb2xsZXIoKSBjb25zdAorRHVtcFJlbmRlclRyZWVUZXN0UnVubmVyKiBXZWJQZXJtaXNz
aW9uczo6dGVzdFJ1bm5lcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2hlbGwtPmxheW91dFRl
c3RDb250cm9sbGVyKCk7CisgICAgcmV0dXJuIG1fc2hlbGwtPnRlc3RSdW5uZXIoKTsKIH0KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBlcm1pc3Npb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuaAko
cmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVy
bWlzc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSAi
V2ViUGVybWlzc2lvbkNsaWVudC5oIgogCi1jbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKK2Ns
YXNzIER1bXBSZW5kZXJUcmVlVGVzdFJ1bm5lcjsKIGNsYXNzIFRlc3RTaGVsbDsKIAogY2xhc3Mg
V2ViUGVybWlzc2lvbnMgOiBwdWJsaWMgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50IHsKQEAg
LTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKIAogcHJpdmF0ZToKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogbGF5b3V0VGVzdENvbnRyb2xsZXIoKSBjb25zdDsKKyAg
ICBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKSBjb25zdDsKIAogICAgIC8v
IE5vbi1vd25pbmcgcG9pbnRlci4gVGhlIFdlYlBlcm1pc3Npb25zIGluc3RhbmNlIGlzIG93bmVk
IGJ5IHRoaXMgVGVzdFNoZWxsIGluc3RhbmNlLgogICAgIFRlc3RTaGVsbCogbV9zaGVsbDsKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAJKHJl
dmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdI
b3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlZpZXdIb3N0LmgiCiAKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZVRlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgotI2luY2x1ZGUgIkxheW91
dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgogI2luY2x1
ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJNb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5oIgpAQCAtMjUxLDkgKzI1MSw5IEBAIHN0YXRpYyBzdHJpbmcgdGV4dEFm
ZmluaXR5RGVzY3JpcHRpb24oV2UKIAogV2ViVmlldyogV2ViVmlld0hvc3Q6OmNyZWF0ZVZpZXco
V2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJXaW5kb3dG
ZWF0dXJlcyYsIGNvbnN0IFdlYlN0cmluZyYsIFdlYk5hdmlnYXRpb25Qb2xpY3kpCiB7Ci0gICAg
aWYgKCFsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5jYW5PcGVuV2luZG93cygpKQorICAgIGlmICgh
dGVzdFJ1bm5lcigpLT5jYW5PcGVuV2luZG93cygpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcENyZWF0ZVZpZXcoKSkKKyAgICBp
ZiAodGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQ3JlYXRlVmlldygpKQogICAgICAgICBmcHJpbnRm
KHN0ZG91dCwgImNyZWF0ZVZpZXcoJXMpXG4iLCBVUkxEZXNjcmlwdGlvbihyZXF1ZXN0LnVybCgp
KS5jX3N0cigpKTsKICAgICByZXR1cm4gbV9zaGVsbC0+Y3JlYXRlTmV3V2luZG93KFdlYlVSTCgp
KS0+d2ViVmlldygpOwogfQpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OmRp
ZFN0YXJ0TG9hZGluZygpCiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZFN0b3BMb2FkaW5nKCkKIHsK
LSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFByb2dyZXNzRmluaXNo
ZWRDYWxsYmFjaygpKQorICAgIGlmICh0ZXN0UnVubmVyKCktPnNob3VsZER1bXBQcm9ncmVzc0Zp
bmlzaGVkQ2FsbGJhY2soKSkKICAgICAgICAgZnB1dHMoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90
aWZpY2F0aW9uXG4iLCBzdGRvdXQpOwogICAgIG1fc2hlbGwtPnNldElzTG9hZGluZyhmYWxzZSk7
CiB9CkBAIC0zMjksNTAgKzMyOSw1MCBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaWRTdG9wTG9hZGlu
ZygpCiAKIGJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJSYW5n
ZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRp
dGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIGZwdXRzKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIsIHN0ZG91dCk7CiAgICAgICAgIHByaW50UmFuZ2VE
ZXNjcmlwdGlvbihyYW5nZSk7CiAgICAgICAgIGZwdXRzKCJcbiIsIHN0ZG91dCk7CiAgICAgfQot
ICAgIHJldHVybiBsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5hY2NlcHRzRWRpdGluZygpOworICAg
IHJldHVybiB0ZXN0UnVubmVyKCktPmFjY2VwdHNFZGl0aW5nKCk7CiB9CiAKIGJvb2wgV2ViVmll
d0hvc3Q6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViUmFuZ2UmIHJhbmdlKQogewotICAgIGlm
IChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
CisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewog
ICAgICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFu
Z2U6Iiwgc3Rkb3V0KTsKICAgICAgICAgcHJpbnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKTsKICAg
ICAgICAgZnB1dHMoIlxuIiwgc3Rkb3V0KTsKICAgICB9Ci0gICAgcmV0dXJuIGxheW91dFRlc3RD
b250cm9sbGVyKCktPmFjY2VwdHNFZGl0aW5nKCk7CisgICAgcmV0dXJuIHRlc3RSdW5uZXIoKS0+
YWNjZXB0c0VkaXRpbmcoKTsKIH0KIAogYm9vbCBXZWJWaWV3SG9zdDo6c2hvdWxkSW5zZXJ0Tm9k
ZShjb25zdCBXZWJOb2RlJiBub2RlLCBjb25zdCBXZWJSYW5nZSYgcmFuZ2UsIFdlYkVkaXRpbmdB
Y3Rpb24gYWN0aW9uKQogewotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTog
c2hvdWxkSW5zZXJ0Tm9kZToiLCBzdGRvdXQpOwogICAgICAgICBwcmludE5vZGVEZXNjcmlwdGlv
bihub2RlLCAwKTsKICAgICAgICAgZnB1dHMoIiByZXBsYWNpbmdET01SYW5nZToiLCBzdGRvdXQp
OwogICAgICAgICBwcmludFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpOwogICAgICAgICBwcmludGYo
IiBnaXZlbkFjdGlvbjolc1xuIiwgZWRpdGluZ0FjdGlvbkRlc2NyaXB0aW9uKGFjdGlvbikuY19z
dHIoKSk7CiAgICAgfQotICAgIHJldHVybiBsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5hY2NlcHRz
RWRpdGluZygpOworICAgIHJldHVybiB0ZXN0UnVubmVyKCktPmFjY2VwdHNFZGl0aW5nKCk7CiB9
CiAKIGJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZEluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJiB0
ZXh0LCBjb25zdCBXZWJSYW5nZSYgcmFuZ2UsIFdlYkVkaXRpbmdBY3Rpb24gYWN0aW9uKQogewot
ICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7CisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkgewogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6
JXMgcmVwbGFjaW5nRE9NUmFuZ2U6IiwgdGV4dC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcHJp
bnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKTsKICAgICAgICAgcHJpbnRmKCIgZ2l2ZW5BY3Rpb246
JXNcbiIsIGVkaXRpbmdBY3Rpb25EZXNjcmlwdGlvbihhY3Rpb24pLmNfc3RyKCkpOwogICAgIH0K
LSAgICByZXR1cm4gbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKKyAg
ICByZXR1cm4gdGVzdFJ1bm5lcigpLT5hY2NlcHRzRWRpdGluZygpOwogfQogCiBib29sIFdlYlZp
ZXdIb3N0OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKAogICAgIGNvbnN0IFdlYlJhbmdlJiBm
cm9tUmFuZ2UsIGNvbnN0IFdlYlJhbmdlJiB0b1JhbmdlLCBXZWJUZXh0QWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAodGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIGZwdXRzKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIsIHN0ZG91dCk7CiAgICAg
ICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihmcm9tUmFuZ2UpOwogICAgICAgICBmcHV0cygiIHRv
RE9NUmFuZ2U6Iiwgc3Rkb3V0KTsKQEAgLTM4MSwyNyArMzgxLDI3IEBAIGJvb2wgV2ViVmlld0hv
c3Q6OnNob3VsZENoYW5nZVNlbGVjdGVkUmEKICAgICAgICAgICAgICAgIHRleHRBZmZpbml0eURl
c2NyaXB0aW9uKGFmZmluaXR5KS5jX3N0cigpLAogICAgICAgICAgICAgICAgKHN0aWxsU2VsZWN0
aW5nID8gIlRSVUUiIDogIkZBTFNFIikpOwogICAgIH0KLSAgICByZXR1cm4gbGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKKyAgICByZXR1cm4gdGVzdFJ1bm5lcigpLT5h
Y2NlcHRzRWRpdGluZygpOwogfQogCiBib29sIFdlYlZpZXdIb3N0OjpzaG91bGREZWxldGVSYW5n
ZShjb25zdCBXZWJSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAodGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIGZwdXRzKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiLCBzdGRvdXQpOwogICAgICAgICBwcmlu
dFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpOwogICAgICAgICBmcHV0cygiXG4iLCBzdGRvdXQpOwog
ICAgIH0KLSAgICByZXR1cm4gbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmco
KTsKKyAgICByZXR1cm4gdGVzdFJ1bm5lcigpLT5hY2NlcHRzRWRpdGluZygpOwogfQogCiBib29s
IFdlYlZpZXdIb3N0OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYlN0cmluZyYgc3R5bGUsIGNv
bnN0IFdlYlJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICh0ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRBcHBseVN0eWxlOiVzIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIsIHN0eWxl
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBwcmludFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpOwog
ICAgICAgICBmcHV0cygiXG4iLCBzdGRvdXQpOwogICAgIH0KLSAgICByZXR1cm4gbGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKKyAgICByZXR1cm4gdGVzdFJ1bm5lcigp
LT5hY2NlcHRzRWRpdGluZygpOwogfQogCiBib29sIFdlYlZpZXdIb3N0Ojppc1NtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCgpCkBAIC00MTYsMjggKzQxNiwyOCBAQCBib29sIFdlYlZpZXdIb3N0Ojpp
c1NlbGVjdFRyYWlsaW5nV2hpdGVzCiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZEJlZ2luRWRpdGlu
ZygpCiB7Ci0gICAgaWYgKCFsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKQorICAgIGlmICghdGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAgICAgZnB1dHMoIkVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlv
blxuIiwgc3Rkb3V0KTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6ZGlkQ2hhbmdlU2VsZWN0aW9u
KGJvb2wgaXNFbXB0eVNlbGVjdGlvbikKIHsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBmcHV0cygiRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
Tm90aWZpY2F0aW9uXG4iLCBzdGRvdXQpOwogICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIGNsaXBi
b2FyZCB3aXRoIHRoZSBzZWxlY3RlZCB0ZXh0IGluIERSVC4KIH0KIAogdm9pZCBXZWJWaWV3SG9z
dDo6ZGlkQ2hhbmdlQ29udGVudHMoKQogewotICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZwdXRz
KCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3Rp
ZmljYXRpb25cbiIsIHN0ZG91dCk7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZEVuZEVkaXRp
bmcoKQogewotICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZwdXRzKCJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkRW5kRWRpdGluZzpXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNhdGlvblxu
Iiwgc3Rkb3V0KTsKIH0KQEAgLTU2MSw3ICs1NjEsNyBAQCBib29sIFdlYlZpZXdIb3N0OjpydW5N
b2RhbFByb21wdERpYWxvZyhXCiBib29sIFdlYlZpZXdIb3N0OjpydW5Nb2RhbEJlZm9yZVVubG9h
ZERpYWxvZyhXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBwcmlu
dGYoIkNPTkZJUk0gTkFWSUdBVElPTjogJXNcbiIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgcmV0dXJuICFsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRTdGF5T25QYWdlQWZ0ZXJI
YW5kbGluZ0JlZm9yZVVubG9hZCgpOworICAgIHJldHVybiAhdGVzdFJ1bm5lcigpLT5zaG91bGRT
dGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpOwogfQogCiB2b2lkIFdlYlZpZXdI
b3N0OjpzaG93Q29udGV4dE1lbnUoV2ViRnJhbWUqLCBjb25zdCBXZWJDb250ZXh0TWVudURhdGEm
IGNvbnRleHRNZW51RGF0YSkKQEAgLTU4MSw3ICs1ODEsNyBAQCBXZWJDb250ZXh0TWVudURhdGEq
IFdlYlZpZXdIb3N0OjpsYXN0Q29uCiAKIHZvaWQgV2ViVmlld0hvc3Q6OnNldFN0YXR1c1RleHQo
Y29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogewotICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpKQorICAgIGlmICghdGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBXaGVu
IHJ1bm5pbmcgdGVzdHMsIHdyaXRlIHRvIHN0ZG91dC4KICAgICBwcmludGYoIlVJIERFTEVHQVRF
IFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDolc1xuIiwgdGV4dC51dGY4KCkuZGF0YSgp
KTsKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpzZXRTdGF0dXNUZXh0KGNv
bnN0IFdlCiB2b2lkIFdlYlZpZXdIb3N0OjpzdGFydERyYWdnaW5nKFdlYkZyYW1lKiwgY29uc3Qg
V2ViRHJhZ0RhdGEmIGRhdGEsIFdlYkRyYWdPcGVyYXRpb25zTWFzayBtYXNrLCBjb25zdCBXZWJJ
bWFnZSYsIGNvbnN0IFdlYlBvaW50JikKIHsKICAgICBXZWJEcmFnRGF0YSBtdXRhYmxlRHJhZ0Rh
dGEgPSBkYXRhOwotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRBZGRGaWxl
VG9QYXN0ZWJvYXJkKCkpIHsKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5zaG91bGRBZGRGaWxlVG9Q
YXN0ZWJvYXJkKCkpIHsKICAgICAgICAgLy8gQWRkIGEgZmlsZSBjYWxsZWQgRFJURmFrZUZpbGUg
dG8gdGhlIGRyYWcmZHJvcCBjbGlwYm9hcmQuCiAgICAgICAgIGFkZERSVEZha2VGaWxlVG9EYXRh
T2JqZWN0KCZtdXRhYmxlRHJhZ0RhdGEpOwogICAgIH0KQEAgLTEwNTUsNyArMTA1NSw3IEBAIFdl
Yk5hdmlnYXRpb25Qb2xpY3kgV2ViVmlld0hvc3Q6OmRlY2lkZVAKICAgICAgICAgcmVzdWx0ID0g
V2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5SWdub3JlOwogCiAgICAgaWYgKG1fcG9saWN5RGVs
ZWdhdGVTaG91bGROb3RpZnlEb25lKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5w
b2xpY3lEZWxlZ2F0ZURvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lcigpLT5wb2xpY3lEZWxlZ2F0
ZURvbmUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTEzLDcgKzExMTMsNyBAQCB2
b2lkIFdlYlZpZXdIb3N0OjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjCiB2b2lkIFdlYlZpZXdIb3N0
OjpkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNvdXJjZSogZHMpCiB7CiAg
ICAgZHMtPnNldEV4dHJhRGF0YShtX3BlbmRpbmdFeHRyYURhdGEubGVha1B0cigpKTsKLSAgICBp
ZiAoIWxheW91dFRlc3RDb250cm9sbGVyKCktPmRlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoKSkK
KyAgICBpZiAoIXRlc3RSdW5uZXIoKS0+ZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCgpKQogICAg
ICAgICBkcy0+c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSk7CiB9CiAKQEAgLTEx
MzAsNyArMTEzMCw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2EK
ICAgICBpZiAoIW1fdG9wTG9hZGluZ0ZyYW1lKQogICAgICAgICBtX3RvcExvYWRpbmdGcmFtZSA9
IGZyYW1lOwogCi0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPnN0b3BQcm92aXNpb25h
bEZyYW1lTG9hZHMoKSkgeworICAgIGlmICh0ZXN0UnVubmVyKCktPnN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHMoKSkgewogICAgICAgICBwcmludEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpOwogICAg
ICAgICBmcHV0cygiIC0gc3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lIGNhbGxiYWNrXG4iLCBzdGRvdXQpOwogICAgICAgICBmcmFtZS0+c3RvcExvYWRpbmco
KTsKQEAgLTExODMsMTEgKzExODMsMTEgQEAgdm9pZCBXZWJWaWV3SG9zdDo6ZGlkUmVjZWl2ZVRp
dGxlKFdlYkZyYQogICAgICAgICBwcmludGYoIiAtIGRpZFJlY2VpdmVUaXRsZTogJXNcbiIsIHRp
dGxlOC5kYXRhKCkpOwogICAgIH0KIAotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5z
aG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpCisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cFRpdGxlQ2hhbmdlcygpKQogICAgICAgICBwcmludGYoIlRJVExFIENIQU5HRUQ6ICVzXG4iLCB0
aXRsZTguZGF0YSgpKTsKIAogICAgIHNldFBhZ2VUaXRsZSh0aXRsZSk7Ci0gICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2V0VGl0bGVUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7CisgICAgdGVz
dFJ1bm5lcigpLT5zZXRUaXRsZVRleHREaXJlY3Rpb24oZGlyZWN0aW9uKTsKIH0KIAogdm9pZCBX
ZWJWaWV3SG9zdDo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkKFdlYkZyYW1lKiBmcmFtZSkKQEAgLTEy
ODEsNyArMTI4MSw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6OndpbGxTZW5kUmVxdWVzdChXZWJGcmEK
ICAgICBzdHJpbmcgcmVxdWVzdFVSTCA9IHVybC5wb3NzaWJseV9pbnZhbGlkX3NwZWMoKTsKIAog
ICAgIEdVUkwgbWFpbkRvY3VtZW50VVJMID0gcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygp
OwotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpIHsKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRSZXNvdXJjZURlc2NyaXB0aW9uKGlkZW50
aWZpZXIpOwogICAgICAgICBwcmludGYoIiAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0
IFVSTCAlcywgbWFpbiBkb2N1bWVudCBVUkwgJXMsIgogICAgICAgICAgICAgICAgIiBodHRwIG1l
dGhvZCAlcz4gcmVkaXJlY3RSZXNwb25zZSAiLApAQCAtMTM4Nyw3ICsxMzg3LDcgQEAgdm9pZCBX
ZWJWaWV3SG9zdDo6b3BlbkZpbGVTeXN0ZW0oV2ViRnJhbQogCiBib29sIFdlYlZpZXdIb3N0Ojp3
aWxsQ2hlY2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChXZWJGcmFtZSogc291cmNlLCBXZWJTZWN1
cml0eU9yaWdpbiB0YXJnZXQsIFdlYkRPTU1lc3NhZ2VFdmVudCBldmVudCkKIHsKLSAgICBpZiAo
bV9zaGVsbC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkSW50ZXJjZXB0UG9zdE1lc3Nh
Z2UoKSkgeworICAgIGlmIChtX3NoZWxsLT50ZXN0UnVubmVyKCktPnNob3VsZEludGVyY2VwdFBv
c3RNZXNzYWdlKCkpIHsKICAgICAgICAgZnB1dHMoImludGVyY2VwdGVkIHBvc3RNZXNzYWdlXG4i
LCBzdGRvdXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNjM4LDkgKzE2Mzgs
OSBAQCBib29sIFdlYlZpZXdIb3N0OjpuYXZpZ2F0ZShjb25zdCBUZXN0TmF2CiAKIC8vIFByaXZh
dGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotTGF5b3V0VGVzdENvbnRyb2xsZXIqIFdlYlZpZXdIb3N0OjpsYXlv
dXRUZXN0Q29udHJvbGxlcigpIGNvbnN0CitEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIqIFdlYlZp
ZXdIb3N0Ojp0ZXN0UnVubmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zaGVsbC0+bGF5b3V0
VGVzdENvbnRyb2xsZXIoKTsKKyAgICByZXR1cm4gbV9zaGVsbC0+dGVzdFJ1bm5lcigpOwogfQog
CiB2b2lkIFdlYlZpZXdIb3N0Ojp1cGRhdGVBZGRyZXNzQmFyKFdlYlZpZXcqIHdlYlZpZXcpCkBA
IC0xNjYwLDcgKzE2NjAsNyBAQCB2b2lkIFdlYlZpZXdIb3N0Ojpsb2NhdGlvbkNoYW5nZURvbmUo
V2ViCiAgICAgaWYgKGZyYW1lICE9IG1fdG9wTG9hZGluZ0ZyYW1lKQogICAgICAgICByZXR1cm47
CiAgICAgbV90b3BMb2FkaW5nRnJhbWUgPSAwOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyKCkt
PmxvY2F0aW9uQ2hhbmdlRG9uZSgpOworICAgIHRlc3RSdW5uZXIoKS0+bG9jYXRpb25DaGFuZ2VE
b25lKCk7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OnVwZGF0ZUZvckNvbW1pdHRlZExvYWQoV2Vi
RnJhbWUqIGZyYW1lLCBib29sIGlzTmV3TmF2aWdhdGlvbikKQEAgLTE3ODAsNyArMTc4MCw3IEBA
IHZvaWQgV2ViVmlld0hvc3Q6OnNldEFkZHJlc3NCYXJVUkwoY29uc3QKIAogdm9pZCBXZWJWaWV3
SG9zdDo6ZW50ZXJGdWxsU2NyZWVuTm93KCkKIHsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpCisgICAgaWYgKHRlc3RSdW5uZXIo
KS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHdlYlZpZXcoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOwpAQCAtMTc4OSw3ICsxNzg5LDcgQEAg
dm9pZCBXZWJWaWV3SG9zdDo6ZW50ZXJGdWxsU2NyZWVuTm93KCkKIAogdm9pZCBXZWJWaWV3SG9z
dDo6ZXhpdEZ1bGxTY3JlZW5Ob3coKQogewotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5o
YXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgd2Vi
VmlldygpLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXI7CitjbGFzcyBEdW1wUmVu
ZGVyVHJlZVRlc3RSdW5uZXI7CiBjbGFzcyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwog
Y2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI7CiBjbGFzcyBTa0NhbnZhczsKQEAgLTI3Nyw3
ICsyNzcsNyBAQCBjbGFzcyBXZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlZpCiAgICAg
dm9pZCBmaW5pc2hMYXN0VGV4dENoZWNrKCk7CiAgICAgdmlydHVhbCB2b2lkIGZpbGxTcGVsbGlu
Z1N1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB3b3JkLCBWZWN0b3I8V2Vi
S2l0OjpXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykgT1ZFUlJJREU7CiAKLSAgICAvLyBHZW9sb2Nh
dGlvbiBjbGllbnQgbW9ja3MgZm9yIExheW91dFRlc3RDb250cm9sbGVyCisgICAgLy8gR2VvbG9j
YXRpb24gY2xpZW50IG1vY2tzIGZvciBEdW1wUmVuZGVyVHJlZVRlc3RSdW5uZXIKICAgICBXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jayogZ2VvbG9jYXRpb25DbGllbnRNb2NrKCk7CiAK
ICAgICAvLyBQZW5kaW5nIHRhc2sgbGlzdCwgTm90ZSB0YWh0IHRoZSBtZXRob2QgaXMgcmVmZXJy
ZWQgZnJvbSBNZXRob2RUYXNrIGNsYXNzLgpAQCAtMzAyLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIENhbGxiYWNrTWV0aG9kVHlwZSBtX2NhbGxiYWNrOwogICAgIH07CiAKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogbGF5b3V0VGVzdENvbnRyb2xsZXIoKSBjb25zdDsKKyAgICBEdW1w
UmVuZGVyVHJlZVRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKSBjb25zdDsKIAogICAgIC8vIENhbGxl
ZCB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UgY2hhbmdlcy4KICAgICAvLyBDYW4gYmUgdXNlZCB0byB1
cGRhdGUgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBAIFNF
VChEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJl
ZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJU
cmVlL0dDQ29udHJvbGxlci5jcHAKLSAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwCisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1
cHBvcnQuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5jcHAK
ICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENh
aXJvLmNwcApAQCAtMTUsNyArMTUsNyBAQCBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNFUwogICAg
ICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCiAgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9HQ0NvbnRyb2xsZXJFZmwuY3BwCiAgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9KU1N0cmluZ1V0aWxzLmNwcAotICAgICR7
VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3Bw
CisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9UZXN0UnVubmVyRWZsLmNwcAog
ICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5j
cHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xs
ZXIuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVt
RWZsLmNwcApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUu
Y3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw5IEBACiAjaW5jbHVkZSAi
RHVtcFJlbmRlclRyZWVWaWV3LmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRl
ICJGb250TWFuYWdlbWVudC5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Lmgi
CisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgog
I2luY2x1ZGUgIldvcmtRdWV1ZS5oIgpAQCAtNjIsNyArNjIsNyBAQCBFY29yZV9UaW1lciogd2Fp
dFRvRHVtcFdhdGNoZG9nID0gMDsKIGV4dGVybiBFd2tfSGlzdG9yeV9JdGVtKiBwcmV2VGVzdEJG
SXRlbTsKIAogLy8gRnJvbSB0aGUgdG9wLWxldmVsIER1bXBSZW5kZXJUcmVlLmgKLVJlZlB0cjxM
YXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOworUmVmUHRyPFRlc3RS
dW5uZXI+IGdUZXN0UnVubmVyOwogdm9sYXRpbGUgYm9vbCBkb25lID0gZmFsc2U7CiAKIHN0YXRp
YyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGlj
IFN0cmluZyBkdW1wRnJhbWVzQXNUZXh0KEV2YXNfT2JqZQogICAgIHJlc3VsdC5hcHBlbmQoIlxu
Iik7CiAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoZnJhbWVDb250ZW50cyk7CiAKLSAgICBpZiAo
Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgeworICAgIGlm
IChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkpIHsKICAgICAgICAgRWluYV9M
aXN0KiBjaGlsZHJlbiA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVDaGlsZHJlbihm
cmFtZSk7CiAgICAgICAgIHZvaWQqIGl0ZXJhdG9yOwogCkBAIC0xMjgsNyArMTI4LDcgQEAgc3Rh
dGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oRXZhcwogICAgICAgICBwcmludGYoIiVz
IiwgcmVzdWx0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCi0gICAgaWYgKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSkgewor
ICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSkgewog
ICAgICAgICBFaW5hX0xpc3QqIGNoaWxkcmVuID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpm
cmFtZUNoaWxkcmVuKGZyYW1lKTsKICAgICAgICAgdm9pZCogaXRlcmF0b3I7CiAKQEAgLTIxNSwy
OSArMjE1LDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0dsb2JhbEhpc3RvcnlUZXN0KGMKICAg
ICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9nbG9iYWxoaXN0b3J5LyIpOwogfQog
Ci1zdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRl
c3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCitzdGF0aWMgdm9pZCBjcmVh
dGVUZXN0UnVubmVyKGNvbnN0IFN0cmluZyYgdGVzdFVSTCwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFBpeGVsSGFzaCkKIHsKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPQotICAgICAgICBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHN0ZDo6c3RyaW5nKHRlc3RVUkwudXRmOCgpLmRhdGEo
KSksCisgICAgZ1Rlc3RSdW5uZXIgPQorICAgICAgICBUZXN0UnVubmVyOjpjcmVhdGUoc3RkOjpz
dHJpbmcodGVzdFVSTC51dGY4KCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyhleHBlY3RlZFBpeGVsSGFzaC51dGY4KCkuZGF0YSgpKSk7
CiAKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CisgICAg
Z1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoZmFsc2UpOwogCiAgICAgaWYgKHNo
b3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyh0ZXN0VVJMKSkKLSAgICAgICAgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOworICAgICAgICBnVGVz
dFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKIAotICAgIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBnVGVz
dFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKICAgICBpZiAoc2hvdWxk
T3BlbldlYkluc3BlY3Rvcih0ZXN0VVJMKSkKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zaG93V2ViSW5zcGVjdG9yKCk7CisgICAgICAgIGdUZXN0UnVubmVyLT5zaG93V2ViSW5zcGVj
dG9yKCk7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBIaXN0b3J5RGVsZWdh
dGVDYWxsYmFja3MoaXNHbG9iYWxIaXN0b3J5VGVzdCh0ZXN0VVJMKSk7CisgICAgZ1Rlc3RSdW5u
ZXItPnNldER1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoaXNHbG9iYWxIaXN0b3J5VGVzdCh0
ZXN0VVJMKSk7CiAKICAgICBpZiAoc2hvdWxkRHVtcEFzVGV4dCh0ZXN0VVJMKSkgewotICAgICAg
ICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMoZmFsc2UpOworICAg
ICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgZ1Rlc3RSdW5u
ZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTI2OCwx
NCArMjY4LDE0IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW4KICAg
ICBjb25zdCBTdHJpbmcgdGVzdFVSTCA9IGdldEZpbmFsVGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsK
IAogICAgIGJyb3dzZXItPnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKLSAgICBj
cmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcih0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7Cisg
ICAgY3JlYXRlVGVzdFJ1bm5lcih0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CiAKICAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5jbGVhcigpOwogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnNl
dEZyb3plbihmYWxzZSk7CiAKICAgICBjb25zdCBib29sIGlzU1ZHVzNDVGVzdCA9IHRlc3RVUkwu
Y29udGFpbnMoInN2Zy9XM0MtU1ZHLTEuMSIpOwotICAgIGNvbnN0IGludCB3aWR0aCA9IGlzU1ZH
VzNDVGVzdCA/IDQ4MCA6IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAg
Y29uc3QgaW50IGhlaWdodCA9IGlzU1ZHVzNDVGVzdCA/IDM2MCA6IExheW91dFRlc3RDb250cm9s
bGVyOjptYXhWaWV3SGVpZ2h0OworICAgIGNvbnN0IGludCB3aWR0aCA9IGlzU1ZHVzNDVGVzdCA/
IDQ4MCA6IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0g
aXNTVkdXM0NUZXN0ID8gMzYwIDogVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodDsKICAgICBldmFz
X29iamVjdF9yZXNpemUoYnJvd3Nlci0+bWFpblZpZXcoKSwgd2lkdGgsIGhlaWdodCk7CiAKICAg
ICBpZiAocHJldlRlc3RCRkl0ZW0pCkBAIC0yODgsOCArMjg4LDggQEAgc3RhdGljIHZvaWQgcnVu
VGVzdChjb25zdCBjaGFyKiBpbnB1dExpbgogCiAgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7
CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGZhbHNlKTsK
KyAgICBnVGVzdFJ1bm5lci0+Y2xvc2VXZWJJbnNwZWN0b3IoKTsKKyAgICBnVGVzdFJ1bm5lci0+
c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7CiAKICAgICBicm93c2VyLT5jbGVhckV4
dHJhVmlld3MoKTsKIApAQCAtMjk4LDcgKzI5OCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3QgY2hhciogaW5wdXRMaW4KIAogICAgIGV3a192aWV3X3VyaV9zZXQoYnJvd3Nlci0+bWFpblZp
ZXcoKSwgImFib3V0OmJsYW5rIik7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXIo
KTsKKyAgICBnVGVzdFJ1bm5lci5jbGVhcigpOwogICAgIHNlbmRQaXhlbFJlc3VsdHNFT0YoKTsK
IH0KIApAQCAtMzIwLDE1ICszMjAsMTUgQEAgc3RhdGljIHZvaWQgYWRqdXN0T3V0cHV0VHlwZUJ5
TWltZVR5cGUoYwogewogICAgIGNvbnN0IFN0cmluZyByZXNwb25zZU1pbWVUeXBlKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6cmVzcG9uc2VNaW1lVHlwZShmcmFtZSkpOwogICAgIGlmIChyZXNw
b25zZU1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMoZmFsc2UpOworICAgICAgICBnVGVzdFJ1bm5lci0+
c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldEdlbmVyYXRlUGl4
ZWxSZXN1bHRzKGZhbHNlKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZUNvbnRl
bnRzQXNUZXh0KEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKICAgICBTdHJpbmcgcmVzdWx0OwotICAg
IGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKSkKKyAgICBpZiAoZ1Rlc3RS
dW5uZXItPmR1bXBBc1RleHQoKSkKICAgICAgICAgcmVzdWx0ID0gZHVtcEZyYW1lc0FzVGV4dChm
cmFtZSk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OnJlbmRlclRyZWVEdW1wKGZyYW1lKTsKQEAgLTMzOCwxNyArMzM4LDE3IEBAIHN0YXRpYyB2
b2lkIGR1bXBGcmFtZUNvbnRlbnRzQXNUZXh0KEV2YXMKIAogc3RhdGljIGJvb2wgc2hvdWxkRHVt
cEZyYW1lU2Nyb2xsUG9zaXRpb24oKQogewotICAgIHJldHVybiAhZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wQXNUZXh0KCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2Vi
QXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hp
dmUoKTsKKyAgICByZXR1cm4gIWdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkgJiYgIWdUZXN0UnVu
bmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNX
ZWJBcmNoaXZlKCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJl
V2l0aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1cm4gZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOworICAgIHJldHVybiBkdW1wUGl4ZWxz
Rm9yQ3VycmVudFRlc3QgJiYgZ1Rlc3RSdW5uZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgJiYg
IWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdUZXN0UnVubmVyLT5kdW1w
U291cmNlQXNXZWJBcmNoaXZlKCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKQogewotICAgIHJldHVybiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBCYWNr
Rm9yd2FyZExpc3QoKTsKKyAgICByZXR1cm4gZ1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExp
c3QoKTsKIH0KIAogc3RhdGljIGJvb2wgaW5pdEVmbCgpCkBAIC00MTIsNyArNDEyLDcgQEAgdm9p
ZCBkdW1wKCkKICAgICB9CiAKICAgICBpZiAoc2hvdWxkRHVtcFBpeGVsc0FuZENvbXBhcmVXaXRo
RXhwZWN0ZWQoKSkKLSAgICAgICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhw
ZWN0ZWQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5leHBlY3RlZFBpeGVsSGFzaCgpKTsKKyAgICAg
ICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoZ1Rlc3RSdW5uZXIt
PmV4cGVjdGVkUGl4ZWxIYXNoKCkpOwogCiAgICAgZG9uZSA9IHRydWU7CiAgICAgZWNvcmVfbWFp
bl9sb29wX3F1aXQoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZUNocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1
bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAjaW5jbHVkZSAiR0NDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVy
LmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0
U3VwcG9ydC5oIgpAQCAtMTQ4LDcgKzE0OCw3IEBAIEV2YXNfT2JqZWN0KiBEdW1wUmVuZGVyVHJl
ZUNocm9tZTo6Y3JlYXQKICAgICBFdmFzX09iamVjdCogbWFpbkZyYW1lID0gZXdrX3ZpZXdfZnJh
bWVfbWFpbl9nZXQoaW5zcGVjdG9yVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKG1haW5GcmFtZSwgImxvYWQsZmluaXNoZWQiLCBvbkluc3BlY3RvckZyYW1lTG9hZEZp
bmlzaGVkLCAwKTsKIAotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShpbnNwZWN0b3JWaWV3LCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoLCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4
Vmlld0hlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGluc3BlY3RvclZpZXcsIFRlc3RS
dW5uZXI6Om1heFZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodCk7CiAgICAgZXZh
c19vYmplY3Rfc2hvdyhpbnNwZWN0b3JWaWV3KTsKICAgICBldmFzX29iamVjdF9mb2N1c19zZXQo
aW5zcGVjdG9yVmlldywgdHJ1ZSk7CiAKQEAgLTQxOCwxMiArNDE4LDEyIEBAIHZvaWQgRHVtcFJl
bmRlclRyZWVDaHJvbWU6Om9uV2luZG93T2JqZWMKIHsKICAgICBFd2tfV2luZG93X09iamVjdF9D
bGVhcmVkX0V2ZW50KiBvYmplY3RDbGVhcmVkSW5mbyA9IHN0YXRpY19jYXN0PEV3a19XaW5kb3df
T2JqZWN0X0NsZWFyZWRfRXZlbnQqPihldmVudEluZm8pOwogICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uID0gMDsKLSAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyKTsKKyAgICBBU1NFUlQo
Z1Rlc3RSdW5uZXIpOwogCiAgICAgR0NDb250cm9sbGVyKiBnY0NvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxHQ0NvbnRyb2xsZXIqPih1c2VyRGF0YSk7CiAgICAgQVNTRVJUKGdjQ29udHJvbGxlcik7
CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qob2JqZWN0Q2xl
YXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5kb3dPYmplY3QsICZleGNl
cHRpb24pOworICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KG9iamVjdENsZWFyZWRJ
bmZvLT5jb250ZXh0LCBvYmplY3RDbGVhcmVkSW5mby0+d2luZG93T2JqZWN0LCAmZXhjZXB0aW9u
KTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAKICAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5k
b3dPYmplY3Qob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53
aW5kb3dPYmplY3QsICZleGNlcHRpb24pOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWVDaHJvbWU6Om9uTG9hZFN0YXJ0ZWQKIAogRWluYV9Cb29sIER1bXBSZW5kZXJUcmVl
Q2hyb21lOjpwcm9jZXNzV29yayh2b2lkKikKIHsKLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQo
KS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wKCkp
CisgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nlc3NXb3JrKCkgJiYgIWdUZXN0UnVu
bmVyLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIGR1bXAoKTsKIAogICAgIHJldHVybiBFQ09SRV9D
QUxMQkFDS19DQU5DRUw7CkBAIC00NjcsNyArNDY3LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNo
cm9tZTo6dG9wTG9hZGluZ0ZyYQogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAKICAgICBXb3Jr
UXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQo
KSkKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjp0b3BMb2Fk
aW5nRnJhCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uU3RhdHVzYmFyVGV4dFNldCh2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgaWYgKCFnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkKKyAgICBpZiAoIWdUZXN0UnVu
bmVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0
IGNoYXIqIHN0YXR1c2JhclRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZXZlbnRJbmZv
KTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvblN0YXR1
c2JhclRlCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVJY29uQ2hhbmdlZCh2
b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wSWNvbkNoYW5nZXMoKSkgeworICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEljb25DaGFuZ2VzKCkpIHsKICAgICAgICAgY29uc3QgU3RyaW5n
IGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1l
KGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRDaGFuZ2VJY29uc1xuIiwgZnJhbWVO
YW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTQ5NywxOSArNDk3LDE5IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVUaXRsZUMKIHsKICAgICBjb25zdCBFd2tfVGV4dF9X
aXRoX0RpcmVjdGlvbiogdGl0bGVUZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRXdrX1RleHRfV2l0
aF9EaXJlY3Rpb24qPihldmVudEluZm8pOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3Qg
U3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJh
bWVOYW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlVGl0bGU6ICVz
XG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgKHRpdGxlVGV4dCAmJiB0aXRsZVRleHQtPnN0
cmluZykgPyB0aXRsZVRleHQtPnN0cmluZyA6ICIiKTsKICAgICB9CiAKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkpCisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkpCiAgICAgICAgIHByaW50Zigi
VElUTEUgQ0hBTkdFRDogJXNcbiIsICh0aXRsZVRleHQgJiYgdGl0bGVUZXh0LT5zdHJpbmcpID8g
dGl0bGVUZXh0LT5zdHJpbmcgOiAiIik7CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHByaW50ZigiV2ViVmlldyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIlc1wi
IHRvIFwiJXNcIi5cbiIsIGV3a19mcmFtZV91cmlfZ2V0KGZyYW1lKQogICAgICAgICAgICAgICAg
LCAodGl0bGVUZXh0ICYmIHRpdGxlVGV4dC0+c3RyaW5nKSA/IHRpdGxlVGV4dC0+c3RyaW5nIDog
IiIpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRUaXRsZVRleHREaXJlY3Rpb24o
dGl0bGVUZXh0LT5kaXJlY3Rpb24gPT0gRVdLX1RFWFRfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQg
PyAibHRyIiA6ICJydGwiKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0VGl0bGVUZXh0RGlyZWN0aW9u
KHRpdGxlVGV4dC0+ZGlyZWN0aW9uID09IEVXS19URVhUX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hU
ID8gImx0ciIgOiAicnRsIik7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRG9j
dW1lbnRMb2FkRmluaXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQpA
QCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRG9jdW1lbnRM
b2EKICAgICBjb25zdCBFdmFzX09iamVjdCogZnJhbWUgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVj
dCo+KGV2ZW50SW5mbyk7CiAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAKLSAgICBpZiAoIWRv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisg
ICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZVxuIiwgZnJh
bWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIGVsc2UgaWYgKCFkb25lKSB7CiAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cyA9IER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6cGVuZGluZ1VubG9hZEV2ZW50Q291bnQoZnJhbWUpOwpAQCAtNTMwLDE5ICs1MzAs
MTkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaWxsU2VuZFJlcQogewogICAgIEV3
a19GcmFtZV9SZXNvdXJjZV9NZXNzYWdlcyogbWVzc2FnZXMgPSBzdGF0aWNfY2FzdDxFd2tfRnJh
bWVfUmVzb3VyY2VfTWVzc2FnZXMqPihldmVudEluZm8pOwogCi0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQorICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQogICAg
ICAgICBwcmludGYoIiVzIC0gd2lsbFNlbmRSZXF1ZXN0ICVzIHJlZGlyZWN0UmVzcG9uc2UgJXNc
biIsCiAgICAgICAgICAgICAgICBtX2R1bXBBc3NpZ25lZFVybHMuY29udGFpbnMobWVzc2FnZXMt
PnJlcXVlc3QtPmlkZW50aWZpZXIpID8gbV9kdW1wQXNzaWduZWRVcmxzLmdldChtZXNzYWdlcy0+
cmVxdWVzdC0+aWRlbnRpZmllcikuZGF0YSgpIDogIjx1bmtub3duPiIsCiAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChtZXNzYWdlcy0+cmVxdWVzdCkuZGF0
YSgpLAogICAgICAgICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQobWVz
c2FnZXMtPnJlZGlyZWN0X3Jlc3BvbnNlKS5kYXRhKCkpOwogCi0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkgewotICAg
ICAgICAvLyBBcyByZXF1ZXN0ZWQgYnkgdGhlIExheW91dFRlc3RDb250cm9sbGVyLCBkb24ndCBw
ZXJmb3JtIHRoZSByZXF1ZXN0LgorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+d2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGwoKSkgeworICAgICAgICAvLyBBcyByZXF1ZXN0ZWQgYnkgdGhl
IFRlc3RSdW5uZXIsIGRvbid0IHBlcmZvcm0gdGhlIHJlcXVlc3QuCiAgICAgICAgIG1lc3NhZ2Vz
LT5yZXF1ZXN0LT51cmwgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFk
b25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxP
blJlZGlyZWN0KCkgJiYgbWVzc2FnZXMtPnJlZGlyZWN0X3Jlc3BvbnNlKSB7CisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Qo
KSAmJiBtZXNzYWdlcy0+cmVkaXJlY3RfcmVzcG9uc2UpIHsKICAgICAgICAgcHJpbnRmKCJSZXR1
cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIG1lc3NhZ2VzLT5yZXF1
ZXN0LT51cmwgPSAwOwogICAgICAgICByZXR1cm47CkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaWxsU2VuZFJlcQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RpbmF0aW9uID0gZ0xheW91dFRlc3RDb250
cm9sbGVyLT5yZWRpcmVjdGlvbkRlc3RpbmF0aW9uRm9yVVJMKHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24gPSBnVGVzdFJ1bm5l
ci0+cmVkaXJlY3Rpb25EZXN0aW5hdGlvbkZvclVSTCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CiAgICAgaWYgKGRlc3RpbmF0aW9uLmxlbmd0aCgpKQogICAgICAgICBtZXNzYWdlcy0+cmVx
dWVzdC0+dXJsID0gc3RyZHVwKGRlc3RpbmF0aW9uLmNfc3RyKCkpOwogfQpAQCAtNTY5LDcgKzU2
OSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld09ubG8KIHsKICAgICBj
b25zdCBFdmFzX09iamVjdCogZnJhbWUgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGV2ZW50
SW5mbyk7CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKICAg
ICAgICAgcHJpbnRmKCIlcyAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lXG4iLCBmcmFt
ZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpAQCAtNTc3LDEzICs1NzcsMTMgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3T25sbwogCiB2b2lkIER1bXBSZW5kZXJUcmVl
Q2hyb21lOjpvbkluc2VjdXJlQ29udGVudFJ1bih2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKikK
IHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiZGlkUnVuSW5zZWN1cmVDb250ZW50XG4iKTsK
IH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25JbnNlY3VyZUNvbnRlbnREaXNwbGF5
ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9u
ZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmlu
dGYoImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCkBAIC02MDgsNyArNjA4LDcg
QEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUNyZWF0ZQogCiB2b2lkIER1bXBS
ZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSh2b2lkKiwgRXZhc19P
YmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgaWYgKGRvbmUgfHwgIWdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQorICAgIGlmIChkb25l
IHx8ICFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQoZXZlbnRJbmZvKTsKQEAgLTYzMSw3ICs2MzEsNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdOYXZpCiAKIHZvaWQgRHVtcFJlbmRl
clRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnZlclJlZGlyZWN0KHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBpZiAoZG9uZSB8fCAhZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgaWYgKGRvbmUgfHwgIWdU
ZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVChldmVudEluZm8pOwpAQCAtNjQxLDcgKzY0MSw3IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnYKIAogdm9pZCBEdW1wUmVuZGVyVHJlZUNo
cm9tZTo6b25XZWJWaWV3Q2xpZW50UmVkaXJlY3Qodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCog
ZXZlbnRJbmZvKQogewotICAgIGlmIChkb25lIHx8ICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICBpZiAoZG9uZSB8fCAhZ1Rlc3RSdW5u
ZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKGV2ZW50SW5mbyk7CkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZUNocm9tZTo6b25XZWJWaWV3Q2xpZQogCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpv
bldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRMaW5rcyh2b2lkKiwgRXZhc19PYmplY3QqIGV3a1ZpZXcs
IHZvaWQqKQogewotICAgIGlmIChkb25lIHx8ICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBI
aXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICBpZiAoZG9uZSB8fCAhZ1Rlc3RSdW5uZXIt
PmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
cHJpbnRmKCJBc2tlZCB0byBwb3B1bGF0ZSB2aXNpdGVkIGxpbmtzIGZvciBXZWJWaWV3IFwiJXNc
IlxuIiwgZXdrX3ZpZXdfdXJpX2dldChld2tWaWV3KSk7CkBAIC02NzgsNyArNjc4LDcgQEAgdm9p
ZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25JbnNwZWN0b3JGcgogCiB2b2lkIER1bXBSZW5kZXJU
cmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzaW9uYWxMb2FkKHZvaWQqLCBFdmFzX09iamVjdCogZnJh
bWUsIHZvaWQqKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyBmcmFtZU5h
bWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZShmcmFtZSkp
OwogICAgICAgICBwcmludGYoIiVzIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZVxu
IiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTY4Niw3ICs2ODYsNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzCiAgICAgaWYgKCF0b3BMb2Fk
aW5nRnJhbWUgJiYgIWRvbmUpCiAgICAgICAgIHRvcExvYWRpbmdGcmFtZSA9IGZyYW1lOwogICAK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zdG9wUHJvdmlzaW9uYWxG
cmFtZUxvYWRzKCkpIHsgCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5zdG9wUHJvdmlz
aW9uYWxGcmFtZUxvYWRzKCkpIHsgCiAgICAgICAgIGNvbnN0IFN0cmluZyBmcmFtZU5hbWUoRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZShmcmFtZSkpOwogICAg
ICAgICBwcmludGYoIiVzIC0gc3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lIGNhbGxiYWNrXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGV3a19mcmFtZV9zdG9wKGZyYW1lKTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzCiB7CiAgICAgbV9wcm92aXNpb25hbExvYWRGYWls
ZWRGcmFtZSA9IGZyYW1lOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGZy
YW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZy
YW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVy
cm9yXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpAQCAtNzA1LDcgKzcwNSw3
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVQcm92aXMKIAogdm9pZCBEdW1w
UmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUxvYWRDb21taXR0ZWQodm9pZCosIEV2YXNfT2JqZWN0
KiBmcmFtZSwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGZy
YW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZy
YW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVcbiIsIGZy
YW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CkBAIC03MjEsMTAgKzcyMSwxMCBAQCB2b2lk
IER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lTG9hZEZpCiAgICAgaWYgKGVycm9yKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
dW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCiAgICAgICAgIHByaW50ZigicG9z
dFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb25cbiIpOwogCi0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAg
ICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRh
YmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hM
b2FkRm9yRnJhbWVcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CkBAIC03Mzgs
NyArNzM4LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUxvYWRFcgogICAg
IC8vIEluIGNhc2Ugb2YgcHJvdmlzaW9uYWwgbG9hZCBlcnJvciwgd2UgcmVjZWl2ZSBib3RoICJs
b2FkLGVycm9yIiBhbmQgImxvYWQscHJvdmlzaW9uYWwsZmFpbGVkIgogICAgIC8vIHNpZ25hbHMu
IG1fcHJvdmlzaW9uYWxMb2FkRmFpbGVkRnJhbWUgaXMgdXNlZCB0byBhdm9pZCBwcmludGluZyB0
d2ljZSB0aGUgbG9hZCBlcnJvcjogaW4KICAgICAvLyBvbkZyYW1lUHJvdmlzaW9uYWxMb2FkRmFp
bGVkKCkgYW5kIG9uRnJhbWVMb2FkRXJyb3IoKS4KLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgJiYgZnJhbWUgIT0gbV9wcm92
aXNpb25hbExvYWRGYWlsZWRGcmFtZSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpICYmIGZyYW1lICE9IG1fcHJvdmlzaW9uYWxMb2FkRmFp
bGVkRnJhbWUpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50
ZigiJXMgLSBkaWRGYWlsTG9hZFdpdGhFcnJvclxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkp
OwogICAgIH0KQEAgLTc1Miw3ICs3NTIsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpv
bkZyYW1lTG9hZEVyCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVSZWRpcmVj
dENhbmNlbGxlZCh2b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lkKikKIHsKLSAgICBpZiAo
IWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkp
IHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkgewogICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKICAgICAgICAgcHJpbnRmKCIlcyAt
IGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWVcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0
YSgpKTsKICAgICB9CkBAIC03NjAsNyArNzYwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9t
ZTo6b25GcmFtZVJlZGlyZQogCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWQodm9pZCosIEV2YXNfT2JqZWN0KiBmcmFtZSwgdm9pZCop
CiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAgICAgICAg
IHByaW50ZigiJXMgLSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRG
b3JGcmFtZVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTc3MCw3ICs3
NzAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUmVkaXJlCiB7CiAgICAg
Y29uc3QgY2hhciogdXJsID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGV2ZW50SW5mbyk7CiAK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkgewogICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKICAgICAgICAgcHJp
bnRmKCIlcyAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogJXMgXG4iLCBmcmFtZU5h
bWUudXRmOCgpLmRhdGEoKSwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLmRhdGEoKSk7
CiAgICAgfQpAQCAtNzc4LDcgKzc3OCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9u
RnJhbWVSZWRpcmUKIAogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25EaWREZXRlY3RYU1Mo
dm9pZCosIEV2YXNfT2JqZWN0KiB2aWV3LCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHBy
aW50ZigiZGlkRGV0ZWN0WFNTXG4iKTsKIH0KIApAQCAtNzg2LDE0ICs3ODYsMTQgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZUNocm9tZTo6b25SZXNwb25zZVJlYwogewogICAgIEV3a19GcmFtZV9SZXNv
dXJjZV9SZXNwb25zZSogcmVzcG9uc2UgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfUmVzb3VyY2Vf
UmVzcG9uc2UqPihldmVudEluZm8pOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgQ1N0
cmluZyByZXNwb25zZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHJlc3BvbnNlKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlUmVzcG9uc2UgJXNc
biIsCiAgICAgICAgICAgICAgICBtX2R1bXBBc3NpZ25lZFVybHMuY29udGFpbnMocmVzcG9uc2Ut
PmlkZW50aWZpZXIpID8gbV9kdW1wQXNzaWduZWRVcmxzLmdldChyZXNwb25zZS0+aWRlbnRpZmll
cikuZGF0YSgpIDogIjx1bmtub3duPiIsCiAgICAgICAgICAgICAgICByZXNwb25zZURlc2NyaXB0
aW9uLmRhdGEoKSk7CiAgICAgfQogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkgeworICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkgewogICAgICAg
ICBwcmludGYoIiVzIGhhcyBNSU1FIHR5cGUgJXNcbiIsCiAgICAgICAgICAgICAgICBLVVJMKFBh
cnNlZFVSTFN0cmluZywgcmVzcG9uc2UtPnVybCkubGFzdFBhdGhDb21wb25lbnQoKS51dGY4KCku
ZGF0YSgpLAogICAgICAgICAgICAgICAgcmVzcG9uc2UtPm1pbWVfdHlwZSk7CkBAIC04MDQsNyAr
ODA0LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25SZXNvdXJjZUxvYQogewogICAg
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9ICpzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nKj4o
ZXZlbnRJbmZvKTsKIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZp
bmlzaExvYWRpbmdcbiIsCiAgICAgICAgICAgICAgICAobV9kdW1wQXNzaWduZWRVcmxzLmNvbnRh
aW5zKGlkZW50aWZpZXIpID8gbV9kdW1wQXNzaWduZWRVcmxzLnRha2UoaWRlbnRpZmllcikuZGF0
YSgpIDogIjx1bmtub3duPiIpKTsKIH0KQEAgLTgxMyw3ICs4MTMsNyBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlQ2hyb21lOjpvblJlc291cmNlTG9hCiB7CiAgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3Iq
IGVycm9yID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX0xvYWRfRXJyb3IqPihldmVudEluZm8pOwog
Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNl
TG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmFpbExvYWRpbmdXaXRo
RXJyb3I6ICVzXG4iLAogICAgICAgICAgICAgICAgKG1fZHVtcEFzc2lnbmVkVXJscy5jb250YWlu
cyhlcnJvci0+cmVzb3VyY2VfaWRlbnRpZmllcikgPyBtX2R1bXBBc3NpZ25lZFVybHMudGFrZShl
cnJvci0+cmVzb3VyY2VfaWRlbnRpZmllcikuZGF0YSgpIDogIjx1bmtub3duPiIpLAogICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IpLmRhdGEoKSk7
CkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25OZXdSZXNv
dXJjZQogewogICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGlj
X2Nhc3Q8RXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqPihldmVudEluZm8pOwogCi0gICAgaWYg
KCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcygpKQogICAgICAgICBtX2R1bXBBc3NpZ25lZFVybHMuYWRkKHJlcXVlc3QtPmlkZW50aWZp
ZXIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC0+dXJsKSk7CiB9CiAKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCShy
ZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRy
ZWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIKICNpbmNs
dWRlICJEdW1wUmVuZGVyVHJlZUVmbC5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPEVXZWJLaXQuaD4KICNpbmNs
dWRlIDxFY29yZS5oPgogI2luY2x1ZGUgPEVpbmEuaD4KQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGlj
IEVpbmFfQm9vbCBvbkphdmFTY3JpcHRQcm9tcHQoRXdrXwogCiBzdGF0aWMgRXZhc19PYmplY3Qq
IG9uV2luZG93Q3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEqLCBFaW5hX0Jvb2wsIGNvbnN0IEV3
a19XaW5kb3dfRmVhdHVyZXMqKQogewotICAgIHJldHVybiBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmNhbk9wZW5XaW5kb3dzKCkgPyBicm93c2VyLT5jcmVhdGVOZXdXaW5kb3coKSA6IDA7CisgICAg
cmV0dXJuIGdUZXN0UnVubmVyLT5jYW5PcGVuV2luZG93cygpID8gYnJvd3Nlci0+Y3JlYXRlTmV3
V2luZG93KCkgOiAwOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIG9uV2luZG93Q2xvc2VEZWxheWVk
KHZvaWQqIGRhdGEpCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGljIHZvaWQgb25XaW5kb3dDbG9z
ZShFd2tfVmlld19TbWFydAogCiBzdGF0aWMgdWludDY0X3Qgb25FeGNlZWRlZERhdGFiYXNlUXVv
dGEoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IGNoYXIqIGRhdGFiYXNlTmFtZSwgdWludDY0X3QgY3VycmVudFNpemUsIHVpbnQ2NF90IGV4
cGVjdGVkU2l6ZSkKIHsKLSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERhdGFi
YXNlQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFnVGVzdFJ1bm5lci0+ZHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3Jp
Z2luID0gZXdrX2ZyYW1lX3NlY3VyaXR5X29yaWdpbl9nZXQoZnJhbWUpOwpAQCAtMTI5LDcgKzEy
OSw3IEBAIHN0YXRpYyB1aW50NjRfdCBvbkV4Y2VlZGVkRGF0YWJhc2VRdW90YSgKIAogc3RhdGlj
IGludDY0X3Qgb25FeGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVRdW90YShFd2tfVmlld19TbWFydF9E
YXRhKiwgRXdrX1NlY3VyaXR5X09yaWdpbiAqb3JpZ2luLCBpbnQ2NF90IGRlZmF1bHRPcmlnaW5R
dW90YSwgaW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKQogewotICAgIGlmIChnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MoKSkgeworICAg
IGlmIChnVGVzdFJ1bm5lci0+ZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygp
KSB7CiAgICAgICAgIC8vIEZvciBleGFtcGxlLCBudW1iZXJzIGZyb20gMzAwMDAgLSAzOTk5OSB3
aWxsIG91dHB1dCBhcyAzMDAwMC4KICAgICAgICAgLy8gUm91bmRpbmcgdXAgb3IgZG93biBkb2Vz
IG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAgICAvLyBzdWZm
aWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdlIHdl
cmUKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgaW50NjRfdCBvbkV4Y2VlZGVkQXBwbGljYXRp
b25DYWNoCiAgICAgICAgICAgICAgICB0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7CiAgICAgfQogCi0g
ICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YSgpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVy
biBkZWZhdWx0T3JpZ2luUXVvdGE7CkBAIC0xODcsOCArMTg3LDggQEAgc3RhdGljIEVpbmFfQm9v
bCBvbk5hdmlnYXRpb25Qb2xpY3lEZWNpcwogICAgIHByaW50ZigiUG9saWN5IGRlbGVnYXRlOiBh
dHRlbXB0IHRvIGxvYWQgJXMgd2l0aCBuYXZpZ2F0aW9uIHR5cGUgJyVzJ1xuIiwgdXJsU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KHJlcXVlc3QtPnVybCkudXRmOCgpLmRhdGEoKSwKICAgICAgICAgICAg
bmF2aWdhdGlvblR5cGVUb1N0cmluZyhuYXZpZ2F0aW9uVHlwZSkpOwogCi0gICAgaWYgKGdMYXlv
dXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5ub3RpZnlE
b25lKCk7CisgICAgaWYgKGdUZXN0UnVubmVyKQorICAgICAgICBnVGVzdFJ1bm5lci0+bm90aWZ5
RG9uZSgpOwogCiAgICAgcmV0dXJuIHBvbGljeURlbGVnYXRlUGVybWlzc2l2ZTsKIH0KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9FZGl0aW5nQ2FsbGJhY2tzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRWRpdGluZ0NhbGxiYWNrcy5jcHAJKHJldmlz
aW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9FZGl0aW5nQ2FsbGJhY2tz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEwIEBACiAjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWUuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnRFZmwuaCIKICNpbmNsdWRlICJFZGl0
b3JJbnNlcnRBY3Rpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dHlTZXQuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0aW9u
QWZmaW5pdHlTdHJpCiAKIHZvaWQgc2hvdWxkQmVnaW5FZGl0aW5nKHZvaWQqLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0
UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFdlYkNvcmU6OlJhbmdl
KiByYW5nZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlJhbmdlKj4oZXZlbnRJbmZvKTsKICAgICAg
ICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdl
OiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2UpLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTk1LDcg
Kzk1LDcgQEAgdm9pZCBzaG91bGRCZWdpbkVkaXRpbmcodm9pZCosIEV2YXNfT2JqZQogCiB2b2lk
IHNob3VsZEVuZEVkaXRpbmcodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQog
ewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpIHsKICAgICAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6UmFuZ2UqPihldmVudEluZm8pOwogICAgICAgICBwcmludGYoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2Up
LnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIHNob3VsZEVu
ZEVkaXRpbmcodm9pZCosIEV2YXNfT2JqZWN0CiAKIHZvaWQgc2hvdWxkSW5zZXJ0Tm9kZSh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBF
d2tfU2hvdWxkX0luc2VydF9Ob2RlX0V2ZW50KiBzaG91bGRJbnNlcnROb2RlRXZlbnQgPSBzdGF0
aWNfY2FzdDxFd2tfU2hvdWxkX0luc2VydF9Ob2RlX0V2ZW50Kj4oZXZlbnRJbmZvKTsKICAgICAg
ICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiVzIHJlcGxhY2lu
Z0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLAogICAgICAgICAgICAgICAgZHVtcFBhdGgo
c2hvdWxkSW5zZXJ0Tm9kZUV2ZW50LT5ub2RlKS51dGY4KCkuZGF0YSgpLCBkdW1wUmFuZ2Uoc2hv
dWxkSW5zZXJ0Tm9kZUV2ZW50LT5yYW5nZSkudXRmOCgpLmRhdGEoKSwKQEAgLTExMyw3ICsxMTMs
NyBAQCB2b2lkIHNob3VsZEluc2VydE5vZGUodm9pZCosIEV2YXNfT2JqZWN0CiAKIHZvaWQgc2hv
dWxkSW5zZXJ0VGV4dCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgewogICAgICAgICBFd2tfU2hvdWxkX0luc2VydF9UZXh0X0V2ZW50KiBzaG91bGRJbnNl
cnRUZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxFd2tfU2hvdWxkX0luc2VydF9UZXh0X0V2ZW50Kj4o
ZXZlbnRJbmZvKTsKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNl
cnRUZXh0OiVzIHJlcGxhY2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLAogICAgICAg
ICAgICAgICAgIHNob3VsZEluc2VydFRleHRFdmVudC0+dGV4dCwgZHVtcFJhbmdlKHNob3VsZElu
c2VydFRleHRFdmVudC0+cmFuZ2UpLnV0ZjgoKS5kYXRhKCksIGluc2VydEFjdGlvblN0cmluZyhz
aG91bGRJbnNlcnRUZXh0RXZlbnQtPmFjdGlvbikpOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQg
c2hvdWxkSW5zZXJ0VGV4dCh2b2lkKiwgRXZhc19PYmplY3QKIAogdm9pZCBzaG91bGREZWxldGVS
YW5nZSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgaWYgKCFk
b25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewor
ICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewog
ICAgICAgICBXZWJDb3JlOjpSYW5nZSogcmFuZ2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSYW5n
ZSo+KGV2ZW50SW5mbyk7CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxk
RGVsZXRlRE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5nZShyYW5nZSkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgfQpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgc2hvdWxkRGVsZXRlUmFuZ2Uodm9pZCosIEV2
YXNfT2JqZWMKIAogdm9pZCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEV3a19TaG91bGRf
Q2hhbmdlX1NlbGVjdGVkX1JhbmdlX0V2ZW50KiBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlRXZl
bnQgPSBzdGF0aWNfY2FzdDxFd2tfU2hvdWxkX0NoYW5nZV9TZWxlY3RlZF9SYW5nZV9FdmVudCo+
KGV2ZW50SW5mbyk7CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTolcyB0b0RPTVJhbmdlOiVzIGFmZmluaXR5OiVzIHN0aWxsU2Vs
ZWN0aW5nOiVzXG4iLAogICAgICAgICAgICAgICAgZHVtcFJhbmdlKHNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2VFdmVudC0+ZnJvbVJhbmdlKS51dGY4KCkuZGF0YSgpLCBkdW1wUmFuZ2Uoc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZUV2ZW50LT50b1JhbmdlKS51dGY4KCkuZGF0YSgpLApAQCAtMTQw
LDcgKzE0MCw3IEBAIHZvaWQgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSh2b2lkKiwgRXYKIAog
dm9pZCBzaG91bGRBcHBseVN0eWxlKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5m
bykKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEV3a19TaG91bGRfQXBwbHlfU3R5bGVfRXZlbnQqIHNo
b3VsZEFwcGx5U3R5bGVFdmVudCA9IHN0YXRpY19jYXN0PEV3a19TaG91bGRfQXBwbHlfU3R5bGVf
RXZlbnQqPihldmVudEluZm8pOwogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEFwcGx5U3R5bGU6JXMgdG9FbGVtZW50c0luRE9NUmFuZ2U6JXNcbiIsCiAgICAgICAgICAg
ICAgICAgc2hvdWxkQXBwbHlTdHlsZUV2ZW50LT5zdHlsZS0+YXNUZXh0KCkudXRmOCgpLmRhdGEo
KSwgZHVtcFJhbmdlKHNob3VsZEFwcGx5U3R5bGVFdmVudC0+cmFuZ2UpLnV0ZjgoKS5kYXRhKCkp
OwpAQCAtMTQ5LDI1ICsxNDksMjUgQEAgdm9pZCBzaG91bGRBcHBseVN0eWxlKHZvaWQqLCBFdmFz
X09iamVjdAogCiB2b2lkIGVkaXRpbmdCZWdhbih2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKikK
IHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVn
aW5FZGl0aW5nOldlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb25cbiIpOwogfQogCiB2
b2lkIHVzZXJDaGFuZ2VkQ29udGVudHModm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCiB7Ci0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpX
ZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uXG4iKTsKIH0KIAogdm9pZCBlZGl0aW5nRW5kZWQo
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6V2ViVmlld0RpZEVuZEVkaXRpbmdO
b3RpZmljYXRpb25cbiIpOwogfQogCiB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodm9pZCosIEV2YXNf
T2JqZWN0Kiwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90
aWZpY2F0aW9uXG4iKTsKIH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91
dFRlc3RDb250cm9sbGVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDkyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBM
dGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0Bn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMSBDb2xsYWJvcmEgTHRkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVDaHJvbWUuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1V0aWxzLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJ
dGVtLmgiCi0jaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFV2ViS2l0Lmg+Ci0j
aW5jbHVkZSA8RWNvcmVfRmlsZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgotI2luY2x1ZGUgPEtVUkwuaD4KLSNp
bmNsdWRlIDxlZGl0aW5nL0ZpbmRPcHRpb25zLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotLy8gU2FtZSBhcyBNYWMgY2FjaGUgbW9kZWwg
ZW51bSBpbiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmguCi1lbnVt
IHsKLSAgICBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIgPSAwLAotICAgIFdlYkNhY2hlTW9k
ZWxEb2N1bWVudEJyb3dzZXIgPSAxLAotICAgIFdlYkNhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3Nl
ciA9IDIKLX07Ci0KLUxheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIo
KQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpT
U3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKLXsKLSAgICBFd2tfSGlzdG9yeSog
aGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwotICAg
IGlmICghaGlzdG9yeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXdrX0hpc3RvcnlfSXRlbSog
aXRlbSA9IGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChoaXN0b3J5KTsKLSAg
ICBld2tfaGlzdG9yeV9jbGVhcihoaXN0b3J5KTsKLSAgICBld2tfaGlzdG9yeV9oaXN0b3J5X2l0
ZW1fYWRkKGhpc3RvcnksIGl0ZW0pOwotICAgIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9zZXQo
aGlzdG9yeSwgaXRlbSk7Ci0gICAgZXdrX2hpc3RvcnlfaXRlbV9mcmVlKGl0ZW0pOwotfQotCi1K
U1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0
cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1K
U1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0
cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlz
cGxheSgpCi17Ci0gICAgZGlzcGxheVdlYlZpZXcoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5n
VmlzaXRlZEluZm8oY29udGV4dCwgdmFsdWUpOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotfQotCi1pbnQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdl
SGVpZ2h0KQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9m
UGFnZXMoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Ci19Ci0K
LUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3Bl
cnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgU3RyaW5nIHByb3BlcnR5ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYWdl
UHJvcGVydHkoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcik7
Ci0gICAgaWYgKHByb3BlcnR5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcocHJvcGVydHkudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVybiBw
cm9wZXJ0eVZhbHVlOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1h
cmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHBhZ2VTaXpl
QW5kTWFyZ2lucyA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGFnZVNpemVBbmRNYXJnaW5z
SW5QaXhlbHMoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQs
IG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCk7Ci0KLSAg
ICBpZiAocGFnZVNpemVBbmRNYXJnaW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcmV0dXJuVmFsdWUoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHBhZ2VTaXplQW5kTWFyZ2lucy51dGY4KCkuZGF0YSgpKSk7
Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAgIGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0
b3J5ID0gZXdrX3ZpZXdfaGlzdG9yeV9nZXQoYnJvd3Nlci0+bWFpblZpZXcoKSk7Ci0gICAgaWYg
KCFoaXN0b3J5KQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICByZXR1cm4gZXdrX2hpc3Rvcnlf
YmFja19saXN0X2xlbmd0aChoaXN0b3J5KSArIGV3a19oaXN0b3J5X2ZvcndhcmRfbGlzdF9sZW5n
dGgoaGlzdG9yeSk7Ci19Ci0KLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJU
aHJlYWRDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6d29ya2VyVGhyZWFkQ291bnQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1l
ICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1wKCk7Ci0gICAg
bV93YWl0VG9EdW1wID0gZmFsc2U7Ci0gICAgd2FpdEZvclBvbGljeSA9IGZhbHNlOwotfQotCi1K
U1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdXJsKQotewotICAgIFN0cmluZyByZXF1ZXN0
ZWRVcmwodXJsLT5jaGFyYWN0ZXJzKCksIHVybC0+bGVuZ3RoKCkpOwotICAgIFN0cmluZyByZXNv
dXJjZVJvb3Q7Ci0gICAgU3RyaW5nIHJlcXVlc3RlZFJvb3Q7Ci0KLSAgICBpZiAocmVxdWVzdGVk
VXJsLmZpbmQoIkxheW91dFRlc3RzIikgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgLy8gSWYgdGhl
IFVSTCBjb250YWlucyBMYXlvdXRUZXN0cyB3ZSBuZWVkIHRvIHJlbWFwIHRoYXQgdG8KLSAgICAg
ICAgLy8gTE9DQUxfUkVTT1VSQ0VfUk9PVCB3aGljaCBpcyB0aGUgcGF0aCBvZiB0aGUgTGF5b3V0
VGVzdHMgZGlyZWN0b3J5Ci0gICAgICAgIC8vIHdpdGhpbiB0aGUgV2ViS2l0IHNvdXJjZSB0cmVl
LgotICAgICAgICByZXF1ZXN0ZWRSb290ID0gIi90bXAvTGF5b3V0VGVzdHMiOwotICAgICAgICBy
ZXNvdXJjZVJvb3QgPSBnZXRlbnYoIkxPQ0FMX1JFU09VUkNFX1JPT1QiKTsKLSAgICB9IGVsc2Ug
aWYgKHJlcXVlc3RlZFVybC5maW5kKCJ0bXAiKSAhPSBub3RGb3VuZCkgewotICAgICAgICAvLyBJ
ZiB0aGUgVVJMIGlzIGEgY2hpbGQgb2YgL3RtcCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gYmUg
YSBjaGlsZAotICAgICAgICAvLyBEVU1QUkVOREVSVFJFRV9URU1QIHJlcGxhY2UgdG1wIHdpdGgg
RFVNUFJFTkRFUlRSRUVfVEVNUAotICAgICAgICByZXF1ZXN0ZWRSb290ID0gIi90bXAiOwotICAg
ICAgICByZXNvdXJjZVJvb3QgPSBnZXRlbnYoIkRVTVBSRU5ERVJUUkVFX1RFTVAiKTsKLSAgICB9
Ci0KLSAgICBzaXplX3QgaW5kZXhPZlJvb3RTdGFydCA9IHJlcXVlc3RlZFVybC5yZXZlcnNlRmlu
ZChyZXF1ZXN0ZWRSb290KTsKLSAgICBzaXplX3QgaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdCA9
IGluZGV4T2ZSb290U3RhcnQgKyByZXF1ZXN0ZWRSb290Lmxlbmd0aCgpOwotICAgIFN0cmluZyBm
dWxsUGF0aFRvVXJsID0gImZpbGU6Ly8iICsgcmVzb3VyY2VSb290ICsgcmVxdWVzdGVkVXJsLnN1
YnN0cmluZyhpbmRleE9mU2VwYXJhdG9yQWZ0ZXJSb290KTsKLQotICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmdWxsUGF0aFRvVXJsLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBK
U1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0gICAgV2ViQ29yZTo6S1VSTCBiYXNlVVJMKFdlYkNvcmU6
OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChicm93c2VyLT5tYWlu
RnJhbWUoKSkpKTsKLSAgICBXZWJDb3JlOjpLVVJMIGFic29sdXRlVVJMKGJhc2VVUkwsIFdURjo6
U3RyaW5nKHVybC0+dXN0cmluZygpLmltcGwoKSkpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGpzQWJzb2x1dGVVUkwoCi0gICAgICAgIEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhhYnNvbHV0ZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0KLSAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0ZVVSTC5nZXQo
KSwgdGFyZ2V0KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNF
ZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpCi17Ci0gICAgZXdrX3ZpZXdfZWRpdGFibGVfc2V0
KGJyb3dzZXItPm1haW5WaWV3KCksIGFjY2VwdHNFZGl0aW5nKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENv
b2tpZXMpCi17Ci0gICAgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChhbHdheXNBY2NlcHRDb29raWVz
ID8gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUyA6IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9O
RVZFUik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURl
bGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQotewotICAgIHBvbGljeURlbGVn
YXRlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlID0gcGVy
bWlzc2l2ZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURl
bGVnYXRlKCkKLXsKLSAgICBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlLCBmYWxzZSk7Ci0g
ICAgd2FpdEZvclBvbGljeSA9IHRydWU7Ci0gICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVm
LCBKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1Jl
ZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIHByb3RvY29sLCBKU1N0cmluZ1JlZiBob3N0LCBi
b29sIGluY2x1ZGVTdWJkb21haW5zKQotewotICAgIFdlYkNvcmU6OktVUkwga3VybDsKLSAgICBr
dXJsLnNldFByb3RvY29sKFN0cmluZyhwcm90b2NvbC0+Y2hhcmFjdGVycygpLCBwcm90b2NvbC0+
bGVuZ3RoKCkpKTsKLSAgICBrdXJsLnNldEhvc3QoU3RyaW5nKGhvc3QtPmNoYXJhY3RlcnMoKSwg
aG9zdC0+bGVuZ3RoKCkpKTsKLQotICAgIGV3a19zZWN1cml0eV9wb2xpY3lfd2hpdGVsaXN0X29y
aWdpbl9hZGQoc291cmNlT3JpZ2luLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwga3VybC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBpbmNsdWRlU3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5n
UmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3Qs
IGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCi17Ci0gICAgV2ViQ29yZTo6S1VSTCBrdXJsOwotICAg
IGt1cmwuc2V0UHJvdG9jb2woU3RyaW5nKHByb3RvY29sLT5jaGFyYWN0ZXJzKCksIHByb3RvY29s
LT5sZW5ndGgoKSkpOwotICAgIGt1cmwuc2V0SG9zdChTdHJpbmcoaG9zdC0+Y2hhcmFjdGVycygp
LCBob3N0LT5sZW5ndGgoKSkpOwotCi0gICAgZXdrX3NlY3VyaXR5X3BvbGljeV93aGl0ZWxpc3Rf
b3JpZ2luX2RlbChzb3VyY2VPcmlnaW4tPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBrdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIGluY2x1ZGVTdWJkb21haW5zKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBh
dGliaWxpdHlNb2RlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGlj
IENTdHJpbmcgZ1VzZXJTdHlsZVNoZWV0Owotc3RhdGljIGJvb2wgZ1VzZXJTdHlsZVNoZWV0RW5h
YmxlZCA9IHRydWU7Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNo
ZWV0RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZs
YWc7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KGJyb3dzZXItPm1h
aW5WaWV3KCksIGZsYWcgPyBnVXNlclN0eWxlU2hlZXQuZGF0YSgpIDogMCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdS
ZWYgcGF0aCkKLXsKLSAgICBnVXNlclN0eWxlU2hlZXQgPSBwYXRoLT51c3RyaW5nKCkudXRmOCgp
OwotCi0gICAgaWYgKGdVc2VyU3R5bGVTaGVldEVuYWJsZWQpCi0gICAgICAgIHNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZCh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3Qs
IEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0
VmFsdWVGb3JVc2VyKGNvbnRleHQsIG5vZGVPYmplY3QsIFdURjo6U3RyaW5nKHZhbHVlLT51c3Ry
aW5nKCkuaW1wbCgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdN
b2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCi17Ci0gICAgRXZhc19PYmplY3QqIHZp
ZXcgPSBicm93c2VyLT5tYWluVmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGVxdWFscyhtb2RlLCAid2luZG93ZWQiKSkKLSAgICAgICAgZXdrX3ZpZXdf
bW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9XSU5ET1dFRCk7Ci0gICAgZWxzZSBpZiAoZXF1
YWxzKG1vZGUsICJmbG9hdGluZyIpKQotICAgICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBF
V0tfVklFV19NT0RFX0ZMT0FUSU5HKTsKLSAgICBlbHNlIGlmIChlcXVhbHMobW9kZSwgImZ1bGxz
Y3JlZW4iKSkKLSAgICAgICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9G
VUxMU0NSRUVOKTsKLSAgICBlbHNlIGlmIChlcXVhbHMobW9kZSwgIm1heGltaXplZCIpKQotICAg
ICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBFV0tfVklFV19NT0RFX01BWElNSVpFRCk7Ci0g
ICAgZWxzZSBpZiAoZXF1YWxzKG1vZGUsICJtaW5pbWl6ZWQiKSkKLSAgICAgICAgZXdrX3ZpZXdf
bW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9NSU5JTUlaRUQpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShib29sKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpz
ZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQodm9pZCopCi17Ci0g
ICAgd2FpdFRvRHVtcFdhdGNoZG9nID0gMDsKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tf
Q0FOQ0VMOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJv
b2wgd2FpdFVudGlsRG9uZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVvdXRTZWNv
bmRzID0gMzA7Ci0KLSAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOwotICAgIGlmICht
X3dhaXRUb0R1bXAgJiYgIXdhaXRUb0R1bXBXYXRjaGRvZykKLSAgICAgICAgd2FpdFRvRHVtcFdh
dGNoZG9nID0gZWNvcmVfdGltZXJfYWRkKHRpbWVvdXRTZWNvbmRzLCB3YWl0VG9EdW1wV2F0Y2hk
b2dGaXJlZCwgMCk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQo
KQotewotICAgIHJldHVybiBicm93c2VyLT5leHRyYVZpZXdzKCkuc2l6ZSgpICsgMTsgLy8gKyAx
IGZvciB0aGUgbWFpbiB2aWV3LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBld2tfdmlld19zZXR0aW5n
X3ByaXZhdGVfYnJvd3Npbmdfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJk
KGJvb2wgZmxhZykKLXsKLSAgICBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2FjY2Vzc19j
bGlwYm9hcmRfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAg
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfeHNzX2F1ZGl0b3Jfc2V0KGJyb3dzZXItPm1haW5WaWV3
KCksIGZsYWcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9m
cmFtZV9mbGF0dGVuaW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wg
ZmxhZykKLXsKLSAgICBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQo
Ym9vbCBmbGFnKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQotewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2V0QXV0b2ZpbGxlZChjb250ZXh0LCBub2RlT2JqZWN0LCBhdXRv
ZmlsbGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9h
ZGluZygpCi17Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChicm93
c2VyLT5tYWluVmlldygpLCBFSU5BX0ZBTFNFKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91Ymxl
LCBib29sLCBkb3VibGUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3Jp
ZW50YXRpb24gbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzAzMzUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91Ymxl
LCBkb3VibGUsIGRvdWJsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2Nh
dGlvbiBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODI2NC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQsIEpTU3RyaW5n
UmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0
ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjY0LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICBzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0g
ICAgcmV0dXJuIC0xOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3Bl
ZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYsIGRvdWJsZSwgSlNTdHJpbmdSZWYpCi17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0
UmVmIGlucHV0RWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2gg
aW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQp
Ci17Ci0gICAgZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoMCk7Ci0KLSAgICBp
ZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBkYXRhYmFzZVBhdGg7
Ci0gICAgY29uc3QgY2hhciogdGVtcERpciA9IGdldGVudigiVE1QRElSIik7Ci0KLSAgICBpZiAo
dGVtcERpcikKLSAgICAgICAgZGF0YWJhc2VQYXRoID0gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wRGly
KTsKLSAgICBlbHNlIGlmICh0ZW1wRGlyID0gZ2V0ZW52KCJURU1QIikpCi0gICAgICAgIGRhdGFi
YXNlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgodGVtcERpcik7Ci0gICAgZWxzZQotICAgICAgICBk
YXRhYmFzZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4KCIvdG1wIik7Ci0KLSAgICBkYXRhYmFzZVBh
dGguYXBwZW5kKCIvRHVtcFJlbmRlclRyZWUvSWNvbkRhdGFiYXNlIik7Ci0KLSAgICBpZiAoZWNv
cmVfZmlsZV9ta3BhdGgoZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICBld2tf
c2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3NldChkYXRhYmFzZVBhdGgudXRmOCgpLmRhdGEo
KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChicm93c2VyLT5tYWluVmlldygp
LCBmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5f
b3Blbl93aW5kb3dzX3NldChicm93c2VyLT5tYWluVmlldygpLCAhZmxhZyk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAg
ICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChicm93c2VyLT5tYWluVmlldygp
LCBmbGFnKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKQotewotICAgIGNvbnN0IFN0
cmluZyBlbGVtZW50SWQoaWQtPnVzdHJpbmcoKS5pbXBsKCkpOwotICAgIGNvbnN0IEV2YXNfT2Jq
ZWN0KiBtYWluRnJhbWUgPSBicm93c2VyLT5tYWluRnJhbWUoKTsKLSAgICByZXR1cm4gRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQobWFpbkZyYW1lLCBlbGVtZW50SWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShicm93
c2VyLT5tYWluVmlldygpLCBuYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdmFsdWUtPnVz
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09i
amVjdFJlZiBvcHRpb25zQXJyYXkpCi17Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxl
bmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxl
bmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0g
ICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKLQot
ICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7Ci0gICAgICAgIGlm
ICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KLSAgICAgICAgaWYgKGVx
dWFscyhvcHRpb25OYW1lLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0gICAgICAgICAgICBvcHRpb25z
IHw9IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9w
dGlvbk5hbWUsICJBdFdvcmRTdGFydHMiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29y
ZTo6QXRXb3JkU3RhcnRzOwotICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIlRy
ZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdl
YkNvcmU6OlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OwotICAgICAgICBlbHNlIGlmIChl
cXVhbHMob3B0aW9uTmFtZSwgIkJhY2t3YXJkcyIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBX
ZWJDb3JlOjpCYWNrd2FyZHM7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAi
V3JhcEFyb3VuZCIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpXcmFwQXJvdW5k
OwotICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIlN0YXJ0SW5TZWxlY3Rpb24i
KSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJblNlbGVjdGlvbjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGJy
b3dzZXItPm1haW5WaWV3KCksIFdURjo6U3RyaW5nKHRhcmdldC0+dXN0cmluZygpLmltcGwoKSks
IG9wdGlvbnMpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFi
bGVkKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6aXNDb21tYW5kRW5hYmxlZChicm93c2VyLT5tYWluVmlldygpLCBuYW1lLT51c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENh
Y2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCi17Ci0gICAgdW5zaWduZWQgaW50IGNhY2hlVG90YWxD
YXBhY2l0eTsKLSAgICB1bnNpZ25lZCBpbnQgY2FjaGVNaW5EZWFkQ2FwYWNpdHk7Ci0gICAgdW5z
aWduZWQgaW50IGNhY2hlTWF4RGVhZENhcGFjaXR5OwotICAgIGRvdWJsZSBkZWFkRGVjb2RlZERh
dGFEZWxldGlvbkludGVydmFsOwotICAgIHVuc2lnbmVkIGludCBwYWdlQ2FjaGVDYXBhY2l0eTsK
LQotICAgIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBNYWMgY2FjaGUg
bW9kZWwgZW51bSBpbiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLmgu
Ci0gICAgc3dpdGNoIChjYWNoZU1vZGVsKSB7Ci0gICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1l
bnRWaWV3ZXI6Ci0gICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKLSAgICAgICAgY2FjaGVU
b3RhbENhcGFjaXR5ID0gMDsKLSAgICAgICAgY2FjaGVNaW5EZWFkQ2FwYWNpdHkgPSAwOwotICAg
ICAgICBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGRlYWREZWNvZGVkRGF0YURl
bGV0aW9uSW50ZXJ2YWwgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNhY2hlTW9k
ZWxEb2N1bWVudEJyb3dzZXI6Ci0gICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKLSAgICAg
ICAgY2FjaGVUb3RhbENhcGFjaXR5ID0gMTYgKiAxMDI0ICogMTAyNDsKLSAgICAgICAgY2FjaGVN
aW5EZWFkQ2FwYWNpdHkgPSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyA4OwotICAgICAgICBjYWNoZU1h
eERlYWRDYXBhY2l0eSA9IGNhY2hlVG90YWxDYXBhY2l0eSAvIDQ7Ci0gICAgICAgIGRlYWREZWNv
ZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YkNhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3NlcjoKLSAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkg
PSAzOwotICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkgPSAzMiAqIDEwMjQgKiAxMDI0OwotICAg
ICAgICBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9IGNhY2hlVG90YWxDYXBhY2l0eSAvIDQ7Ci0gICAg
ICAgIGNhY2hlTWF4RGVhZENhcGFjaXR5ID0gY2FjaGVUb3RhbENhcGFjaXR5IC8gMjsKLSAgICAg
ICAgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IDYwOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRyeWluZyB0byBzZXQgYW4g
aW52YWxpZCB2YWx1ZSAlZCBmb3IgdGhlIENhY2hlIG1vZGVsLiIsIGNhY2hlTW9kZWwpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXdrX3NldHRpbmdzX29iamVjdF9jYWNoZV9jYXBh
Y2l0eV9zZXQoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNo
ZVRvdGFsQ2FwYWNpdHkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0RGVhZERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFs
KTsKLSAgICBld2tfc2V0dGluZ3NfcGFnZV9jYWNoZV9jYXBhY2l0eV9zZXQocGFnZUNhY2hlQ2Fw
YWNpdHkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNl
clN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5
bGVTaGVldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgZXdrX3NldHRp
bmdzX2FwcGxpY2F0aW9uX2NhY2hlX2NsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcg
cXVvdGEpCi17Ci0gICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gZXdrX2ZyYW1lX3Nl
Y3VyaXR5X29yaWdpbl9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwotICAgIGV3a19zZWN1cml0
eV9vcmlnaW5fYXBwbGljYXRpb25fY2FjaGVfcXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOwotICAg
IGV3a19zZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcq
IHVybCkKLXsKLSAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfc2VjdXJpdHlf
b3JpZ2luX25ld19mcm9tX3N0cmluZyh1cmwtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICBld2tfc2VjdXJpdHlfb3JpZ2luX2FwcGxpY2F0aW9uX2NhY2hlX2NsZWFyKG9yaWdpbik7Ci0g
ICAgZXdrX3NlY3VyaXR5X29yaWdpbl9mcmVlKG9yaWdpbik7Ci19Ci0KLWxvbmcgbG9uZyBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5n
UmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sg
dXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5z
V2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2Fj
aGVzLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQotewotICAgIGV3a193ZWJfZGF0YWJhc2VfcmVtb3ZlX2Fs
bCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVu
c2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmln
aW4gPSBld2tfZnJhbWVfc2VjdXJpdHlfb3JpZ2luX2dldChicm93c2VyLT5tYWluRnJhbWUoKSk7
Ci0gICAgZXdrX3NlY3VyaXR5X29yaWdpbl93ZWJfZGF0YWJhc2VfcXVvdGFfc2V0KG9yaWdpbiwg
cXVvdGEpOwotICAgIGV3a19zZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOwotfQotCi1KU1Zh
bHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0Nv
bnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNp
Z25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCi17Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9y
VVJMU2NoZW1lKGZvcmJpZGRlbiwgV1RGOjpTdHJpbmcoc2NoZW1lLT51c3RyaW5nKCkuaW1wbCgp
KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCi17Ci0gICAgZXdr
X2ZyYW1lX2JhY2soYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQotewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2V0RGVmZXJzTG9hZGluZyhicm93c2VyLT5tYWluVmlldygpLCBk
ZWZlcnMpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGlt
dW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQotewotICAgIGV3a19zZXR0aW5nc19hcHBs
aWNhdGlvbl9jYWNoZV9tYXhfcXVvdGFfc2V0KHNpemUpOwotfQotCi1ib29sIExheW91dFRlc3RD
b250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1Jl
ZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQotewot
ICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKGJyb3dz
ZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
ZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Ci19Ci0KLWJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChK
U1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50
SWQpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VUcmFuc2l0
aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKLX0KLQot
dW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWN0aXZlQW5p
bWF0aW9uc0NvdW50KGJyb3dzZXItPm1haW5GcmFtZSgpKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIHRvQm9vbChKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZXF1YWxzKHZhbHVl
LCAidHJ1ZSIpIHx8IGVxdWFscyh2YWx1ZSwgIjEiKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQg
dG9JbnQoSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGF0b2kodmFsdWUtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0g
ICAgaWYgKGVxdWFscyhrZXksICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpKQotICAgICAgICBl
d2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX3NldChicm93c2VyLT5tYWluVmlldygpLCB0
b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0RGVmYXVsdEZv
bnRTaXplIikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0
KGJyb3dzZXItPm1haW5WaWV3KCksIHRvSW50KHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxz
KGtleSwgIldlYktpdE1pbmltdW1Gb250U2l6ZSIpKQotICAgICAgICBld2tfdmlld19zZXR0aW5n
X2ZvbnRfbWluaW11bV9zaXplX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0ludCh2YWx1ZSkp
OwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpKQotICAg
ICAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChicm93c2VyLT5tYWluVmll
dygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0V2Vi
R0xFbmFibGVkIikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3dlYmdsX3NldChi
cm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMo
a2V5LCAiV2ViS2l0RW5hYmxlQ2FyZXRCcm93c2luZyIpKQotICAgICAgICBld2tfdmlld19zZXR0
aW5nX2NhcmV0X2Jyb3dzaW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUp
KTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVu
Y2VLZXkiKSkKLSAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChicm93c2Vy
LT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAi
V2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkIikpCi0gICAgICAgIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2h5cGVybGlua19hdWRpdGluZ19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9C
b29sKHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdFRhYlRvTGlua3NQ
cmVmZXJlbmNlS2V5IikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfaW5jbHVkZV9saW5rc19p
bl9mb2N1c19jaGFpbl9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7Ci0g
ICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZCIpKQotICAgICAgICBld2tfdmlld19zZXR0aW5nX2FwcGxpY2F0aW9uX2NhY2hlX3Nl
dChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVh
bHMoa2V5LCAiV2ViS2l0TG9hZFNpdGVJY29uc0tleSIpKQotICAgICAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnNldExvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5n
KGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFs
cyhrZXksICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxlZCIpKQotICAgICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OnNldENTU0dyaWRMYXlvdXRFbmFibGVkKGJyb3dzZXItPm1haW5WaWV3
KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRXZWJB
dWRpb0VuYWJsZWQiKSkKLSAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ193ZWJfYXVkaW9fc2V0KGJy
b3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlIHRy
aWVkIHRvIG92ZXJyaWRlIHVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgdmFsdWUtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxG
cmFtZXMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjphZGRVc2VyU2NyaXB0KGJy
b3dzZXItPm1haW5WaWV3KCksIFN0cmluZyhzb3VyY2UtPnVzdHJpbmcoKS5pbXBsKCkpLCBydW5B
dFN0YXJ0LCBhbGxGcmFtZXMpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRV
c2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQotewotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWRkVXNlclN0eWxlU2hlZXQoYnJvd3Nlci0+bWFp
blZpZXcoKSwgV1RGOjpTdHJpbmcoc291cmNlLT51c3RyaW5nKCkuaW1wbCgpKSwgYWxsRnJhbWVz
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxv
cGVyX2V4dHJhc19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCi17Ci0gICAgZXdrX3ZpZXdfd2ViX2luc3BlY3Rv
cl9zaG93KGJyb3dzZXItPm1haW5WaWV3KCkpOwotICAgIGJyb3dzZXItPndhaXRJbnNwZWN0b3JM
b2FkRmluaXNoZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJ
bnNwZWN0b3IoKQotewotICAgIGV3a192aWV3X3dlYl9pbnNwZWN0b3JfY2xvc2UoYnJvd3Nlci0+
bWFpblZpZXcoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYnJvd3Nlci0+bWFp
blZpZXcoKSwgY2FsbElkLCBTdHJpbmcoc2NyaXB0LT51c3RyaW5nKCkuaW1wbCgpKSk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGJyb3dzZXItPm1haW5GcmFt
ZSgpLCB3b3JsZElELCBnbG9iYWxPYmplY3QsIFN0cmluZyhzY3JpcHQtPnVzdHJpbmcoKS5pbXBs
KCkpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCkKLXsKLSAgICBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0
KGJyb3dzZXItPm1haW5WaWV3KCkpOwotICAgIGlmICghaGlzdG9yeSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZXdrX2hpc3RvcnlfY2xlYXIoaGlzdG9yeSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0gICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGJyb3dzZXIt
Pm1haW5GcmFtZSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5l
d1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVz
dEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkK
LXsKLSAgICBld2tfZnJhbWVfZWRpdGFibGVfc2V0KGJyb3dzZXItPm1haW5GcmFtZSgpLCBFSU5B
X1RSVUUpOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiBub2RlT2JqZWN0KSBjb25zdAotewotICAgIFN0cmluZyBtYXJrZXJUZXh0Q2hhciA9IER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnRleHQsIG5vZGVP
YmplY3QpOwotICAgIGlmIChtYXJrZXJUZXh0Q2hhci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1hcmtlclRleHRDaGFyLnV0ZjgoKS5kYXRhKCkp
KTsKLSAgICByZXR1cm4gbWFya2VyVGV4dDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5n
UmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFib3J0TW9kYWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6
ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldFNlcmlhbGl6ZUhUVFBMb2Fk
cyhzZXJpYWxpemUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCi17Ci0gICAgZXdrX3Zp
ZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChicm93c2VyLT5tYWluVmlldygp
LCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQotewotICAgIEV3a19UZXh0
X0RpcmVjdGlvbiBld2tEaXJlY3Rpb247Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoZGlyZWN0aW9uLCAiYXV0byIpKQotICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVY
VF9ESVJFQ1RJT05fREVGQVVMVDsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGRpcmVjdGlvbiwgInJ0bCIpKQotICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVY
VF9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVDsKLSAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGRpcmVjdGlvbiwgImx0ciIpKQotICAgICAgICBld2tEaXJlY3Rpb24gPSBF
V0tfVEVYVF9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVDsKLSAgICBlbHNlIHsKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbiBjYWxs
ZWQgd2l0aCB1bmtub3duIGRpcmVjdGlvbjogJyVzJy5cbiIsIGRpcmVjdGlvbi0+dXN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXdrX3ZpZXdf
dGV4dF9kaXJlY3Rpb25fc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGV3a0RpcmVjdGlvbik7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZUNocm9tZUlucHV0RmllbGQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2ViVmlldygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxl
RmFjdG9yKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmlu
Z1JlZiB0aXRsZSkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eSgpCi17Ci0gICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9WSVNJQkxFLCB0cnVlKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3Qg
Y2hhciogdmlzaWJpbGl0eSkKLXsKLSAgICBTdHJpbmcgbmV3VmlzaWJpbGl0eSh2aXNpYmlsaXR5
KTsKLSAgICBpZiAobmV3VmlzaWJpbGl0eSA9PSAidmlzaWJsZSIpCi0gICAgICAgIGV3a192aWV3
X3Zpc2liaWxpdHlfc3RhdGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVXS19QQUdFX1ZJU0lC
SUxJVFlfU1RBVEVfVklTSUJMRSwgZmFsc2UpOwotICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkg
PT0gImhpZGRlbiIpCi0gICAgICAgIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVfc2V0KGJyb3dz
ZXItPm1haW5WaWV3KCksIEVXS19QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfSElEREVOLCBmYWxzZSk7
Ci0gICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAicHJlcmVuZGVyIikKLSAgICAgICAgZXdr
X3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0Vf
VklTSUJJTElUWV9TVEFURV9QUkVSRU5ERVIsIGZhbHNlKTsKLSAgICBlbHNlIGlmIChuZXdWaXNp
YmlsaXR5ID09ICJwcmV2aWV3IikKLSAgICAgICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9z
ZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9QUkVWSUVX
LCBmYWxzZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5n
UmVmIHJlc3BvbnNlKQotewotICAgIEV3a19JbnRlbnRfUmVxdWVzdCogcmVxdWVzdCA9IGJyb3dz
ZXItPmN1cnJlbnRJbnRlbnRSZXF1ZXN0KCk7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbmRXZWJJbnRlbnRSZXNw
b25zZShyZXF1ZXN0LCByZXNwb25zZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYgYWN0aW9uLCBKU1N0cmluZ1JlZiB0eXBlLCBK
U1N0cmluZ1JlZiBkYXRhKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZGVsaXZl
cldlYkludGVudChicm93c2VyLT5tYWluRnJhbWUoKSwgYWN0aW9uLCB0eXBlLCBkYXRhKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVy
dmFsKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL1Rlc3RSdW5uZXJCbGFja0VmbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL1Rlc3RSdW5uZXJCbGFja0VmbC5jcHAJKHJldmlzaW9uIDEy
NTMzNSkJKGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVy
RWZsLmNwcDoxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGVzdFJ1bm5lckJs
YWNrRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFs
b256byA8am1hbG9uem9AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgQ29s
bGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxh
eW91dFRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2lu
Y2x1ZGUgIkR1bXBSZW5kZXJUcmVlQ2hyb21lLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdVdGlscy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisjaW5j
bHVkZSAiV29ya1F1ZXVlSXRlbS5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCisjaW5jbHVk
ZSA8RVdlYktpdC5oPgorI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KKyNpbmNs
dWRlIDxLVVJMLmg+CisjaW5jbHVkZSA8ZWRpdGluZy9GaW5kT3B0aW9ucy5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKy8vIFNhbWUgYXMg
TWFjIGNhY2hlIG1vZGVsIGVudW0gaW4gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlcy5oLgorZW51bSB7CisgICAgV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyID0gMCwK
KyAgICBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyID0gMSwKKyAgICBXZWJDYWNoZU1vZGVs
UHJpbWFyeVdlYkJyb3dzZXIgPSAyCit9OworCitMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91
dFRlc3RDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
RGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit7Cisg
ICAgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tfdmlld19oaXN0b3J5X2dldChicm93c2VyLT5t
YWluVmlldygpKTsKKyAgICBpZiAoIWhpc3RvcnkpCisgICAgICAgIHJldHVybjsKKworICAgIEV3
a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fY3VycmVudF9n
ZXQoaGlzdG9yeSk7CisgICAgZXdrX2hpc3RvcnlfY2xlYXIoaGlzdG9yeSk7CisgICAgZXdrX2hp
c3RvcnlfaGlzdG9yeV9pdGVtX2FkZChoaXN0b3J5LCBpdGVtKTsKKyAgICBld2tfaGlzdG9yeV9o
aXN0b3J5X2l0ZW1fc2V0KGhpc3RvcnksIGl0ZW0pOworICAgIGV3a19oaXN0b3J5X2l0ZW1fZnJl
ZShpdGVtKTsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNv
ZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNv
ZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5n
TG9hZFJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZp
eCBmb3IgNjcyNzQ5NQorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpc3BsYXkoKQoreworICAgIGRpc3BsYXlXZWJWaWV3KCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVS
ZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29tcHV0
ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnRleHQsIHZhbHVlKTsKK30KKworSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQo
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
K30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VX
aWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpudW1iZXJPZlBhZ2VzKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwYWdlV2lkdGgsIHBh
Z2VIZWlnaHQpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVt
YmVyKSBjb25zdAoreworICAgIGNvbnN0IFN0cmluZyBwcm9wZXJ0eSA9IER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6cGFnZVByb3BlcnR5KGJyb3dzZXItPm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5h
bWUsIHBhZ2VOdW1iZXIpOworICAgIGlmIChwcm9wZXJ0eS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5VmFsdWUoQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHByb3BlcnR5LnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQg
cGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFy
Z2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAoreworICAg
IFN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnMgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBh
Z2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwYWdlTnVtYmVy
LCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1h
cmdpbkxlZnQpOworCisgICAgaWYgKHBhZ2VTaXplQW5kTWFyZ2lucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHJldHVyblZhbHVl
KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYWdlU2l6ZUFuZE1hcmdpbnMu
dXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworc2l6ZV90IExh
eW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3sKKyAgICBjb25zdCBF
d2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5W
aWV3KCkpOworICAgIGlmICghaGlzdG9yeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0
dXJuIGV3a19oaXN0b3J5X2JhY2tfbGlzdF9sZW5ndGgoaGlzdG9yeSkgKyBld2tfaGlzdG9yeV9m
b3J3YXJkX2xpc3RfbGVuZ3RoKGhpc3RvcnkpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OndvcmtlclRocmVhZENvdW50KCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQoreworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYg
IXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAg
ICAgZHVtcCgpOworICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOworICAgIHdhaXRGb3JQb2xpY3kg
PSBmYWxzZTsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xv
Y2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAg
ICBTdHJpbmcgcmVxdWVzdGVkVXJsKHVybC0+Y2hhcmFjdGVycygpLCB1cmwtPmxlbmd0aCgpKTsK
KyAgICBTdHJpbmcgcmVzb3VyY2VSb290OworICAgIFN0cmluZyByZXF1ZXN0ZWRSb290OworCisg
ICAgaWYgKHJlcXVlc3RlZFVybC5maW5kKCJMYXlvdXRUZXN0cyIpICE9IG5vdEZvdW5kKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBVUkwgY29udGFpbnMgTGF5b3V0VGVzdHMgd2UgbmVlZCB0byByZW1h
cCB0aGF0IHRvCisgICAgICAgIC8vIExPQ0FMX1JFU09VUkNFX1JPT1Qgd2hpY2ggaXMgdGhlIHBh
dGggb2YgdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeQorICAgICAgICAvLyB3aXRoaW4gdGhlIFdl
YktpdCBzb3VyY2UgdHJlZS4KKyAgICAgICAgcmVxdWVzdGVkUm9vdCA9ICIvdG1wL0xheW91dFRl
c3RzIjsKKyAgICAgICAgcmVzb3VyY2VSb290ID0gZ2V0ZW52KCJMT0NBTF9SRVNPVVJDRV9ST09U
Iik7CisgICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWRVcmwuZmluZCgidG1wIikgIT0gbm90Rm91bmQp
IHsKKyAgICAgICAgLy8gSWYgdGhlIFVSTCBpcyBhIGNoaWxkIG9mIC90bXAgd2UgbmVlZCB0byBj
b252ZXJ0IGl0IHRvIGJlIGEgY2hpbGQKKyAgICAgICAgLy8gRFVNUFJFTkRFUlRSRUVfVEVNUCBy
ZXBsYWNlIHRtcCB3aXRoIERVTVBSRU5ERVJUUkVFX1RFTVAKKyAgICAgICAgcmVxdWVzdGVkUm9v
dCA9ICIvdG1wIjsKKyAgICAgICAgcmVzb3VyY2VSb290ID0gZ2V0ZW52KCJEVU1QUkVOREVSVFJF
RV9URU1QIik7CisgICAgfQorCisgICAgc2l6ZV90IGluZGV4T2ZSb290U3RhcnQgPSByZXF1ZXN0
ZWRVcmwucmV2ZXJzZUZpbmQocmVxdWVzdGVkUm9vdCk7CisgICAgc2l6ZV90IGluZGV4T2ZTZXBh
cmF0b3JBZnRlclJvb3QgPSBpbmRleE9mUm9vdFN0YXJ0ICsgcmVxdWVzdGVkUm9vdC5sZW5ndGgo
KTsKKyAgICBTdHJpbmcgZnVsbFBhdGhUb1VybCA9ICJmaWxlOi8vIiArIHJlc291cmNlUm9vdCAr
IHJlcXVlc3RlZFVybC5zdWJzdHJpbmcoaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdCk7CisKKyAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZnVsbFBhdGhUb1VybC51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpT
U3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQoreworICAgIFdlYkNvcmU6OktVUkwg
YmFzZVVSTChXZWJDb3JlOjpLVVJMKCksIFN0cmluZzo6ZnJvbVVURjgoZXdrX2ZyYW1lX3VyaV9n
ZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpKSk7CisgICAgV2ViQ29yZTo6S1VSTCBhYnNvbHV0ZVVS
TChiYXNlVVJMLCBXVEY6OlN0cmluZyh1cmwtPnVzdHJpbmcoKS5pbXBsKCkpKTsKKworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc0Fic29sdXRlVVJMKAorICAgICAgICBBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYWJzb2x1dGVVUkwuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSkpOworCisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGpz
QWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQoreworICAgIGV3a192
aWV3X2VkaXRhYmxlX3NldChicm93c2VyLT5tYWluVmlldygpLCBhY2NlcHRzRWRpdGluZyk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9v
bCBhbHdheXNBY2NlcHRDb29raWVzKQoreworICAgIGV3a19jb29raWVzX3BvbGljeV9zZXQoYWx3
YXlzQWNjZXB0Q29va2llcyA/IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVMgOiBFV0tfQ09P
S0lFX0pBUl9BQ0NFUFRfTkVWRVIpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKK3sK
KyAgICBwb2xpY3lEZWxlZ2F0ZUVuYWJsZWQgPSBlbmFibGVkOworICAgIHBvbGljeURlbGVnYXRl
UGVybWlzc2l2ZSA9IHBlcm1pc3NpdmU7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit7CisgICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
dHJ1ZSwgZmFsc2UpOworICAgIHdhaXRGb3JQb2xpY3kgPSB0cnVlOworICAgIHNldFdhaXRUb0R1
bXAodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBv
bGljeShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNT
dHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKK3sKKyAgICBXZWJDb3JlOjpL
VVJMIGt1cmw7CisgICAga3VybC5zZXRQcm90b2NvbChTdHJpbmcocHJvdG9jb2wtPmNoYXJhY3Rl
cnMoKSwgcHJvdG9jb2wtPmxlbmd0aCgpKSk7CisgICAga3VybC5zZXRIb3N0KFN0cmluZyhob3N0
LT5jaGFyYWN0ZXJzKCksIGhvc3QtPmxlbmd0aCgpKSk7CisKKyAgICBld2tfc2VjdXJpdHlfcG9s
aWN5X3doaXRlbGlzdF9vcmlnaW5fYWRkKHNvdXJjZU9yaWdpbi0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGt1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaW5jbHVkZVN1YmRvbWFpbnMpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIHByb3RvY29sLCBK
U1N0cmluZ1JlZiBob3N0LCBib29sIGluY2x1ZGVTdWJkb21haW5zKQoreworICAgIFdlYkNvcmU6
OktVUkwga3VybDsKKyAgICBrdXJsLnNldFByb3RvY29sKFN0cmluZyhwcm90b2NvbC0+Y2hhcmFj
dGVycygpLCBwcm90b2NvbC0+bGVuZ3RoKCkpKTsKKyAgICBrdXJsLnNldEhvc3QoU3RyaW5nKGhv
c3QtPmNoYXJhY3RlcnMoKSwgaG9zdC0+bGVuZ3RoKCkpKTsKKworICAgIGV3a19zZWN1cml0eV9w
b2xpY3lfd2hpdGVsaXN0X29yaWdpbl9kZWwoc291cmNlT3JpZ2luLT51c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwga3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpbmNsdWRlU3ViZG9tYWlucyk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNw
b25kZXIoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdVc2VyU3R5bGVTaGVldDsKK3N0YXRpYyBib29sIGdV
c2VyU3R5bGVTaGVldEVuYWJsZWQgPSB0cnVlOworCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGdVc2VyU3R5bGVT
aGVldEVuYWJsZWQgPSBmbGFnOworICAgIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0
X3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnID8gZ1VzZXJTdHlsZVNoZWV0LmRhdGEoKSA6
IDApOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit7CisgICAgZ1VzZXJTdHlsZVNoZWV0ID0gcGF0aC0+
dXN0cmluZygpLnV0ZjgoKTsKKworICAgIGlmIChnVXNlclN0eWxlU2hlZXRFbmFibGVkKQorICAg
ICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnNldFZhbHVlRm9yVXNlcihjb250ZXh0LCBub2RlT2JqZWN0LCBXVEY6OlN0
cmluZyh2YWx1ZS0+dXN0cmluZygpLmltcGwoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQoreworICAg
IEV2YXNfT2JqZWN0KiB2aWV3ID0gYnJvd3Nlci0+bWFpblZpZXcoKTsKKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChlcXVhbHMobW9kZSwgIndpbmRvd2VkIikpCisg
ICAgICAgIGV3a192aWV3X21vZGVfc2V0KHZpZXcsIEVXS19WSUVXX01PREVfV0lORE9XRUQpOwor
ICAgIGVsc2UgaWYgKGVxdWFscyhtb2RlLCAiZmxvYXRpbmciKSkKKyAgICAgICAgZXdrX3ZpZXdf
bW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9GTE9BVElORyk7CisgICAgZWxzZSBpZiAoZXF1
YWxzKG1vZGUsICJmdWxsc2NyZWVuIikpCisgICAgICAgIGV3a192aWV3X21vZGVfc2V0KHZpZXcs
IEVXS19WSUVXX01PREVfRlVMTFNDUkVFTik7CisgICAgZWxzZSBpZiAoZXF1YWxzKG1vZGUsICJt
YXhpbWl6ZWQiKSkKKyAgICAgICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9E
RV9NQVhJTUlaRUQpOworICAgIGVsc2UgaWYgKGVxdWFscyhtb2RlLCAibWluaW1pemVkIikpCisg
ICAgICAgIGV3a192aWV3X21vZGVfc2V0KHZpZXcsIEVXS19WSUVXX01PREVfTUlOSU1JWkVEKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJyb3dzZXItPm1haW5W
aWV3KCksIGZsYWcpOworfQorCitzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ0Zp
cmVkKHZvaWQqKQoreworICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IDA7CisgICAgZ0xheW91dFRl
c3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgcmV0dXJu
IEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCit7CisgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB0aW1lb3V0U2Vjb25kcyA9IDMwOworCisgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGls
RG9uZTsKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICF3YWl0VG9EdW1wV2F0Y2hkb2cpCisgICAg
ICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IGVjb3JlX3RpbWVyX2FkZCh0aW1lb3V0U2Vjb25kcywg
d2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDApOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndpbmRvd0NvdW50KCkKK3sKKyAgICByZXR1cm4gYnJvd3Nlci0+ZXh0cmFWaWV3cygpLnNp
emUoKSArIDE7IC8vICsgMSBmb3IgdGhlIG1haW4gdmlldy4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAg
ZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChicm93c2VyLT5tYWluVmlldygp
LCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19zY3Jp
cHRzX2Nhbl9hY2Nlc3NfY2xpcGJvYXJkX3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9v
bCBmbGFnKQoreworICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3hzc19hdWRpdG9yX3NldChi
cm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdf
c2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwg
ZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25h
dmlnYXRpb25fc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJyb3dzZXItPm1haW5WaWV3KCksIGZs
YWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkK
K3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldEF1dG9maWxsZWQoY29udGV4dCwg
bm9kZU9iamVjdCwgYXV0b2ZpbGxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRpc2FibGVJbWFnZUxvYWRpbmcoKQoreworICAgIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2Fk
X2ltYWdlc19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRUlOQV9GQUxTRSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sLCBkb3Vi
bGUsIGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1LgorICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJy
b3IoaW50LCBKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9s
b2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxv
dykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVz
dHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30KKworaW50
IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24g
bGF5b3V0IHRlc3RzLgorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmLCBkb3VibGUsIEpTU3Ry
aW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlv
dXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zOTQ4NS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVj
aElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX3BhdGhf
c2V0KDApOworCisgICAgaWYgKCFlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgZGF0YWJhc2VQYXRoOworICAgIGNvbnN0IGNoYXIqIHRlbXBEaXIgPSBnZXRlbnYoIlRNUERJ
UiIpOworCisgICAgaWYgKHRlbXBEaXIpCisgICAgICAgIGRhdGFiYXNlUGF0aCA9IFN0cmluZzo6
ZnJvbVVURjgodGVtcERpcik7CisgICAgZWxzZSBpZiAodGVtcERpciA9IGdldGVudigiVEVNUCIp
KQorICAgICAgICBkYXRhYmFzZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4KHRlbXBEaXIpOworICAg
IGVsc2UKKyAgICAgICAgZGF0YWJhc2VQYXRoID0gU3RyaW5nOjpmcm9tVVRGOCgiL3RtcCIpOwor
CisgICAgZGF0YWJhc2VQYXRoLmFwcGVuZCgiL0R1bXBSZW5kZXJUcmVlL0ljb25EYXRhYmFzZSIp
OworCisgICAgaWYgKGVjb3JlX2ZpbGVfbWtwYXRoKGRhdGFiYXNlUGF0aC51dGY4KCkuZGF0YSgp
KSkKKyAgICAgICAgZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoZGF0YWJhc2VQ
YXRoLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0
aW5nX3NjcmlwdHNfY2FuX29wZW5fd2luZG93c19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgIWZs
YWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChi
b29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkK
K3sKKyAgICBjb25zdCBTdHJpbmcgZWxlbWVudElkKGlkLT51c3RyaW5nKCkuaW1wbCgpKTsKKyAg
ICBjb25zdCBFdmFzX09iamVjdCogbWFpbkZyYW1lID0gYnJvd3Nlci0+bWFpbkZyYW1lKCk7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZWxlbWVudERvZXNBdXRvQ29tcGxl
dGVGb3JFbGVtZW50V2l0aElkKG1haW5GcmFtZSwgZWxlbWVudElkKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdS
ZWYgdmFsdWUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpleGVjdXRlQ29yZUNv
bW1hbmRCeU5hbWUoYnJvd3Nlci0+bWFpblZpZXcoKSwgbmFtZS0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIHZhbHVlLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5n
UmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQoreworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5h
bWUuZ2V0KCksIDApOworICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6RmluZE9wdGlvbnMg
b3B0aW9ucyA9IDA7CisKKyAgICBjb25zdCBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWVSZWYgdmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGks
IDApOworICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0
aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwor
CisgICAgICAgIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQorICAg
ICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVs
c2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQXRXb3JkU3RhcnRzIikpCisgICAgICAgICAgICBv
cHRpb25zIHw9IFdlYkNvcmU6OkF0V29yZFN0YXJ0czsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxz
KG9wdGlvbk5hbWUsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCIpKQorICAgICAgICAg
ICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJCYWNrd2FyZHMiKSkKKyAgICAgICAg
ICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6QmFja3dhcmRzOworICAgICAgICBlbHNlIGlmIChlcXVh
bHMob3B0aW9uTmFtZSwgIldyYXBBcm91bmQiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2Vi
Q29yZTo6V3JhcEFyb3VuZDsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJT
dGFydEluU2VsZWN0aW9uIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OlN0YXJ0
SW5TZWxlY3Rpb247CisgICAgfQorCisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6ZmluZFN0cmluZyhicm93c2VyLT5tYWluVmlldygpLCBXVEY6OlN0cmluZyh0YXJnZXQtPnVz
dHJpbmcoKS5pbXBsKCkpLCBvcHRpb25zKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OmlzQ29tbWFuZEVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXco
KSwgbmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCBjYWNoZU1vZGVsKQoreworICAgIHVuc2lnbmVk
IGludCBjYWNoZVRvdGFsQ2FwYWNpdHk7CisgICAgdW5zaWduZWQgaW50IGNhY2hlTWluRGVhZENh
cGFjaXR5OworICAgIHVuc2lnbmVkIGludCBjYWNoZU1heERlYWRDYXBhY2l0eTsKKyAgICBkb3Vi
bGUgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBpbnQgcGFn
ZUNhY2hlQ2FwYWNpdHk7CisKKyAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIGRlcml2ZWQgZnJv
bSB0aGUgTWFjIGNhY2hlIG1vZGVsIGVudW0gaW4gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlcy5oLgorICAgIHN3aXRjaCAoY2FjaGVNb2RlbCkgeworICAgIGNhc2UgV2Vi
Q2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOgorICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7
CisgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSA9IDA7CisgICAgICAgIGNhY2hlTWluRGVhZENh
cGFjaXR5ID0gMDsKKyAgICAgICAgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOworICAgICAgICBk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOgorICAgICAgICBwYWdlQ2FjaGVDYXBh
Y2l0eSA9IDI7CisgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSA9IDE2ICogMTAyNCAqIDEwMjQ7
CisgICAgICAgIGNhY2hlTWluRGVhZENhcGFjaXR5ID0gY2FjaGVUb3RhbENhcGFjaXR5IC8gODsK
KyAgICAgICAgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyA0Owor
ICAgICAgICBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gMDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXZWJDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXI6CisgICAgICAgIHBh
Z2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5ID0gMzIgKiAx
MDI0ICogMTAyNDsKKyAgICAgICAgY2FjaGVNaW5EZWFkQ2FwYWNpdHkgPSBjYWNoZVRvdGFsQ2Fw
YWNpdHkgLyA0OworICAgICAgICBjYWNoZU1heERlYWRDYXBhY2l0eSA9IGNhY2hlVG90YWxDYXBh
Y2l0eSAvIDI7CisgICAgICAgIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSA2MDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0
cnlpbmcgdG8gc2V0IGFuIGludmFsaWQgdmFsdWUgJWQgZm9yIHRoZSBDYWNoZSBtb2RlbC4iLCBj
YWNoZU1vZGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV3a19zZXR0aW5nc19v
YmplY3RfY2FjaGVfY2FwYWNpdHlfc2V0KGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERl
YWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRh
RGVsZXRpb25JbnRlcnZhbCk7CisgICAgZXdrX3NldHRpbmdzX3BhZ2VfY2FjaGVfY2FwYWNpdHlf
c2V0KHBhZ2VDYWNoZUNhcGFjaXR5KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQ
ZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQor
eworICAgIGV3a19zZXR0aW5nc19hcHBsaWNhdGlvbl9jYWNoZV9jbGVhcigpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5z
aWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIEV3a19TZWN1cml0eV9PcmlnaW4qIG9yaWdp
biA9IGV3a19mcmFtZV9zZWN1cml0eV9vcmlnaW5fZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpKTsK
KyAgICBld2tfc2VjdXJpdHlfb3JpZ2luX2FwcGxpY2F0aW9uX2NhY2hlX3F1b3RhX3NldChvcmln
aW4sIHF1b3RhKTsKKyAgICBld2tfc2VjdXJpdHlfb3JpZ2luX2ZyZWUob3JpZ2luKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2lu
KE9wYXF1ZUpTU3RyaW5nKiB1cmwpCit7CisgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2lu
ID0gZXdrX3NlY3VyaXR5X29yaWdpbl9uZXdfZnJvbV9zdHJpbmcodXJsLT51c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgZXdrX3NlY3VyaXR5X29yaWdpbl9hcHBsaWNhdGlvbl9jYWNoZV9j
bGVhcihvcmlnaW4pOworICAgIGV3a19zZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOworfQor
Citsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBv
cnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4uCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250YWlu
IGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworbG9uZyBsb25nIExheW91dFRlc3RD
b250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICBld2tfd2ViX2Rh
dGFiYXNlX3JlbW92ZV9hbGwoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgRXdrX1NlY3Vy
aXR5X09yaWdpbiogb3JpZ2luID0gZXdrX2ZyYW1lX3NlY3VyaXR5X29yaWdpbl9nZXQoYnJvd3Nl
ci0+bWFpbkZyYW1lKCkpOworICAgIGV3a19zZWN1cml0eV9vcmlnaW5fd2ViX2RhdGFiYXNlX3F1
b3RhX3NldChvcmlnaW4sIHF1b3RhKTsKKyAgICBld2tfc2VjdXJpdHlfb3JpZ2luX2ZyZWUob3Jp
Z2luKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhM
b2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5v
dGlmaWNhdGlvbnModW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVs
YXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYg
c2NoZW1lKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIFdURjo6U3RyaW5nKHNjaGVtZS0+
dXN0cmluZygpLmltcGwoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0Jh
Y2soKQoreworICAgIGV3a19mcmFtZV9iYWNrKGJyb3dzZXItPm1haW5GcmFtZSgpKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykK
K3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldERlZmVyc0xvYWRpbmcoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgZGVmZXJzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBl
d2tfc2V0dGluZ3NfYXBwbGljYXRpb25fY2FjaGVfbWF4X3F1b3RhX3NldChzaXplKTsKK30KKwor
Ym9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVm
IGVsZW1lbnRJZCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVz
ZUFuaW1hdGlvbihicm93c2VyLT5tYWluRnJhbWUoKSwgYW5pbWF0aW9uTmFtZS0+dXN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUp
OworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNT
dHJpbmdSZWYgZWxlbWVudElkKQoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OnBhdXNlVHJhbnNpdGlvbihicm93c2VyLT5tYWluRnJhbWUoKSwgcHJvcGVydHlOYW1lLT51
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgdGltZSk7Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChicm93c2VyLT5tYWluRnJhbWUoKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCB0b0Jvb2woSlNTdHJpbmdSZWYgdmFsdWUpCit7CisgICAgcmV0
dXJuIGVxdWFscyh2YWx1ZSwgInRydWUiKSB8fCBlcXVhbHModmFsdWUsICIxIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgaW50IHRvSW50KEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIHJldHVybiBh
dG9pKHZhbHVlLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5n
UmVmIHZhbHVlKQoreworICAgIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0SmF2YVNjcmlwdEVuYWJs
ZWQiKSkKKyAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxzKGtleSwg
IldlYktpdERlZmF1bHRGb250U2l6ZSIpKQorICAgICAgICBld2tfdmlld19zZXR0aW5nX2ZvbnRf
ZGVmYXVsdF9zaXplX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0ludCh2YWx1ZSkpOworICAg
IGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKSkKKyAgICAgICAg
ZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXco
KSwgdG9JbnQodmFsdWUpKTsKKyAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0UGx1Z2lu
c0VuYWJsZWQiKSkKKyAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19zZXQo
YnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxz
KGtleSwgIldlYktpdFdlYkdMRW5hYmxlZCIpKQorICAgICAgICBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV93ZWJnbF9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7CisgICAg
ZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdEVuYWJsZUNhcmV0QnJvd3NpbmciKSkKKyAgICAg
ICAgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoYnJvd3Nlci0+bWFpblZpZXco
KSwgdG9Cb29sKHZhbHVlKSk7CisgICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdFVzZXNQ
YWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikpCisgICAgICAgIGV3a192aWV3X3NldHRpbmdfcGFnZV9j
YWNoZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7CisgICAgZWxzZSBp
ZiAoZXF1YWxzKGtleSwgIldlYktpdEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCIpKQorICAgICAg
ICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmdfc2V0KGJyb3dzZXIt
Pm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOworICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJX
ZWJLaXRUYWJUb0xpbmtzUHJlZmVyZW5jZUtleSIpKQorICAgICAgICBld2tfdmlld19zZXR0aW5n
X2luY2x1ZGVfbGlua3NfaW5fZm9jdXNfY2hhaW5fc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRv
Qm9vbCh2YWx1ZSkpOworICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRPZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQiKSkKKyAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19hcHBs
aWNhdGlvbl9jYWNoZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7Cisg
ICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdExvYWRTaXRlSWNvbnNLZXkiKSkKKyAgICAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRMb2Fkc1NpdGVJY29uc0lnbm9yaW5nSW1h
Z2VMb2FkaW5nU2V0dGluZyhicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKKyAg
ICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0Q1NTR3JpZExheW91dEVuYWJsZWQiKSkKKyAg
ICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRDU1NHcmlkTGF5b3V0RW5hYmxlZChi
cm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKKyAgICBlbHNlIGlmIChlcXVhbHMo
a2V5LCAiV2ViS2l0V2ViQXVkaW9FbmFibGVkIikpCisgICAgICAgIGV3a192aWV3X3NldHRpbmdf
d2ViX2F1ZGlvX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKKyAgICBl
bHNlCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJy
aWRlUHJlZmVyZW5jZSB0cmllZCB0byBvdmVycmlkZSB1bmtub3duIHByZWZlcmVuY2UgJyVzJy5c
biIsIHZhbHVlLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0
U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
YWRkVXNlclNjcmlwdChicm93c2VyLT5tYWluVmlldygpLCBTdHJpbmcoc291cmNlLT51c3RyaW5n
KCkuaW1wbCgpKSwgcnVuQXRTdGFydCwgYWxsRnJhbWVzKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFs
bEZyYW1lcykKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFkZFVzZXJTdHlsZVNo
ZWV0KGJyb3dzZXItPm1haW5WaWV3KCksIFdURjo6U3RyaW5nKHNvdXJjZS0+dXN0cmluZygpLmlt
cGwoKSksIGFsbEZyYW1lcyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERl
dmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGVuYWJs
ZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQoreworICAgIGV3a192
aWV3X3dlYl9pbnNwZWN0b3Jfc2hvdyhicm93c2VyLT5tYWluVmlldygpKTsKKyAgICBicm93c2Vy
LT53YWl0SW5zcGVjdG9yTG9hZEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3sKKyAgICBld2tfdmlld193ZWJfaW5zcGVjdG9y
X2Nsb3NlKGJyb3dzZXItPm1haW5WaWV3KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3Jp
cHQpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0ZUluV2ViSW5zcGVj
dG9yKGJyb3dzZXItPm1haW5WaWV3KCksIGNhbGxJZCwgU3RyaW5nKHNjcmlwdC0+dXN0cmluZygp
LmltcGwoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNT
dHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChi
cm93c2VyLT5tYWluRnJhbWUoKSwgd29ybGRJRCwgZ2xvYmFsT2JqZWN0LCBTdHJpbmcoc2NyaXB0
LT51c3RyaW5nKCkuaW1wbCgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tf
dmlld19oaXN0b3J5X2dldChicm93c2VyLT5tYWluVmlldygpKTsKKyAgICBpZiAoIWhpc3Rvcnkp
CisgICAgICAgIHJldHVybjsKKworICAgIGV3a19oaXN0b3J5X2NsZWFyKGhpc3RvcnkpOworfQor
Citib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQor
eworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldyhicm93c2VyLT5tYWluRnJhbWUoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYsIEpTU3Ry
aW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmll
d0VkaXRhYmxlKGJvb2wpCit7CisgICAgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChicm93c2VyLT5t
YWluRnJhbWUoKSwgRUlOQV9UUlVFKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK3sKKyAgICBTdHJpbmcgbWFya2Vy
VGV4dENoYXIgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om1hcmtlclRleHRGb3JMaXN0SXRl
bShjb250ZXh0LCBub2RlT2JqZWN0KTsKKyAgICBpZiAobWFya2VyVGV4dENoYXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJr
ZXJUZXh0KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtYXJrZXJUZXh0Q2hh
ci51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIG1hcmtlclRleHQ7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3Ry
aW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9h
ZHMoYm9vbCBzZXJpYWxpemUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRT
ZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVydmFs
KQoreworICAgIGV3a192aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgbWluaW11bVRpbWVySW50ZXJ2YWwpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikK
K3sKKyAgICBFd2tfVGV4dF9EaXJlY3Rpb24gZXdrRGlyZWN0aW9uOworICAgIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVjdGlvbiwgImF1dG8iKSkKKyAgICAgICAgZXdrRGly
ZWN0aW9uID0gRVdLX1RFWFRfRElSRUNUSU9OX0RFRkFVTFQ7CisgICAgZWxzZSBpZiAoSlNTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhkaXJlY3Rpb24sICJydGwiKSkKKyAgICAgICAgZXdrRGly
ZWN0aW9uID0gRVdLX1RFWFRfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQ7CisgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhkaXJlY3Rpb24sICJsdHIiKSkKKyAgICAgICAg
ZXdrRGlyZWN0aW9uID0gRVdLX1RFWFRfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7CisgICAgZWxz
ZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRl
eHREaXJlY3Rpb24gY2FsbGVkIHdpdGggdW5rbm93biBkaXJlY3Rpb246ICclcycuXG4iLCBkaXJl
Y3Rpb24tPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGV3a192aWV3X3RleHRfZGlyZWN0aW9uX3NldChicm93c2VyLT5tYWluVmlldygpLCBl
d2tEaXJlY3Rpb24pOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJ
bnB1dEZpZWxkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0
aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQoreworICAgIGV3a192aWV3X3Zpc2liaWxpdHlf
c3RhdGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVXS19QQUdFX1ZJU0lCSUxJVFlfU1RBVEVf
VklTSUJMRSwgdHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VW
aXNpYmlsaXR5KGNvbnN0IGNoYXIqIHZpc2liaWxpdHkpCit7CisgICAgU3RyaW5nIG5ld1Zpc2li
aWxpdHkodmlzaWJpbGl0eSk7CisgICAgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInZpc2libGUiKQor
ICAgICAgICBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChicm93c2VyLT5tYWluVmlldygp
LCBFV0tfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1ZJU0lCTEUsIGZhbHNlKTsKKyAgICBlbHNlIGlm
IChuZXdWaXNpYmlsaXR5ID09ICJoaWRkZW4iKQorICAgICAgICBld2tfdmlld192aXNpYmlsaXR5
X3N0YXRlX3NldChicm93c2VyLT5tYWluVmlldygpLCBFV0tfUEFHRV9WSVNJQklMSVRZX1NUQVRF
X0hJRERFTiwgZmFsc2UpOworICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInByZXJlbmRl
ciIpCisgICAgICAgIGV3a192aWV3X3Zpc2liaWxpdHlfc3RhdGVfc2V0KGJyb3dzZXItPm1haW5W
aWV3KCksIEVXS19QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfUFJFUkVOREVSLCBmYWxzZSk7CisgICAg
ZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAicHJldmlldyIpCisgICAgICAgIGV3a192aWV3X3Zp
c2liaWxpdHlfc3RhdGVfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVXS19QQUdFX1ZJU0lCSUxJ
VFlfU1RBVEVfUFJFVklFVywgZmFsc2UpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRS
ZXNwb25zZShKU1N0cmluZ1JlZiByZXNwb25zZSkKK3sKKyAgICBFd2tfSW50ZW50X1JlcXVlc3Qq
IHJlcXVlc3QgPSBicm93c2VyLT5jdXJyZW50SW50ZW50UmVxdWVzdCgpOworICAgIGlmICghcmVx
dWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpz
ZW5kV2ViSW50ZW50UmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmIGFjdGlvbiwgSlNT
dHJpbmdSZWYgdHlwZSwgSlNTdHJpbmdSZWYgZGF0YSkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OmRlbGl2ZXJXZWJJbnRlbnQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIGFjdGlvbiwg
dHlwZSwgZGF0YSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXN0UnVubmVyQmxhY2tFZmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXN0UnVubmVyQmxhY2tFZmwu
Y3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGVzdFJ1
bm5lckJsYWNrRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgor
I2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAj
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIKQEAgLTYyLDE2ICs2MiwxNiBAQCBlbnVt
IHsKICAgICBXZWJDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIgPSAyCiB9OwogCi1MYXlvdXRU
ZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKK1Rlc3RSdW5uZXI6On5UZXN0
UnVubmVyKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dl
ZFVSTChKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0
cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
QmFja0ZvcndhcmRMaXN0KCkKIHsKICAgICBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3
X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwogICAgIGlmICghaGlzdG9yeSkKQEAg
LTg0LDUxICs4NCw1MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3
CiAgICAgZXdrX2hpc3RvcnlfaXRlbV9mcmVlKGl0ZW0pOwogfQogCi1KU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZikKK0pTU3Ry
aW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotSlNTdHJpbmdSZWYgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYpCitKU1N0
cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit2b2lkIFRlc3RSdW5u
ZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6ZGlzcGxheSgpCiB7CiAgICAgZGlzcGxheVdlYlZpZXcoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9pZCBUZXN0UnVubmVyOjprZWVwV2Vi
SGlzdG9yeSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotSlNWYWx1ZVJlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVy
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnRleHQsIHZhbHVlKTsKIH0K
IAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRy
ZWVBc1RleHQoKSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Omxh
eWVyVHJlZUFzVGV4dCgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1
cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiIikpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFn
ZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoraW50IFRlc3RSdW5uZXI6Om51
bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQogewogICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXMoYnJvd3Nlci0+bWFp
bkZyYW1lKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHBy
b3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gVGVzdFJ1bm5lcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50
IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RyaW5nIHByb3BlcnR5ID0gRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpwYWdlUHJvcGVydHkoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHBy
b3BlcnR5TmFtZSwgcGFnZU51bWJlcik7CiAgICAgaWYgKHByb3BlcnR5LmlzRW1wdHkoKSkKQEAg
LTEzOCw3ICsxMzgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRy
CiAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBh
Z2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdp
blJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKK0pTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhp
bnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQg
bWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAogewog
ICAgIFN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnMgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwYWdlTnVt
YmVyLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20s
IG1hcmdpbkxlZnQpOwogCkBAIC0xNDksNyArMTQ5LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cgogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAotc2l6ZV90
IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3NpemVfdCBUZXN0
UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIHsKICAgICBjb25zdCBFd2tfSGlzdG9yeSog
aGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwogICAg
IGlmICghaGlzdG9yeSkKQEAgLTE1OCwxMiArMTU4LDEyIEBAIHNpemVfdCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d2ViSGlzdG9yeUkKICAgICByZXR1cm4gZXdrX2hpc3RvcnlfYmFja19saXN0X2xl
bmd0aChoaXN0b3J5KSArIGV3a19oaXN0b3J5X2ZvcndhcmRfbGlzdF9sZW5ndGgoaGlzdG9yeSk7
CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgp
IGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6d29ya2VyVGhyZWFkQ291bnQo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit2b2lkIFRl
c3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExv
YWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKICAgICAgICAgZHVt
cCgpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlm
eURvbmUoKQogICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKIH0KIAotSlNTdHJpbmdSZWYgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTU3RyaW5nUmVmIHVybCkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OnBhdGhUb0xvY2Fs
UmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKIHsKICAgICBT
dHJpbmcgcmVxdWVzdGVkVXJsKHVybC0+Y2hhcmFjdGVycygpLCB1cmwtPmxlbmd0aCgpKTsKICAg
ICBTdHJpbmcgcmVzb3VyY2VSb290OwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEpTU3RyaW5nUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG8KICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoZnVsbFBhdGhUb1VybC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYg
dGFyZ2V0KQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0
cmluZ1JlZiB0YXJnZXQpCiB7CiAgICAgV2ViQ29yZTo6S1VSTCBiYXNlVVJMKFdlYkNvcmU6OktV
UkwoKSwgU3RyaW5nOjpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChicm93c2VyLT5tYWluRnJh
bWUoKSkpKTsKICAgICBXZWJDb3JlOjpLVVJMIGFic29sdXRlVVJMKGJhc2VVUkwsIFdURjo6U3Ry
aW5nKHVybC0+dXN0cmluZygpLmltcGwoKSkpOwpAQCAtMjA4LDM1ICsyMDgsMzUgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTUwogICAgIFdvcmtRdWV1ZTo6c2hhcmVk
KCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2Nl
cHRzRWRpdGluZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2Nl
cHRzRWRpdGluZykKIHsKICAgICBld2tfdmlld19lZGl0YWJsZV9zZXQoYnJvd3Nlci0+bWFpblZp
ZXcoKSwgYWNjZXB0c0VkaXRpbmcpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMp
CiB7CiAgICAgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChhbHdheXNBY2NlcHRDb29raWVzID8gRVdL
X0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUyA6IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUik7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRl
KGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQordm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0
b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKIHsKICAgICBw
b2xpY3lEZWxlZ2F0ZUVuYWJsZWQgPSBlbmFibGVkOwogICAgIHBvbGljeURlbGVnYXRlUGVybWlz
c2l2ZSA9IHBlcm1pc3NpdmU7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRG
b3JQb2xpY3lEZWxlZ2F0ZSgpCit2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0
ZSgpCiB7CiAgICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSwgZmFsc2UpOwogICAgIHdh
aXRGb3JQb2xpY3kgPSB0cnVlOwogICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiwgSlNT
dHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1Jl
ZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdS
ZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwg
Ym9vbCBpbmNsdWRlU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90
b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKIHsKICAgICBX
ZWJDb3JlOjpLVVJMIGt1cmw7CiAgICAga3VybC5zZXRQcm90b2NvbChTdHJpbmcocHJvdG9jb2wt
PmNoYXJhY3RlcnMoKSwgcHJvdG9jb2wtPmxlbmd0aCgpKSk7CkBAIC0yNDUsNyArMjQ1LDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZQogICAgIGV3a19zZWN1cml0
eV9wb2xpY3lfd2hpdGVsaXN0X29yaWdpbl9hZGQoc291cmNlT3JpZ2luLT51c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwga3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpbmNsdWRlU3ViZG9tYWlu
cyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9j
b2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCit2b2lkIFRlc3RS
dW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJj
ZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5j
bHVkZVN1YmRvbWFpbnMpCiB7CiAgICAgV2ViQ29yZTo6S1VSTCBrdXJsOwogICAgIGt1cmwuc2V0
UHJvdG9jb2woU3RyaW5nKHByb3RvY29sLT5jaGFyYWN0ZXJzKCksIHByb3RvY29sLT5sZW5ndGgo
KSkpOwpAQCAtMjU0LDE3ICsyNTQsMTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVt
b3ZlT3JpZ2luQQogICAgIGV3a19zZWN1cml0eV9wb2xpY3lfd2hpdGVsaXN0X29yaWdpbl9kZWwo
c291cmNlT3JpZ2luLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwga3VybC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBpbmNsdWRlU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29s
KQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29s
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0yNzIsMTMgKzI3MiwxMyBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hCiBzdGF0aWMgQ1N0cmluZyBnVXNl
clN0eWxlU2hlZXQ7CiBzdGF0aWMgYm9vbCBnVXNlclN0eWxlU2hlZXRFbmFibGVkID0gdHJ1ZTsK
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJv
b2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wg
ZmxhZykKIHsKICAgICBnVXNlclN0eWxlU2hlZXRFbmFibGVkID0gZmxhZzsKICAgICBld2tfdmll
d19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyA/
IGdVc2VyU3R5bGVTaGVldC5kYXRhKCkgOiAwKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCiB7
CiAgICAgZ1VzZXJTdHlsZVNoZWV0ID0gcGF0aC0+dXN0cmluZygpLnV0ZjgoKTsKIApAQCAtMjg2
LDEyICsyODYsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlUwog
ICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmpl
Y3QsIEpTU3RyaW5nUmVmIHZhbHVlKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
c2V0VmFsdWVGb3JVc2VyKGNvbnRleHQsIG5vZGVPYmplY3QsIFdURjo6U3RyaW5nKHZhbHVlLT51
c3RyaW5nKCkuaW1wbCgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZp
ZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCiB7CiAgICAgRXZhc19PYmpl
Y3QqIHZpZXcgPSBicm93c2VyLT5tYWluVmlldygpOwogICAgIGlmICghdmlldykKQEAgLTMwOSwx
MiArMzA5LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWUKICAg
ICAgICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9NSU5JTUlaRUQpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShib29sKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tleShib29sKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRT
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CkBA
IC0zMjIsMTEgKzMyMiwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydElu
c2VyCiBzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKHZvaWQqKQogewog
ICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IDA7Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgZ1Rlc3RSdW5uZXItPndhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VM
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2Fp
dFVudGlsRG9uZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRp
bERvbmUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lb3V0U2Vjb25kcyA9IDMwOwog
CkBAIC0zMzUsMTE2ICszMzUsMTE2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdh
aXRUb0R1bXAKICAgICAgICAgd2FpdFRvRHVtcFdhdGNoZG9nID0gZWNvcmVfdGltZXJfYWRkKHRp
bWVvdXRTZWNvbmRzLCB3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCwgMCk7CiB9CiAKLWludCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoraW50IFRlc3RSdW5uZXI6OndpbmRvd0Nv
dW50KCkKIHsKICAgICByZXR1cm4gYnJvd3Nlci0+ZXh0cmFWaWV3cygpLnNpemUoKSArIDE7IC8v
ICsgMSBmb3IgdGhlIG1haW4gdmlldy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIGV3a192aWV3X3NldHRp
bmdfcHJpdmF0ZV9icm93c2luZ19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKGJvb2wgZmxhZykKIHsKICAgICBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Fj
Y2Vzc19jbGlwYm9hcmRfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit2
b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBl
d2tfdmlld19zZXR0aW5nX2VuYWJsZV94c3NfYXVkaXRvcl9zZXQoYnJvd3Nlci0+bWFpblZpZXco
KSwgZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRGcmFtZUZsYXR0ZW5p
bmdFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFt
ZV9mbGF0dGVuaW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZmxh
ZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZmxh
ZykKIHsKICAgICBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFj
Y2Vzc0Zyb21GaWxlVVJMcyhib29sKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJv
b2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQo
Ym9vbCBmbGFnKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQordm9pZCBUZXN0UnVubmVy
OjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmpl
Y3QsIGJvb2wgYXV0b2ZpbGxlZCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNl
dEF1dG9maWxsZWQoY29udGV4dCwgbm9kZU9iamVjdCwgYXV0b2ZpbGxlZCk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQordm9pZCBUZXN0UnVu
bmVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKIHsKICAgICBld2tfdmlld19zZXR0aW5nX2F1dG9f
bG9hZF9pbWFnZXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVJTkFfRkFMU0UpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCwg
ZG91YmxlLCBib29sLCBkb3VibGUsIGJvb2wsIGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlLCBib29sLCBk
b3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24g
bGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzAzMzUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlLCBkb3VibGUs
IGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlLCBkb3VibGUsIGRvdWJsZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9s
b2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQsIEpTU3Ry
aW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQsIEpT
U3RyaW5nUmVmKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxh
eW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI4MjY0LgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQordm9pZCBU
ZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKIH0KIAotaW50IExheW91dFRlc3RD
b250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygp
CitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91
dCB0ZXN0cy4KICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiwgZG91YmxlLCBKU1N0cmluZ1Jl
ZikKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVm
LCBkb3VibGUsIEpTU3RyaW5nUmVmKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNw
ZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29s
KQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sKQogewog
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
dGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit2b2lkIFRlc3RSdW5u
ZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNv
bkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEljb25E
YXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGV3a19zZXR0aW5nc19pY29uX2Rh
dGFiYXNlX3BhdGhfc2V0KDApOwogCkBAIC00NjcsMzQgKzQ2NywzNCBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhCiAgICAgICAgIGV3a19zZXR0aW5nc19pY29uX2Rh
dGFiYXNlX3BhdGhfc2V0KGRhdGFiYXNlUGF0aC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChi
b29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoYm9vbCBmbGFnKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0U2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Ym9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29s
IGZsYWcpCiB7CiAgICAgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9vcGVuX3dpbmRvd3Nf
c2V0KGJyb3dzZXItPm1haW5WaWV3KCksICFmbGFnKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfcGx1Z2luc19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CiAKLWJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJ
ZChKU1N0cmluZ1JlZiBpZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxl
dGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKQogewogICAgIGNvbnN0IFN0cmluZyBl
bGVtZW50SWQoaWQtPnVzdHJpbmcoKS5pbXBsKCkpOwogICAgIGNvbnN0IEV2YXNfT2JqZWN0KiBt
YWluRnJhbWUgPSBicm93c2VyLT5tYWluRnJhbWUoKTsKICAgICByZXR1cm4gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobWFp
bkZyYW1lLCBlbGVtZW50SWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVj
Q29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7
CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUo
YnJvd3Nlci0+bWFpblZpZXcoKSwgbmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHZhbHVl
LT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwg
SlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQorYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlv
bnNBcnJheSkKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlO
YW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwogICAg
IEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9w
dGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKQEAgLTUyOCwxMiArNTI4
LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlMKICAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGJyb3dzZXItPm1haW5WaWV3
KCksIFdURjo6U3RyaW5nKHRhcmdldC0+dXN0cmluZygpLmltcGwoKSksIG9wdGlvbnMpOwogfQog
Ci1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVm
IG5hbWUpCitib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFt
ZSkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjppc0NvbW1hbmRFbmFi
bGVkKGJyb3dzZXItPm1haW5WaWV3KCksIG5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2FjaGVN
b2RlbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2FjaGVNb2RlbCkKIHsK
ICAgICB1bnNpZ25lZCBpbnQgY2FjaGVUb3RhbENhcGFjaXR5OwogICAgIHVuc2lnbmVkIGludCBj
YWNoZU1pbkRlYWRDYXBhY2l0eTsKQEAgLTU3NCwxMjQgKzU3NCwxMjQgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbAogICAgIGV3a19zZXR0aW5nc19wYWdlX2NhY2hl
X2NhcGFjaXR5X3NldChwYWdlQ2FjaGVDYXBhY2l0eSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVm
KQordm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihK
U1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit2b2lkIFRlc3RS
dW5uZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0
aW9uQ2FjaGVzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygp
CiB7CiAgICAgZXdrX3NldHRpbmdzX2FwcGxpY2F0aW9uX2NhY2hlX2NsZWFyKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgRXdrX1Nl
Y3VyaXR5X09yaWdpbiogb3JpZ2luID0gZXdrX2ZyYW1lX3NlY3VyaXR5X29yaWdpbl9nZXQoYnJv
d3Nlci0+bWFpbkZyYW1lKCkpOwogICAgIGV3a19zZWN1cml0eV9vcmlnaW5fYXBwbGljYXRpb25f
Y2FjaGVfcXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOwogICAgIGV3a19zZWN1cml0eV9vcmlnaW5f
ZnJlZShvcmlnaW4pOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxp
Y2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqIHVybCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9wYXF1ZUpTU3RyaW5nKiB1cmwpCiB7
CiAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gZXdrX3NlY3VyaXR5X29yaWdpbl9u
ZXdfZnJvbV9zdHJpbmcodXJsLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgZXdrX3Nl
Y3VyaXR5X29yaWdpbl9hcHBsaWNhdGlvbl9jYWNoZV9jbGVhcihvcmlnaW4pOwogICAgIGV3a19z
ZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOwogfQogCi1sb25nIGxvbmcgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKK2xv
bmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJp
bmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlz
ayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdp
bnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKK0pTVmFsdWVSZWYg
VGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250
ZXh0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250
YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotbG9uZyBsb25nIExheW91dFRl
c3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5n
UmVmKQorbG9uZyBsb25nIFRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JP
cmlnaW4oSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQor
dm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgZXdrX3dlYl9kYXRh
YmFzZV9yZW1vdmVfYWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERh
dGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBUZXN0UnVubmVyOjpz
ZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKIHsKICAgICBFd2tfU2Vj
dXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfZnJhbWVfc2VjdXJpdHlfb3JpZ2luX2dldChicm93
c2VyLT5tYWluRnJhbWUoKSk7CiAgICAgZXdrX3NlY3VyaXR5X29yaWdpbl93ZWJfZGF0YWJhc2Vf
cXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOwogICAgIGV3a19zZWN1cml0eV9vcmlnaW5fZnJlZShv
cmlnaW4pOwogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5l
cjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9j
YWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpkZWxldGVM
b2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKQordm9p
ZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJv
b2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJp
ZGRlbiwgV1RGOjpTdHJpbmcoc2NoZW1lLT51c3RyaW5nKCkuaW1wbCgpKSk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCit2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygp
CiB7CiAgICAgZXdrX2ZyYW1lX2JhY2soYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQordm9p
ZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogewogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0RGVmZXJzTG9hZGluZyhicm93c2VyLT5tYWluVmlldygp
LCBkZWZlcnMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1h
eGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRB
cHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQogewogICAgIGV3a19z
ZXR0aW5nc19hcHBsaWNhdGlvbl9jYWNoZV9tYXhfcXVvdGFfc2V0KHNpemUpOwogfQogCi1ib29s
IExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxl
bWVudElkKQorYm9vbCBUZXN0UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYg
ZWxlbWVudElkKQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNl
QW5pbWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7
CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0
cmluZ1JlZiBlbGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBK
U1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6cGF1c2VUcmFuc2l0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5hbWUt
PnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCB0aW1lKTsKIH0KIAotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChicm93c2VyLT5tYWluRnJhbWUoKSk7CiB9CkBA
IC03MDYsNyArNzA2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgdG9JbnQoSlNTdHJpbmdSZWYgdmFs
dQogICAgIHJldHVybiBhdG9pKHZhbHVlLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1Jl
ZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZl
cmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBpZiAoZXF1
YWxzKGtleSwgIldlYktpdEphdmFTY3JpcHRFbmFibGVkIikpCiAgICAgICAgIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1
ZSkpOwpAQCAtNzM1LDU2ICs3MzUsNTYgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Zl
cnJpZGVQcmVmZQogICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRXZWJBdWRpb0VuYWJs
ZWQiKSkKICAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ193ZWJfYXVkaW9fc2V0KGJyb3dzZXItPm1h
aW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwogICAgIGVsc2UKLSAgICAgICAgZnByaW50ZihzdGRl
cnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlIHRyaWVkIHRvIG92
ZXJyaWRlIHVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgdmFsdWUtPnVzdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJUZXN0UnVubmVyOjpvdmVycmlk
ZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUgdW5rbm93biBwcmVmZXJlbmNlICclcycuXG4i
LCB2YWx1ZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0
YXJ0LCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCiB7CiAgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjphZGRVc2VyU2NyaXB0KGJyb3dzZXItPm1haW5WaWV3
KCksIFN0cmluZyhzb3VyY2UtPnVzdHJpbmcoKS5pbXBsKCkpLCBydW5BdFN0YXJ0LCBhbGxGcmFt
ZXMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRV
c2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWRkVXNlclN0eWxlU2hlZXQoYnJvd3Nlci0+bWFp
blZpZXcoKSwgV1RGOjpTdHJpbmcoc291cmNlLT51c3RyaW5nKCkuaW1wbCgpKSwgYWxsRnJhbWVz
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldERldmVsb3BlckV4dHJhc0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVs
b3Blcl9leHRyYXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGVuYWJsZWQpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5h
YmxlZChib29sKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVubmVyOjpzaG93V2Vi
SW5zcGVjdG9yKCkKIHsKICAgICBld2tfdmlld193ZWJfaW5zcGVjdG9yX3Nob3coYnJvd3Nlci0+
bWFpblZpZXcoKSk7CiAgICAgYnJvd3Nlci0+d2FpdEluc3BlY3RvckxvYWRGaW5pc2hlZCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCit2b2lk
IFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAgICBld2tfdmlld193ZWJfaW5z
cGVjdG9yX2Nsb3NlKGJyb3dzZXItPm1haW5WaWV3KCkpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1Jl
ZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBj
YWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYnJvd3Nlci0+bWFpblZpZXcoKSwgY2FsbElkLCBT
dHJpbmcoc2NyaXB0LT51c3RyaW5nKCkuaW1wbCgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5z
aWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCwgSlNPYmplY3RS
ZWYsIEpTU3RyaW5nUmVmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVk
IHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQor
dm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsK
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKGJyb3dzZXItPm1haW5GcmFtZSgpLCB3b3JsZElELCBnbG9iYWxPYmplY3QsIFN0cmluZyhz
Y3JpcHQtPnVzdHJpbmcoKS5pbXBsKCkpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlz
aXRlZExpbmtzKCkKIHsKICAgICBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3Rv
cnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwogICAgIGlmICghaGlzdG9yeSkKQEAgLTc5Mywy
NyArNzkzLDI3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2kKICAg
ICBld2tfaGlzdG9yeV9jbGVhcihoaXN0b3J5KTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK2Jvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNo
b3VsZENsb3NlT25XZWJWaWV3KCkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNl
VVJMKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdE5l
d1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVz
dEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdEdv
VG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCiB7CiAgICAgZXdrX2ZyYW1l
X2VkaXRhYmxlX3NldChicm93c2VyLT5tYWluRnJhbWUoKSwgRUlOQV9UUlVFKTsKIH0KIAotSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29u
c3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlz
dEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QK
IHsKICAgICBTdHJpbmcgbWFya2VyVGV4dENoYXIgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb250ZXh0LCBub2RlT2JqZWN0KTsKICAgICBpZiAobWFy
a2VyVGV4dENoYXIuaXNFbXB0eSgpKQpAQCAtODIzLDI3ICs4MjMsMjcgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cgogICAgIHJldHVybiBtYXJrZXJUZXh0OwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5n
UmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRp
Y2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphYm9y
dE1vZGFsKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCgpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRU
UExvYWRzKGJvb2wgc2VyaWFsaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQ
TG9hZHMoYm9vbCBzZXJpYWxpemUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpz
ZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVy
dmFsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWlu
aW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVy
X2ludGVydmFsX3NldChicm93c2VyLT5tYWluVmlldygpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJp
bmdSZWYgZGlyZWN0aW9uKQordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3Ry
aW5nUmVmIGRpcmVjdGlvbikKIHsKICAgICBFd2tfVGV4dF9EaXJlY3Rpb24gZXdrRGlyZWN0aW9u
OwogICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVjdGlvbiwgImF1dG8i
KSkKQEAgLTg1Myw0MyArODUzLDQzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRl
eHREaXJlY3QKICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVj
dGlvbiwgImx0ciIpKQogICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVYVF9ESVJFQ1RJT05f
TEVGVF9UT19SSUdIVDsKICAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbiBjYWxsZWQgd2l0aCB1bmtub3duIGRp
cmVjdGlvbjogJyVzJy5cbiIsIGRpcmVjdGlvbi0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24gY2Fs
bGVkIHdpdGggdW5rbm93biBkaXJlY3Rpb246ICclcycuXG4iLCBkaXJlY3Rpb24tPnVzdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGV3a192aWV3
X3RleHRfZGlyZWN0aW9uX3NldChicm93c2VyLT5tYWluVmlldygpLCBld2tEaXJlY3Rpb24pOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRG
aWVsZCgpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3Vz
V2ViVmlldygpCit2b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldygpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1Nj
YWxlRmFjdG9yKGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9y
KGRvdWJsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0
aXRsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2so
SlNTdHJpbmdSZWYgdGl0bGUpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
c2V0UGFnZVZpc2liaWxpdHkoKQordm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5
KCkKIHsKICAgICBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChicm93c2VyLT5tYWluVmll
dygpLCBFV0tfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1ZJU0lCTEUsIHRydWUpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKiB2aXNp
YmlsaXR5KQordm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKiB2
aXNpYmlsaXR5KQogewogICAgIFN0cmluZyBuZXdWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwogICAg
IGlmIChuZXdWaXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKQEAgLTkwMiwxMiArOTAyLDEyIEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmkKICAgICAgICAgZXdrX3ZpZXdf
dmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJ
TElUWV9TVEFURV9QUkVWSUVXLCBmYWxzZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVu
dFJlc3BvbnNlKEpTU3RyaW5nUmVmIHJlc3BvbnNlKQordm9pZCBUZXN0UnVubmVyOjpzZW5kV2Vi
SW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVzcG9uc2UpCiB7CiAgICAgRXdrX0ludGVudF9S
ZXF1ZXN0KiByZXF1ZXN0ID0gYnJvd3Nlci0+Y3VycmVudEludGVudFJlcXVlc3QoKTsKICAgICBp
ZiAoIXJlcXVlc3QpCkBAIC05MTYsMTIgKzkxNiwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZW5kV2ViSW50ZW50CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZW5kV2Vi
SW50ZW50UmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmIGFjdGlvbiwgSlNTdHJpbmdS
ZWYgdHlwZSwgSlNTdHJpbmdSZWYgZGF0YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsaXZlcldlYklu
dGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpTU3RyaW5nUmVmIGRh
dGEpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpkZWxpdmVyV2ViSW50ZW50KGJy
b3dzZXItPm1haW5GcmFtZSgpLCBhY3Rpb24sIHR5cGUsIGRhdGEpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkg
KzM2LDkgQEAKICNpbmNsdWRlICJFZGl0aW5nQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiRXZlbnRT
ZW5kZXIuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKICNpbmNsdWRlICJT
ZWxmU2Nyb2xsaW5nV2ViS2l0V2ViVmlldy5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKICNp
bmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0
LmgiCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSAxOwogc3RhdGljIGlu
dCB1c2VUaW1lb3V0V2F0Y2hkb2cgPSAxOwogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYXhD
b250cm9sbGVyID0gMDsKLVJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RD
b250cm9sbGVyOworUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogc3RhdGljIEdDQ29u
dHJvbGxlciogZ2NDb250cm9sbGVyID0gMDsKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
Owogc3RhdGljIEd0a1dpZGdldCogd2luZG93OwpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgZHVt
cEZyYW1lU2Nyb2xsUG9zaXRpb24oV2ViS2l0V2ViRnIKICAgICAgICAgcHJpbnRmKCJzY3JvbGxl
ZCB0byAlbGQsJWxkXG4iLCB4LCB5KTsKICAgICB9CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpKSB7CisgICAgaWYgKGdUZXN0
UnVubmVyLT5kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpKSB7CiAgICAgICAgIEdTTGlz
dCogY2hpbGRyZW4gPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldEZyYW1lQ2hpbGRyZW4o
ZnJhbWUpOwogICAgICAgICBmb3IgKEdTTGlzdCogY2hpbGQgPSBjaGlsZHJlbjsgY2hpbGQ7IGNo
aWxkID0gZ19zbGlzdF9uZXh0KGNoaWxkKSkKICAgICAgICAgICAgIGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKHN0YXRpY19jYXN0PFdlYktpdFdlYkZyYW1lKj4oY2hpbGQtPmRhdGEpKTsKQEAgLTI5
Miw3ICsyOTIsNyBAQCBzdGF0aWMgZ2NoYXIqIGR1bXBGcmFtZXNBc1RleHQoV2ViS2l0V2ViCiAg
ICAgICAgIHJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigiXG4tLS0tLS0tLVxuRnJhbWU6ICclcydc
bi0tLS0tLS0tXG4lc1xuIiwgZnJhbWVOYW1lLCBpbm5lclRleHQuZGF0YSgpKTsKICAgICB9CiAK
LSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkg
eworICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkpIHsKICAgICAg
ICAgR1NMaXN0KiBjaGlsZHJlbiA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0RnJhbWVD
aGlsZHJlbihmcmFtZSk7CiAgICAgICAgIGZvciAoR1NMaXN0KiBjaGlsZCA9IGNoaWxkcmVuOyBj
aGlsZDsgY2hpbGQgPSBnX3NsaXN0X25leHQoY2hpbGQpKSB7CiAgICAgICAgICAgICBHT3duUHRy
PGdjaGFyPiBjaGlsZERhdGEoZHVtcEZyYW1lc0FzVGV4dChzdGF0aWNfY2FzdDxXZWJLaXRXZWJG
cmFtZSo+KGNoaWxkLT5kYXRhKSkpOwpAQCAtNTc0LDEyICs1NzQsMTIgQEAgdm9pZCBkdW1wKCkK
ICAgICAgICAgZ2NoYXIqIHJlc3BvbnNlTWltZVR5cGUgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9y
ZXNwb25zZV9taW1lX3R5cGUobWFpbkZyYW1lKTsKIAogICAgICAgICBpZiAoZ19zdHJfZXF1YWwo
cmVzcG9uc2VNaW1lVHlwZSwgInRleHQvcGxhaW4iKSkgewotICAgICAgICAgICAgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICAgICAgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CisgICAgICAgICAg
ICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgICAgIGdUZXN0UnVu
bmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAg
Z19mcmVlKHJlc3BvbnNlTWltZVR5cGUpOwogCi0gICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBBc1RleHQoKSkKKyAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQXNUZXh0
KCkpCiAgICAgICAgICAgICByZXN1bHQgPSBkdW1wRnJhbWVzQXNUZXh0KG1haW5GcmFtZSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gV2lkZ2V0IHJlc2l6aW5nIGlzIGRvbmUgYXN5
bmNocm9ub3VzbHkgaW4gR1RLKy4gV2UgcHVtcCB0aGUgbWFpbgpAQCAtNTk2LDExICs1OTYsMTEg
QEAgdm9pZCBkdW1wKCkKIAogICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlOwotICAgICAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEFzVGV4dCgpKQorICAgICAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQXNU
ZXh0KCkpCiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIltkb2N1bWVudEVsZW1lbnQg
aW5uZXJUZXh0XSI7Ci0gICAgICAgICAgICBlbHNlIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBET01Bc1dlYkFyY2hpdmUoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGdUZXN0UnVubmVy
LT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkpCiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
IltbbWFpbkZyYW1lIERPTURvY3VtZW50XSB3ZWJBcmNoaXZlXSI7Ci0gICAgICAgICAgICBlbHNl
IGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkp
CiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIltbbWFpbkZyYW1lIGRhdGFTb3VyY2Vd
IHdlYkFyY2hpdmVdIjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlcnJvck1l
c3NhZ2UgPSAiW21haW5GcmFtZSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uXSI7
CkBAIC02MDgsMTAgKzYwOCwxMCBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgcHJpbnRmKCIlcyIsIHJlc3VsdCk7CiAgICAgICAgICAgICBnX2ZyZWUocmVzdWx0
KTsKLSAgICAgICAgICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNUZXh0KCkg
JiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkKKyAgICAgICAgICAg
IGlmICghZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBET01B
c1dlYkFyY2hpdmUoKSAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkK
ICAgICAgICAgICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihtYWluRnJhbWUpOwogCi0g
ICAgICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQmFja0ZvcndhcmRMaXN0
KCkpCisgICAgICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkK
ICAgICAgICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yQWxsV2ViVmlld3MoKTsKICAg
ICAgICAgfQogCkBAIC02MjQsMTEgKzYyNCwxMSBAQCB2b2lkIGR1bXAoKQogICAgIH0KIAogICAg
IGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QKLSAgICAgJiYgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCi0gICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQotICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVy
LT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKKyAgICAgJiYgZ1Rlc3RSdW5uZXItPmdlbmVy
YXRlUGl4ZWxSZXN1bHRzKCkKKyAgICAgJiYgIWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNo
aXZlKCkKKyAgICAgJiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsK
ICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpmb3JjZVdlYlZpZXdQYWludCh3ZWJW
aWV3KTsKLSAgICAgICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQo
Z0xheW91dFRlc3RDb250cm9sbGVyLT5leHBlY3RlZFBpeGVsSGFzaCgpKTsKKyAgICAgICAgZHVt
cFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoZ1Rlc3RSdW5uZXItPmV4cGVj
dGVkUGl4ZWxIYXNoKCkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBjYWxsIGRpc3BsYXlXZWJW
aWV3IGhlcmUgd2hlbiB3ZSBzdXBwb3J0IC0tcGFpbnQKQEAgLTcwNiwyMiArNzA2LDIyIEBAIHN0
YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIHJlc2V0RGVmYXVs
dHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExh
eW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVs
SGFzaCk7CisgICAgZ1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodGVzdFVSTCwgY29t
bWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAgICBk
b25lID0gZmFsc2U7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldEljb25EYXRhYmFz
ZUVuYWJsZWQoZmFsc2UpOworICAgIGdUZXN0UnVubmVyLT5zZXRJY29uRGF0YWJhc2VFbmFibGVk
KGZhbHNlKTsKIAogICAgIGlmIChzaG91bGRMb2dGcmFtZUxvYWREZWxlZ2F0ZXModGVzdFVSTCkp
Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNr
cyh0cnVlKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
dHJ1ZSk7CiAKICAgICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHRlc3RVUkwpKSB7
Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCh0cnVlKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQo
dHJ1ZSk7CiAgICAgICAgIGlmIChzaG91bGRPcGVuV2ViSW5zcGVjdG9yKHRlc3RVUkwpKQotICAg
ICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zaG93V2ViSW5zcGVjdG9yKCk7CisgICAg
ICAgICAgICBnVGVzdFJ1bm5lci0+c2hvd1dlYkluc3BlY3RvcigpOwogICAgICAgICBpZiAoc2hv
dWxkRHVtcEFzVGV4dCh0ZXN0VVJMKSkgewotICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CisgICAgICAgICAgICBnVGVzdFJ1
bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVyLT5zZXRH
ZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTczMSw4
ICs3MzEsOCBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAg
Ym9vbCBpc1NWR1czQ1Rlc3QgPSAodGVzdFVSTC5maW5kKCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBz
dHJpbmc6Om5wb3MpOwogICAgIEd0a0FsbG9jYXRpb24gc2l6ZTsKICAgICBzaXplLnggPSBzaXpl
LnkgPSAwOwotICAgIHNpemUud2lkdGggPSBpc1NWR1czQ1Rlc3QgPyA0ODAgOiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoOwotICAgIHNpemUuaGVpZ2h0ID0gaXNTVkdXM0NUZXN0
ID8gMzYwIDogTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQ7CisgICAgc2l6ZS53
aWR0aCA9IGlzU1ZHVzNDVGVzdCA/IDQ4MCA6IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAg
ICBzaXplLmhlaWdodCA9IGlzU1ZHVzNDVGVzdCA/IDM2MCA6IFRlc3RSdW5uZXI6Om1heFZpZXdI
ZWlnaHQ7CiAgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCBzaXplLndp
ZHRoLCBzaXplLmhlaWdodCk7CiAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGNvbnRhaW5l
ciwgJnNpemUpOwogCkBAIC03NTMsMTIgKzc1MywxMiBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNv
bnN0IHN0cmluZyYgaW5wdXRMCiAKICAgICAvLyBJZiBkZXZlbG9wZXIgZXh0cmFzIGVuYWJsZWQg
V2ViIEluc3BlY3RvciBtYXkgaGF2ZSBiZWVuIG9wZW4gYnkgdGhlIHRlc3QuCiAgICAgaWYgKHNo
b3VsZEVuYWJsZURldmVsb3BlckV4dHJhcyh0ZXN0VVJMKSkgewotICAgICAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7CisgICAgICAgIGdUZXN0
UnVubmVyLT5jbG9zZVdlYkluc3BlY3RvcigpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7CiAgICAgfQogCiAgICAgLy8gQWxzbyBjaGVjayBp
ZiB3ZSBzdGlsbCBoYXZlIG9wZW5lZCB3ZWJWaWV3cyBhbmQgZnJlZSB0aGVtLgotICAgIGlmIChn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmNsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgp
IHx8IHdlYlZpZXdMaXN0KSB7CisgICAgaWYgKGdUZXN0UnVubmVyLT5jbG9zZVJlbWFpbmluZ1dp
bmRvd3NXaGVuQ29tcGxldGUoKSB8fCB3ZWJWaWV3TGlzdCkgewogICAgICAgICB3aGlsZSAod2Vi
Vmlld0xpc3QpIHsKICAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKFdFQktJVF9XRUJfVklFVyh3
ZWJWaWV3TGlzdC0+ZGF0YSkpOwogICAgICAgICAgICAgd2ViVmlld0xpc3QgPSBnX3NsaXN0X25l
eHQod2ViVmlld0xpc3QpOwpAQCAtNzcyLDcgKzc3Miw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3Qo
Y29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICAvLyBBIGJsYW5rIGxvYWQgc2VlbXMgdG8gYmUgbmVj
ZXNzYXJ5IHRvIHJlc2V0IHN0YXRlIGFmdGVyIGNlcnRhaW4gdGVzdHMuCiAgICAgd2Via2l0X3dl
Yl92aWV3X29wZW4od2ViVmlldywgImFib3V0OmJsYW5rIik7CiAKLSAgICBnTGF5b3V0VGVzdENv
bnRyb2xsZXIuY2xlYXIoKTsKKyAgICBnVGVzdFJ1bm5lci5jbGVhcigpOwogCiAgICAgLy8gdGVy
bWluYXRlIHRoZSAocG9zc2libHkgZW1wdHkpIHBpeGVscyBibG9jayBhZnRlciBhbGwgdGhlIHN0
YXRlIHJlc2V0CiAgICAgc2VuZFBpeGVsUmVzdWx0c0VPRigpOwpAQCAtNzg5LDcgKzc4OSw3IEBA
IHZvaWQgd2ViVmlld0xvYWRTdGFydGVkKFdlYktpdFdlYlZpZXcqIHYKIHN0YXRpYyBnYm9vbGVh
biBwcm9jZXNzV29yayh2b2lkKiBkYXRhKQogewogICAgIC8vIGlmIHdlIGZpbmlzaCBhbGwgdGhl
IGNvbW1hbmRzLCB3ZSdyZSByZWFkeSB0byBkdW1wIHN0YXRlCi0gICAgaWYgKFdvcmtRdWV1ZTo6
c2hhcmVkKCktPnByb2Nlc3NXb3JrKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRv
RHVtcCgpKQorICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYmICFn
VGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQogICAgICAgICBkdW1wKCk7CiAKICAgICByZXR1cm4g
RkFMU0U7CkBAIC04MjcsNyArODI3LDcgQEAgc3RhdGljIHZvaWQgd2ViVmlld0xvYWRGaW5pc2hl
ZChXZWJLaXRXZQogICAgIC8vIHNvIHdlIGNhbiB1c2UgaXQgaGVyZSBpbiB0aGUgRFJUIHRvIHBy
b3ZpZGUgdGhlIGNvcnJlY3QgZHVtcC4KICAgICBpZiAoZnJhbWUgIT0gdG9wTG9hZGluZ0ZyYW1l
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFBy
b2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFByb2dy
ZXNzRmluaXNoZWRDYWxsYmFjaygpKQogICAgICAgICBwcmludGYoInBvc3RQcm9ncmVzc0Zpbmlz
aGVkTm90aWZpY2F0aW9uXG4iKTsKIH0KIApAQCAtODM4LDcgKzgzOCw3IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJWaWV3TG9hZEVycm9yKFdlYktpdFcKIAogc3RhdGljIHZvaWQgd2ViVmlld0RvY3Vt
ZW50TG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY2hhciogZnJhbWVOYW1lID0gZ2V0
RnJhbWVOYW1lU3VpdGFibGVGb3JUZXN0UmVzdWx0KHZpZXcsIGZyYW1lKTsKICAgICAgICAgcHJp
bnRmKCIlcyAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lXG4iLCBmcmFtZU5hbWUpOwog
ICAgICAgICBnX2ZyZWUoZnJhbWVOYW1lKTsKQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJWaWV3RG9jdW1lbnRMb2FkRmluaXNoZWQoCiAKIHN0YXRpYyB2b2lkIHdlYlZpZXdPbmxv
YWRFdmVudChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIHZvaWQq
KQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIGNoYXIqIGZyYW1lTmFtZSA9IGdldEZyYW1lTmFt
ZVN1aXRhYmxlRm9yVGVzdFJlc3VsdCh2aWV3LCBmcmFtZSk7CiAgICAgICAgIHByaW50ZigiJXMg
LSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZVxuIiwgZnJhbWVOYW1lKTsKICAgICAgICAg
Z19mcmVlKGZyYW1lTmFtZSk7CkBAIC04NzEsOSArODcxLDkgQEAgc3RhdGljIHZvaWQgYWRkQ29u
dHJvbGxlclRvV2luZG93KEpTQ29udAogc3RhdGljIHZvaWQgd2ViVmlld1dpbmRvd09iamVjdENs
ZWFyZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBKU0dsb2Jh
bENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBncG9pbnRlciBk
YXRhKQogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBBU1NFUlQoZ0xheW91
dFRlc3RDb250cm9sbGVyKTsKKyAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwogCi0gICAgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwg
JmV4Y2VwdGlvbik7CisgICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwg
d2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAKICAg
ICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKQEAgLTk0MCw3ICs5NDAsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld1Nj
cmlwdENvbmZpcm0oV2ViCiAKIHN0YXRpYyB2b2lkIHdlYlZpZXdUaXRsZUNoYW5nZWQoV2ViS2l0
V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogdGl0bGUs
IGdwb2ludGVyIGRhdGEpCiB7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRp
dGxlQ2hhbmdlcygpICYmICFkb25lKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFRpdGxlQ2hh
bmdlcygpICYmICFkb25lKQogICAgICAgICBwcmludGYoIlRJVExFIENIQU5HRUQ6ICVzXG4iLCB0
aXRsZSA/IHRpdGxlIDogIiIpOwogfQogCkBAIC05NTAsNyArOTUwLDcgQEAgc3RhdGljIGJvb2wg
d2ViVmlld05hdmlnYXRpb25Qb2xpY3lEZWNpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogcG9saWN5
RGVjaXNpb24pCiB7CiAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IGhhbmRsZXIgaWYgd2UncmUgbm90
IHdhaXRpbmcgZm9yIHBvbGljeSwKLSAgICAvLyBpLmUuLCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2FpdEZvclBvbGljeURlbGVnYXRlCisgICAgLy8gaS5lLiwgVGVzdFJ1bm5lcjo6d2FpdEZvclBv
bGljeURlbGVnYXRlCiAgICAgaWYgKCF3YWl0Rm9yUG9saWN5KQogICAgICAgICByZXR1cm4gRkFM
U0U7CiAKQEAgLTk4NSw3ICs5ODUsNyBAQCBzdGF0aWMgYm9vbCB3ZWJWaWV3TmF2aWdhdGlvblBv
bGljeURlY2lzCiAgICAgZ19mcmVlKHR5cGVEZXNjcmlwdGlvbik7CiAKICAgICB3ZWJraXRfd2Vi
X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUocG9saWN5RGVjaXNpb24pOwotICAgIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+bm90aWZ5RG9uZSgpOworICAgIGdUZXN0UnVubmVyLT5ub3RpZnlEb25lKCk7
CiAKICAgICByZXR1cm4gVFJVRTsKIH0KQEAgLTk5NCw3ICs5OTQsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJWaWV3U3RhdHVzQmFyVGV4dENoYW5nZWQoCiB7CiAgICAgLy8gQXJlIHdlIGRvaW5nIGFueXRo
aW5nIHdyb25nPyBPbmUgdGVzdCB0aGF0IGRvZXMgbm90IGNhbGwKICAgICAvLyBkdW1wU3RhdHVz
Q2FsbGJhY2tzIGdldHMgdHJ1ZSBoZXJlCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcFN0YXR1c0NhbGxiYWNrcygpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFN0YXR1c0Nh
bGxiYWNrcygpKQogICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzog
c2V0U3RhdHVzVGV4dDolc1xuIiwgbWVzc2FnZSk7CiB9CiAKQEAgLTEwMTUsNyArMTAxNSw3IEBA
IHN0YXRpYyB2b2lkIGRhdGFiYXNlUXVvdGFFeGNlZWRlZChXZWJLaXQKICAgICBBU1NFUlQoZGF0
YWJhc2UpOwogCiAgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF93ZWJf
ZGF0YWJhc2VfZ2V0X3NlY3VyaXR5X29yaWdpbihkYXRhYmFzZSk7Ci0gICAgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoZ1Rlc3RS
dW5uZXItPmR1bXBEYXRhYmFzZUNhbGxiYWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiVUkgREVM
RUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5
T3JpZ2luOnslcywgJXMsICVpfSBkYXRhYmFzZTolc1xuIiwKICAgICAgICAgICAgIHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sKG9yaWdpbiksCiAgICAgICAgICAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbiksCkBAIC0xMDI4LDkgKzEwMjgsOSBAQCBz
dGF0aWMgdm9pZCBkYXRhYmFzZVF1b3RhRXhjZWVkZWQoV2ViS2l0CiBzdGF0aWMgYm9vbAogZ2Vv
bG9jYXRpb25Qb2xpY3lEZWNpc2lvblJlcXVlc3RlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2Vi
RnJhbWUqLCBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKIHsKLSAg
ICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQo
KSkKKyAgICBpZiAoIWdUZXN0UnVubmVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKQog
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2Vv
bG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5nZW9sb2NhdGlvblBl
cm1pc3Npb24oKSkKICAgICAgICAgd2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9hbGxvdyhkZWNp
c2lvbik7CiAgICAgZWxzZQogICAgICAgICB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2Rlbnko
ZGVjaXNpb24pOwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAgc3RhdGljIHZvaWQgdG9wTG9hZGluZ0Zy
YW1lTG9hZEZpbmlzaGVkKAogewogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAgICAgV29ya1F1
ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZy
ZWV6ZXMgdGhlIHF1ZXVlIGZvciB0aGUgcmVzdCBvZiB0aGlzIHRlc3QKLSAgICBpZiAoZ0xheW91
dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT53YWl0
VG9EdW1wKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgp
LT5jb3VudCgpKQpAQCAtMTA4Myw3ICsxMDgzLDcgQEAgc3RhdGljIHZvaWQgd2ViRnJhbWVMb2Fk
U3RhdHVzTm90aWZpZWQoVwogewogICAgIFdlYktpdExvYWRTdGF0dXMgbG9hZFN0YXR1cyA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X2xvYWRfc3RhdHVzKGZyYW1lKTsKIAotICAgIGlmIChnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmIChnVGVz
dFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIEdPd25QdHI8Y2hh
cj4gZnJhbWVOYW1lKGdldEZyYW1lTmFtZVN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhmcmFtZSksIGZyYW1lKSk7CiAKICAgICAgICAgc3dpdGNoIChs
b2FkU3RhdHVzKSB7CkBAIC0xMjQ5LDEzICsxMjQ5LDEzIEBAIHN0YXRpYyB2b2lkIHdpbGxTZW5k
UmVxdWVzdENhbGxiYWNrKFdlYksKIHsKIAogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkgewotICAgICAgICAvLyBB
cyByZXF1ZXN0ZWQgYnkgdGhlIExheW91dFRlc3RDb250cm9sbGVyLCBkb24ndCBwZXJmb3JtIHRo
ZSByZXF1ZXN0LgorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+d2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGwoKSkgeworICAgICAgICAvLyBBcyByZXF1ZXN0ZWQgYnkgdGhlIFRlc3RSdW5u
ZXIsIGRvbid0IHBlcmZvcm0gdGhlIHJlcXVlc3QuCiAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIHdpbGxTZW5kUmVx
dWVzdCAlcyByZWRpcmVjdFJlc3BvbnNlICVzXG4iLAogICAgICAgICAgICAgICAgY29udmVydE5l
dHdvcmtSZXF1ZXN0VG9VUkxQYXRoKHJlcXVlc3QpLmRhdGEoKSwKICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlcXVlc3QpLmRhdGEoKSwKQEAgLTEyNzks
NyArMTI3OSw3IEBAIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKFdlYksKICAg
ICAgICAgc291cF91cmlfZnJlZSh1cmkpOwogCiAgICAgaWYgKHNvdXBNZXNzYWdlKSB7Ci0gICAg
ICAgIGNvbnN0IHNldDxzdHJpbmc+JiBjbGVhckhlYWRlcnMgPSBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPndpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVycygpOworICAgICAgICBjb25zdCBzZXQ8c3Ry
aW5nPiYgY2xlYXJIZWFkZXJzID0gZ1Rlc3RSdW5uZXItPndpbGxTZW5kUmVxdWVzdENsZWFySGVh
ZGVycygpOwogICAgICAgICBmb3IgKHNldDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBoZWFkZXIg
PSBjbGVhckhlYWRlcnMuYmVnaW4oKTsgaGVhZGVyICE9IGNsZWFySGVhZGVycy5lbmQoKTsgKyto
ZWFkZXIpCiAgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZW1vdmUoc291cE1lc3Nh
Z2UtPnJlcXVlc3RfaGVhZGVycywgaGVhZGVyLT5jX3N0cigpKTsKICAgICB9CkBAIC0xMjg4LDcg
KzEyODgsNyBAQCBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLCiAKIHN0
YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRXZWJGcmFtZSosIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZSwgV2ViS2l0TmV0d29y
a1Jlc3BvbnNlKiByZXNwb25zZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBDU3Ry
aW5nIHJlc3BvbnNlRGVzY3JpcHRpb24oZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
cmVzcG9uc2UpKTsKICAgICAgICAgQ1N0cmluZyBwYXRoKGNvbnZlcnRXZWJSZXNvdXJjZVRvVVJM
UGF0aCh3ZWJSZXNvdXJjZSkpOwogICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVJlc3Bv
bnNlICVzXG4iLCBwYXRoLmRhdGEoKSwgcmVzcG9uc2VEZXNjcmlwdGlvbi5kYXRhKCkpOwpAQCAt
MTMwMCwxMyArMTMwMCwxMyBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViS2l0
V2ViCiAKIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0V2ViRnJhbWUqIHdlYkZyYW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3Vy
Y2UpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoTG9h
ZGluZ1xuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQod2ViVmlldywgd2ViRnJh
bWUsIHdlYlJlc291cmNlKS5kYXRhKCkpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGlu
Z1dpdGhFcnJvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZSwgR0Vycm9yKiB3ZWJFcnJvcikKIHsK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBDU3RyaW5nIHdlYkVycm9yU3RyaW5nKGRlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdlYkVycm9yLCB3ZWJSZXNvdXJjZSkpOwogICAg
ICAgICBwcmludGYoIiVzIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICVzXG4iLCBkZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3ZWJWaWV3LCB3ZWJGcmFtZSwgd2ViUmVzb3VyY2Up
LmRhdGEoKSwKICAgICAgICAgICAgICAgIHdlYkVycm9yU3RyaW5nLmRhdGEoKSk7CkBAIC0xMzE1
LDcgKzEzMTUsNyBAQCBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcihXZWJLCiAK
IHN0YXRpYyB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVudChXZWJLaXRXZWJGcmFtZSosIFdlYktp
dFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgY2hhciogdXJsKQogewotICAgIGlmICghZG9uZSAmJiBn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAo
IWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAg
cHJpbnRmKCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCkBAIC0xMzg2LDExICsxMzg2
LDExIEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkKIAogc3RhdGljIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lKQogewotICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5jYW5PcGVu
V2luZG93cygpKQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmNhbk9wZW5XaW5kb3dzKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2FpdFVudGlsRG9uZSBoYXMg
YmVlbiBjYWxsZWQuCi0gICAgQVNTRVJUKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVt
cCgpKTsKKyAgICBBU1NFUlQoZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSk7CiAKICAgICBXZWJL
aXRXZWJWaWV3KiBuZXdXZWJWaWV3ID0gY3JlYXRlV2ViVmlldygpOwogICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKEdfT0JKRUNUKG5ld1dlYlZpZXcpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvRWRpdGluZ0NhbGxiYWNrcy5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdDYWxsYmFja3MuaCIKIAogI2luY2x1
ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CkBAIC05
OSwyMSArOTksMjEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGlvbkFmZmluaXR5U3RyaQog
CiBnYm9vbGVhbiBzaG91bGRCZWdpbkVkaXRpbmcoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0RE9NUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5nZShyYW5n
ZSkuZGF0YSgpKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAogZ2Jvb2xlYW4gc2hvdWxkRW5kRWRp
dGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRET01SYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0lu
RE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5nZShyYW5nZSkuZGF0YSgpKTsKICAgICByZXR1cm4gVFJV
RTsKIH0KIAogZ2Jvb2xlYW4gc2hvdWxkSW5zZXJ0Tm9kZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRET01Ob2RlKiBub2RlLCBXZWJLaXRET01SYW5nZSogcmFuZ2UsIFdlYktpdEluc2Vy
dEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBwcmludGYoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEluc2VydE5vZGU6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rp
b246JXNcbiIsCiAgICAgICAgICAgICAgICBkdW1wTm9kZVBhdGgobm9kZSkuZGF0YSgpLCBkdW1w
UmFuZ2UocmFuZ2UpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3RyaW5nKGFjdGlvbikpOwogICAgIH0K
QEAgLTEyMiw3ICsxMjIsNyBAQCBnYm9vbGVhbiBzaG91bGRJbnNlcnROb2RlKFdlYktpdFdlYlZp
ZXcqCiAKIGdib29sZWFuIHNob3VsZEluc2VydFRleHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgZ2NoYXIqIHRleHQsIFdlYktpdERPTVJhbmdlKiByYW5nZSwgV2ViS2l0SW5zZXJ0QWN0
aW9uIGFjdGlvbikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FU
RTogc2hvdWxkSW5zZXJ0VGV4dDolcyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlvbjol
c1xuIiwKICAgICAgICAgICAgICAgIHRleHQsIGR1bXBSYW5nZShyYW5nZSkuZGF0YSgpLCBpbnNl
cnRBY3Rpb25TdHJpbmcoYWN0aW9uKSk7CiAgICAgfQpAQCAtMTMxLDcgKzEzMSw3IEBAIGdib29s
ZWFuIHNob3VsZEluc2VydFRleHQoV2ViS2l0V2ViVmlldyoKIAogZ2Jvb2xlYW4gc2hvdWxkRGVs
ZXRlUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RE9NUmFuZ2UqIHJhbmdlKQog
ewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURP
TVJhbmdlOiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFRSVUU7
CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgZ2Jvb2xlYW4gc2hvdWxkU2hvd0RlbGV0ZUludGVyZmFj
ZUZvckVsZQogCiBnYm9vbGVhbiBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdERPTVJhbmdlKiBmcm9tUmFuZ2UsIFdlYktpdERPTVJhbmdlKiB0
b1JhbmdlLCBXZWJLaXRTZWxlY3Rpb25BZmZpbml0eSBhZmZpbml0eSwgZ2Jvb2xlYW4gc3RpbGxT
ZWxlY3RpbmcpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6JXMgdG9ET01SYW5nZTolcyBhZmZpbml0eTol
cyBzdGlsbFNlbGVjdGluZzolc1xuIiwKICAgICAgICAgICAgICAgIGR1bXBSYW5nZShmcm9tUmFu
Z2UpLmRhdGEoKSwgZHVtcFJhbmdlKHRvUmFuZ2UpLmRhdGEoKSwgc2VsZWN0aW9uQWZmaW5pdHlT
dHJpbmcoYWZmaW5pdHkpLAogICAgICAgICAgICAgICAgc3RpbGxTZWxlY3RpbmcgPyAiVFJVRSIg
OiAiRkFMU0UiKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBnYm9vbGVhbiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKFdlYktpCiAKIGdib29sZWFuIHNob3VsZEFwcGx5U3R5bGUoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFdlYktpdERP
TVJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0eWxl
VGV4dCh3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfY3NzX3RleHQoc3R5bGUp
KTsKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRBcHBseVN0eWxlOiVz
IHRvRWxlbWVudHNJbkRPTVJhbmdlOiVzXG4iLAogICAgICAgICAgICAgICAgc3R5bGVUZXh0Lmdl
dCgpLCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSk7CkBAIC0xNjQsMjUgKzE2NCwyNSBAQCBnYm9v
bGVhbiBzaG91bGRBcHBseVN0eWxlKFdlYktpdFdlYlZpZXcqCiAKIHZvaWQgZWRpdGluZ0JlZ2Fu
KFdlYktpdFdlYlZpZXcqKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNh
dGlvblxuIik7CiB9CiAKIHZvaWQgdXNlckNoYW5nZWRDb250ZW50cyhXZWJLaXRXZWJWaWV3KikK
IHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb25cbiIpOwogfQogCiB2b2lkIGVkaXRpbmdF
bmRlZChXZWJLaXRXZWJWaWV3KikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzpXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNh
dGlvblxuIik7CiB9CiAKIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChXZWJLaXRXZWJWaWV3KikKIHsK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb25cbiIpOwogfQog
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAw
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksMjAxMSBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkxheW91dFRlc3RDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgot
I2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgotI2lu
Y2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4K
LSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8Z2xpYi5o
PgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLWV4dGVybiAiQyIgewotdm9pZCB3
ZWJraXRfd2ViX2luc3BlY3Rvcl9leGVjdXRlX3NjcmlwdChXZWJLaXRXZWJJbnNwZWN0b3IqIGlu
c3BlY3RvciwgbG9uZyBjYWxsSWQsIGNvbnN0IGdjaGFyKiBzY3JpcHQpOwotfQotCi1MYXlvdXRU
ZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRV
UkwoSlNTdHJpbmdSZWYgdXJsKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7Ci0gICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0obGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGl0ZW0pOwotCi0gICAgLy8gV2UgY2xlYXIgdGhl
IGhpc3RvcnkgYnkgc2V0dGluZyB0aGUgYmFjay9mb3J3YXJkIGxpc3QncyBjYXBhY2l0eSB0byAw
Ci0gICAgLy8gdGhlbiByZXN0b3JpbmcgaXQgYmFjayBhbmQgYWRkaW5nIGJhY2sgdGhlIGN1cnJl
bnQgaXRlbS4KLSAgICBnaW50IGxpbWl0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfbGltaXQobGlzdCk7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGlt
aXQobGlzdCwgMCk7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGltaXQo
bGlzdCwgbGltaXQpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0o
bGlzdCwgaXRlbSk7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVt
KGxpc3QsIGl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0pOwotfQotCi1KU1N0cmluZ1Jl
ZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBu
YW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJp
bmdSZWYgbmFtZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0
cygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0
OTUKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCi17Ci0gICAgZGlz
cGxheVdlYlZpZXcoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhp
c3RvcnkoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotSlNWYWx1ZVJlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQotewotICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250
ZXh0LCB2YWx1ZSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZyhBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1pbnQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9h
dCBwYWdlSGVpZ2h0KQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51
bWJlck9mUGFnZXNGb3JGcmFtZShtYWluRnJhbWUsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Ci19
Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVBy
b3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Ci17
Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5VmFsdWUoQWRvcHQsIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cGFnZVBy
b3BlcnR5KG1haW5GcmFtZSwgcHJvcGVydHlOYW1lLCBwYWdlTnVtYmVyKS5kYXRhKCkpKTsKLSAg
ICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51
bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmln
aHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAotewotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eVZhbHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnBhZ2VTaXplQW5kTWFyZ2lu
c0luUGl4ZWxzKG1haW5GcmFtZSwgcGFnZU51bWJlciwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9w
LCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KS5kYXRhKCkpKTsKLSAgICBy
ZXR1cm4gcHJvcGVydHlWYWx1ZTsKLX0KLQotc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3
ZWJIaXN0b3J5SXRlbUNvdW50KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0
KHdlYlZpZXcpOwotCi0gICAgaWYgKCFsaXN0KQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAv
LyBXZSBkbyBub3QgYWRkIHRoZSBjdXJyZW50IHBhZ2UgdG8gdGhlIHRvdGFsIGNvdW50IGFzIGl0
J3Mgbm90Ci0gICAgLy8gY29uc2lkZXJlZCBpbiBEUlQgdGVzdHMKLSAgICByZXR1cm4gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgobGlzdCkgKwotICAgICAgICAg
ICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgobGlzdCk7
Ci19Ci0KLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6d29ya2VyVGhy
ZWFkQ291bnQoKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBwbGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJn
dGsiKSk7Ci0gICAgcmV0dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9h
ZGluZ0ZyYW1lICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1w
KCk7Ci0gICAgbV93YWl0VG9EdW1wID0gZmFsc2U7Ci0gICAgd2FpdEZvclBvbGljeSA9IGZhbHNl
OwotfQotCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNv
dXJjZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdXJsKQotewotICAgIEdPd25Q
dHI8Y2hhcj4gdXJsQ1N0cmluZyhKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh1cmwpKTsKLSAgICBp
ZiAoIWdfc3RyX2hhc19wcmVmaXgodXJsQ1N0cmluZy5nZXQoKSwgImZpbGU6Ly8vdG1wL0xheW91
dFRlc3RzLyIpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsKLQotICAgIGNv
bnN0IGNoYXIqIGxheW91dFRlc3RzU3VmZml4ID0gdXJsQ1N0cmluZy5nZXQoKSArIHN0cmxlbigi
ZmlsZTovLy90bXAvIik7Ci0gICAgR093blB0cjxjaGFyPiB0ZXN0UGF0aChnX2J1aWxkX2ZpbGVu
YW1lKGdldFRvcExldmVsUGF0aCgpLmRhdGEoKSwgbGF5b3V0VGVzdHNTdWZmaXgsIE5VTEwpKTsK
LSAgICBHT3duUHRyPGNoYXI+IHRlc3RVUkkoZ19maWxlbmFtZV90b191cmkodGVzdFBhdGguZ2V0
KCksIDAsIDApKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodGVz
dFVSSS5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChK
U1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKLXsKLSAgICBnY2hhciogcmVsYXRp
dmVVUkwgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh1cmwpOwotICAgIFNvdXBVUkkqIGJhc2VV
UkkgPSBzb3VwX3VyaV9uZXcod2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1haW5GcmFtZSkpOwot
Ci0gICAgU291cFVSSSogYWJzb2x1dGVVUkkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJhc2VV
UkksIHJlbGF0aXZlVVJMKTsKLSAgICBzb3VwX3VyaV9mcmVlKGJhc2VVUkkpOwotICAgIGdfZnJl
ZShyZWxhdGl2ZVVSTCk7Ci0KLSAgICBnY2hhciogYWJzb2x1dGVDU3RyaW5nOwotICAgIGlmIChh
YnNvbHV0ZVVSSSkgewotICAgICAgICBhYnNvbHV0ZUNTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJp
bmcoYWJzb2x1dGVVUkksIEZBTFNFKTsKLSAgICAgICAgc291cF91cmlfZnJlZShhYnNvbHV0ZVVS
SSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFic29sdXRlQ1N0cmluZyA9IEpTU3RyaW5nQ29weVVU
RjhDU3RyaW5nKHVybCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVV
UkwoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGFic29sdXRlQ1N0cmluZykp
OwotICAgIGdfZnJlZShhYnNvbHV0ZUNTdHJpbmcpOwotCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQo
KS0+cXVldWUobmV3IExvYWRJdGVtKGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRz
RWRpdGluZykKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRh
YmxlKHdlYlZpZXcsIGFjY2VwdHNFZGl0aW5nKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCi17
Ci0gICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigp
OwotICAgIFNvdXBDb29raWVKYXIqIGphciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U291cENvb2tpZUph
cio+KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09PS0lFX0pB
UikpOwotCi0gICAgLyogSWYgdGhlIGphciB3YXMgbm90IGNyZWF0ZWQgLSB3ZSBjcmVhdGUgaXQg
b24gZGVtYW5kLCBpLmUsIGp1c3QKLSAgICAgICBpbiBjYXNlIHdlIGhhdmUgSFRUUCByZXF1ZXN0
cyAtIHRoZW4gd2UgbXVzdCBjcmVhdGUgaXQgaGVyZSBpbgotICAgICAgIG9yZGVyIHRvIHNldCB0
aGUgcHJvcGVyIGFjY2VwdCBwb2xpY3kgKi8KLSAgICBpZiAoIWphcikgewotICAgICAgICBqYXIg
PSBzb3VwX2Nvb2tpZV9qYXJfbmV3KCk7Ci0gICAgICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVy
ZShzZXNzaW9uLCBTT1VQX1NFU1NJT05fRkVBVFVSRShqYXIpKTsKLSAgICAgICAgZ19vYmplY3Rf
dW5yZWYoamFyKTsKLSAgICB9Ci0KLSAgICBTb3VwQ29va2llSmFyQWNjZXB0UG9saWN5IHBvbGlj
eTsKLQotICAgIGlmIChhbHdheXNBY2NlcHRDb29raWVzKQotICAgICAgICBwb2xpY3kgPSBTT1VQ
X0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKLSAgICBlbHNlCi0gICAgICAgIHBvbGljeSA9IFNP
VVBfQ09PS0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk7Ci0KLSAgICBnX29iamVjdF9zZXQo
R19PQkpFQ1QoamFyKSwgU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9QT0xJQ1ksIHBvbGljeSwgTlVM
TCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVn
YXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSgpCi17Ci0gICAgd2FpdEZvclBvbGljeSA9IHRydWU7Ci0gICAgc2V0V2FpdFRvRHVt
cCh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9s
aWN5KEpTU3RyaW5nUmVmIG9yaWVudGF0aW9uLCBKU1N0cmluZ1JlZiBwb2xpY3kpCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3Ry
aW5nUmVmIHByb3RvY29sLCBKU1N0cmluZ1JlZiBob3N0LCBib29sIGluY2x1ZGVTdWJkb21haW5z
KQotewotICAgIGdjaGFyKiBzb3VyY2VPcmlnaW5HQ2hhciA9IEpTU3RyaW5nQ29weVVURjhDU3Ry
aW5nKHNvdXJjZU9yaWdpbik7Ci0gICAgZ2NoYXIqIHByb3RvY29sR0NoYXIgPSBKU1N0cmluZ0Nv
cHlVVEY4Q1N0cmluZyhwcm90b2NvbCk7Ci0gICAgZ2NoYXIqIGhvc3RHQ2hhciA9IEpTU3RyaW5n
Q29weVVURjhDU3RyaW5nKGhvc3QpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6d2hp
dGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW5HQ2hhciwgcHJvdG9jb2xHQ2hhciwg
aG9zdEdDaGFyLCBpbmNsdWRlU3ViZG9tYWlucyk7Ci0gICAgZ19mcmVlKHNvdXJjZU9yaWdpbkdD
aGFyKTsKLSAgICBnX2ZyZWUocHJvdG9jb2xHQ2hhcik7Ci0gICAgZ19mcmVlKGhvc3RHQ2hhcik7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2ws
IEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCi17Ci0gICAgR093blB0
cjxnY2hhcj4gc291cmNlT3JpZ2luR0NoYXIoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNl
T3JpZ2luKSk7Ci0gICAgR093blB0cjxnY2hhcj4gcHJvdG9jb2xHQ2hhcihKU1N0cmluZ0NvcHlV
VEY4Q1N0cmluZyhwcm90b2NvbCkpOwotICAgIEdPd25QdHI8Z2NoYXI+IGhvc3RHQ2hhcihKU1N0
cmluZ0NvcHlVVEY4Q1N0cmluZyhob3N0KSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpyZW1vdmVXaGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbkdDaGFyLmdldCgp
LCBwcm90b2NvbEdDaGFyLmdldCgpLCBob3N0R0NoYXIuZ2V0KCksIGluY2x1ZGVTdWJkb21haW5z
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJl
c3BvbmRlcihib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9v
bCBjeWNsZXMpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAidGFiLWtleS1jeWNsZXMtdGhyb3VnaC1lbGVtZW50
cyIsIGN5Y2xlcywgTlVMTCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVz
ZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXN0YXRpYyBnY2hhciogdXNlclN0eWxlU2hlZXQgPSBOVUxMOwotc3Rh
dGljIGdib29sZWFuIHVzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IFRSVUU7Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcpCi17Ci0g
ICAgdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZmxhZzsKLQotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIFdl
YktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
d2ViVmlldyk7Ci0gICAgaWYgKGZsYWcgJiYgdXNlclN0eWxlU2hlZXQpCi0gICAgICAgIGdfb2Jq
ZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwgdXNlclN0
eWxlU2hlZXQsIE5VTEwpOwotICAgIGVsc2UKLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNU
KHNldHRpbmdzKSwgInVzZXItc3R5bGVzaGVldC11cmkiLCAiIiwgTlVMTCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdS
ZWYgcGF0aCkKLXsKLSAgICBnX2ZyZWUodXNlclN0eWxlU2hlZXQpOwotICAgIHVzZXJTdHlsZVNo
ZWV0ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcocGF0aCk7Ci0gICAgaWYgKHVzZXJTdHlsZVNo
ZWV0RW5hYmxlZCkKLSAgICAgICAgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRydWUpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgbm9k
ZU9iamVjdCwgdmFsdWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3
TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQotewotICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFT
U0VSVCh2aWV3KTsKLQotICAgIGNoYXIqIHZpZXdNb2RlID0gSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcobW9kZSk7Ci0KLSAgICBpZiAoIWdfc3RyY21wMCh2aWV3TW9kZSwgIndpbmRvd2VkIikpCi0g
ICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHZpZXcsIFdFQktJVF9XRUJfVklF
V19WSUVXX01PREVfV0lORE9XRUQpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUs
ICJmbG9hdGluZyIpKQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh2aWV3
LCBXRUJLSVRfV0VCX1ZJRVdfVklFV19NT0RFX0ZMT0FUSU5HKTsKLSAgICBlbHNlIGlmICghZ19z
dHJjbXAwKHZpZXdNb2RlLCAiZnVsbHNjcmVlbiIpKQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdf
c2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJLSVRfV0VCX1ZJRVdfVklFV19NT0RFX0ZVTExTQ1JFRU4p
OwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUsICJtYXhpbWl6ZWQiKSkKLSAgICAg
ICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJ
RVdfTU9ERV9NQVhJTUlaRUQpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUsICJt
aW5pbWl6ZWQiKSkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X21vZGUodmlldywg
V0VCS0lUX1dFQl9WSUVXX1ZJRVdfTU9ERV9NSU5JTUlaRUQpOwotCi0gICAgZ19mcmVlKHZpZXdN
b2RlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9v
bCB3aW5kb3dJc0tleSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRTbWFydEluc2VydERlbGV0ZUVu
YWJsZWQod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwgZmxhZyk7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCh2b2lkKikKLXsKLSAg
ICBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coMCk7Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9u
ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVvdXRTZWNvbmRzID0gMzA7Ci0KLSAgICBt
X3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOwotICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgc2hv
dWxkU2V0V2FpdFRvRHVtcFdhdGNoZG9nKCkpCi0gICAgICAgIHNldFdhaXRUb0R1bXBXYXRjaGRv
ZyhnX3RpbWVvdXRfYWRkX3NlY29uZHModGltZW91dFNlY29uZHMsIHdhaXRUb0R1bXBXYXRjaGRv
Z0ZpcmVkLCAwKSk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQo
KQotewotICAgIC8vICsxIC0+IGluY2x1ZGluZyB0aGUgbWFpbiB2aWV3Ci0gICAgcmV0dXJuIGdf
c2xpc3RfbGVuZ3RoKHdlYlZpZXdMaXN0KSArIDE7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUp
OwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdf
T0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS1wcml2YXRlLWJyb3dzaW5nIiwgZmxhZywgTlVMTCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQoYm9vbCBmbGFnKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQot
ICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImphdmFz
Y3JpcHQtY2FuLWFjY2Vzcy1jbGlwYm9hcmQiLCBmbGFnLCBOVUxMKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFnKQotewotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0
aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rf
c2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS14c3MtYXVkaXRvciIsIGZsYWcsIE5VTEwp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFi
bGVkKGJvb2wgZmxhZykKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBX
ZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHZpZXcpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtZnJh
bWUtZmxhdHRlbmluZyIsIGZsYWcsIE5VTEwpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUp
OwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdf
T0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS1zcGF0aWFsLW5hdmlnYXRpb24iLCBmbGFnLCBOVUxM
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nl
c3NGcm9tRmlsZVVSTHMoYm9vbCBmbGFnKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3
KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwg
ImVuYWJsZS11bml2ZXJzYWwtYWNjZXNzLWZyb20tZmlsZS11cmlzIiwgZmxhZywgTlVMTCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxl
VVJMcyhib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAg
V2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLWZp
bGUtYWNjZXNzLWZyb20tZmlsZS11cmlzIiwgZmxhZywgTlVMTCk7Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCwgYm9vbCBpc0F1dG9maWxsZWQpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpzZXRBdXRvZmlsbGVkKGNvbnRleHQsIG5vZGVPYmplY3QsIGlzQXV0b2ZpbGxlZCk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQotewotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0
aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rf
c2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxTRSwgTlVMTCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlv
bihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRh
LCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBsYXlvdXQgdGVzdHMu
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDMz
NS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250
aF9kYXRhKHdlYlZpZXdMaXN0LCAwKSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICB2aWV3ID0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmll
dyk7Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKHZpZXcsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5KTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIEpT
U3RyaW5nUmVmIG1lc3NhZ2UpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9X
RUJfVklFVyhnX3NsaXN0X250aF9kYXRhKHdlYlZpZXdMaXN0LCAwKSk7Ci0gICAgaWYgKCF2aWV3
KQotICAgICAgICB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBjTWVzc2FnZShKU1N0
cmluZ0NvcHlVVEY4Q1N0cmluZyhtZXNzYWdlKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcih2aWV3LCBjb2RlLCBjTWVzc2FnZS5nZXQoKSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihib29sIGFsbG93KQotewotICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxv
dyk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250
aF9kYXRhKHdlYlZpZXdMaXN0LCAwKSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICB2aWV3ID0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmll
dyk7Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldE1vY2tHZW9sb2NhdGlvblBl
cm1pc3Npb24odmlldywgYWxsb3cpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51
bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKHZpZXcpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2Nr
U3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwg
SlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3Bl
ZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVs
ZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91
dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7Ci0gICAgaWYgKGVuYWJsZWQpIHsKLSAg
ICAgICAgR093blB0cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X3RtcF9kaXIoKSwgIkR1bXBSZW5kZXJUcmVlIiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsK
LSAgICAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGljb25EYXRh
YmFzZVBhdGguZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2lu
Z0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQot
ICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3Modmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImphdmFz
Y3JpcHQtY2FuLW9wZW4td2luZG93cy1hdXRvbWF0aWNhbGx5IiwgIWZsYWcsIE5VTEwpOwotCi19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxh
ZykKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBXZWJLaXRXZWJTZXR0
aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAg
IGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtcGx1Z2lucyIsIGZsYWcs
IE5VTEwpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9D
b21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpIAotewotICAgIHJldHVybiBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVu
dFdpdGhJZChtYWluRnJhbWUsIGlkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgZ2NoYXIqIGNOYW1lID0gSlNTdHJpbmdD
b3B5VVRGOENTdHJpbmcobmFtZSk7Ci0gICAgZ2NoYXIqIGNWYWx1ZSA9IEpTU3RyaW5nQ29weVVU
RjhDU3RyaW5nKHZhbHVlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmV4ZWN1dGVD
b3JlQ29tbWFuZEJ5TmFtZSh2aWV3LCBjTmFtZSwgY1ZhbHVlKTsKLSAgICBnX2ZyZWUoY05hbWUp
OwotICAgIGdfZnJlZShjVmFsdWUpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpm
aW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2Jq
ZWN0UmVmIG9wdGlvbnNBcnJheSkKLXsKLSAgICBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9u
cyA9IDA7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHdlYlZpZXcpOwotCi0gICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3Bl
cnR5TmFtZS5nZXQoKSwgMCk7IAotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxl
bmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR093blB0cjxnY2hhcj4g
dGFyZ2V0U3RyaW5nKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHRhcmdldCkpOwotCi0gICAgc2l6
ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsgCi0gICAgICAgIGlmICghSlNWYWx1ZUlz
U3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgIAotICAg
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotCi0gICAgICAgIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkK
LSAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6V2ViRmluZE9wdGlvbnNDYXNlSW5z
ZW5zaXRpdmU7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
b3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIpKQotICAgICAgICAgICAgZmluZE9wdGlv
bnMgfD0gV2ViS2l0OjpXZWJGaW5kT3B0aW9uc0F0V29yZFN0YXJ0czsKLSAgICAgICAgZWxzZSBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKLSAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6V2ViRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKLSAgICAg
ICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiQmFja3dhcmRzIikpCi0gICAgICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZp
bmRPcHRpb25zQmFja3dhcmRzOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJXcmFwQXJvdW5kIikpCi0gICAgICAgICAgICBm
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRPcHRpb25zV3JhcEFyb3VuZDsKLSAgICAgICAg
ZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAi
U3RhcnRJblNlbGVjdGlvbiIpKQotICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpX
ZWJGaW5kT3B0aW9uc1N0YXJ0SW5TZWxlY3Rpb247Ci0gICAgfSAgIAotCi0gICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZmluZFN0cmluZyh3ZWJWaWV3LCB0YXJnZXRTdHJpbmcu
Z2V0KCksIGZpbmRPcHRpb25zKTsgCi19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlz
Q29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NF
UlQodmlldyk7Ci0KLSAgICBnY2hhciogY05hbWUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhu
YW1lKTsKLSAgICBib29sIHJlc3VsdCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aXNDb21t
YW5kRW5hYmxlZCh2aWV3LCBjTmFtZSk7Ci0gICAgZ19mcmVlKGNOYW1lKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGlu
dCBjYWNoZU1vZGVsKQotewotICAgIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9t
IHRoZSBNYWMgY2FjaGUgbW9kZWwgZW51bSBpbiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzLmguCi0gICAgc3dpdGNoIChjYWNoZU1vZGVsKSB7Ci0gICAgY2FzZSAwOgot
ICAgICAgICB3ZWJraXRfc2V0X2NhY2hlX21vZGVsKFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVO
VF9WSUVXRVIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIHdlYmtpdF9z
ZXRfY2FjaGVfbW9kZWwoV0VCS0lUX0NBQ0hFX01PREVMX0RPQ1VNRU5UX0JST1dTRVIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwo
V0VCS0lUX0NBQ0hFX01PREVMX1dFQl9CUk9XU0VSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihK
U1N0cmluZ1JlZiBqc1VSTCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGEpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxp
Y2F0aW9uIGNhY2hlIHF1b3Rhcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9wYXF1ZUpTU3RyaW5nKikKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hl
cyBmb3IgYW4gb3JpZ2luLgotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxv
Y2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVy
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNh
Z2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KLSAgICByZXR1cm4gMDsKLX0KLQotSlNWYWx1ZVJl
ZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29u
dGV4dFJlZiBjb250ZXh0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdp
bnMgdGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQotewotICAgIHdlYmtpdF9yZW1v
dmVfYWxsX3dlYl9kYXRhYmFzZXMoKTsKLX0KLSAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQotewotICAgIFdlYktp
dFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9v
cmlnaW4obWFpbkZyYW1lKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0
YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7Ci19Ci0KLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSgpCi17Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5n
UmVmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCi17Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBK
U1N0cmluZ1JlZiBzY2hlbWUpCi17Ci0gICAgR093blB0cjxnY2hhcj4gdXJsU2NoZW1lKEpTU3Ry
aW5nQ29weVVURjhDU3RyaW5nKHNjaGVtZSkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHVy
bFNjaGVtZS5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KG1haW5GcmFtZSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sod2ViVmlldyk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnMpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXREZWZlcnNMb2FkaW5nKHdlYlZpZXcsIGRlZmVycyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUp
Ci17Ci0gICAgd2Via2l0X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUoc2l6ZSk7
Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0
cmluZ1JlZiBlbGVtZW50SWQpCi17ICAgIAotICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5
VVRGOENTdHJpbmcoYW5pbWF0aW9uTmFtZSk7Ci0gICAgZ2NoYXIqIGVsZW1lbnQgPSBKU1N0cmlu
Z0NvcHlVVEY4Q1N0cmluZyhlbGVtZW50SWQpOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OnBhdXNlQW5pbWF0aW9uKG1haW5GcmFtZSwgbmFtZSwgdGlt
ZSwgZWxlbWVudCk7Ci0gICAgZ19mcmVlKG5hbWUpOwotICAgIGdfZnJlZShlbGVtZW50KTsKLSAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5h
bWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCi17ICAgIAotICAgIGdjaGFy
KiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcocHJvcGVydHlOYW1lKTsKLSAgICBnY2hh
ciogZWxlbWVudCA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKGVsZW1lbnRJZCk7Ci0gICAgYm9v
bCByZXR1cm5WYWx1ZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cGF1c2VUcmFuc2l0aW9u
KG1haW5GcmFtZSwgbmFtZSwgdGltZSwgZWxlbWVudCk7Ci0gICAgZ19mcmVlKG5hbWUpOwotICAg
IGdfZnJlZShlbGVtZW50KTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLXVuc2lnbmVk
IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyhtYWluRnJhbWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYm9vbGVhbkZyb21WYWx1
ZShnY2hhciogdmFsdWUpCi17Ci0gICAgcmV0dXJuICFnX2FzY2lpX3N0cmNhc2VjbXAodmFsdWUs
ICJ0cnVlIikgfHwgIWdfYXNjaWlfc3RyY2FzZWNtcCh2YWx1ZSwgIjEiKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwg
SlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgR093blB0cjxnY2hhcj4gb3JpZ2luYWxOYW1lKEpT
U3RyaW5nQ29weVVURjhDU3RyaW5nKGtleSkpOwotICAgIEdPd25QdHI8Z2NoYXI+IHZhbHVlQXNT
dHJpbmcoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcodmFsdWUpKTsKLQotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAg
IEFTU0VSVCh2aWV3KTsKLQotICAgIC8vIFRoaXMgdHJhbnNmb3JtYXRpb24gY291bGQgYmUgaGFu
ZGxlZCBieSBhIGhhc2ggdGFibGUgKGFuZCBpdCBvbmNlIHdhcyksIGJ1dAotICAgIC8vIGhhdmlu
ZyBpdCBwcm9taW5lbnQsIG1ha2VzIGl0IGVhc2llciBmb3IgcGVvcGxlIGZyb20gb3RoZXIgcG9y
dHMgdG8ga2VlcCB0aGUKLSAgICAvLyBsaXN0IHVwIHRvIGRhdGUuCi0gICAgY29uc3QgZ2NoYXIq
IHByb3BlcnR5TmFtZSA9IDA7Ci0gICAgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQo
KSwgIldlYktpdEphdmFTY3JpcHRFbmFibGVkIikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJl
bmFibGUtc2NyaXB0cyI7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdl
dCgpLCAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJk
ZWZhdWx0LWZvbnQtc2l6ZSI7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1l
LmdldCgpLCAiV2ViS2l0RW5hYmxlQ2FyZXRCcm93c2luZyIpKQotICAgICAgICBwcm9wZXJ0eU5h
bWUgPSAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIjsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChv
cmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpKQot
ICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLXBhZ2UtY2FjaGUiOwotICAgIGVsc2UgaWYg
KGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdFBsdWdpbnNFbmFibGVkIikp
Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtcGx1Z2lucyI7Ci0gICAgZWxzZSBpZiAo
Z19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdF
bmFibGVkIikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtaHlwZXJsaW5rLWF1ZGl0
aW5nIjsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJL
aXRXZWJHTEVuYWJsZWQiKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS13ZWJnbCI7
Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0V2Vi
QXVkaW9FbmFibGVkIikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtd2ViYXVkaW8i
OwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdFRh
YlRvTGlua3NQcmVmZXJlbmNlS2V5IikpIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXRMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVB
c1N0cmluZy5nZXQoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQ
cmVmZXJlbmNlS2V5IikpIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRQ
YWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFp
bkZyYW1lKSwgYm9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwg
IldlYktpdENTU0dyaWRMYXlvdXRFbmFibGVkIikpIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRDU1NHcmlkTGF5b3V0RW5hYmxlZCh3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpLCBib29sZWFuRnJvbVZhbHVlKHZhbHVlQXNTdHJpbmcuZ2V0KCkp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxO
YW1lLmdldCgpLCAiV2ViS2l0Q1NTUmVnaW9uc0VuYWJsZWQiKSkgewotICAgICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNldENTU1JlZ2lvbnNFbmFibGVkKHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSksIGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5n
ZXQoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlIHRyaWVkIHRv
IG92ZXJyaWRlICIKLSAgICAgICAgICAgICAgICAidW5rbm93biBwcmVmZXJlbmNlICclcycuXG4i
LCBvcmlnaW5hbE5hbWUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2Vi
S2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2
aWV3KTsKLSAgICBHUGFyYW1TcGVjKiBwc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVy
dHkoR19PQkpFQ1RfQ0xBU1MoCi0gICAgICAgIFdFQktJVF9XRUJfU0VUVElOR1NfR0VUX0NMQVNT
KHNldHRpbmdzKSksIHByb3BlcnR5TmFtZSk7Ci0gICAgR1ZhbHVlIGN1cnJlbnRQcm9wZXJ0eVZh
bHVlID0geyAwLCB7IHsgMCB9IH0gfTsKLSAgICBnX3ZhbHVlX2luaXQoJmN1cnJlbnRQcm9wZXJ0
eVZhbHVlLCBwc3BlYy0+dmFsdWVfdHlwZSk7Ci0KLSAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJ
TkcoJmN1cnJlbnRQcm9wZXJ0eVZhbHVlKSkKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdz
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlQXNTdHJpbmcuZ2V0KCksIE5VTEwpOwotICAgIGVsc2UgaWYg
KEdfVkFMVUVfSE9MRFNfQk9PTEVBTigmY3VycmVudFByb3BlcnR5VmFsdWUpKQotICAgICAgICBn
X29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCBwcm9wZXJ0eU5hbWUsIGJvb2xlYW5Gcm9t
VmFsdWUodmFsdWVBc1N0cmluZy5nZXQoKSksIE5VTEwpOwotICAgIGVsc2UgaWYgKEdfVkFMVUVf
SE9MRFNfSU5UKCZjdXJyZW50UHJvcGVydHlWYWx1ZSkpCi0gICAgICAgIGdfb2JqZWN0X3NldChH
X09CSkVDVChzZXR0aW5ncyksIHByb3BlcnR5TmFtZSwgYXRvaSh2YWx1ZUFzU3RyaW5nLmdldCgp
KSwgTlVMTCk7Ci0gICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19GTE9BVCgmY3VycmVudFByb3Bl
cnR5VmFsdWUpKSB7Ci0gICAgICAgIGdmbG9hdCBuZXdWYWx1ZSA9IGdfYXNjaWlfc3RydG9kKHZh
bHVlQXNTdHJpbmcuZ2V0KCksIDApOwotICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0
dGluZ3MpLCBwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlLCBOVUxMKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJl
bmNlIGZhaWxlZCB0byBvdmVycmlkZSAiCi0gICAgICAgICAgICAgICAgInByZWZlcmVuY2UgJyVz
Jy5cbiIsIG9yaWdpbmFsTmFtZS5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJv
b2wgYWxsRnJhbWVzKQotewotICAgIHByaW50ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVz
ZXJTY3JpcHQgbm90IGltcGxlbWVudGVkLlxuIik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFt
ZXMpCi17Ci0gICAgR093blB0cjxnY2hhcj4gc291cmNlQ29kZShKU1N0cmluZ0NvcHlVVEY4Q1N0
cmluZyhzb3VyY2UpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmFkZFVzZXJTdHls
ZVNoZWV0KG1haW5GcmFtZSwgc291cmNlQ29kZS5nZXQoKSwgYWxsRnJhbWVzKTsKLSAgICAvLyBG
SVhNRTogbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uIHdoeSB1c2Vyc2NyaXB0cy91c2VyLXN0eWxl
LXRvcC1mcmFtZS1vbmx5Lmh0bWwgZmFpbHMgd2hlbiBhbGxGcmFtZXMgaXMgZmFsc2UuCi0KLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChi
b29sIGVuYWJsZWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHdl
YlNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLQotICAg
IGdfb2JqZWN0X3NldCh3ZWJTZXR0aW5ncywgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgZW5h
YmxlZCwgTlVMTCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9y
KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
d2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9
IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgd2Via2l0X3dl
Yl9pbnNwZWN0b3Jfc2hvdyhpbnNwZWN0b3IpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgV2ViS2l0V2Vi
SW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJW
aWV3KTsKLQotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlKGluc3BlY3Rvcik7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBj
YWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBXZWJLaXRX
ZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdl
YlZpZXcpOwotICAgIGNoYXIqIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5n
KHNjcmlwdCk7Ci0KLSAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9leGVjdXRlX3NjcmlwdChpbnNw
ZWN0b3IsIGNhbGxJZCwgc2NyaXB0U3RyaW5nKTsKLSAgICBnX2ZyZWUoc2NyaXB0U3RyaW5nKTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmdSZWYgc2NyaXB0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6c2hvdWxkQ2xvc2UobWFpbkZyYW1lKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1Jl
ZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKLXsKLQotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQotewotCi19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQot
ewotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1h
cmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2Rl
T2JqZWN0KSBjb25zdAotewotICAgIENTdHJpbmcgbWFya2VyVGV4dEdDaGFyID0gRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0obWFpbkZyYW1lLCBjb250ZXh0
LCBub2RlT2JqZWN0KTsKLSAgICBpZiAobWFya2VyVGV4dEdDaGFyLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtYXJrZXJUZXh0KEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtYXJrZXJUZXh0R0NoYXIuZGF0YSgp
KSk7Ci0gICAgcmV0dXJuIG1hcmtlclRleHQ7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmlu
Z1JlZikKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCi17
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhi
b29sIHNlcmlhbGl6ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFNlcmlh
bGl6ZUhUVFBMb2FkcyhzZXJpYWxpemUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCi17
Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbCh3ZWJWaWV3LCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0
aW9uKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQotewotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKLXsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Zm9jdXNXZWJWaWV3KCkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkKLXsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJp
bmdSZWYgdGl0bGUpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFn
ZVZpc2liaWxpdHkoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYklu
dGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCi19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5l
ckJsYWNrR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVz
dFJ1bm5lckJsYWNrR3RrLmNwcAkocmV2aXNpb24gMTI1MzM1KQkoZnJvbSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOjEyNTMzNSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyQmxhY2tHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1hbG9uem9AZ21haWwuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8
aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitleHRlcm4gIkMi
IHsKK3ZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0V2ViSW5z
cGVjdG9yKiBpbnNwZWN0b3IsIGxvbmcgY2FsbElkLCBjb25zdCBnY2hhciogc2NyaXB0KTsKK30K
KworTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRE
aXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIFdlYktp
dFdlYkhpc3RvcnlJdGVtKiBpdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtKGxpc3QpOworICAgIGdfb2JqZWN0X3JlZihpdGVtKTsKKworICAgIC8vIFdl
IGNsZWFyIHRoZSBoaXN0b3J5IGJ5IHNldHRpbmcgdGhlIGJhY2svZm9yd2FyZCBsaXN0J3MgY2Fw
YWNpdHkgdG8gMAorICAgIC8vIHRoZW4gcmVzdG9yaW5nIGl0IGJhY2sgYW5kIGFkZGluZyBiYWNr
IHRoZSBjdXJyZW50IGl0ZW0uCisgICAgZ2ludCBsaW1pdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2xpbWl0KGxpc3QpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3Rfc2V0X2xpbWl0KGxpc3QsIDApOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
c2V0X2xpbWl0KGxpc3QsIGxpbWl0KTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2FkZF9pdGVtKGxpc3QsIGl0ZW0pOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z29fdG9faXRlbShsaXN0LCBpdGVtKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtKTsKK30KKwor
SlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNT
dHJpbmdSZWYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7
Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3RO
YW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdM
b2FkUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4
IGZvciA2NzI3NDk1Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQor
eworICAgIGRpc3BsYXlXZWJWaWV3KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmtlZXBXZWJIaXN0b3J5KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK0pTVmFs
dWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRl
ZEluZm8oY29udGV4dCwgdmFsdWUpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmcoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgcmV0dXJuIHN0cmluZzsK
K30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VX
aWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpudW1iZXJPZlBhZ2VzRm9yRnJhbWUobWFpbkZyYW1lLCBwYWdlV2lkdGgsIHBhZ2VI
ZWlnaHQpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVy
KSBjb25zdAoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eVZhbHVlKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OnBhZ2VQcm9wZXJ0eShtYWluRnJhbWUsIHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcikuZGF0
YSgpKSk7CisgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Cit9CisKK0pTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMo
aW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50
IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKK3sK
KyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYWdlU2l6
ZUFuZE1hcmdpbnNJblBpeGVscyhtYWluRnJhbWUsIHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQs
IG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkuZGF0YSgp
KSk7CisgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Cit9CisKK3NpemVfdCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zv
cndhcmRfbGlzdCh3ZWJWaWV3KTsKKworICAgIGlmICghbGlzdCkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgLy8gV2UgZG8gbm90IGFkZCB0aGUgY3VycmVudCBwYWdlIHRvIHRoZSB0b3RhbCBj
b3VudCBhcyBpdCdzIG5vdAorICAgIC8vIGNvbnNpZGVyZWQgaW4gRFJUIHRlc3RzCisgICAgcmV0
dXJuIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKGxpc3QpICsK
KyAgICAgICAgICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVu
Z3RoKGxpc3QpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhy
ZWFkQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OndvcmtlclRocmVhZENvdW50KCk7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKK3sKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiZ3RrIikpOworICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQoreworICAgIGlmIChtX3dhaXRUb0R1bXAg
JiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAg
ICAgICAgZHVtcCgpOworICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOworICAgIHdhaXRGb3JQb2xp
Y3kgPSBmYWxzZTsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhU
b0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK3sK
KyAgICBHT3duUHRyPGNoYXI+IHVybENTdHJpbmcoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcodXJs
KSk7CisgICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4KHVybENTdHJpbmcuZ2V0KCksICJmaWxlOi8v
L3RtcC9MYXlvdXRUZXN0cy8iKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nUmV0YWluKHVybCk7
CisKKyAgICBjb25zdCBjaGFyKiBsYXlvdXRUZXN0c1N1ZmZpeCA9IHVybENTdHJpbmcuZ2V0KCkg
KyBzdHJsZW4oImZpbGU6Ly8vdG1wLyIpOworICAgIEdPd25QdHI8Y2hhcj4gdGVzdFBhdGgoZ19i
dWlsZF9maWxlbmFtZShnZXRUb3BMZXZlbFBhdGgoKS5kYXRhKCksIGxheW91dFRlc3RzU3VmZml4
LCBOVUxMKSk7CisgICAgR093blB0cjxjaGFyPiB0ZXN0VVJJKGdfZmlsZW5hbWVfdG9fdXJpKHRl
c3RQYXRoLmdldCgpLCAwLCAwKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHRlc3RVUkkuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpx
dWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit7CisgICAgZ2No
YXIqIHJlbGF0aXZlVVJMID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcodXJsKTsKKyAgICBTb3Vw
VVJJKiBiYXNlVVJJID0gc291cF91cmlfbmV3KHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtYWlu
RnJhbWUpKTsKKworICAgIFNvdXBVUkkqIGFic29sdXRlVVJJID0gc291cF91cmlfbmV3X3dpdGhf
YmFzZShiYXNlVVJJLCByZWxhdGl2ZVVSTCk7CisgICAgc291cF91cmlfZnJlZShiYXNlVVJJKTsK
KyAgICBnX2ZyZWUocmVsYXRpdmVVUkwpOworCisgICAgZ2NoYXIqIGFic29sdXRlQ1N0cmluZzsK
KyAgICBpZiAoYWJzb2x1dGVVUkkpIHsKKyAgICAgICAgYWJzb2x1dGVDU3RyaW5nID0gc291cF91
cmlfdG9fc3RyaW5nKGFic29sdXRlVVJJLCBGQUxTRSk7CisgICAgICAgIHNvdXBfdXJpX2ZyZWUo
YWJzb2x1dGVVUkkpOworICAgIH0gZWxzZQorICAgICAgICBhYnNvbHV0ZUNTdHJpbmcgPSBKU1N0
cmluZ0NvcHlVVEY4Q1N0cmluZyh1cmwpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGFic29sdXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNvbHV0
ZUNTdHJpbmcpKTsKKyAgICBnX2ZyZWUoYWJzb2x1dGVDU3RyaW5nKTsKKworICAgIFdvcmtRdWV1
ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0
KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJv
b2wgYWNjZXB0c0VkaXRpbmcpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgd2Via2l0X3dlYl92aWV3
X3NldF9lZGl0YWJsZSh3ZWJWaWV3LCBhY2NlcHRzRWRpdGluZyk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRD
b29raWVzKQoreworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gd2Via2l0X2dldF9kZWZhdWx0
X3Nlc3Npb24oKTsKKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSByZWludGVycHJldF9jYXN0PFNv
dXBDb29raWVKYXIqPihzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBF
X0NPT0tJRV9KQVIpKTsKKworICAgIC8qIElmIHRoZSBqYXIgd2FzIG5vdCBjcmVhdGVkIC0gd2Ug
Y3JlYXRlIGl0IG9uIGRlbWFuZCwgaS5lLCBqdXN0CisgICAgICAgaW4gY2FzZSB3ZSBoYXZlIEhU
VFAgcmVxdWVzdHMgLSB0aGVuIHdlIG11c3QgY3JlYXRlIGl0IGhlcmUgaW4KKyAgICAgICBvcmRl
ciB0byBzZXQgdGhlIHByb3BlciBhY2NlcHQgcG9saWN5ICovCisgICAgaWYgKCFqYXIpIHsKKyAg
ICAgICAgamFyID0gc291cF9jb29raWVfamFyX25ldygpOworICAgICAgICBzb3VwX3Nlc3Npb25f
YWRkX2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZFQVRVUkUoamFyKSk7CisgICAgICAg
IGdfb2JqZWN0X3VucmVmKGphcik7CisgICAgfQorCisgICAgU291cENvb2tpZUphckFjY2VwdFBv
bGljeSBwb2xpY3k7CisKKyAgICBpZiAoYWx3YXlzQWNjZXB0Q29va2llcykKKyAgICAgICAgcG9s
aWN5ID0gU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7CisgICAgZWxzZQorICAgICAgICBw
b2xpY3kgPSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOworCisgICAgZ19v
YmplY3Rfc2V0KEdfT0JKRUNUKGphciksIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfUE9MSUNZLCBw
b2xpY3ksIE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Q
b2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0
Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAgIHdhaXRGb3JQb2xpY3kgPSB0cnVlOworICAgIHNl
dFdhaXRUb0R1bXAodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNj
cm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3Jp
Z2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRl
U3ViZG9tYWlucykKK3sKKyAgICBnY2hhciogc291cmNlT3JpZ2luR0NoYXIgPSBKU1N0cmluZ0Nv
cHlVVEY4Q1N0cmluZyhzb3VyY2VPcmlnaW4pOworICAgIGdjaGFyKiBwcm90b2NvbEdDaGFyID0g
SlNTdHJpbmdDb3B5VVRGOENTdHJpbmcocHJvdG9jb2wpOworICAgIGdjaGFyKiBob3N0R0NoYXIg
PSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhob3N0KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OndoaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luR0NoYXIsIHByb3Rv
Y29sR0NoYXIsIGhvc3RHQ2hhciwgaW5jbHVkZVN1YmRvbWFpbnMpOworICAgIGdfZnJlZShzb3Vy
Y2VPcmlnaW5HQ2hhcik7CisgICAgZ19mcmVlKHByb3RvY29sR0NoYXIpOworICAgIGdfZnJlZSho
b3N0R0NoYXIpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVm
IHByb3RvY29sLCBKU1N0cmluZ1JlZiBob3N0LCBib29sIGluY2x1ZGVTdWJkb21haW5zKQorewor
ICAgIEdPd25QdHI8Z2NoYXI+IHNvdXJjZU9yaWdpbkdDaGFyKEpTU3RyaW5nQ29weVVURjhDU3Ry
aW5nKHNvdXJjZU9yaWdpbikpOworICAgIEdPd25QdHI8Z2NoYXI+IHByb3RvY29sR0NoYXIoSlNT
dHJpbmdDb3B5VVRGOENTdHJpbmcocHJvdG9jb2wpKTsKKyAgICBHT3duUHRyPGdjaGFyPiBob3N0
R0NoYXIoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoaG9zdCkpOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6cmVtb3ZlV2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW5H
Q2hhci5nZXQoKSwgcHJvdG9jb2xHQ2hhci5nZXQoKSwgaG9zdEdDaGFyLmdldCgpLCBpbmNsdWRl
U3ViZG9tYWlucyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFt
ZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGJvb2wgY3ljbGVzKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIFdlYktpdFdlYlNldHRp
bmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7Cisg
ICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgInRhYi1rZXktY3ljbGVzLXRocm91
Z2gtZWxlbWVudHMiLCBjeWNsZXMsIE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCitzdGF0aWMgZ2NoYXIqIHVzZXJTdHlsZVNoZWV0ID0g
TlVMTDsKK3N0YXRpYyBnYm9vbGVhbiB1c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBUUlVFOworCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBm
bGFnKQoreworICAgIHVzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7CisKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcpOworICAgIGlmIChmbGFnICYmIHVzZXJTdHlsZVNoZWV0KQorICAg
ICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAidXNlci1zdHlsZXNoZWV0LXVy
aSIsIHVzZXJTdHlsZVNoZWV0LCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGdfb2JqZWN0X3Nl
dChHX09CSkVDVChzZXR0aW5ncyksICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwgIiIsIE5VTEwpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KEpTU3RyaW5nUmVmIHBhdGgpCit7CisgICAgZ19mcmVlKHVzZXJTdHlsZVNoZWV0KTsKKyAgICB1
c2VyU3R5bGVTaGVldCA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHBhdGgpOworICAgIGlmICh1
c2VyU3R5bGVTaGVldEVuYWJsZWQpCisgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0
cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZh
bHVlKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0VmFsdWVGb3JVc2VyKGNv
bnRleHQsIG5vZGVPYmplY3QsIHZhbHVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUoSlNTdHJpbmdSZWYgbW9kZSkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBjaGFyKiB2aWV3TW9kZSA9IEpTU3RyaW5nQ29w
eVVURjhDU3RyaW5nKG1vZGUpOworCisgICAgaWYgKCFnX3N0cmNtcDAodmlld01vZGUsICJ3aW5k
b3dlZCIpKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJL
SVRfV0VCX1ZJRVdfVklFV19NT0RFX1dJTkRPV0VEKTsKKyAgICBlbHNlIGlmICghZ19zdHJjbXAw
KHZpZXdNb2RlLCAiZmxvYXRpbmciKSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3
X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJRVdfTU9ERV9GTE9BVElORyk7CisgICAgZWxz
ZSBpZiAoIWdfc3RyY21wMCh2aWV3TW9kZSwgImZ1bGxzY3JlZW4iKSkKKyAgICAgICAgd2Via2l0
X3dlYl92aWV3X3NldF92aWV3X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJRVdfTU9ERV9G
VUxMU0NSRUVOKTsKKyAgICBlbHNlIGlmICghZ19zdHJjbXAwKHZpZXdNb2RlLCAibWF4aW1pemVk
IikpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHZpZXcsIFdFQktJVF9X
RUJfVklFV19WSUVXX01PREVfTUFYSU1JWkVEKTsKKyAgICBlbHNlIGlmICghZ19zdHJjbXAwKHZp
ZXdNb2RlLCAibWluaW1pemVkIikpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19t
b2RlKHZpZXcsIFdFQktJVF9XRUJfVklFV19WSUVXX01PREVfTUlOSU1JWkVEKTsKKworICAgIGdf
ZnJlZSh2aWV3TW9kZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRv
d0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQo
Ym9vbCBmbGFnKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0U21hcnRJbnNl
cnREZWxldGVFbmFibGVkKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSks
IGZsYWcpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQodm9p
ZCopCit7CisgICAgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKDApOworICAgIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIHJldHVybiBGQUxT
RTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdh
aXRVbnRpbERvbmUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCB0aW1lb3V0U2Vjb25kcyA9IDMw
OworCisgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKKyAgICBpZiAobV93YWl0VG9E
dW1wICYmIHNob3VsZFNldFdhaXRUb0R1bXBXYXRjaGRvZygpKQorICAgICAgICBzZXRXYWl0VG9E
dW1wV2F0Y2hkb2coZ190aW1lb3V0X2FkZF9zZWNvbmRzKHRpbWVvdXRTZWNvbmRzLCB3YWl0VG9E
dW1wV2F0Y2hkb2dGaXJlZCwgMCkpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Ondp
bmRvd0NvdW50KCkKK3sKKyAgICAvLyArMSAtPiBpbmNsdWRpbmcgdGhlIG1haW4gdmlldworICAg
IHJldHVybiBnX3NsaXN0X2xlbmd0aCh3ZWJWaWV3TGlzdCkgKyAxOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyog
c2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2Jq
ZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtcHJpdmF0ZS1icm93c2luZyIsIGZs
YWcsIE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZykKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQo
dmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5n
cyksICJqYXZhc2NyaXB0LWNhbi1hY2Nlc3MtY2xpcGJvYXJkIiwgZmxhZywgTlVMTCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxh
ZykKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0
aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAg
IGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUteHNzLWF1ZGl0b3IiLCBm
bGFnLCBOVUxMKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0
dGVuaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcp
OworCisgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh2aWV3KTsKKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAi
ZW5hYmxlLWZyYW1lLWZsYXR0ZW5pbmciLCBmbGFnLCBOVUxMKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZmxhZykKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyog
c2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2Jq
ZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtc3BhdGlhbC1uYXZpZ2F0aW9uIiwg
ZmxhZywgTlVMTCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxhZykKK3sKKyAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBB
U1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChz
ZXR0aW5ncyksICJlbmFibGUtdW5pdmVyc2FsLWFjY2Vzcy1mcm9tLWZpbGUtdXJpcyIsIGZsYWcs
IE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHMoYm9vbCBmbGFnKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3
KTsKKworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3Modmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwg
ImVuYWJsZS1maWxlLWFjY2Vzcy1mcm9tLWZpbGUtdXJpcyIsIGZsYWcsIE5VTEwpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChi
b29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QsIGJvb2wgaXNBdXRvZmlsbGVkKQoreworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0QXV0b2ZpbGxlZChjb250ZXh0LCBub2RlT2JqZWN0LCBpc0F1dG9maWxs
ZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5n
KCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0
aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAg
IGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJhdXRvLWxvYWQtaW1hZ2VzIiwgRkFM
U0UsIE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNl
T3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Q
cm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2Ft
bWEpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5
b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzAzMzUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91Ymxl
IGFjY3VyYWN5KQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
Z19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAg
QVNTRVJUKHZpZXcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbih2aWV3LCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGlu
dCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAg
IGlmICghdmlldykKKyAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3
KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgR093blB0cjxnY2hhcj4gY01l
c3NhZ2UoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobWVzc2FnZSkpOworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IodmlldywgY29kZSwgY01lc3Nh
Z2UuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3sKKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25D
b21tb24oYWxsb3cpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
Z19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAg
QVNTRVJUKHZpZXcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2Vv
bG9jYXRpb25QZXJtaXNzaW9uKHZpZXcsIGFsbG93KTsKK30KKworaW50IExheW91dFRlc3RDb250
cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3
KG1haW5GcmFtZSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICB2aWV3ID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBy
ZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0cyh2aWV3KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNv
bmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRS
ZWYgaW5wdXRFbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBp
bnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGlmIChlbmFi
bGVkKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9m
aWxlbmFtZShnX2dldF90bXBfZGlyKCksICJEdW1wUmVuZGVyVHJlZSIsICJpY29uZGF0YWJhc2Ui
LCBOVUxMKSk7CisgICAgICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNl
LCBpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2Via2l0X2lj
b25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIDApOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykK
K3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQoZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBv
cHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQo
dmlldyk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHZpZXcpOworICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5n
cyksICJqYXZhc2NyaXB0LWNhbi1vcGVuLXdpbmRvd3MtYXV0b21hdGljYWxseSIsICFmbGFnLCBO
VUxMKTsKKworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxl
ZChib29sIGZsYWcpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgV2Vi
S2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2
aWV3KTsKKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXBsdWdp
bnMiLCBmbGFnLCBOVUxMKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVu
dERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKSAKK3sKKyAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjplbGVtZW50RG9lc0F1dG9Db21wbGV0
ZUZvckVsZW1lbnRXaXRoSWQobWFpbkZyYW1lLCBpZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVl
KQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJf
dmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIGdjaGFyKiBjTmFtZSA9
IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKG5hbWUpOworICAgIGdjaGFyKiBjVmFsdWUgPSBKU1N0
cmluZ0NvcHlVVEY4Q1N0cmluZyh2YWx1ZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUodmlldywgY05hbWUsIGNWYWx1ZSk7CisgICAgZ19m
cmVlKGNOYW1lKTsKKyAgICBnX2ZyZWUoY1ZhbHVlKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFy
Z2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkpCit7CisgICAgV2ViS2l0RmluZE9wdGlvbnMg
ZmluZE9wdGlvbnMgPSAwOworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh3ZWJWaWV3KTsKKwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgSlNWYWx1ZVJlZiBs
ZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBs
ZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOyAKKyAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdPd25Q
dHI8Z2NoYXI+IHRhcmdldFN0cmluZyhKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh0YXJnZXQpKTsK
KworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7IAorICAgICAgICBpZiAo
IUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKKworICAgICAgICBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vu
c2l0aXZlIikpCisgICAgICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlOworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKKyAgICAgICAgICAg
IGZpbmRPcHRpb25zIHw9IFdlYktpdDo6V2ViRmluZE9wdGlvbnNBdFdvcmRTdGFydHM7CisgICAg
ICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQo
KSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IikpCisgICAgICAgICAgICBmaW5kT3B0
aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3Rh
cnQ7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9u
TmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIpKQorICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2Vi
S2l0OjpXZWJGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIpKQorICAg
ICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQ7
CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFt
ZS5nZXQoKSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9
IFdlYktpdDo6V2ViRmluZE9wdGlvbnNTdGFydEluU2VsZWN0aW9uOworICAgIH0gICAKKworICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmZpbmRTdHJpbmcod2ViVmlldywgdGFy
Z2V0U3RyaW5nLmdldCgpLCBmaW5kT3B0aW9ucyk7IAorfQorCitib29sIExheW91dFRlc3RDb250
cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgV2ViS2l0
V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7
CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgZ2NoYXIqIGNOYW1lID0gSlNTdHJpbmdDb3B5VVRG
OENTdHJpbmcobmFtZSk7CisgICAgYm9vbCByZXN1bHQgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmlzQ29tbWFuZEVuYWJsZWQodmlldywgY05hbWUpOworICAgIGdfZnJlZShjTmFtZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2Fj
aGVNb2RlbChpbnQgY2FjaGVNb2RlbCkKK3sKKyAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIGRl
cml2ZWQgZnJvbSB0aGUgTWFjIGNhY2hlIG1vZGVsIGVudW0gaW4gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlcy5oLgorICAgIHN3aXRjaCAoY2FjaGVNb2RlbCkgeworICAg
IGNhc2UgMDoKKyAgICAgICAgd2Via2l0X3NldF9jYWNoZV9tb2RlbChXRUJLSVRfQ0FDSEVfTU9E
RUxfRE9DVU1FTlRfVklFV0VSKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAg
ICB3ZWJraXRfc2V0X2NhY2hlX21vZGVsKFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9CUk9X
U0VSKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICB3ZWJraXRfc2V0X2Nh
Y2hlX21vZGVsKFdFQktJVF9DQUNIRV9NT0RFTF9XRUJfQlJPV1NFUik7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVT
aGVldCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5z
aWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3Vw
cG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihPcGFxdWVKU1N0cmluZyopCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNh
dGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KK30KKworbG9uZyBsb25nIExheW91dFRlc3RDb250
cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2lu
SWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGlu
ZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4uCisgICAgcmV0dXJuIDA7Cit9CisK
K0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRv
IGdldCBvcmlnaW5zIHRoYXQgY29udGFpbiBhcHBsaWNhdGlvbiBjYWNoZXMuCisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitsb25nIGxvbmcgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdS
ZWYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICB3
ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCk7Cit9CisgCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sK
KyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
c2VjdXJpdHlfb3JpZ2luKG1haW5GcmFtZSk7CisgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9z
ZXRfd2ViX2RhdGFiYXNlX3F1b3RhKG9yaWdpbiwgcXVvdGEpOworfQorCitKU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgICAgICAvLyBGSVhNRTogaW1w
bGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJh
Y2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgICAgICAvLyBGSVhNRTog
aW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3Jh
Z2UoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZv
cmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHVybFNj
aGVtZShKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzY2hlbWUpKTsKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9y
YmlkZGVuLCB1cmxTY2hlbWUuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojpnb0JhY2soKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNr
KHdlYlZpZXcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2Fk
aW5nKGJvb2wgZGVmZXJzKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6c2V0RGVmZXJzTG9hZGluZyh3ZWJWaWV3LCBkZWZlcnMpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplKQoreworICAgIHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9zZXRfbWF4aW11bV9z
aXplKHNpemUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreyAgICAKKyAgICBnY2hhciogbmFtZSA9IEpT
U3RyaW5nQ29weVVURjhDU3RyaW5nKGFuaW1hdGlvbk5hbWUpOworICAgIGdjaGFyKiBlbGVtZW50
ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoZWxlbWVudElkKTsKKyAgICBib29sIHJldHVyblZh
bHVlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYXVzZUFuaW1hdGlvbihtYWluRnJhbWUs
IG5hbWUsIHRpbWUsIGVsZW1lbnQpOworICAgIGdfZnJlZShuYW1lKTsKKyAgICBnX2ZyZWUoZWxl
bWVudCk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCitib29sIExheW91dFRlc3RDb250
cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreyAgICAK
KyAgICBnY2hhciogbmFtZSA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHByb3BlcnR5TmFtZSk7
CisgICAgZ2NoYXIqIGVsZW1lbnQgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhlbGVtZW50SWQp
OworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnBhdXNl
VHJhbnNpdGlvbihtYWluRnJhbWUsIG5hbWUsIHRpbWUsIGVsZW1lbnQpOworICAgIGdfZnJlZShu
YW1lKTsKKyAgICBnX2ZyZWUoZWxlbWVudCk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQor
Cit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMobWFpbkZyYW1lKTsKK30KKworc3RhdGljIGdib29sZWFuIGJvb2xl
YW5Gcm9tVmFsdWUoZ2NoYXIqIHZhbHVlKQoreworICAgIHJldHVybiAhZ19hc2NpaV9zdHJjYXNl
Y21wKHZhbHVlLCAidHJ1ZSIpIHx8ICFnX2FzY2lpX3N0cmNhc2VjbXAodmFsdWUsICIxIik7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmlu
Z1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIEdPd25QdHI8Z2NoYXI+IG9yaWdp
bmFsTmFtZShKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhrZXkpKTsKKyAgICBHT3duUHRyPGdjaGFy
PiB2YWx1ZUFzU3RyaW5nKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHZhbHVlKSk7CisKKyAgICBX
ZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZy
YW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICAvLyBUaGlzIHRyYW5zZm9ybWF0aW9uIGNv
dWxkIGJlIGhhbmRsZWQgYnkgYSBoYXNoIHRhYmxlIChhbmQgaXQgb25jZSB3YXMpLCBidXQKKyAg
ICAvLyBoYXZpbmcgaXQgcHJvbWluZW50LCBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSBmcm9t
IG90aGVyIHBvcnRzIHRvIGtlZXAgdGhlCisgICAgLy8gbGlzdCB1cCB0byBkYXRlLgorICAgIGNv
bnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUgPSAwOworICAgIGlmIChnX3N0cl9lcXVhbChvcmlnaW5h
bE5hbWUuZ2V0KCksICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpKQorICAgICAgICBwcm9wZXJ0
eU5hbWUgPSAiZW5hYmxlLXNjcmlwdHMiOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdp
bmFsTmFtZS5nZXQoKSwgIldlYktpdERlZmF1bHRGb250U2l6ZSIpKQorICAgICAgICBwcm9wZXJ0
eU5hbWUgPSAiZGVmYXVsdC1mb250LXNpemUiOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9y
aWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdEVuYWJsZUNhcmV0QnJvd3NpbmciKSkKKyAgICAgICAg
cHJvcGVydHlOYW1lID0gImVuYWJsZS1jYXJldC1icm93c2luZyI7CisgICAgZWxzZSBpZiAoZ19z
dHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVu
Y2VLZXkiKSkKKyAgICAgICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS1wYWdlLWNhY2hlIjsKKyAg
ICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRQbHVnaW5z
RW5hYmxlZCIpKQorICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLXBsdWdpbnMiOworICAg
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdEh5cGVybGlu
a0F1ZGl0aW5nRW5hYmxlZCIpKQorICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLWh5cGVy
bGluay1hdWRpdGluZyI7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdl
dCgpLCAiV2ViS2l0V2ViR0xFbmFibGVkIikpCisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFi
bGUtd2ViZ2wiOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwg
IldlYktpdFdlYkF1ZGlvRW5hYmxlZCIpKQorICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxl
LXdlYmF1ZGlvIjsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCks
ICJXZWJLaXRUYWJUb0xpbmtzUHJlZmVyZW5jZUtleSIpKSB7CisgICAgICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6c2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbihib29sZWFuRnJvbVZh
bHVlKHZhbHVlQXNTdHJpbmcuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0UGFnZUNhY2hlU3VwcG9y
dHNQbHVnaW5zUHJlZmVyZW5jZUtleSIpKSB7CisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6c2V0UGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KG1haW5GcmFtZSksIGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5nZXQoKSkp
OworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5h
bWUuZ2V0KCksICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxlZCIpKSB7CisgICAgICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q1NTR3JpZExheW91dEVuYWJsZWQod2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwgYm9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3Ry
aW5nLmdldCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdENTU1JlZ2lvbnNFbmFibGVkIikpIHsKKyAgICAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDU1NSZWdpb25zRW5hYmxlZCh3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpLCBib29sZWFuRnJvbVZhbHVlKHZhbHVl
QXNTdHJpbmcuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5j
ZSB0cmllZCB0byBvdmVycmlkZSAiCisgICAgICAgICAgICAgICAgInVua25vd24gcHJlZmVyZW5j
ZSAnJXMnLlxuIiwgb3JpZ2luYWxOYW1lLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Modmlldyk7CisgICAgR1BhcmFtU3BlYyogcHNwZWMgPSBnX29iamVjdF9jbGFzc19m
aW5kX3Byb3BlcnR5KEdfT0JKRUNUX0NMQVNTKAorICAgICAgICBXRUJLSVRfV0VCX1NFVFRJTkdT
X0dFVF9DTEFTUyhzZXR0aW5ncykpLCBwcm9wZXJ0eU5hbWUpOworICAgIEdWYWx1ZSBjdXJyZW50
UHJvcGVydHlWYWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07CisgICAgZ192YWx1ZV9pbml0KCZjdXJy
ZW50UHJvcGVydHlWYWx1ZSwgcHNwZWMtPnZhbHVlX3R5cGUpOworCisgICAgaWYgKEdfVkFMVUVf
SE9MRFNfU1RSSU5HKCZjdXJyZW50UHJvcGVydHlWYWx1ZSkpCisgICAgICAgIGdfb2JqZWN0X3Nl
dChzZXR0aW5ncywgcHJvcGVydHlOYW1lLCB2YWx1ZUFzU3RyaW5nLmdldCgpLCBOVUxMKTsKKyAg
ICBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0JPT0xFQU4oJmN1cnJlbnRQcm9wZXJ0eVZhbHVlKSkK
KyAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgcHJvcGVydHlOYW1lLCBi
b29sZWFuRnJvbVZhbHVlKHZhbHVlQXNTdHJpbmcuZ2V0KCkpLCBOVUxMKTsKKyAgICBlbHNlIGlm
IChHX1ZBTFVFX0hPTERTX0lOVCgmY3VycmVudFByb3BlcnR5VmFsdWUpKQorICAgICAgICBnX29i
amVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCBwcm9wZXJ0eU5hbWUsIGF0b2kodmFsdWVBc1N0
cmluZy5nZXQoKSksIE5VTEwpOworICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfRkxPQVQoJmN1
cnJlbnRQcm9wZXJ0eVZhbHVlKSkgeworICAgICAgICBnZmxvYXQgbmV3VmFsdWUgPSBnX2FzY2lp
X3N0cnRvZCh2YWx1ZUFzU3RyaW5nLmdldCgpLCAwKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KEdf
T0JKRUNUKHNldHRpbmdzKSwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSwgTlVMTCk7CisgICAgfSBl
bHNlCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJy
aWRlUHJlZmVyZW5jZSBmYWlsZWQgdG8gb3ZlcnJpZGUgIgorICAgICAgICAgICAgICAgICJwcmVm
ZXJlbmNlICclcycuXG4iLCBvcmlnaW5hbE5hbWUuZ2V0KCkpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5B
dFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3sKKyAgICBwcmludGYoIkxheW91dFRlc3RDb250cm9s
bGVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJv
b2wgYWxsRnJhbWVzKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHNvdXJjZUNvZGUoSlNTdHJpbmdD
b3B5VVRGOENTdHJpbmcoc291cmNlKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjph
ZGRVc2VyU3R5bGVTaGVldChtYWluRnJhbWUsIHNvdXJjZUNvZGUuZ2V0KCksIGFsbEZyYW1lcyk7
CisgICAgLy8gRklYTUU6IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbiB3aHkgdXNlcnNjcmlwdHMv
dXNlci1zdHlsZS10b3AtZnJhbWUtb25seS5odG1sIGZhaWxzIHdoZW4gYWxsRnJhbWVzIGlzIGZh
bHNlLgorCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVsb3BlckV4dHJh
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIFdlYktpdFdlYlNl
dHRpbmdzKiB3ZWJTZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dyk7CisKKyAgICBnX29iamVjdF9zZXQod2ViU2V0dGluZ3MsICJlbmFibGUtZGV2ZWxvcGVyLWV4
dHJhcyIsIGVuYWJsZWQsIE5VTEwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dl
Ykluc3BlY3RvcigpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBp
bnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAg
IHdlYmtpdF93ZWJfaW5zcGVjdG9yX3Nob3coaW5zcGVjdG9yKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQoreworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAg
IFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gd2Via2l0X3dlYl92aWV3X2dldF9pbnNw
ZWN0b3Iod2ViVmlldyk7CisKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShpbnNwZWN0
b3IpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVj
dG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Cisg
ICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lu
c3BlY3Rvcih3ZWJWaWV3KTsKKyAgICBjaGFyKiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NvcHlV
VEY4Q1N0cmluZyhzY3JpcHQpOworCisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfZXhlY3V0ZV9z
Y3JpcHQoaW5zcGVjdG9yLCBjYWxsSWQsIHNjcmlwdFN0cmluZyk7CisgICAgZ19mcmVlKHNjcmlw
dFN0cmluZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RS
ZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5r
cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCitib29sIExheW91dFRl
c3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQoreworICAgIHJldHVybiBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNob3VsZENsb3NlKG1haW5GcmFtZSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwo
SlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCit7CisKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVt
KCkKK3sKKworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFi
bGUoYm9vbCkKK3sKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250
cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK3sKKyAgICBDU3RyaW5nIG1hcmtlclRleHRHQ2hhciA9
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bWFya2VyVGV4dEZvckxpc3RJdGVtKG1haW5GcmFt
ZSwgY29udGV4dCwgbm9kZU9iamVjdCk7CisgICAgaWYgKG1hcmtlclRleHRHQ2hhci5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWFy
a2VyVGV4dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobWFya2VyVGV4dEdD
aGFyLmRhdGEoKSkpOworICAgIHJldHVybiBtYXJrZXJUZXh0OworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1Jl
ZiwgSlNTdHJpbmdSZWYpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0
TW9kYWwoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVI
VFRQTG9hZHMoYm9vbCBzZXJpYWxpemUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lcklu
dGVydmFsKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
c2V0TWluaW11bVRpbWVySW50ZXJ2YWwod2ViVmlldywgbWluaW11bVRpbWVySW50ZXJ2YWwpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5n
UmVmIGRpcmVjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3sKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCit7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2ViVmlldygpCit7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCit7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNs
aWNrKEpTU3RyaW5nUmVmIHRpdGxlKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0
IGNoYXIqKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgorfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L1Rlc3RSdW5uZXJCbGFja0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL1Rlc3RSdW5uZXJCbGFja0d0ay5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyQmxhY2tHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGsuaCIKQEAgLTUzLDE3ICs1MywxNyBAQCBleHRlcm4gIkMiIHsKIHZv
aWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0V2ViSW5zcGVjdG9y
KiBpbnNwZWN0b3IsIGxvbmcgY2FsbElkLCBjb25zdCBnY2hhciogc2NyaXB0KTsKIH0KIAotTGF5
b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCitUZXN0UnVubmVyOjp+
VGVzdFJ1bm5lcigpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJh
Y2tGb3J3YXJkTGlzdCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkK
IHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKICAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwpAQCAtODAsNjMg
KzgwLDYzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcncKICAgICBn
X29iamVjdF91bnJlZihpdGVtKTsKIH0KIAotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRl
c3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitK
U1N0cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5h
bWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQordm9p
ZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkK
IHsKICAgICBkaXNwbGF5V2ViVmlldygpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjprZWVwV2ViSGlzdG9yeSgpCit2b2lkIFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KCkKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6Y29tcHV0ZWRT
dHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlKQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVk
U3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLUpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkg
Y29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpsYXllclRyZWVBc1Rl
eHQoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
IikpOwogICAgIHJldHVybiBzdHJpbmc7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCitpbnQgVGVz
dFJ1bm5lcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQp
CiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQYWdlc0Zv
ckZyYW1lKG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKIH0KIAotSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3Qg
Y2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYWdlUHJvcGVydHkobWFpbkZyYW1lLCBwcm9wZXJ0eU5h
bWUsIHBhZ2VOdW1iZXIpLmRhdGEoKSkpOwogICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwogfQog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1h
cmdpbkxlZnQpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFn
ZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBp
bnQgbWFyZ2luTGVmdCkgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJv
cGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhtYWluRnJhbWUsIHBh
Z2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJv
dHRvbSwgbWFyZ2luTGVmdCkuZGF0YSgpKSk7CiAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7CiB9
CiAKLXNpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitz
aXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiB7CiAgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7
CiAgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKQEAgLTE1MCwxOCArMTUwLDE4IEBAIHNpemVf
dCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUkKICAgICAgICAgICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKGxpc3QpOwogfQogCi11bnNp
Z25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAordW5z
aWduZWQgVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAogewogICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OndvcmtlclRocmVhZENvdW50KCk7CiB9CiAKLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1l
KCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwbGF0Zm9ybU5h
bWUoKSBjb25zdAogewogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUo
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJndGsiKSk7CiAgICAgcmV0dXJu
IHBsYXRmb3JtTmFtZTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9u
ZSgpCit2b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIGlmIChtX3dhaXRUb0R1
bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkK
ICAgICAgICAgZHVtcCgpOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om5vdGlmeURvbmUoKQogICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKIH0KIAotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6
OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVy
bCkKIHsKICAgICBHT3duUHRyPGNoYXI+IHVybENTdHJpbmcoSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcodXJsKSk7CiAgICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4KHVybENTdHJpbmcuZ2V0KCksICJm
aWxlOi8vL3RtcC9MYXlvdXRUZXN0cy8iKSkKQEAgLTE4MSw3ICsxODEsNyBAQCBKU1N0cmluZ1Jl
ZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvCiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHRlc3RVUkkuZ2V0KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit2
b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRh
cmdldCkKIHsKICAgICBnY2hhciogcmVsYXRpdmVVUkwgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmlu
Zyh1cmwpOwogICAgIFNvdXBVUkkqIGJhc2VVUkkgPSBzb3VwX3VyaV9uZXcod2Via2l0X3dlYl9m
cmFtZV9nZXRfdXJpKG1haW5GcmFtZSkpOwpAQCAtMjAzLDEzICsyMDMsMTMgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTUwogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCkt
PnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0Vk
aXRpbmcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0Vk
aXRpbmcpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgd2Via2l0X3dlYl92aWV3X3NldF9lZGl0YWJs
ZSh3ZWJWaWV3LCBhY2NlcHRzRWRpdGluZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29v
a2llcykKIHsKICAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9z
ZXNzaW9uKCk7CiAgICAgU291cENvb2tpZUphciogamFyID0gcmVpbnRlcnByZXRfY2FzdDxTb3Vw
Q29va2llSmFyKj4oc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9D
T09LSUVfSkFSKSk7CkBAIC0yMzMsMjMgKzIzMywyMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBbHdheXNBY2NlCiAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKGphciksIFNPVVBf
Q09PS0lFX0pBUl9BQ0NFUFRfUE9MSUNZLCBwb2xpY3ksIE5VTEwpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRl
LCBib29sIHBlcm1pc3NpdmUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVn
YXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSgpCit2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB7CiAg
ICAgd2FpdEZvclBvbGljeSA9IHRydWU7CiAgICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVm
IG9yaWVudGF0aW9uLCBKU1N0cmluZ1JlZiBwb2xpY3kpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNj
cm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5
KQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3Jp
Z2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRl
U3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJp
bmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKIHsKICAgICBnY2hhciogc291cmNl
T3JpZ2luR0NoYXIgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzb3VyY2VPcmlnaW4pOwogICAg
IGdjaGFyKiBwcm90b2NvbEdDaGFyID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcocHJvdG9jb2wp
OwpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdp
bkFjY2UKICAgICBnX2ZyZWUoaG9zdEdDaGFyKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNl
T3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNs
dWRlU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwg
SlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKIHsKICAgICBHT3duUHRy
PGdjaGFyPiBzb3VyY2VPcmlnaW5HQ2hhcihKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzb3VyY2VP
cmlnaW4pKTsKICAgICBHT3duUHRyPGdjaGFyPiBwcm90b2NvbEdDaGFyKEpTU3RyaW5nQ29weVVU
RjhDU3RyaW5nKHByb3RvY29sKSk7CkBAIC0yNjgsMTkgKzI2OCwxOSBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpyZW1vdmVXaGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbkdDaGFyLmdldCgp
LCBwcm90b2NvbEdDaGFyLmdldCgpLCBob3N0R0NoYXIuZ2V0KCksIGluY2x1ZGVTdWJkb21haW5z
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJl
c3BvbmRlcihib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RS
ZXNwb25kZXIoYm9vbCBmbGFnKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJv
b2wgY3ljbGVzKQordm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoYm9vbCBjeWNsZXMpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgV2ViS2l0V2ViU2V0dGluZ3Mq
IHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKICAgICBn
X29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAidGFiLWtleS1jeWNsZXMtdGhyb3VnaC1l
bGVtZW50cyIsIGN5Y2xlcywgTlVMTCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hCiBzdGF0aWMgZ2NoYXIqIHVzZXJTdHlsZVNoZWV0
ID0gTlVMTDsKIHN0YXRpYyBnYm9vbGVhbiB1c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBUUlVFOwog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9v
bCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBm
bGFnKQogewogICAgIHVzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7CiAKQEAgLTMwMCw3ICsz
MDAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTCiAgICAgICAg
IGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwg
IiIsIE5VTEwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAgICBnX2ZyZWUodXNlclN0
eWxlU2hlZXQpOwogICAgIHVzZXJTdHlsZVNoZWV0ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmco
cGF0aCk7CkBAIC0zMDgsMTIgKzMwOCwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VyU3R5bGVTCiAgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgbm9kZU9iamVjdCwgdmFsdWUp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVy
ZShKU1N0cmluZ1JlZiBtb2RlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3TW9kZU1lZGlhRmVh
dHVyZShKU1N0cmluZ1JlZiBtb2RlKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VSVCh2aWV3KTsK
QEAgLTMzNCwxMiArMzM0LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdN
b2RlTWUKICAgICBnX2ZyZWUodmlld01vZGUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KQordm9pZCBUZXN0UnVubmVyOjpz
ZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCh3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpLCBmbGFnKTsKIH0KQEAgLTM0NywxMSArMzQ3LDExIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNtYXJ0SW5zZXIKIHN0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1wV2F0Y2hk
b2dGaXJlZCh2b2lkKikKIHsKICAgICBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coMCk7Ci0gICAgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAg
Z1Rlc3RSdW5uZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9v
bCB3YWl0VW50aWxEb25lKQordm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2Fp
dFVudGlsRG9uZSkKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVvdXRTZWNvbmRzID0gMzA7
CiAKQEAgLTM2MCwxMyArMzYwLDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdh
aXRUb0R1bXAKICAgICAgICAgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKGdfdGltZW91dF9hZGRfc2Vj
b25kcyh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDApKTsKIH0KIAot
aW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCitpbnQgVGVzdFJ1bm5lcjo6
d2luZG93Q291bnQoKQogewogICAgIC8vICsxIC0+IGluY2x1ZGluZyB0aGUgbWFpbiB2aWV3CiAg
ICAgcmV0dXJuIGdfc2xpc3RfbGVuZ3RoKHdlYlZpZXdMaXN0KSArIDE7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKICAgICBBU1NFUlQodmlldyk7CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJybwogICAgIGdfb2JqZWN0X3NldChHX09C
SkVDVChzZXR0aW5ncyksICJlbmFibGUtcHJpdmF0ZS1icm93c2luZyIsIGZsYWcsIE5VTEwpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZChib29sIGZsYWcpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgQVNTRVJUKHZpZXcpOwpA
QCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHQKICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiamF2YXNjcmlwdC1jYW4t
YWNjZXNzLWNsaXBib2FyZCIsIGZsYWcsIE5VTEwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6
OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBBU1NF
UlQodmlldyk7CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0WFNTQXVkaXRvcgogICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFi
bGUteHNzLWF1ZGl0b3IiLCBmbGFnLCBOVUxMKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIFdlYktpdFdl
YlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwog
ICAgIEFTU0VSVCh2aWV3KTsKQEAgLTQwMiw3ICs0MDIsNyBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRGcmFtZUZsYXR0CiAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdz
KSwgImVuYWJsZS1mcmFtZS1mbGF0dGVuaW5nIiwgZmxhZywgTlVMTCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7CiAgICAgQVNTRVJUKHZpZXcpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXYKICAgICBnX29iamVjdF9zZXQo
R19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXNwYXRpYWwtbmF2aWdhdGlvbiIsIGZsYWcsIE5V
TEwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFj
Y2Vzc0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxhZykKIHsKICAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBB
U1NFUlQodmlldyk7CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QWxsb3dVbml2ZQogICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJl
bmFibGUtdW5pdmVyc2FsLWFjY2Vzcy1mcm9tLWZpbGUtdXJpcyIsIGZsYWcsIE5VTEwpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoYm9vbCBmbGFnKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VSVCh2aWV3KTsKQEAgLTQy
OSwxNyArNDI5LDE3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUEK
ICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLWZpbGUtYWNjZXNz
LWZyb20tZmlsZS11cmlzIiwgZmxhZywgTlVMTCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBi
b29sIGlzQXV0b2ZpbGxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGlzQXV0b2ZpbGxlZCkK
IHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEF1dG9maWxsZWQoY29udGV4dCwg
bm9kZU9iamVjdCwgaXNBdXRvZmlsbGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxv
YWRpbmcoKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VSVCh2aWV3KTsKQEAgLTQ0OCwxMyArNDQ4
LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUwKICAgICBnX29i
amVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLCBO
VUxMKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVu
dGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlk
ZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRl
QWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJv
b2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzMzUuCiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQordm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VC
S0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKICAgICBpZiAo
IXZpZXcpCkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvYwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24odmlldywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29k
ZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0
aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCiB7CiAgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRhKHdlYlZpZXdMaXN0
LCAwKSk7CiAgICAgaWYgKCF2aWV3KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKHZpZXcsIGNvZGUsIGNNZXNzYWdlLmdldCgpKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2wgYWxsb3cpCit2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29s
IGFsbG93KQogewogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CiAg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRh
KHdlYlZpZXdMaXN0LCAwKSk7CkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0R2VvbG9jYXRpbwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0
TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbih2aWV3LCBhbGxvdyk7CiB9CiAKLWludCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMoKQoraW50IFRlc3RSdW5uZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBpZiAoIXZpZXcpCkBAIC00OTYsMjUgKzQ5
NiwyNSBAQCBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluCiAgICAgcmV0
dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHModmlldyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25m
aWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1Nw
ZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpT
U3RyaW5nUmVmIGxhbmd1YWdlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVj
aCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1l
bnQpCit2b2lkIFRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0
RWxlbWVudCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5
b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRh
YmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CiAgICAgaWYgKGVuYWJsZWQpIHsKQEAg
LTUyNCwxMiArNTI0LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRh
YmEKICAgICAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIDApOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZsYWcpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKICAgICBBU1NFUlQodmlldyk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9jawogCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZp
ZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VS
VCh2aWV3KTsKQEAgLTU0OCwxMiArNTQ4LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBsdWdpbnNFbmEKICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5h
YmxlLXBsdWdpbnMiLCBmbGFnLCBOVUxMKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlk
KSAKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGlkKSAKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobWFpbkZyYW1lLCBp
ZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5n
UmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFu
ZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAg
ICBBU1NFUlQodmlldyk7CkBAIC01NjUsNyArNTY1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXhlY0NvbW1hbmQoSgogICAgIGdfZnJlZShjVmFsdWUpOwogfQogCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKK2Jvb2wgVGVzdFJ1bm5lcjo6
ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09i
amVjdFJlZiBvcHRpb25zQXJyYXkpCiB7CiAgICAgV2ViS2l0RmluZE9wdGlvbnMgZmluZE9wdGlv
bnMgPSAwOwogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwpAQCAtNjAzLDcgKzYwMyw3IEBAIGJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlMKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpmaW5kU3RyaW5nKHdlYlZpZXcsIHRhcmdldFN0cmluZy5nZXQoKSwgZmluZE9wdGlv
bnMpOyAKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChK
U1N0cmluZ1JlZiBuYW1lKQorYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3Ry
aW5nUmVmIG5hbWUpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgQVNTRVJUKHZpZXcpOwpAQCAtNjE0LDcg
KzYxNCw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWIKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNoZU1v
ZGVsKGludCBjYWNoZU1vZGVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRDYWNoZU1vZGVsKGludCBj
YWNoZU1vZGVsKQogewogICAgIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBNYWMgY2FjaGUgbW9kZWwgZW51bSBpbiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzLmguCiAgICAgc3dpdGNoIChjYWNoZU1vZGVsKSB7CkBAIC02MzIsMTEwICs2MzIs
MTEwIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwKICAgICB9CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQordm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVy
c2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXQoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCit2b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNp
Z25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9w
YXF1ZUpTU3RyaW5nKikKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9y
T3JpZ2luKE9wYXF1ZUpTU3RyaW5nKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1
cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgogfQog
Ci1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQorbG9uZyBsb25nIFRlc3RSdW5u
ZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVu
dGlmaWVyKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRp
c2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KICAgICByZXR1cm4gMDsKIH0KIAotSlNW
YWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
KEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVz
LgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotbG9uZyBs
b25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3Jp
Z2luKEpTU3RyaW5nUmVmIG5hbWUpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25D
YWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNl
cygpCiB7CiAgICAgd2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcygpOwogfQogIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nIHF1b3RhKQogewogICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4obWFpbkZyYW1lKTsKICAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7CiB9
CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5z
V2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQordm9p
ZCBUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQogewogICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2Fs
U3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQordm9pZCBUZXN0
UnVubmVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRl
bnRpZmllcikKIHsKICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2ln
bmVkIG51bWJlcikKK3ZvaWQgVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit2b2lk
IFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKQor
dm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCiB7CiAgICAgR093blB0cjxnY2hh
cj4gdXJsU2NoZW1lKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNjaGVtZSkpOwogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNj
aGVtZShmb3JiaWRkZW4sIHVybFNjaGVtZS5nZXQoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmdvQmFjaygpCit2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7CiAgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7CiAgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sod2ViVmlldyk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit2b2lk
IFRlc3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7CiAgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREZWZlcnNMb2FkaW5nKHdlYlZp
ZXcsIGRlZmVycyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hl
TWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCiB7CiAgICAgd2Vi
a2l0X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUoc2l6ZSk7CiB9CiAKLWJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVt
ZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcoYW5pbWF0aW9uTmFtZSk7CiAgICAgZ2NoYXIqIGVsZW1lbnQgPSBKU1N0cmluZ0NvcHlVVEY4
Q1N0cmluZyhlbGVtZW50SWQpOwpAQCAtNzQ1LDcgKzc0NSw3IEBAIGJvb2wgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhdXNlQW5pbWF0aW8KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1Jl
ZiBlbGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENT
dHJpbmcocHJvcGVydHlOYW1lKTsKICAgICBnY2hhciogZWxlbWVudCA9IEpTU3RyaW5nQ29weVVU
RjhDU3RyaW5nKGVsZW1lbnRJZCk7CkBAIC03NTUsNyArNzU1LDcgQEAgYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAot
dW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygp
IGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdAogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyhtYWluRnJhbWUpOwogfQpAQCAtNzY1LDcgKzc2NSw3IEBAIHN0YXRpYyBn
Ym9vbGVhbiBib29sZWFuRnJvbVZhbHVlKGdjaGFyKiAKICAgICByZXR1cm4gIWdfYXNjaWlfc3Ry
Y2FzZWNtcCh2YWx1ZSwgInRydWUiKSB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKHZhbHVlLCAiMSIp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNT
dHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAg
R093blB0cjxnY2hhcj4gb3JpZ2luYWxOYW1lKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKGtleSkp
OwogICAgIEdPd25QdHI8Z2NoYXI+IHZhbHVlQXNTdHJpbmcoSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcodmFsdWUpKTsKQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvdmVycmlkZVByZWZlCiAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q1NT
UmVnaW9uc0VuYWJsZWQod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwg
Ym9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxheW91dFRlc3RDb250cm9s
bGVyOjpvdmVycmlkZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUgIgorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSB0cmllZCB0byBvdmVy
cmlkZSAiCiAgICAgICAgICAgICAgICAgInVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgb3Jp
Z2luYWxOYW1lLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgyNywxNiArODI3
LDE2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICAgICAg
Z2Zsb2F0IG5ld1ZhbHVlID0gZ19hc2NpaV9zdHJ0b2QodmFsdWVBc1N0cmluZy5nZXQoKSwgMCk7
CiAgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksIHByb3BlcnR5TmFtZSwg
bmV3VmFsdWUsIE5VTEwpOwogICAgIH0gZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxh
eW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UgZmFpbGVkIHRvIG92ZXJyaWRl
ICIKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVu
Y2UgZmFpbGVkIHRvIG92ZXJyaWRlICIKICAgICAgICAgICAgICAgICAicHJlZmVyZW5jZSAnJXMn
LlxuIiwgb3JpZ2luYWxOYW1lLmdldCgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9v
bCBhbGxGcmFtZXMpCit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYg
c291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIHByaW50Zigi
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQgbm90IGltcGxlbWVudGVkLlxuIik7
CisgICAgcHJpbnRmKCJUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5c
biIpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRV
c2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewogICAg
IEdPd25QdHI8Z2NoYXI+IHNvdXJjZUNvZGUoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNl
KSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjphZGRVc2VyU3R5bGVTaGVldChtYWlu
RnJhbWUsIHNvdXJjZUNvZGUuZ2V0KCksIGFsbEZyYW1lcyk7CkBAIC04NDQsNyArODQ0LDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlUwogCiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVk
KQordm9pZCBUZXN0UnVubmVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
d2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBXZWJLaXRXZWJTZXR0aW5ncyogd2ViU2V0dGluZ3Mg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOwpAQCAtODUyLDEyICs4NTIs
MTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRQogICAgIGdfb2Jq
ZWN0X3NldCh3ZWJTZXR0aW5ncywgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgZW5hYmxlZCwg
TlVMTCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7CiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAg
ICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lu
c3BlY3Rvcih3ZWJWaWV3KTsKQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzaG93V2ViSW5zcGVjCiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2hvdyhpbnNw
ZWN0b3IpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rv
cigpCit2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKICAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwpAQCAtODczLDcgKzg3Myw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGUKICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9z
ZShpbnNwZWN0b3IpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RS
dW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
ciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwpAQCAtODgzLDQxICs4
ODMsNDEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIGdf
ZnJlZShzY3JpcHRTdHJpbmcpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9pZCBUZXN0
UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRl
c3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRl
ZExpbmtzKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLWJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCitib29sIFRlc3RS
dW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2hvdWxkQ2xvc2UobWFpbkZyYW1lKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmlu
Z1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBp
VGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJp
bmdSZWYgYmFzZVVSTCkKIHsKIAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlU
ZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQordm9pZCBUZXN0UnVubmVyOjphcGlUZXN0
R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQogewogCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRX
ZWJWaWV3RWRpdGFibGUoYm9vbCkKIHsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKIHsKICAgICBDU3RyaW5nIG1hcmtlclRl
eHRHQ2hhciA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bWFya2VyVGV4dEZvckxpc3RJdGVt
KG1haW5GcmFtZSwgY29udGV4dCwgbm9kZU9iamVjdCk7CiAgICAgaWYgKG1hcmtlclRleHRHQ2hh
ci5pc051bGwoKSkKQEAgLTkyNyw3NiArOTI3LDc2IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHIKICAgICByZXR1cm4gbWFya2VyVGV4dDsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjphdXRoZW50aWNhdGVTZXNzaW9u
KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9ydE1v
ZGFsKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRU
UExvYWRzKGJvb2wgc2VyaWFsaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQ
TG9hZHMoYm9vbCBzZXJpYWxpemUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVy
dmFsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWlu
aW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCh3ZWJWaWV3LCBtaW5pbXVtVGltZXJJ
bnRlcnZhbCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rp
b24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0
aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQordm9pZCBUZXN0UnVubmVy
OjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Zm9jdXNXZWJWaWV3KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkKIHsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRv
dWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkKIHsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0
aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit2b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlRGVz
a3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQogewogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25z
dCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciop
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQogewogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpz
ZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50
ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5u
ZXI6OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1Jl
ZikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBACiAjaW1wb3J0ICJGcmFtZUxvYWREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiSGlzdG9y
eURlbGVnYXRlLmgiCiAjaW1wb3J0ICJKYXZhU2NyaXB0VGhyZWFkaW5nLmgiCi0jaW1wb3J0ICJM
YXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogI2ltcG9ydCAi
TW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCIKICNpbXBvcnQgIk5hdmlnYXRpb25Db250cm9sbGVy
LmgiCiAjaW1wb3J0ICJPYmpDUGx1Z2luLmgiCkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIHZv
aWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYQogdm9sYXRpbGUgYm9vbCBkb25lOwogCiBO
YXZpZ2F0aW9uQ29udHJvbGxlciogZ05hdmlnYXRpb25Db250cm9sbGVyID0gMDsKLVJlZlB0cjxM
YXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOworUmVmUHRyPFRlc3RS
dW5uZXI+IGdUZXN0UnVubmVyOwogCiBXZWJGcmFtZSAqbWFpbkZyYW1lID0gMDsKIC8vIFRoaXMg
aXMgdGhlIHRvcG1vc3QgZnJhbWUgdGhhdCBpcyBsb2FkaW5nLCBkdXJpbmcgYSBnaXZlbiBsb2Fk
LCBvciBuaWwgd2hlbiBubyBsb2FkIGlzIApAQCAtNTEwLDcgKzUxMCw3IEBAIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyTW9ja1Njcm9sbGJhcnMoKQogCiBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zm
c2NyZWVuV2luZG93KCkKIHsKLSAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdXaWR0aCwgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1h
eFZpZXdIZWlnaHQpOworICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0UnVu
bmVyOjptYXhWaWV3V2lkdGgsIFRlc3RSdW5uZXI6Om1heFZpZXdIZWlnaHQpOwogICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBmcmFtZU5h
bWU6bmlsIGdyb3VwTmFtZTpAIm9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUiXTsKICAgICAgICAg
CiAgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTp1aURlbGVnYXRlXTsKQEAgLTY3Myw3ICs2NzMs
NyBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsCiAKICAgICBbV2Vi
UHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBv
bGljeTpOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbl07
CiAgICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhm
YWxzZSk7CisgICAgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGZhbHNlKTsKIAog
ICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKIH0KQEAgLTg5OSw3ICs4OTksNyBAQCB2b2lkIGR1
bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyCiAgICAgCiAgICAgW0R1bXBSZW5kZXJU
cmVlUGFzdGVib2FyZCByZWxlYXNlTG9jYWxQYXN0ZWJvYXJkc107CiAKLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgbW92ZWQgb250byBMYXlvdXRUZXN0Q29udHJvbGxlciBhbmQgbWFkZSBp
bnRvIGEgSGFzaFNldAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCBvbnRvIFRl
c3RSdW5uZXIgYW5kIG1hZGUgaW50byBhIEhhc2hTZXQKICAgICBpZiAoZGlzYWxsb3dlZFVSTHMp
IHsKICAgICAgICAgQ0ZSZWxlYXNlKGRpc2FsbG93ZWRVUkxzKTsKICAgICAgICAgZGlzYWxsb3dl
ZFVSTHMgPSAwOwpAQCAtOTI0LDkgKzkyNCw5IEBAIHN0YXRpYyBOU0ludGVnZXIgY29tcGFyZUhp
c3RvcnlJdGVtcyhpZCAKIAogc3RhdGljIE5TRGF0YSAqZHVtcEF1ZGlvKCkKIHsKLSAgICBjb25z
dCBjaGFyICplbmNvZGVkQXVkaW9EYXRhID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5lbmNvZGVk
QXVkaW9EYXRhKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFyICplbmNvZGVkQXVkaW9EYXRhID0g
Z1Rlc3RSdW5uZXItPmVuY29kZWRBdWRpb0RhdGEoKS5jX3N0cigpOwogICAgIAotICAgIE5TRGF0
YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczplbmNvZGVkQXVkaW9EYXRhIGxlbmd0aDpn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmVuY29kZWRBdWRpb0RhdGEoKS5sZW5ndGgoKV07CisgICAg
TlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmVuY29kZWRBdWRpb0RhdGEgbGVu
Z3RoOmdUZXN0UnVubmVyLT5lbmNvZGVkQXVkaW9EYXRhKCkubGVuZ3RoKCldOwogICAgIHJldHVy
biBkYXRhOwogfQogCkBAIC05NzQsNyArOTc0LDcgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Ny
b2xsUG9zaXRpb24oV2ViRgogICAgICAgICBwcmludGYoInNjcm9sbGVkIHRvICUuZiwlLmZcbiIs
IHNjcm9sbFBvc2l0aW9uLngsIHNjcm9sbFBvc2l0aW9uLnkpOwogICAgIH0KIAotICAgIGlmIChn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkpIHsK
KyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkpIHsK
ICAgICAgICAgTlNBcnJheSAqa2lkcyA9IFtmIGNoaWxkRnJhbWVzXTsKICAgICAgICAgaWYgKGtp
ZHMpCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgW2tpZHMgY291bnRdOyBp
KyspCkBAIC05OTgsNyArOTk4LDcgQEAgc3RhdGljIE5TU3RyaW5nICpkdW1wRnJhbWVzQXNUZXh0
KFdlYkZyYQogCiAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6QCIlQFxuIiwgW2RvY3VtZW50RWxl
bWVudCBpbm5lclRleHRdXTsKIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBD
aGlsZEZyYW1lc0FzVGV4dCgpKSB7CisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFt
ZXNBc1RleHQoKSkgewogICAgICAgICBOU0FycmF5ICpraWRzID0gW2ZyYW1lIGNoaWxkRnJhbWVz
XTsKICAgICAgICAgaWYgKGtpZHMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBba2lkcyBjb3VudF07IGkrKykKQEAgLTEwNzgsMjEgKzEwNzgsMjEgQEAgc3RhdGljIHZv
aWQgZHVtcEJhY2tGb3J3YXJkTGlzdEZvcldlYlZpZQogc3RhdGljIHZvaWQgc2l6ZVdlYlZpZXdG
b3JDdXJyZW50VGVzdCgpCiB7CiAgICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3QgdG8gYmUgNDgw
eDM2MAotICAgIGJvb2wgaXNTVkdXM0NUZXN0ID0gKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+dGVz
dFBhdGhPclVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIpICE9IHN0cmluZzo6bnBvcyk7Cisg
ICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXItPnRlc3RQYXRoT3JVUkwoKS5maW5k
KCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBzdHJpbmc6Om5wb3MpOwogICAgIGlmIChpc1NWR1czQ1Rl
c3QpCiAgICAgICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldEZyYW1lU2l6ZTpOU01ha2VTaXpl
KDQ4MCwgMzYwKV07CiAgICAgZWxzZQotICAgICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRG
cmFtZVNpemU6TlNNYWtlU2l6ZShMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoLCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodCldOworICAgICAgICBbW21haW5GcmFt
ZSB3ZWJWaWV3XSBzZXRGcmFtZVNpemU6TlNNYWtlU2l6ZShUZXN0UnVubmVyOjptYXhWaWV3V2lk
dGgsIFRlc3RSdW5uZXI6Om1heFZpZXdIZWlnaHQpXTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIg
Km1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRUZXN0KCkKIHsKICAgICBjb25zdCBjaGFyICplcnJv
ck1lc3NhZ2U7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKQor
ICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpKQogICAgICAgICBlcnJvck1lc3NhZ2Ug
PSAiW2RvY3VtZW50RWxlbWVudCBpbm5lclRleHRdIjsKLSAgICBlbHNlIGlmIChnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSkKKyAgICBlbHNlIGlmIChnVGVzdFJ1
bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpKQogICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW1tt
YWluRnJhbWUgRE9NRG9jdW1lbnRdIHdlYkFyY2hpdmVdIjsKLSAgICBlbHNlIGlmIChnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkKKyAgICBlbHNlIGlmIChn
VGVzdFJ1bm5lci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQogICAgICAgICBlcnJvck1lc3Nh
Z2UgPSAiW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gd2ViQXJjaGl2ZV0iOwogICAgIGVsc2UKICAg
ICAgICAgZXJyb3JNZXNzYWdlID0gIlttYWluRnJhbWUgcmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbl0iOwpAQCAtMTE0Myw0MyArMTE0Myw0MyBAQCB2b2lkIGR1bXAoKQogICAgICAg
ICBOU1N0cmluZyAqcmVzdWx0TWltZVR5cGUgPSBAInRleHQvcGxhaW4iOwogCiAgICAgICAgIGlm
IChbW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gX3Jlc3BvbnNlTUlNRVR5cGVdIGlzRXF1YWxUb1N0
cmluZzpAInRleHQvcGxhaW4iXSkgewotICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CisgICAgICAgICAgICBnVGVzdFJ1bm5l
ci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVyLT5zZXRHZW5l
cmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEFzQXVkaW8oKSkgeworICAgICAgICBpZiAoZ1Rlc3RSdW5uZXIt
PmR1bXBBc0F1ZGlvKCkpIHsKICAgICAgICAgICAgIHJlc3VsdERhdGEgPSBkdW1wQXVkaW8oKTsK
ICAgICAgICAgICAgIHJlc3VsdE1pbWVUeXBlID0gQCJhdWRpby93YXYiOwotICAgICAgICB9IGVs
c2UgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSkgewogICAgICAgICAgICAgcmVzdWx0
U3RyaW5nID0gZHVtcEZyYW1lc0FzVGV4dChtYWluRnJhbWUpOwotICAgICAgICB9IGVsc2UgaWYg
KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzUERGKCkpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChnVGVzdFJ1bm5lci0+ZHVtcEFzUERGKCkpIHsKICAgICAgICAgICAgIHJlc3VsdERhdGEgPSBk
dW1wRnJhbWVBc1BERihtYWluRnJhbWUpOwogICAgICAgICAgICAgcmVzdWx0TWltZVR5cGUgPSBA
ImFwcGxpY2F0aW9uL3BkZiI7Ci0gICAgICAgIH0gZWxzZSBpZiAoZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChnVGVzdFJ1
bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpKSB7CiAgICAgICAgICAgICBXZWJBcmNoaXZlICp3
ZWJBcmNoaXZlID0gW1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIHdlYkFyY2hpdmVdOwogICAgICAg
ICAgICAgcmVzdWx0U3RyaW5nID0gSGFyZEF1dG9yZWxlYXNlKGNyZWF0ZVhNTFN0cmluZ0Zyb21X
ZWJBcmNoaXZlRGF0YSgoQ0ZEYXRhUmVmKVt3ZWJBcmNoaXZlIGRhdGFdKSk7CiAgICAgICAgICAg
ICByZXN1bHRNaW1lVHlwZSA9IEAiYXBwbGljYXRpb24veC13ZWJhcmNoaXZlIjsKLSAgICAgICAg
fSBlbHNlIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUo
KSkgeworICAgICAgICB9IGVsc2UgaWYgKGdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNo
aXZlKCkpIHsKICAgICAgICAgICAgIFdlYkFyY2hpdmUgKndlYkFyY2hpdmUgPSBbW21haW5GcmFt
ZSBkYXRhU291cmNlXSB3ZWJBcmNoaXZlXTsKICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9IEhh
cmRBdXRvcmVsZWFzZShjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoKENGRGF0YVJl
Zilbd2ViQXJjaGl2ZSBkYXRhXSkpOwogICAgICAgICAgICAgcmVzdWx0TWltZVR5cGUgPSBAImFw
cGxpY2F0aW9uL3gtd2ViYXJjaGl2ZSI7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVz
dWx0U3RyaW5nID0gW21haW5GcmFtZSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9u
Rm9yUHJpbnRpbmc6Z0xheW91dFRlc3RDb250cm9sbGVyLT5pc1ByaW50aW5nKCldOworICAgICAg
ICAgICAgcmVzdWx0U3RyaW5nID0gW21haW5GcmFtZSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJl
c2VudGF0aW9uRm9yUHJpbnRpbmc6Z1Rlc3RSdW5uZXItPmlzUHJpbnRpbmcoKV07CiAKICAgICAg
ICAgaWYgKHJlc3VsdFN0cmluZyAmJiAhcmVzdWx0RGF0YSkKICAgICAgICAgICAgIHJlc3VsdERh
dGEgPSBbcmVzdWx0U3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XTsKIAogICAgICAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogJXNcbiIsIFtyZXN1bHRNaW1lVHlw
ZSBVVEY4U3RyaW5nXSk7CiAKLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEFzQXVkaW8oKSkKKyAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQXNBdWRpbygpKQogICAg
ICAgICAgICAgcHJpbnRmKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcbiIpOwog
CiAgICAgICAgIGlmIChyZXN1bHREYXRhKSB7CiAgICAgICAgICAgICBmd3JpdGUoW3Jlc3VsdERh
dGEgYnl0ZXNdLCAxLCBbcmVzdWx0RGF0YSBsZW5ndGhdLCBzdGRvdXQpOwogCi0gICAgICAgICAg
ICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpICYmICFnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpCisgICAgICAgICAgICBpZiAoIWdUZXN0UnVu
bmVyLT5kdW1wQXNUZXh0KCkgJiYgIWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkg
JiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpCiAgICAgICAgICAgICAg
ICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24obWFpbkZyYW1lKTsKIAotICAgICAgICAgICAgaWYg
KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEJhY2tGb3J3YXJkTGlzdCgpKQorICAgICAgICAg
ICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQmFja0ZvcndhcmRMaXN0KCkpCiAgICAgICAgICAgICAg
ICAgZHVtcEJhY2tGb3J3YXJkTGlzdEZvckFsbFdpbmRvd3MoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBwcmludGYoIkVSUk9SOiBuaWwgcmVzdWx0IGZyb20gJXMiLCBtZXRob2ROYW1l
U3RyaW5nRm9yRmFpbGVkVGVzdCgpKTsKQEAgLTExOTUsOSArMTE5NSw5IEBAIHZvaWQgZHVtcCgp
CiAgICAgICAgIH0gICAgICAgICAgICAKICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVsc0ZvckN1
cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMo
KSkKKyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdUZXN0UnVubmVyLT5nZW5l
cmF0ZVBpeGVsUmVzdWx0cygpKQogICAgICAgICAvLyBGSVhNRTogd2hlbiBpc1ByaW50aW5nIGlz
IHNldCwgZHVtcCB0aGUgaW1hZ2Ugd2l0aCBwYWdlIHNlcGFyYXRvcnMuCi0gICAgICAgIGR1bXBX
ZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CisgICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRD
b21wYXJlV2l0aEV4cGVjdGVkKGdUZXN0UnVubmVyLT5leHBlY3RlZFBpeGVsSGFzaCgpKTsKIAog
ICAgIHB1dHMoIiNFT0YiKTsgICAvLyB0ZXJtaW5hdGUgdGhlIChwb3NzaWJseSBlbXB0eSkgcGl4
ZWxzIGJsb2NrCiAKQEAgLTEyNTYsMTAgKzEyNTYsMTAgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJW
aWV3VG9Db25zaXN0ZW50U3RhdAogICAgIAogICAgIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRW
YWx1ZXMoKTsKIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBpZiAoZ1Rl
c3RSdW5uZXIpIHsKICAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09i
amVjdChbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdKTsKICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
dGhhdCBhIHRlc3QgdXNpbmcgdGhlIGNocm9tZSBpbnB1dCBmaWVsZCBmYWlsZWQsIGJlIHN1cmUg
dG8gY2xlYW4gdXAgZm9yIHRoZSBuZXh0IHRlc3QKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgICAgIGdUZXN0UnVubmVyLT5yZW1v
dmVDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgfQogCiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10g
c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOllFU107CkBAIC0xMzA0LDE5ICsxMzA0LDE5IEBA
IHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICAKICAgICByZXNl
dFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoKTsKIAotICAgIGdMYXlvdXRU
ZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgY29t
bWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ1Rlc3RSdW5uZXIgPSBUZXN0UnVubmVyOjpj
cmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgdG9wTG9hZGlu
Z0ZyYW1lID0gbmlsOwogICAgIEFTU0VSVCghZHJhZ2dpbmdJbmZvKTsgLy8gdGhlIHByZXZpb3Vz
IHRlc3Qgc2hvdWxkIGhhdmUgY2FsbGVkIGV2ZW50U2VuZGVyLm1vdXNlVXAgdG8gZHJvcCEKICAg
ICByZWxlYXNlQW5kWmVybygmZHJhZ2dpbmdJbmZvKTsKICAgICBkb25lID0gTk87CiAKICAgICBz
aXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KCk7Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5z
ZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0SWNvbkRh
dGFiYXNlRW5hYmxlZChmYWxzZSk7CiAKICAgICBpZiAoZGlzYWxsb3dlZFVSTHMpCiAgICAgICAg
IENGU2V0UmVtb3ZlQWxsVmFsdWVzKGRpc2FsbG93ZWRVUkxzKTsKICAgICBpZiAoc2hvdWxkTG9n
RnJhbWVMb2FkRGVsZWdhdGVzKHBhdGhPclVSTC5jX3N0cigpKSkKLSAgICAgICAgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOworICAgICAgICBn
VGVzdFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKIAogICAgIGlmIChz
aG91bGRMb2dIaXN0b3J5RGVsZWdhdGVzKHBhdGhPclVSTC5jX3N0cigpKSkKICAgICAgICAgW1tt
YWluRnJhbWUgd2ViVmlld10gc2V0SGlzdG9yeURlbGVnYXRlOmhpc3RvcnlEZWxlZ2F0ZV07CkBA
IC0xMzI0LDEyICsxMzI0LDEyIEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBp
bnB1dEwKICAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0SGlzdG9yeURlbGVnYXRlOm5p
bF07CiAKICAgICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHBhdGhPclVSTC5jX3N0
cigpKSkgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldERldmVsb3BlckV4dHJh
c0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIGdUZXN0UnVubmVyLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKHRydWUpOwogICAgICAgICBpZiAoc2hvdWxkT3BlbldlYkluc3BlY3RvcihwYXRoT3JV
UkwuY19zdHIoKSkpCi0gICAgICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3dXZWJJ
bnNwZWN0b3IoKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVyLT5zaG93V2ViSW5zcGVjdG9yKCk7
CiAgICAgICAgIGlmIChzaG91bGREdW1wQXNUZXh0KHBhdGhPclVSTC5jX3N0cigpKSkgewotICAg
ICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAg
ICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhm
YWxzZSk7CisgICAgICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAg
ICAgICAgICAgIGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTEzNjQsNyArMTM2NCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRl
c3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNsZWFy
KCk7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5jbG9zZVJlbWFpbmluZ1dpbmRv
d3NXaGVuQ29tcGxldGUoKSkgeworICAgIGlmIChnVGVzdFJ1bm5lci0+Y2xvc2VSZW1haW5pbmdX
aW5kb3dzV2hlbkNvbXBsZXRlKCkpIHsKICAgICAgICAgTlNBcnJheSogYXJyYXkgPSBbRHVtcFJl
bmRlclRyZWVXaW5kb3cgb3BlbldpbmRvd3NdOwogCiAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
W2FycmF5IGNvdW50XTsKQEAgLTEzODQsOCArMTM4NCw4IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3Qo
Y29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIC8vIElmIGRldmVsb3BlciBleHRyYXMgZW5hYmxl
ZCBXZWIgSW5zcGVjdG9yIG1heSBoYXZlIGJlZW4gb3BlbiBieSB0aGUgdGVzdC4KICAgICBpZiAo
c2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHBhdGhPclVSTC5jX3N0cigpKSkgewotICAgICAg
ICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAgICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7Cisg
ICAgICAgIGdUZXN0UnVubmVyLT5jbG9zZVdlYkluc3BlY3RvcigpOworICAgICAgICBnVGVzdFJ1
bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7CiAgICAgfQogCiAgICAgcmVz
ZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCk7CkBAIC0xMzk5LDcgKzEz
OTksNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgQVNT
RVJUKENGQXJyYXlHZXRDb3VudChvcGVuV2luZG93c1JlZikgPT0gMSk7CiAgICAgQVNTRVJUKENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgob3BlbldpbmRvd3NSZWYsIDApID09IFtbbWFpbkZyYW1lIHdl
YlZpZXddIHdpbmRvd10pOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLmNsZWFyKCk7Cisg
ICAgZ1Rlc3RSdW5uZXIuY2xlYXIoKTsKIAogICAgIGlmIChpZ25vcmVXZWJDb3JlTm9kZUxlYWtz
KQogICAgICAgICBbV2ViQ29yZVN0YXRpc3RpY3Mgc3RvcElnbm9yaW5nV2ViQ29yZU5vZGVMZWFr
c107CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVXaW5kb3cu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
V2luZG93Lm1tCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWVXaW5kb3cubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAKIC8vIEZJWE1FOiBUaGlzIGZpbGUgaXMgT2Jq
QysrIG9ubHkgYmVjYXVzZSBvZiB0aGlzIGluY2x1ZGUuIDooCi0jaW1wb3J0ICJMYXlvdXRUZXN0
Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogI2ltcG9ydCA8V2ViS2l0L1dl
YlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVHlwZXNJbnRlcm5hbC5oPgogCkBA
IC03OSw3ICs3OSw3IEBAIC0gKHZvaWQpY2xvc2UKIAogLSAoQk9PTClpc0tleVdpbmRvdwogewot
ICAgIHJldHVybiBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPyBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PndpbmRvd0lzS2V5KCkgOiBZRVM7CisgICAgcmV0dXJuIGdUZXN0UnVubmVyID8gZ1Rlc3RSdW5u
ZXItPndpbmRvd0lzS2V5KCkgOiBZRVM7CiB9CiAKIC0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAq
KWV2ZW50CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRWRpdGluZ0RlbGVnYXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9FZGl0aW5nRGVsZWdhdGUu
bW0JKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9FZGl0aW5n
RGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgIkVk
aXRpbmdEZWxlZ2F0ZS5oIgogCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgotI2ltcG9ydCAi
TGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlRlc3RSdW5uZXIuaCIKICNpbXBvcnQg
PFdlYktpdC9XZWJLaXQuaD4KIAogQGludGVyZmFjZSBET01Ob2RlIChkdW1wUGF0aCkKQEAgLTc0
LDE0ICs3NCwxNCBAQCAtIChpZClpbml0CiAKIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdl
YlZpZXcgc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewot
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGlu
Z0luRE9NUmFuZ2U6JXNcbiIsIFtbcmFuZ2UgZHVtcF0gVVRGOFN0cmluZ10pOwogICAgIHJldHVy
biBhY2NlcHRzRWRpdGluZzsKIH0KIAogLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmll
dyBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgIGlm
ICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQog
ICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJh
bmdlOiVzXG4iLCBbW3JhbmdlIGR1bXBdIFVURjhTdHJpbmddKTsKICAgICByZXR1cm4gYWNjZXB0
c0VkaXRpbmc7CiB9CkBAIC05NCw3ICs5NCw3IEBAIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAq
KXdlYlZpZXcgc2hvdWwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAg
ICB9OwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5z
ZXJ0Tm9kZTolcyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlvbjolc1xuIiwgW1tub2Rl
IGR1bXBQYXRoXSBVVEY4U3RyaW5nXSwgW1tyYW5nZSBkdW1wXSBVVEY4U3RyaW5nXSwgaW5zZXJ0
YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwogICAgIHJldHVybiBhY2NlcHRzRWRpdGluZzsKIH0KQEAg
LTEwNywxNCArMTA3LDE0IEBAIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hv
dWwKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCi0gICAg
aWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDolcyBy
ZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlvbjolc1xuIiwgW1t0ZXh0IGRlc2NyaXB0aW9u
XSBVVEY4U3RyaW5nXSwgW1tyYW5nZSBkdW1wXSBVVEY4U3RyaW5nXSwgaW5zZXJ0YWN0aW9uc3Ry
aW5nW2FjdGlvbl0pOwogICAgIHJldHVybiBhY2NlcHRzRWRpdGluZzsKIH0KIAogLSAoQk9PTCl3
ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGREZWxldGVET01SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRp
dGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZERlbGV0ZURPTVJhbmdlOiVzXG4iLCBbW3JhbmdlIGR1bXBdIFVURjhTdHJpbmddKTsKICAgICBy
ZXR1cm4gYWNjZXB0c0VkaXRpbmc7CiB9CkBAIC0xMzUsNTIgKzEzNSw1MiBAQCAtIChCT09MKXdl
YlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsCiAgICAgICAgICJUUlVFIgogICAgIH07CiAK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOiVzIHRvRE9NUmFuZ2U6JXMgYWZmaW5pdHk6JXMgc3RpbGxTZWxlY3Rpbmc6
JXNcbiIsIFtbY3VycmVudFJhbmdlIGR1bXBdIFVURjhTdHJpbmddLCBbW3Byb3Bvc2VkUmFuZ2Ug
ZHVtcF0gVVRGOFN0cmluZ10sIGFmZmluaXR5c3RyaW5nW3NlbGVjdGlvbkFmZmluaXR5XSwgYm9v
bHN0cmluZ1tmbGFnXSk7CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQogCiAtIChCT09M
KXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6KERPTUNTU1N0eWxl
RGVjbGFyYXRpb24gKilzdHlsZSB0b0VsZW1lbnRzSW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5
U3R5bGU6JXMgdG9FbGVtZW50c0luRE9NUmFuZ2U6JXNcbiIsIFtbc3R5bGUgZGVzY3JpcHRpb25d
IFVURjhTdHJpbmddLCBbW3JhbmdlIGR1bXBdIFVURjhTdHJpbmddKTsKICAgICByZXR1cm4gYWNj
ZXB0c0VkaXRpbmc7CiB9CiAKIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hv
dWxkQ2hhbmdlVHlwaW5nU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKiljdXJyZW50U3R5
bGUgdG9TdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXByb3Bvc2VkU3R5bGUKIHsKLSAg
ICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VUeXBpbmdT
dHlsZTolcyB0b1N0eWxlOiVzXG4iLCBbW2N1cnJlbnRTdHlsZSBkZXNjcmlwdGlvbl0gVVRGOFN0
cmluZ10sIFtbcHJvcG9zZWRTdHlsZSBkZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10pOwogICAgIHJl
dHVybiBhY2NlcHRzRWRpdGluZzsKIH0KIAogLSAodm9pZCl3ZWJWaWV3RGlkQmVnaW5FZGl0aW5n
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYo
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6JXNcbiIsIFtbbm90aWZp
Y2F0aW9uIG5hbWVdIFVURjhTdHJpbmddKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3RGlkQ2hhbmdl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYo
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6JXNcbiIsIFtbbm90aWZpY2F0aW9u
IG5hbWVdIFVURjhTdHJpbmddKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3RGlkRW5kRWRpdGluZzoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzolc1xuIiwgW1tub3RpZmljYXRp
b24gbmFtZV0gVVRGOFN0cmluZ10pOwogfQogCiAtICh2b2lkKXdlYlZpZXdEaWRDaGFuZ2VUeXBp
bmdTdHlsZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAg
cHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlVHlwaW5nU3R5bGU6JXNc
biIsIFtbbm90aWZpY2F0aW9uIG5hbWVdIFVURjhTdHJpbmddKTsKIH0KIAogLSAodm9pZCl3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewot
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246JXNcbiIsIFtbbm90aWZpY2F0aW9uIG5hbWVdIFVURjhTdHJpbmddKTsKIH0KIApJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQko
cmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERl
bGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJFdmVu
dFNlbmRpbmdDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJGb3VuZGF0aW9uL05TTm90aWZpY2F0aW9u
LmgiCiAjaW1wb3J0ICJHQ0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCisjaW1wb3J0ICJUZXN0UnVubmVyLmgiCiAjaW1wb3J0ICJOYXZpZ2F0aW9uQ29udHJv
bGxlci5oIgogI2ltcG9ydCAiT2JqQ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIk9iakNQbHVnaW4u
aCIKQEAgLTEzMSw3ICsxMzEsNyBAQCAtICh2b2lkKXByb2Nlc3NXb3JrOihpZClkdW1teQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBpZiB3ZSBmaW5pc2ggYWxsIHRoZSBjb21tYW5kcywgd2Un
cmUgcmVhZHkgdG8gZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5wcm9j
ZXNzV29yaygpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAgICBp
ZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ1Rlc3RSdW5uZXItPndh
aXRUb0R1bXAoKSkKICAgICAgICAgZHVtcCgpOwogfQogCkBAIC0xNDUsNyArMTQ1LDcgQEAgLSAo
dm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYyBsb2NhdGlvbkNoYQogICAgIGlmIChbZGF0YVNvdXJj
ZSB3ZWJGcmFtZV0gPT0gdG9wTG9hZGluZ0ZyYW1lKSB7CiAgICAgICAgIHRvcExvYWRpbmdGcmFt
ZSA9IG5pbDsKICAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUpOyAv
LyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVlIGZvciB0aGUgcmVzdCBvZiB0
aGlzIHRlc3QKLSAgICAgICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAo
KSkgeworICAgICAgICBpZiAoIWdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpIHsKICAgICAgICAg
ICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQogICAgICAgICAgICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocHJvY2Vzc1dvcms6KSB3aXRoT2JqZWN0Om5p
bCBhZnRlckRlbGF5OjBdOwogICAgICAgICAgICAgZWxzZQpAQCAtMTU2LDEyICsxNTYsMTIgQEAg
LSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYyBsb2NhdGlvbkNoYQogCiAtICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
XV07CiAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9
CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVXNlckdlc3R1
cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3Ry
aW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gaW4gZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSIsIFtmcmFtZSBfZHJ0X3ByaW50RnJhbWVVc2VyR2Vz
dHVyZVN0YXR1c11dOwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5n
XSk7CiAgICAgfQpAQCAtMTcyLDEzICsxNzIsMTMgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3
ICopc2VuZGVyIGRpZFN0YQogICAgIGlmICghdG9wTG9hZGluZ0ZyYW1lICYmICFkb25lKQogICAg
ICAgICB0b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPnN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoKSkgeworICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+c3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKSB7CiAgICAg
ICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0g
c3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxiYWNr
IiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAg
ICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgICAgICBbZnJhbWUg
c3RvcExvYWRpbmddOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPnVzZURlZmVycmVkRnJhbWVMb2FkaW5nKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rl
c3RSdW5uZXItPnVzZURlZmVycmVkRnJhbWVMb2FkaW5nKCkpIHsKICAgICAgICAgW3NlbmRlciBz
ZXREZWZlcnNDYWxsYmFja3M6WUVTXTsKICAgICAgICAgaW50NjRfdCBkZWZlcnJlZFdhaXRUaW1l
ID0gNSAqIE5TRUNfUEVSX01TRUM7CiAgICAgICAgIGRpc3BhdGNoX3RpbWVfdCB3aGVuID0gZGlz
cGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgZGVmZXJyZWRXYWl0VGltZSk7CkBAIC0xOTAs
NyArMTkwLDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZFN0YQogCiAt
ICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkQ29tbWl0TG9hZEZvckZyYW1lOihX
ZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgTlNTdHJpbmcgKnN0cmlu
ZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRDb21taXRMb2FkRm9yRnJh
bWUiLCBbZnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwogICAg
ICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfQpAQCAtMTk4
LDE0ICsxOTgsMTQgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZENvbQog
ICAgIEFTU0VSVCghW2ZyYW1lIHByb3Zpc2lvbmFsRGF0YVNvdXJjZV0pOwogICAgIEFTU0VSVChb
ZnJhbWUgZGF0YVNvdXJjZV0pOwogICAgIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0
V2luZG93SXNLZXkodHJ1ZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldFdpbmRvd0lzS2V5KHRydWUp
OwogICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1ttYWluRnJhbWUgZnJhbWVWaWV3XSBkb2N1
bWVudFZpZXddOwogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJzdFJl
c3BvbmRlcjpkb2N1bWVudFZpZXddOwogfQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilz
ZW5kZXIgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZv
ckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgTlNTdHJp
bmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRGYWlsUHJv
dmlzaW9uYWxMb2FkV2l0aEVycm9yIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZv
clRlc3RSZXN1bHRdXTsKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5n
XSk7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAq
KXNlbmRlciBkaWRGaW4KICAgICBBU1NFUlQoW2ZyYW1lIGRhdGFTb3VyY2VdKTsKICAgICBBU1NF
UlQoZnJhbWUgPT0gW1tmcmFtZSBkYXRhU291cmNlXSB3ZWJGcmFtZV0pOwogICAgIAotICAgIGlm
ICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVAIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJp
bmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTI0NCw3ICsyNDQsNyBAQCAtICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkRmluCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAq
KXNlbmRlciBkaWRGYWlsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvckZyYW1lOihX
ZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgTlNTdHJpbmcgKnN0cmlu
ZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRGYWlsTG9hZFdpdGhFcnJv
ciIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XV07CiAgICAg
ICAgIHByaW50ZiAoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9CkBAIC0yNTcs
NyArMjU3LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZhaQogCiAt
ICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHdpbmRvd1NjcmlwdE9iamVjdEF2YWls
YWJsZTooV2ViU2NyaXB0T2JqZWN0ICopd2luZG93U2NyaXB0T2JqZWN0CiB7Ci0gICAgaWYgKCFk
b25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7
CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiPz8gLSB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUiXTsKICAgICAgICAgcHJpbnRmICgi
JXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTI2NywxMyArMjY3LDEzIEBA
IC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgd2luZG8KIAogLSAodm9pZClkaWRD
bGVhcldpbmRvd09iamVjdEluU3RhbmRhcmRXb3JsZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1l
CiB7Ci0gICAgLy8gTWFrZSBOZXctU3R5bGUgTGF5b3V0VGVzdENvbnRyb2xsZXIKKyAgICAvLyBN
YWtlIE5ldy1TdHlsZSBUZXN0UnVubmVyCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJh
bWUgZ2xvYmFsQ29udGV4dF07CiAgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250
ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
MDsKIAotICAgIEFTU0VSVChnTGF5b3V0VGVzdENvbnRyb2xsZXIpOwotICAgIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxPYmplY3QsICZleGNl
cHRpb24pOworICAgIEFTU0VSVChnVGVzdFJ1bm5lcik7CisgICAgZ1Rlc3RSdW5uZXItPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKICAgICBBU1NF
UlQoIWV4Y2VwdGlvbik7CiAKICAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29u
dGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKQEAgLTMzOCwxOCArMzM4LDE4IEBAIC0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGUKIAogLSAodm9pZCl3ZWJWaWV3
OihXZWJWaWV3ICopc2VuZGVyIGRpZFJlY2VpdmVUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBmb3JG
cmFtZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBn
VGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5n
ICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkUmVjZWl2ZVRp
dGxlOiAlQCIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XSwg
dGl0bGVdOwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAg
ICAgfQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hhbmdlcygp
KQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFRpdGxlQ2hhbmdlcygpKQogICAgICAgICBwcmlu
dGYoIlRJVExFIENIQU5HRUQ6ICVzXG4iLCBbdGl0bGUgVVRGOFN0cmluZ10pOwogfQogCiAtICh2
b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICBpZiAoIWRv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsK
KyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkg
ewogICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlQCAtIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
IiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAg
ICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTM1Nyw3
ICszNTcsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkUmVjCiAKIC0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBh
Z2VGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9u
ZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5T
U3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkQ2hh
bmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUiLCBbZnJhbWUgX2RydF9kZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBV
VEY4U3RyaW5nXSk7CiAgICAgfQpAQCAtMzY1LDEyICszNjUsMTIgQEAgLSAodm9pZCl3ZWJWaWV3
OihXZWJWaWV3ICopc2VuZGVyIGRpZENoYQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilz
ZW5kZXIgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOihOU1VSTCAqKVVSTCBkZWxheToo
TlNUaW1lSW50ZXJ2YWwpc2Vjb25kcyBmaXJlRGF0ZTooTlNEYXRlICopZGF0ZSBmb3JGcmFtZToo
V2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJp
bmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gd2lsbFBlcmZvcm1DbGllbnRS
ZWRpcmVjdFRvVVJMOiAlQCAiLCBbZnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVz
dFJlc3VsdF0sIFtVUkwgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwog
ICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfQogCi0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFVzZXJHZXN0dXJlSW5G
cmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBOU1N0cmluZyAq
c3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAtIGluIHdpbGxQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QiLCBbZnJhbWUgX2RydF9wcmludEZyYW1lVXNlckdlc3R1cmVTdGF0dXNd
XTsKICAgICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0K
QEAgLTM3OCw3ICszNzgsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgd2ls
bFBlCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDYW5jZWxDbGllbnRS
ZWRpcmVjdEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAg
ICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBk
aWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcg
VVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTM4Niw3ICszODYsNyBAQCAtICh2b2lkKXdlYlZpZXc6
KFdlYlZpZXcgKilzZW5kZXIgZGlkQ2FuCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNl
bmRlciBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQogewot
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxs
YmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVAIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUiLCBbZnJhbWUg
X2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwogICAgICAgICBwcmludGYg
KCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfSBlbHNlIGlmICghZG9uZSkgewpA
QCAtNDAwLDcgKzQwMCw3IEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRG
aW4KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEhhbmRsZU9ubG9hZEV2
ZW50c0ZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAg
TlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRI
YW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFi
bGVGb3JUZXN0UmVzdWx0XV07CiAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBbc3RyaW5nIFVURjhT
dHJpbmddKTsKICAgICB9CkBAIC00MDgsMjUgKzQwOCwyNSBAQCAtICh2b2lkKXdlYlZpZXc6KFdl
YlZpZXcgKilzZW5kZXIgZGlkSGFuCiAKIC0gKHZvaWQpd2ViVmlld0RpZERpc3BsYXlJbnNlY3Vy
ZUNvbnRlbnQ6KFdlYlZpZXcgKilzZW5kZXIKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZiAo
ImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCiAtICh2b2lkKXdlYlZpZXc6KFdl
YlZpZXcgKilzZW5kZXIgZGlkUnVuSW5zZWN1cmVDb250ZW50OihXZWJTZWN1cml0eU9yaWdpbiAq
KW9yaWdpbgogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmICgiZGlkUnVuSW5zZWN1cmVDb250
ZW50XG4iKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZERldGVj
dFhTUzooTlNVUkwgKilpbnNlY3VyZVVSTAogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmICgi
ZGlkRGV0ZWN0WFNTXG4iKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3UHJvZ3Jlc3NGaW5pc2hlZE5v
dGlmaWNhdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBpZiAoIWRv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNr
KCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hlZENh
bGxiYWNrKCkpCiAgICAgICAgIHByaW50ZiAoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0
aW9uXG4iKTsKIH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0hpc3RvcnlEZWxl
Z2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvSGlzdG9yeURl
bGVnYXRlLm1tCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
SGlzdG9yeURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1w
b3J0ICJIaXN0b3J5RGVsZWdhdGUuaCIKIAogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKLSNp
bXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW1wb3J0ICJUZXN0UnVubmVyLmgiCiAK
ICNpbXBvcnQgPFdlYktpdC9XZWJOYXZpZ2F0aW9uRGF0YS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YlZpZXcuaD4KQEAgLTc0LDcgKzc0LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldyB1cGRhdAogCiAtICh2b2lkKXBvcHVsYXRlVmlzaXRlZExpbmtzRm9yV2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcKIHsKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVmlz
aXRlZExpbmtzQ2FsbGJhY2soKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBWaXNpdGVkTGlu
a3NDYWxsYmFjaygpKQogICAgICAgICBwcmludGYoIkFza2VkIHRvIHBvcHVsYXRlIHZpc2l0ZWQg
bGlua3MgZm9yIFdlYlZpZXcgXCIlc1wiXG4iLCBbW1tOU1VSTCBVUkxXaXRoU3RyaW5nOlt3ZWJW
aWV3IG1haW5GcmFtZVVSTF1dIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRd
IFVURjhTdHJpbmddKTsKIH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91
dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgotI2ltcG9ydCAiTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCIKLQotI2ltcG9ydCAiRWRpdGluZ0RlbGVnYXRlLmgiCi0jaW1wb3J0ICJNb2NrR2Vv
bG9jYXRpb25Qcm92aWRlci5oIgotI2ltcG9ydCAiUG9saWN5RGVsZWdhdGUuaCIKLSNpbXBvcnQg
IlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKLSNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKLSNpbXBv
cnQgIldvcmtRdWV1ZS5oIgotI2ltcG9ydCAiV29ya1F1ZXVlSXRlbS5oIgotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KLSNpbXBvcnQgPFdlYktpdC9ET01Eb2N1bWVu
dC5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJB
cHBsaWNhdGlvbkNhY2hlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViQmFja0ZvcndhcmRMaXN0Lmg+
Ci0jaW1wb3J0IDxXZWJLaXQvV2ViQ29yZVN0YXRpc3RpY3MuaD4KLSNpbXBvcnQgPFdlYktpdC9X
ZWJET01PcGVyYXRpb25zUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFTb3VyY2Uu
aD4KLSNpbXBvcnQgPFdlYktpdC9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV2ViRGV2aWNlT3JpZW50YXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJEZXZp
Y2VPcmllbnRhdGlvblByb3ZpZGVyTW9jay5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+
Ci0jaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0
L1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJIVE1MUmVwcmVz
ZW50YXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KLSNpbXBv
cnQgPFdlYktpdC9XZWJIaXN0b3J5Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViSGlzdG9yeVByaXZh
dGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJJY29uRGF0YWJhc2VQcml2YXRlLmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV2ViSW5zcGVjdG9yUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYk5TVVJM
RXh0cmFzLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViS2l0RXJyb3JzLmg+Ci0jaW1wb3J0IDxXZWJL
aXQvV2ViUHJlZmVyZW5jZXMuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJRdW90YU1hbmFnZXIuaD4KLSNpbXBvcnQgPFdlYktp
dC9XZWJTY3JpcHRXb3JsZC5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYlNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oPgotI2lt
cG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJWaWV3
Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9X
ZWJXb3JrZXJzUHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW1wb3J0
IDx3dGYvSGFzaE1hcC5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AaW50ZXJmYWNl
IENvbW1hbmRWYWxpZGF0aW9uVGFyZ2V0IDogTlNPYmplY3QgPE5TVmFsaWRhdGVkVXNlckludGVy
ZmFjZUl0ZW0+Ci17Ci0gICAgU0VMIF9hY3Rpb247Ci19Ci0tIChpZClpbml0V2l0aEFjdGlvbjoo
U0VMKWFjdGlvbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIENvbW1hbmRWYWxpZGF0aW9uVGFy
Z2V0Ci0KLS0gKGlkKWluaXRXaXRoQWN0aW9uOihTRUwpYWN0aW9uCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBf
YWN0aW9uID0gYWN0aW9uOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChTRUwpYWN0aW9uCi17
Ci0gICAgcmV0dXJuIF9hY3Rpb247Ci19Ci0KLS0gKE5TSW50ZWdlcil0YWcKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotQGVuZAotCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250
cm9sbGVyKCkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dl
ZFVSTChKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxD
RihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwp
KTsKLQotICAgIGlmICghZGlzYWxsb3dlZFVSTHMpCi0gICAgICAgIGRpc2FsbG93ZWRVUkxzID0g
Q0ZTZXRDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIE5VTEwpOwotCi0gICAg
Ly8gQ2Fub25pY2FsaXplIHRoZSBVUkwKLSAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAq
KXVybENGLmdldCgpXV07Ci0gICAgcmVxdWVzdCA9IFtOU1VSTFByb3RvY29sIGNhbm9uaWNhbFJl
cXVlc3RGb3JSZXF1ZXN0OnJlcXVlc3RdOwotCi0gICAgQ0ZTZXRBZGRWYWx1ZShkaXNhbGxvd2Vk
VVJMcywgW3JlcXVlc3QgVVJMXSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0gICAgcmV0dXJuIFtbbWFpbkZyYW1lIHdlYlZp
ZXddIHNob3VsZENsb3NlXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGVsZXRl
QWxsQXBwbGljYXRpb25DYWNoZXNdOwotfQotCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQot
ewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7Ci0gICAgV2ViU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIGluaXRXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07Ci0gICAgbG9uZyBsb25n
IHVzYWdlID0gW1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGlza1VzYWdlRm9yT3JpZ2luOm9yaWdpbl07
Ci0gICAgW29yaWdpbiByZWxlYXNlXTsKLSAgICByZXR1cm4gdXNhZ2U7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQotewotICAgIFtbV2ViU3RvcmFn
ZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIHN5bmNMb2NhbFN0b3JhZ2VdOwotfQot
Ci1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1
cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1
cmwpKTsKLSAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdp
biBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJs
Q0YuZ2V0KCldXTsKLSAgICBsb25nIGxvbmcgdXNhZ2UgPSBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNo
YXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkaXNrVXNhZ2VGb3JPcmlnaW46b3JpZ2luXTsKLSAgICBb
b3JpZ2luIHJlbGVhc2VdOwotICAgIHJldHVybiB1c2FnZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBu
dW1iZXIpCi17Ci0gICAgW3N0b3JhZ2VEZWxlZ2F0ZSBsb2dOb3RpZmljYXRpb25zOm51bWJlciBj
b250cm9sbGVyOnRoaXNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFw
cGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQotewotICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgdXJsKSk7Ci0KLSAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0g
W1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKLSAgICBbV2ViQXBwbGljYXRpb25DYWNoZSBk
ZWxldGVDYWNoZUZvck9yaWdpbjpvcmlnaW5dOwotICAgIFtvcmlnaW4gcmVsZWFzZV07Ci19Ci0K
LUpTVmFsdWVSZWYgb3JpZ2luc0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJh
eSAqb3JpZ2lucykKLXsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW29yaWdpbnMgY291bnRdOwot
Ci0gICAgSlNWYWx1ZVJlZiBqc09yaWdpbnNBcnJheVtjb3VudF07Ci0gICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBOU1N0cmluZyAqb3JpZ2luID0g
W1tvcmlnaW5zIG9iamVjdEF0SW5kZXg6aV0gZGF0YWJhc2VJZGVudGlmaWVyXTsKLSAgICAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9yaWdpbkpTKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpb3JpZ2luKSk7Ci0gICAgICAgIGpzT3JpZ2luc0FycmF5
W2ldID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgb3JpZ2luSlMuZ2V0KCkpOwotICAgIH0K
LQotICAgIHJldHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwganNPcmlnaW5z
QXJyYXksIE5VTEwpOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgcmV0
dXJuIG9yaWdpbnNBcnJheVRvSlMoY29udGV4dCwgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgb3JpZ2lu
c1dpdGhDYWNoZV0pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERh
dGFiYXNlcygpCi17Ci0gICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJhc2VN
YW5hZ2VyXSBkZWxldGVBbGxEYXRhYmFzZXNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQotewotICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIg
c2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdpbnNdOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91Ymxl
IGludGVydmFsKQotewotICAgIFtXZWJTdG9yYWdlTWFuYWdlciBzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWw6aW50ZXJ2YWxdOwotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9s
bGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAg
ICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0LCBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNo
YXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmlnaW5zXSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCi17
Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVUkwpKTsKLSAgICAKLSAgICBXZWJTZWN1cml0
eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKLSAgICBbW1dl
YlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkZWxldGVPcmlnaW46b3Jp
Z2luXTsKLSAgICBbb3JpZ2luIHJlbGVhc2VdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCi17Ci0gICAgV2ViQmFja0ZvcndhcmRMaXN0ICpi
YWNrRm9yd2FyZExpc3QgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBiYWNrRm9yd2FyZExpc3RdOwot
ICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW1tiYWNrRm9yd2FyZExpc3QgY3VycmVudEl0ZW1d
IHJldGFpbl07Ci0KLSAgICAvLyBXZSBjbGVhciB0aGUgaGlzdG9yeSBieSBzZXR0aW5nIHRoZSBi
YWNrL2ZvcndhcmQgbGlzdCdzIGNhcGFjaXR5IHRvIDAKLSAgICAvLyB0aGVuIHJlc3RvcmluZyBp
dCBiYWNrIGFuZCBhZGRpbmcgYmFjayB0aGUgY3VycmVudCBpdGVtLgotICAgIGludCBjYXBhY2l0
eSA9IFtiYWNrRm9yd2FyZExpc3QgY2FwYWNpdHldOwotICAgIFtiYWNrRm9yd2FyZExpc3Qgc2V0
Q2FwYWNpdHk6MF07Ci0gICAgW2JhY2tGb3J3YXJkTGlzdCBzZXRDYXBhY2l0eTpjYXBhY2l0eV07
Ci0gICAgW2JhY2tGb3J3YXJkTGlzdCBhZGRJdGVtOml0ZW1dOwotICAgIFtiYWNrRm9yd2FyZExp
c3QgZ29Ub0l0ZW06aXRlbV07Ci0gICAgW2l0ZW0gcmVsZWFzZV07Ci19Ci0KLUpTU3RyaW5nUmVm
IExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5h
bWUpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSkpOwotICAgIE5TU3RyaW5n
ICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7Ci0gICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilbbmFtZU5TIF93ZWJfZGVjb2RlSG9zdE5h
bWVdKTsKLX0KLQotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVk
SG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IG5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBuYW1lKSk7Ci0gICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQo
KTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtu
YW1lTlMgX3dlYl9lbmNvZGVIb3N0TmFtZV0pOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkaXNwbGF5KCkKLXsKLSAgICBkaXNwbGF5V2ViVmlldygpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCi17Ci0gICAgaWYgKCFbV2ViSGlzdG9y
eSBvcHRpb25hbFNoYXJlZEhpc3RvcnldKSB7Ci0gICAgICAgIFdlYkhpc3RvcnkgKmhpc3Rvcnkg
PSBbW1dlYkhpc3RvcnkgYWxsb2NdIGluaXRdOwotICAgICAgICBbV2ViSGlzdG9yeSBzZXRPcHRp
b25hbFNoYXJlZEhpc3Rvcnk6aGlzdG9yeV07Ci0gICAgICAgIFtoaXN0b3J5IHJlbGVhc2VdOwot
ICAgIH0KLX0KLQotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlKQoteyAgIAotICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3XSBfY29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOmNvbnRleHQgZm9yRWxlbWVudDp2YWx1ZV07Ci19Ci0KLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNU
ZXh0KCkgY29uc3QKLXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0
LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5GcmFtZSBfbGF5
ZXJUcmVlQXNUZXh0XSkpOwotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLUpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0Ci17Ci0gICAg
RE9NRWxlbWVudCAqZWxlbWVudCA9IFtET01FbGVtZW50IF9ET01FbGVtZW50RnJvbUpTQ29udGV4
dDpjb250ZXh0IHZhbHVlOm5vZGVPYmplY3RdOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChD
RlN0cmluZ1JlZilbZWxlbWVudCBfbWFya2VyVGV4dEZvckxpc3RJdGVtXSkpOwotICAgIHJldHVy
biBtYXJrZXJUZXh0OwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdl
TnVtYmVyKSBjb25zdAotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eVZh
bHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5G
cmFtZSBwYWdlUHJvcGVydHk6cHJvcGVydHlOYW1lOnBhZ2VOdW1iZXJdKSk7Ci0gICAgcmV0dXJu
IHByb3BlcnR5VmFsdWU7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQg
bWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKLXsKLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoKENGU3RyaW5nUmVmKVttYWluRnJhbWUgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHM6cGFn
ZU51bWJlcjp3aWR0aDpoZWlnaHQ6bWFyZ2luVG9wOm1hcmdpblJpZ2h0Om1hcmdpbkJvdHRvbTpt
YXJnaW5MZWZ0XSkpOwotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwotfQotCi1pbnQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMsIGZs
b2F0IHBhZ2VIZWlnaHRJblBpeGVscykKLXsKLSAgICByZXR1cm4gW21haW5GcmFtZSBudW1iZXJP
ZlBhZ2VzOnBhZ2VXaWR0aEluUGl4ZWxzOnBhZ2VIZWlnaHRJblBpeGVsc107Ci19Ci0KLWludCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMoKQotewotICAgIHJldHVybiBbW1ttYWluRnJhbWUgd2ViVmlld10gVUlEZWxlZ2F0
ZV0gbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNdOwotfQotCi1z
aXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQotewotICAg
IHJldHVybiBbW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gYWxsSXRlbXNdIGNv
dW50XTsKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENv
dW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gW1dlYldvcmtlcnNQcml2YXRlIHdvcmtlclRocmVh
ZENvdW50XTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBwbGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJtYWMi
KSk7Ci0gICAgcmV0dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGlu
Z0ZyYW1lICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1wKCk7
Ci0gICAgbV93YWl0VG9EdW1wID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpzdHJp
bmcgc3RyaW5nRnJvbUpTU3RyaW5nKEpTU3RyaW5nUmVmIGpzU3RyaW5nKQotewotICAgIHNpemVf
dCBtYXhCdWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGpzU3Ry
aW5nKTsKLSAgICBjaGFyKiB1dGY4QnVmZmVyID0gbmV3IGNoYXJbbWF4QnVmZmVyU2l6ZV07Ci0g
ICAgc2l6ZV90IGJ5dGVzV3JpdHRlblRvVVRGOEJ1ZmZlciA9IEpTU3RyaW5nR2V0VVRGOENTdHJp
bmcoanNTdHJpbmcsIHV0ZjhCdWZmZXIsIG1heEJ1ZmZlclNpemUpOwotICAgIHN0ZDo6c3RyaW5n
IHN0ZFN0cmluZyh1dGY4QnVmZmVyLCBieXRlc1dyaXR0ZW5Ub1VURjhCdWZmZXIgLSAxKTsgLy8g
Ynl0ZXNXcml0dGVuVG9VVEY4QnVmZmVyIGluY2x1ZGVzIGEgdHJhaWxpbmcgXDAgd2hpY2ggc3Rk
OjpzdHJpbmcgZG9lc24ndCBuZWVkLgotICAgIGRlbGV0ZVtdIHV0ZjhCdWZmZXI7Ci0gICAgcmV0
dXJuIHN0ZFN0cmluZzsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QgaW5kZXhPZlNlcGFyYXRv
ckFmdGVyRGlyZWN0b3J5TmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGlyZWN0b3J5TmFtZSwgY29u
c3Qgc3RkOjpzdHJpbmcmIGZ1bGxQYXRoKQotewotICAgIHN0ZDo6c3RyaW5nIHNlYXJjaEtleSA9
ICIvIiArIGRpcmVjdG9yeU5hbWUgKyAiLyI7Ci0gICAgc2l6ZV90IGluZGV4T2ZTZWFyY2hLZXlT
dGFydCA9IGZ1bGxQYXRoLnJmaW5kKHNlYXJjaEtleSk7Ci0gICAgaWYgKGluZGV4T2ZTZWFyY2hL
ZXlTdGFydCA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIC8vIENhbGxlcnMgZXhwZWN0IHRo
ZSByZXR1cm4gdmFsdWUgbm90IHRvIGVuZCBpbiAiLyIsIHNvIHNlYXJjaEtleS5sZW5ndGgoKSAt
IDEuCi0gICAgcmV0dXJuIGluZGV4T2ZTZWFyY2hLZXlTdGFydCArIHNlYXJjaEtleS5sZW5ndGgo
KSAtIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpzdHJpbmcgcmVzb3VyY2VSb290QWJzb2x1
dGVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgZXhwZWN0ZWRSb290TmFtZSkKLXsKLSAgICBjaGFyKiBsb2NhbFJlc291cmNlUm9vdEVudiA9
IGdldGVudigiTE9DQUxfUkVTT1VSQ0VfUk9PVCIpOwotICAgIGlmIChsb2NhbFJlc291cmNlUm9v
dEVudikKLSAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGxvY2FsUmVzb3VyY2VSb290RW52KTsK
LQotICAgIC8vIFRoaXMgZmFsbGJhY2sgYXBwcm9hY2ggd29ya3MgZm9yIG5vbi1odHRwIHRlc3Rz
IGFuZCBpcyB1c2VmdWwKLSAgICAvLyBpbiB0aGUgY2FzZSB3aGVuIHdlJ3JlIHJ1bm5pbmcgRFJU
IGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KLSAgICByZXR1cm4gdGVzdFBhdGhPclVS
TC5zdWJzdHIoMCwgaW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0b3J5TmFtZShleHBlY3RlZFJv
b3ROYW1lLCB0ZXN0UGF0aE9yVVJMKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiBsb2NhbFJlc291cmNlSlNTdHJpbmcpCi17Ci0gICAgLy8gVGhlIHBhc3NlZCBpbiBwYXRo
IHdpbGwgYmUgYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgcmVzb3VyY2Ugc3RhcnRpbmcKLSAgICAv
LyB3aXRoICIvdG1wIiBvciAiL3RtcC9MYXlvdXRUZXN0cyIsIG9wdGlvbmFsbHkgc3RhcnRpbmcg
d2l0aCB0aGUgZXhwbGljaXQgZmlsZTovLyBwcm90b2NvbC4KLSAgICAvLyAvdG1wIG1hcHMgdG8g
RFVNUFJFTkRFUlRSRUVfVEVNUCwgYW5kIC90bXAvTGF5b3V0VGVzdHMgbWFwcyB0byBMT0NBTF9S
RVNPVVJDRV9ST09ULgotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIHdvcmsgb24gYWxs
ICpuaXggcGxhdGZvcm1zIGFuZCBjYW4gYmUgbW92ZWQgaW50byBMYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAuCi0gICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRSb290TmFtZTsKLSAgICBzdGQ6OnN0cmlu
ZyBhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdDsKLSAgICBzdGQ6OnN0cmluZyBsb2NhbFJlc291
cmNlU3RyaW5nID0gc3RyaW5nRnJvbUpTU3RyaW5nKGxvY2FsUmVzb3VyY2VKU1N0cmluZyk7Ci0K
LSAgICBpZiAobG9jYWxSZXNvdXJjZVN0cmluZy5maW5kKCJMYXlvdXRUZXN0cyIpICE9IHN0ZDo6
c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIGV4cGVjdGVkUm9vdE5hbWUgPSAiTGF5b3V0VGVzdHMi
OwotICAgICAgICBhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdCA9IHJlc291cmNlUm9vdEFic29s
dXRlUGF0aChtX3Rlc3RQYXRoT3JVUkwsIGV4cGVjdGVkUm9vdE5hbWUpOwotICAgIH0gZWxzZSBp
ZiAobG9jYWxSZXNvdXJjZVN0cmluZy5maW5kKCJ0bXAiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykg
ewotICAgICAgICBleHBlY3RlZFJvb3ROYW1lID0gInRtcCI7Ci0gICAgICAgIGFic29sdXRlUGF0
aFRvUmVzb3VyY2VSb290ID0gZ2V0ZW52KCJEVU1QUkVOREVSVFJFRV9URU1QIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHBhdGhUb0xvY2FsUmVzb3Vy
Y2Ugd2FzIHBhc3NlZCBhIHBhdGggaXQgZG9lc24ndCBrbm93IGhvdyB0byBtYXAuCi0gICAgfQot
ICAgIEFTU0VSVCghYWJzb2x1dGVQYXRoVG9SZXNvdXJjZVJvb3QuZW1wdHkoKSk7Ci0gICAgc2l6
ZV90IGluZGV4T2ZTZXBhcmF0b3JBZnRlclJvb3ROYW1lID0gaW5kZXhPZlNlcGFyYXRvckFmdGVy
RGlyZWN0b3J5TmFtZShleHBlY3RlZFJvb3ROYW1lLCBsb2NhbFJlc291cmNlU3RyaW5nKTsKLSAg
ICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2UgPSBhYnNvbHV0ZVBhdGhU
b1Jlc291cmNlUm9vdCArIGxvY2FsUmVzb3VyY2VTdHJpbmcuc3Vic3RyKGluZGV4T2ZTZXBhcmF0
b3JBZnRlclJvb3ROYW1lKTsKLQotICAgIC8vIE5vdGU6IEl0J3MgaW1wb3J0YW50IHRoYXQgd2Ug
a2VlcCB0aGUgZmlsZTovLyBvciBodHRwIHRlc3RzIHdpbGwgZ2V0IGNvbmZ1c2VkLgotICAgIGlm
IChsb2NhbFJlc291cmNlU3RyaW5nLmZpbmQoImZpbGU6Ly8iKSAhPSBzdGQ6OnN0cmluZzo6bnBv
cykgewotICAgICAgICBBU1NFUlQoYWJzb2x1dGVQYXRoVG9Mb2NhbFJlc291cmNlWzBdID09ICcv
Jyk7Ci0gICAgICAgIGFic29sdXRlUGF0aFRvTG9jYWxSZXNvdXJjZSA9IHN0ZDo6c3RyaW5nKCJm
aWxlOi8vIikgKyBhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2U7Ci0gICAgfQotICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3Vy
Y2UuY19zdHIoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChK
U1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHVybCkpOwotICAgIE5TU3RyaW5nICp1cmxOUyA9IChOU1N0cmluZyAqKXVybENG
LmdldCgpOwotCi0gICAgTlNVUkwgKm5zdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsTlMg
cmVsYXRpdmVUb1VSTDpbW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gcmVzcG9uc2VdIFVSTF1dOwot
ICAgIE5TU3RyaW5nICpuc3VybFN0cmluZyA9IFtuc3VybCBhYnNvbHV0ZVN0cmluZ107Ci0KLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRvcHQsIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKFtuc3VybFN0cmluZyBVVEY4U3RyaW5nXSkpOwotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFy
Z2V0KSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5n
KGJvb2wgbmV3QWNjZXB0c0VkaXRpbmcpCi17Ci0gICAgWyhFZGl0aW5nRGVsZWdhdGUgKilbW21h
aW5GcmFtZSB3ZWJWaWV3XSBlZGl0aW5nRGVsZWdhdGVdIHNldEFjY2VwdHNFZGl0aW5nOm5ld0Fj
Y2VwdHNFZGl0aW5nXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlz
QWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCi17Ci0gICAgaWYgKGFsd2F5
c0FjY2VwdENvb2tpZXMgPT0gbV9hbHdheXNBY2NlcHRDb29raWVzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2Fsd2F5c0FjY2VwdENvb2tpZXMgPSBhbHdheXNBY2NlcHRDb29raWVzOwotICAg
IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgPSBhbHdheXNBY2Nl
cHRDb29raWVzID8gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIDogTlNIVFRQQ29va2ll
QWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgW1dlYlByZWZlcmVu
Y2VzIF9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Npb25Db29raWVBY2NlcHRQb2xpY3k6Y29v
a2llQWNjZXB0UG9saWN5XTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKLXsKLSAgICBbV2ViQXBw
bGljYXRpb25DYWNoZSBzZXRNYXhpbXVtU2l6ZTpzaXplXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcg
bG9uZyBxdW90YSkKLXsKLSAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1
cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vMTI3LjAuMC4xOjgwMDAiXV07Ci0gICAgW1tvcmlnaW4gYXBwbGljYXRpb25DYWNoZVF1b3Rh
TWFuYWdlcl0gc2V0UXVvdGE6cXVvdGFdOwotICAgIFtvcmlnaW4gcmVsZWFzZV07Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJv
b2wgZmxhZykKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkOmZsYWddOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5v
ZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKLXsKLSAgICBET01FbGVtZW50ICplbGVtZW50ID0g
W0RPTUVsZW1lbnQgX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0OmNvbnRleHQgdmFsdWU6bm9kZU9i
amVjdF07Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01I
VE1MSW5wdXRFbGVtZW50IGNsYXNzXV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFsoRE9NSFRN
TElucHV0RWxlbWVudCAqKWVsZW1lbnQgX3NldEF1dG9maWxsZWQ6YXV0b2ZpbGxlZF07Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wg
c2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKLXsKLSAgICBpZiAoc2V0RGVsZWdhdGUpIHsK
LSAgICAgICAgW3BvbGljeURlbGVnYXRlIHNldFBlcm1pc3NpdmU6cGVybWlzc2l2ZV07Ci0gICAg
ICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRlOnBvbGljeURlbGVnYXRl
XTsKLSAgICB9IGVsc2UKLSAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0UG9saWN5RGVs
ZWdhdGU6bmlsXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VR
dW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17ICAgIAotICAgIFdlYlNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8vIl1dOwotICAgIFtbb3JpZ2luIGRhdGFiYXNlUXVv
dGFNYW5hZ2VyXSBzZXRRdW90YTpxdW90YV07Ci0gICAgW29yaWdpbiByZWxlYXNlXTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKLXsKLSAgICBbW21haW5GcmFtZSB3
ZWJWaWV3XSBnb0JhY2tdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZl
cnNMb2FkaW5nKGJvb2wgZGVmZXJzKQotewotICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldERl
ZmVyc0NhbGxiYWNrczpkZWZlcnNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBK
U1N0cmluZ1JlZiBzY2hlbWUpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY2hlbWVD
RlN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzY2hlbWUpKTsKLSAgICBbV2ViVmlldyBfc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbjpm
b3JiaWRkZW4gZm9yVVJMU2NoZW1lOihOU1N0cmluZyAqKXNjaGVtZUNGU3RyaW5nLmdldCgpXTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9u
KGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEs
IGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQotewotICAg
IC8vIER1bXBSZW5kZXJUcmVlIGNvbmZpZ3VyZWQgdGhlIFdlYlZpZXcgdG8gdXNlIFdlYkRldmlj
ZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrLgotICAgIGlkPFdlYkRldmljZU9yaWVudGF0aW9uUHJv
dmlkZXI+IHByb3ZpZGVyID0gW1ttYWluRnJhbWUgd2ViVmlld10gX2RldmljZU9yaWVudGF0aW9u
UHJvdmlkZXJdOwotICAgIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrICptb2NrUHJv
dmlkZXIgPSBzdGF0aWNfY2FzdDxXZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jayo+KHBy
b3ZpZGVyKTsKLSAgICBXZWJEZXZpY2VPcmllbnRhdGlvbiAqb3JpZW50YXRpb24gPSBbW1dlYkRl
dmljZU9yaWVudGF0aW9uIGFsbG9jXSBpbml0V2l0aENhblByb3ZpZGVBbHBoYTpjYW5Qcm92aWRl
QWxwaGEgYWxwaGE6YWxwaGEgY2FuUHJvdmlkZUJldGE6Y2FuUHJvdmlkZUJldGEgYmV0YTpiZXRh
IGNhblByb3ZpZGVHYW1tYTpjYW5Qcm92aWRlR2FtbWEgZ2FtbWE6Z2FtbWFdOwotICAgIFttb2Nr
UHJvdmlkZXIgc2V0T3JpZW50YXRpb246b3JpZW50YXRpb25dOwotICAgIFtvcmllbnRhdGlvbiBy
ZWxlYXNlXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNj
dXJhY3kpCi17Ci0gICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiAqcG9zaXRpb24gPSBbW1dlYkdl
b2xvY2F0aW9uUG9zaXRpb24gYWxsb2NdIGluaXRXaXRoVGltZXN0YW1wOmN1cnJlbnRUaW1lKCkg
bGF0aXR1ZGU6bGF0aXR1ZGUgbG9uZ2l0dWRlOmxvbmdpdHVkZSBhY2N1cmFjeTphY2N1cmFjeV07
Ci0gICAgW1tNb2NrR2VvbG9jYXRpb25Qcm92aWRlciBzaGFyZWRdIHNldFBvc2l0aW9uOnBvc2l0
aW9uXTsKLSAgICBbcG9zaXRpb24gcmVsZWFzZV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNz
YWdlKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWVzc2FnZUNGKEFkb3B0Q0YsIEpT
U3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1lc3NhZ2UpKTsKLSAgICBO
U1N0cmluZyAqbWVzc2FnZU5TID0gKE5TU3RyaW5nICopbWVzc2FnZUNGLmdldCgpOwotICAgIE5T
RXJyb3IgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldlYktpdEVycm9yRG9tYWlu
IGNvZGU6Y29kZSB1c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0Om1l
c3NhZ2VOUyBmb3JLZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV1dOwotICAgIFtbTW9ja0dl
b2xvY2F0aW9uUHJvdmlkZXIgc2hhcmVkXSBzZXRFcnJvcjplcnJvcl07Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQot
ewotICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci0gICAgW1tbbWFp
bkZyYW1lIHdlYlZpZXddIFVJRGVsZWdhdGVdIGRpZFNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Np
b25dOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRS
ZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYg
bGFuZ3VhZ2UpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxh
eW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3Bl
ZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJv
b2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKLXsKLSAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCA8cmRh
cjovL3Byb2JsZW0vNjQ4MDEwOD4KLSAgICBzdGF0aWMgV2ViSWNvbkRhdGFiYXNlICpzaGFyZWRX
ZWJJY29uRGF0YWJhc2UgPSBOVUxMOwotICAgIGlmICghc2hhcmVkV2ViSWNvbkRhdGFiYXNlKSB7
Ci0gICAgICAgIGlmICghaWNvbkRhdGFiYXNlRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgc2hhcmVkV2ViSWNvbkRhdGFiYXNlID0gW1dlYkljb25EYXRhYmFzZSBzaGFyZWRJ
Y29uRGF0YWJhc2VdOwotICAgICAgICBpZiAoW3NoYXJlZFdlYkljb25EYXRhYmFzZSBpc0VuYWJs
ZWRdID09IGljb25EYXRhYmFzZUVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIFtzaGFyZWRXZWJJY29uRGF0YWJhc2Ugc2V0RW5hYmxlZDppY29uRGF0YWJhc2VFbmFibGVk
XTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJl
c3BvbmRlcihib29sIGZsYWcpCi17Ci0gICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW21haW5G
cmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgCi0gICAgTlNSZXNwb25kZXIgKmZp
cnN0UmVzcG9uZGVyID0gZmxhZyA/IGRvY3VtZW50VmlldyA6IG5pbDsKLSAgICBbW1ttYWluRnJh
bWUgd2ViVmlld10gd2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6Zmlyc3RSZXNwb25kZXJdOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
KGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmll
d10gcHJlZmVyZW5jZXNdIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQ6cHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JF
bmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVy
ZW5jZXNdIHNldFhTU0F1ZGl0b3JFbmFibGVkOmVuYWJsZWRdOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEZyYW1lRmxhdHRlbmlu
Z0VuYWJsZWQ6ZW5hYmxlZF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgW1tbbWFpbkZyYW1l
IHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQ6ZW5hYmxl
ZF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmll
d10gcHJlZmVyZW5jZXNdIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOmVuYWJs
ZWRdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NG
cm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQotewotICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBw
cmVmZXJlbmNlc10gc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzOmVuYWJsZWRdOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29s
IHBvcHVwQmxvY2tpbmdFbmFibGVkKQotewotICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVm
ZXJlbmNlc10gc2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseTohcG9wdXBC
bG9ja2luZ0VuYWJsZWRdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVn
aW5zRW5hYmxlZChib29sIHBsdWdpbnNFbmFibGVkKQotewotICAgIFtbW21haW5GcmFtZSB3ZWJW
aWV3XSBwcmVmZXJlbmNlc10gc2V0UGx1Z0luc0VuYWJsZWQ6cGx1Z2luc0VuYWJsZWRdOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQ6ZW5hYmxlZF07Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRBdXRvbWF0aWNMaW5r
RGV0ZWN0aW9uRW5hYmxlZDplbmFibGVkXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQotewotICAgIFtb
bWFpbkZyYW1lIHdlYlZpZXddIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50czpjeWNsZXNd
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRp
YmlsaXR5TW9kZShib29sIGZsYWcpCi17Ci0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gX3NldERh
c2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yVXNlQmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSB0bzpmbGFnXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNl
clN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0
YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpmbGFnXTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0
cmluZ1JlZiBwYXRoKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aENGKEFkb3B0
Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGgpKTsKLSAg
ICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopcGF0aENGLmdl
dCgpXTsKLSAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb246dXJsXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmpl
Y3QsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbRE9N
RWxlbWVudCBfRE9NRWxlbWVudEZyb21KU0NvbnRleHQ6Y29udGV4dCB2YWx1ZTpub2RlT2JqZWN0
XTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxJ
bnB1dEVsZW1lbnQgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB2YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9j
YXRvckRlZmF1bHQsIHZhbHVlKSk7Ci0gICAgWyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVu
dCBfc2V0VmFsdWVGb3JVc2VyOihOU1N0cmluZyAqKXZhbHVlQ0YuZ2V0KCldOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1Jl
ZiBtb2RlKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCi17Ci0gICAgW1tXZWJQcmVmZXJlbmNl
cyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk6Tk9dOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVz
dHMoKQotewotICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF9kaXNwYXRjaFBlbmRpbmdMb2FkUmVx
dWVzdHNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVu
Y2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGtleUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtleSkpOwotICAgIE5TU3RyaW5nICprZXlOUyA9IChOU1N0cmluZyAqKWtl
eUNGLmdldCgpOwotCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGKEFkb3B0Q0Ys
IEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHZhbHVlKSk7Ci0gICAg
TlNTdHJpbmcgKnZhbHVlTlMgPSAoTlNTdHJpbmcgKil2YWx1ZUNGLmdldCgpOwotCi0gICAgW1tX
ZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBfc2V0UHJlZmVyZW5jZUZvclRlc3RX
aXRoVmFsdWU6dmFsdWVOUyBmb3JLZXk6a2V5TlNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQotewotICAgIFtXZWJIaXN0b3J5IF9yZW1v
dmVBbGxWaXNpdGVkTGlua3NdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
ZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKLXsKLSAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybFN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZygwLCBqc1VSTCkpOwotICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24odXJsU3RyaW5nLmdldCgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQotewotICAgIDo6c2V0UGVyc2lzdGVudFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oMCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCi17Ci0gICAgbV93aW5kb3dJc0tleSA9
IHdpbmRvd0lzS2V5OwotICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF91cGRhdGVBY3RpdmVTdGF0
ZV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0U21hcnRJ
bnNlcnREZWxldGVFbmFibGVkOmZsYWddOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBb
W21haW5GcmFtZSB3ZWJWaWV3XSBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkOmZs
YWddOwotfQotCi1zdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgd2FpdFRvRHVtcFdhdGNoZG9n
SW50ZXJ2YWwgPSAzMC4wOwotCi1zdGF0aWMgdm9pZCB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJl
ZChDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCogaW5mbykKLXsKLSAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCi17
Ci0gICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKLSAgICBpZiAobV93YWl0VG9EdW1w
ICYmIHNob3VsZFNldFdhaXRUb0R1bXBXYXRjaGRvZygpKQotICAgICAgICBzZXRXYWl0VG9EdW1w
V2F0Y2hkb2coQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCkgKyB3YWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCwgMCwgMCwg
MCwgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQsIE5VTEwpKTsKLX0KLQotaW50IExheW91dFRl
c3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCi17Ci0gICAgcmV0dXJuIENGQXJyYXlHZXRDb3Vu
dChvcGVuV2luZG93c1JlZik7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1l
bnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBqc1N0cmluZykK
LXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNTdHJpbmcpKTsKLSAgICBOU1N0cmluZyAq
aWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7Ci0gICAgCi0gICAgRE9NRWxlbWVudCAqZWxl
bWVudCA9IFtbbWFpbkZyYW1lIERPTURvY3VtZW50XSBnZXRFbGVtZW50QnlJZDppZE5TXTsKLSAg
ICBpZCByZXAgPSBbW21haW5GcmFtZSBkYXRhU291cmNlXSByZXByZXNlbnRhdGlvbl07Ci0gICAg
Ci0gICAgaWYgKFtyZXAgY2xhc3NdID09IFtXZWJIVE1MUmVwcmVzZW50YXRpb24gY2xhc3NdKQot
ICAgICAgICByZXR1cm4gWyhXZWJIVE1MUmVwcmVzZW50YXRpb24gKilyZXAgZWxlbWVudERvZXNB
dXRvQ29tcGxldGU6ZWxlbWVudF07Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5n
UmVmIHZhbHVlKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0Ys
IEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWUpKTsKLSAgICBO
U1N0cmluZyAqbmFtZU5TID0gKE5TU3RyaW5nICopbmFtZUNGLmdldCgpOwotCi0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHZhbHVlKSk7Ci0gICAgTlNTdHJpbmcgKnZhbHVlTlMgPSAoTlNT
dHJpbmcgKil2YWx1ZUNGLmdldCgpOwotCi0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gX2V4ZWN1
dGVDb3JlQ29tbWFuZEJ5TmFtZTpuYW1lTlMgdmFsdWU6dmFsdWVOU107Ci19Ci0KLWJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3Ry
aW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQotewotICAgIFdlYkZpbmRP
cHRpb25zIG9wdGlvbnMgPSAwOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0
aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0
aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAg
aWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRhcmdldENGU3RyaW5nKEFk
b3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkp
OwotCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQotICAgICAgICBpZiAoSlNT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0
aXZlIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0
aXZlOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlv
bk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2Vi
RmluZE9wdGlvbnNBdFdvcmRTdGFydHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFzV29y
ZFN0YXJ0IikpCi0gICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRpb25zVHJlYXRNZWRp
YWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIpKQotICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkczsKLSAgICAgICAgZWxzZSBpZiAoSlNT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIp
KQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Ci0gICAg
ICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQo
KSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViRmluZE9w
dGlvbnNTdGFydEluU2VsZWN0aW9uOwotICAgIH0KLQotICAgIHJldHVybiBbW21haW5GcmFtZSB3
ZWJWaWV3XSBmaW5kU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldENGU3RyaW5nLmdldCgpIG9wdGlv
bnM6b3B0aW9uc107Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9k
ZWwoaW50IGNhY2hlTW9kZWwpCi17Ci0gICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZl
cmVuY2VzXSBzZXRDYWNoZU1vZGVsOmNhY2hlTW9kZWxdOwotfQotCi1ib29sIExheW91dFRlc3RD
b250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSkpOwotICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNT
dHJpbmcgKiluYW1lQ0YuZ2V0KCk7Ci0KLSAgICAvLyBBY2NlcHQgY29tbWFuZCBzdHJpbmdzIHdp
dGggY2FwaXRhbCBsZXR0ZXJzIGZvciBmaXJzdCBsZXR0ZXIgd2l0aG91dCB0cmFpbGluZyBjb2xv
bi4KLSAgICBpZiAoIVtuYW1lTlMgaGFzU3VmZml4OkAiOiJdICYmIFtuYW1lTlMgbGVuZ3RoXSkg
ewotICAgICAgICBuYW1lTlMgPSBbW1tbbmFtZU5TIHN1YnN0cmluZ1RvSW5kZXg6MV0gbG93ZXJj
YXNlU3RyaW5nXQotICAgICAgICAgICAgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6W25hbWVOUyBz
dWJzdHJpbmdGcm9tSW5kZXg6MV1dCi0gICAgICAgICAgICBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
ZzpAIjoiXTsKLSAgICB9Ci0KLSAgICBTRUwgc2VsZWN0b3IgPSBOU1NlbGVjdG9yRnJvbVN0cmlu
ZyhuYW1lTlMpOwotICAgIFJldGFpblB0cjxDb21tYW5kVmFsaWRhdGlvblRhcmdldD4gdGFyZ2V0
KEFkb3B0TlMsIFtbQ29tbWFuZFZhbGlkYXRpb25UYXJnZXQgYWxsb2NdIGluaXRXaXRoQWN0aW9u
OnNlbGVjdG9yXSk7Ci0gICAgaWQgdmFsaWRhdG9yID0gW05TQXBwIHRhcmdldEZvckFjdGlvbjpz
ZWxlY3RvciB0bzpbbWFpbkZyYW1lIHdlYlZpZXddIGZyb206dGFyZ2V0LmdldCgpXTsKLSAgICBp
ZiAoIXZhbGlkYXRvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghW3ZhbGlkYXRv
ciByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFbdmFsaWRhdG9yIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodmFsaWRhdGVV
c2VySW50ZXJmYWNlSXRlbTopXSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFt2
YWxpZGF0b3IgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTp0YXJnZXQuZ2V0KCldOwotfQotCi1i
b29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYg
ZWxlbWVudElkKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaWRDRihBZG9wdENGLCBK
U1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlbGVtZW50SWQpKTsKLSAg
ICBOU1N0cmluZyAqaWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7Ci0gICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgYW5pbWF0aW9uTmFtZSkpOwotICAgIE5TU3RyaW5nICpuYW1lTlMgPSAo
TlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7Ci0gICAgCi0gICAgcmV0dXJuIFttYWluRnJhbWUgX3Bh
dXNlQW5pbWF0aW9uOm5hbWVOUyBvbk5vZGU6W1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIGdldEVs
ZW1lbnRCeUlkOmlkTlNdIGF0VGltZTp0aW1lXTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHBy
b3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgZWxlbWVudElkKSk7Ci0gICAgTlNTdHJpbmcgKmlkTlMgPSAo
TlNTdHJpbmcgKilpZENGLmdldCgpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNG
KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHByb3Bl
cnR5TmFtZSkpOwotICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0
KCk7Ci0gICAgCi0gICAgcmV0dXJuIFttYWluRnJhbWUgX3BhdXNlVHJhbnNpdGlvbk9mUHJvcGVy
dHk6bmFtZU5TIG9uTm9kZTpbW21haW5GcmFtZSBET01Eb2N1bWVudF0gZ2V0RWxlbWVudEJ5SWQ6
aWROU10gYXRUaW1lOnRpbWVdOwotfQotCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21haW5GcmFt
ZSBfbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKLXsKLSAgICBzZXRXYWl0VG9EdW1wKHRydWUp
OwotICAgIFtwb2xpY3lEZWxlZ2F0ZSBzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOnRoaXNdOwot
ICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRlOnBvbGljeURlbGVnYXRl
XTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlv
blByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VPcmln
aW5DRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBz
b3VyY2VPcmlnaW4pKTsKLSAgICBOU1N0cmluZyAqc291cmNlT3JpZ2luTlMgPSAoTlNTdHJpbmcg
Kilzb3VyY2VPcmlnaW5DRi5nZXQoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3Rv
Y29sQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZGVzdGluYXRpb25Qcm90b2NvbCkpOwotICAgIE5TU3RyaW5nICpkZXN0aW5hdGlvblByb3RvY29s
TlMgPSAoTlNTdHJpbmcgKilwcm90b2NvbENGLmdldCgpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gaG9zdENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGRlc3RpbmF0aW9uSG9zdCkpOwotICAgIE5TU3RyaW5nICpkZXN0aW5hdGlvbkhvc3RO
UyA9IChOU1N0cmluZyAqKWhvc3RDRi5nZXQoKTsKLSAgICBbV2ViVmlldyBfYWRkT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnlXaXRoU291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbk5TIGRlc3RpbmF0
aW9uUHJvdG9jb2w6ZGVzdGluYXRpb25Qcm90b2NvbE5TIGRlc3RpbmF0aW9uSG9zdDpkZXN0aW5h
dGlvbkhvc3ROUyBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluczphbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWluc107Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
c291cmNlT3JpZ2luQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgc291cmNlT3JpZ2luKSk7Ci0gICAgTlNTdHJpbmcgKnNvdXJjZU9yaWdpbk5TID0g
KE5TU3RyaW5nICopc291cmNlT3JpZ2luQ0YuZ2V0KCk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBwcm90b2NvbENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGRlc3RpbmF0aW9uUHJvdG9jb2wpKTsKLSAgICBOU1N0cmluZyAqZGVzdGluYXRp
b25Qcm90b2NvbE5TID0gKE5TU3RyaW5nICopcHJvdG9jb2xDRi5nZXQoKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGhvc3RDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBkZXN0aW5hdGlvbkhvc3QpKTsKLSAgICBOU1N0cmluZyAqZGVzdGlu
YXRpb25Ib3N0TlMgPSAoTlNTdHJpbmcgKilob3N0Q0YuZ2V0KCk7Ci0gICAgW1dlYlZpZXcgX3Jl
bW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5V2l0aFNvdXJjZU9yaWdpbjpzb3VyY2VPcmln
aW5OUyBkZXN0aW5hdGlvblByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9jb2xOUyBkZXN0aW5hdGlv
bkhvc3Q6ZGVzdGluYXRpb25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnM6YWxsb3dE
ZXN0aW5hdGlvblN1YmRvbWFpbnNdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBv
bGljeSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3Rh
cnQsIGJvb2wgYWxsRnJhbWVzKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc291cmNl
Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291
cmNlKSk7Ci0gICAgTlNTdHJpbmcgKnNvdXJjZU5TID0gKE5TU3RyaW5nICopc291cmNlQ0YuZ2V0
KCk7Ci0gICAgW1dlYlZpZXcgX2FkZFVzZXJTY3JpcHRUb0dyb3VwOkAib3JnLndlYmtpdC5EdW1w
UmVuZGVyVHJlZSIgd29ybGQ6W1dlYlNjcmlwdFdvcmxkIHdvcmxkXSBzb3VyY2U6c291cmNlTlMg
dXJsOm5pbCB3aGl0ZWxpc3Q6bmlsIGJsYWNrbGlzdDpuaWwgaW5qZWN0aW9uVGltZToocnVuQXRT
dGFydCA/IFdlYkluamVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYkluamVjdEF0RG9jdW1lbnRFbmQp
IGluamVjdGVkRnJhbWVzOihhbGxGcmFtZXMgPyBXZWJJbmplY3RJbkFsbEZyYW1lcyA6IFdlYklu
amVjdEluVG9wRnJhbWVPbmx5KV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCi17Ci0g
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2UpKTsKLSAgICBOU1N0cmluZyAqc291
cmNlTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VDRi5nZXQoKTsKLSAgICBbV2ViVmlldyBfYWRkVXNl
clN0eWxlU2hlZXRUb0dyb3VwOkAib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIgd29ybGQ6W1dl
YlNjcmlwdFdvcmxkIHdvcmxkXSBzb3VyY2U6c291cmNlTlMgdXJsOm5pbCB3aGl0ZWxpc3Q6bmls
IGJsYWNrbGlzdDpuaWwgaW5qZWN0ZWRGcmFtZXM6KGFsbEZyYW1lcyA/IFdlYkluamVjdEluQWxs
RnJhbWVzIDogV2ViSW5qZWN0SW5Ub3BGcmFtZU9ubHkpXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkOmVuYWJsZWRdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3lu
Y2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgW1tbbWFp
bkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZDplbmFibGVkXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dl
Ykluc3BlY3RvcigpCi17Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gc2hv
dzpuaWxdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rv
cigpCi17Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gY2xvc2U6bmlsXTsK
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihs
b25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgc2NyaXB0KSk7Ci0gICAgTlNTdHJpbmcgKnNjcmlwdE5TID0gKE5TU3RyaW5nICop
c2NyaXB0Q0YuZ2V0KCk7Ci0gICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gZXZh
bHVhdGVJbkZyb250ZW5kOm5pbCBjYWxsSWQ6Y2FsbElkIHNjcmlwdDpzY3JpcHROU107Ci19Ci0K
LXR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiA+IFdv
cmxkTWFwOwotc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCi17Ci0gICAgc3RhdGljIFdvcmxk
TWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXVuc2lnbmVk
IHdvcmxkSURGb3JXb3JsZChXZWJTY3JpcHRXb3JsZCAqd29ybGQpCi17Ci0gICAgV29ybGRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7Ci0gICAgZm9yIChXb3JsZE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVy
biBpdC0+Zmlyc3Q7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUo
dW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBz
Y3JpcHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNjcmlwdCkpOwotICAgIE5TU3RyaW5nICpz
Y3JpcHROUyA9IChOU1N0cmluZyAqKXNjcmlwdENGLmdldCgpOwotCi0gICAgLy8gQSB3b3JsZElE
IG9mIDAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIGEgbmV3IHdvcmxkLiBBbnkgb3RoZXIgd29ybGRJ
RCBjb3JyZXNwb25kcyB0byBhIHdvcmxkCi0gICAgLy8gdGhhdCBpcyBjcmVhdGVkIG9uY2UgYW5k
IGNhY2hlZCBmb3JldmVyLgotICAgIFdlYlNjcmlwdFdvcmxkICp3b3JsZDsKLSAgICBpZiAoIXdv
cmxkSUQpCi0gICAgICAgIHdvcmxkID0gW1dlYlNjcmlwdFdvcmxkIHdvcmxkXTsKLSAgICBlbHNl
IHsKLSAgICAgICAgUmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiYgd29ybGRTbG90ID0gd29ybGRN
YXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgaWYgKCF3b3Js
ZFNsb3QpCi0gICAgICAgICAgICB3b3JsZFNsb3QuYWRvcHROUyhbW1dlYlNjcmlwdFdvcmxkIGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIHdvcmxkID0gd29ybGRTbG90LmdldCgpOwotICAgIH0KLQot
ICAgIFttYWluRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOnNj
cmlwdE5TIHdpdGhHbG9iYWxPYmplY3Q6Z2xvYmFsT2JqZWN0IGluU2NyaXB0V29ybGQ6d29ybGRd
OwotfQotCi1AaW50ZXJmYWNlIEFQSVRlc3REZWxlZ2F0ZSA6IE5TT2JqZWN0Ci17Ci0gICAgYm9v
bCogbV9jb25kaXRpb247Ci19Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBBUElUZXN0RGVsZWdh
dGUKLQotLSAoaWQpaW5pdFdpdGhDb21wbGV0aW9uQ29uZGl0aW9uOihib29sKiljb25kaXRpb24K
LXsKLSAgICBbc3VwZXIgaW5pdF07Ci0gICAgQVNTRVJUKGNvbmRpdGlvbik7Ci0gICAgbV9jb25k
aXRpb24gPSBjb25kaXRpb247Ci0gICAgKm1fY29uZGl0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGYWlsTG9h
ZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCi17
Ci0gICAgcHJpbnRmKCJBUEkgVGVzdCBsb2FkIGZhaWxlZFxuIik7Ci0gICAgKm1fY29uZGl0aW9u
ID0gdHJ1ZTsKLX0KLQotLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZhaWxQ
cm92aXNpb25hbExvYWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvciBmb3JGcmFtZTooV2ViRnJh
bWUgKilmcmFtZQotewotICAgIHByaW50ZigiQVBJIFRlc3QgbG9hZCBmYWlsZWQgcHJvdmlzaW9u
YWxcbiIpOwotICAgICptX2NvbmRpdGlvbiA9IHRydWU7Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciBkaWRGaW5pc2hMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUK
LXsKLSAgICBwcmludGYoIkFQSSBUZXN0IGxvYWQgc3VjY2VlZGVkXG4iKTsKLSAgICAqbV9jb25k
aXRpb24gPSB0cnVlOwotfQotCi1AZW5kCi0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFw
aVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3Ry
aW5nUmVmIGJhc2VVUkwpCi17Ci0gICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0
b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dXRmOERhdGFDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCB1dGY4RGF0YSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gYmFzZVVSTENGKEFk
b3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhc2VVUkwp
KTsKLSAgICAKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TWmVyb1JlY3QgZnJhbWVOYW1lOkAiIiBncm91cE5hbWU6QCIiXTsKLQotICAgIGJv
b2wgZG9uZSA9IGZhbHNlOwotICAgIEFQSVRlc3REZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW0FQSVRl
c3REZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhDb21wbGV0aW9uQ29uZGl0aW9uOiZkb25lXTsKLSAg
ICBbd2ViVmlldyBzZXRGcmFtZUxvYWREZWxlZ2F0ZTpkZWxlZ2F0ZV07Ci0KLSAgICBbW3dlYlZp
ZXcgbWFpbkZyYW1lXSBsb2FkRGF0YTpbKE5TU3RyaW5nICopdXRmOERhdGFDRi5nZXQoKSBkYXRh
VXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gTUlNRVR5cGU6QCJ0ZXh0L2h0bWwi
IHRleHRFbmNvZGluZ05hbWU6QCJ1dGYtOCIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzoo
TlNTdHJpbmcgKiliYXNlVVJMQ0YuZ2V0KCldXTsKLSAgICAKLSAgICB3aGlsZSAoIWRvbmUpIHsK
LSAgICAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFs
bG9jXSBpbml0XTsKLSAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6
TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV07Ci0g
ICAgICAgIFtwb29sIHJlbGVhc2VdOwotICAgIH0KLSAgICAgICAgCi0gICAgW3dlYlZpZXcgY2xv
c2VdOwotICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwotICAgIFtkZWxlZ2F0ZSByZWxlYXNlXTsKLSAg
ICBbcG9vbCByZWxlYXNlXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVz
dEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKLXsKLSAgICBXZWJWaWV3ICp2aWV3ID0gW21h
aW5GcmFtZSB3ZWJWaWV3XTsKLSAgICBbdmlldyBnb1RvQmFja0ZvcndhcmRJdGVtOltbdmlldyBi
YWNrRm9yd2FyZExpc3RdIGN1cnJlbnRJdGVtXV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sIGVkaXRhYmxlKQotewotICAgIFdlYlZpZXcg
KnZpZXcgPSBbbWFpbkZyYW1lIHdlYlZpZXddOwotICAgIFt2aWV3IHNldEVkaXRhYmxlOmVkaXRh
YmxlXTsKLX0KLQotc3RhdGljIE5TU3RyaW5nICpTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2Rl
ID0gQCJEdW1wUmVuZGVyVHJlZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUiOwotCi0jaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDYwCi1AcHJvdG9jb2wgTlNVUkxD
b25uZWN0aW9uRGVsZWdhdGUgPE5TT2JqZWN0PgotQGVuZAotI2VuZGlmCi0KLUBpbnRlcmZhY2Ug
U3luY2hyb25vdXNMb2FkZXIgOiBOU09iamVjdCA8TlNVUkxDb25uZWN0aW9uRGVsZWdhdGU+Ci17
Ci0gICAgTlNTdHJpbmcgKm1fdXNlcm5hbWU7Ci0gICAgTlNTdHJpbmcgKm1fcGFzc3dvcmQ7Ci0g
ICAgQk9PTCBtX2lzRG9uZTsKLX0KLSsgKHZvaWQpbWFrZVJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAq
KXJlcXVlc3Qgd2l0aFVzZXJuYW1lOihOU1N0cmluZyAqKXVzZXJuYW1lIHBhc3N3b3JkOihOU1N0
cmluZyAqKXBhc3N3b3JkOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gU3luY2hyb25vdXNMb2Fk
ZXIgOiBOU09iamVjdAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW21fdXNlcm5hbWUgcmVsZWFz
ZV07Ci0gICAgW21fcGFzc3dvcmQgcmVsZWFzZV07Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLS0gKEJPT0wpY29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClj
b25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5n
ZQotewotICAgIGlmIChbY2hhbGxlbmdlIHByZXZpb3VzRmFpbHVyZUNvdW50XSA9PSAwKSB7Ci0g
ICAgICAgIFJldGFpblB0cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRpYWwoQWRvcHROUywgW1tO
U1VSTENyZWRlbnRpYWwgYWxsb2NdICBpbml0V2l0aFVzZXI6bV91c2VybmFtZSBwYXNzd29yZDpt
X3Bhc3N3b3JkIHBlcnNpc3RlbmNlOk5TVVJMQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lv
bl0pOwotICAgICAgICBbW2NoYWxsZW5nZSBzZW5kZXJdIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlh
bC5nZXQoKSBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2VdOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIFtbY2hhbGxlbmdlIHNlbmRlcl0gY2FuY2VsQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6Y2hhbGxlbmdlXTsKLX0KLQotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgot
ewotICAgIHByaW50ZigiU3luY2hyb25vdXNMb2FkZXIgZmFpbGVkOiAlc1xuIiwgW1tlcnJvciBk
ZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10pOwotICAgIG1faXNEb25lID0gWUVTOwotfQotCi0tICh2
b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0
aW9uCi17Ci0gICAgbV9pc0RvbmUgPSBZRVM7Ci19Ci0KLSsgKHZvaWQpbWFrZVJlcXVlc3Q6KE5T
VVJMUmVxdWVzdCAqKXJlcXVlc3Qgd2l0aFVzZXJuYW1lOihOU1N0cmluZyAqKXVzZXJuYW1lIHBh
c3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkCi17Ci0gICAgQVNTRVJUKCFbW3JlcXVlc3QgVVJM
XSB1c2VyXSk7Ci0gICAgQVNTRVJUKCFbW3JlcXVlc3QgVVJMXSBwYXNzd29yZF0pOwotCi0gICAg
U3luY2hyb25vdXNMb2FkZXIgKmRlbGVnYXRlID0gW1tTeW5jaHJvbm91c0xvYWRlciBhbGxvY10g
aW5pdF07Ci0gICAgZGVsZWdhdGUtPm1fdXNlcm5hbWUgPSBbdXNlcm5hbWUgY29weV07Ci0gICAg
ZGVsZWdhdGUtPm1fcGFzc3dvcmQgPSBbcGFzc3dvcmQgY29weV07Ci0KLSAgICBOU1VSTENvbm5l
Y3Rpb24gKmNvbm5lY3Rpb24gPSBbW05TVVJMQ29ubmVjdGlvbiBhbGxvY10gaW5pdFdpdGhSZXF1
ZXN0OnJlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUgc3RhcnRJbW1lZGlhdGVseTpOT107Ci0gICAg
W2Nvbm5lY3Rpb24gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0g
Zm9yTW9kZTpTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlXTsKLSAgICBbY29ubmVjdGlvbiBz
dGFydF07Ci0gICAgCi0gICAgd2hpbGUgKCFkZWxlZ2F0ZS0+bV9pc0RvbmUpCi0gICAgICAgIFtb
TlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBydW5Nb2RlOlN5bmNocm9ub3VzTG9hZGVyUnVuTG9v
cE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVdXTsKLQotICAgIFtjb25uZWN0
aW9uIGNhbmNlbF07Ci0gICAgCi0gICAgW2Nvbm5lY3Rpb24gcmVsZWFzZV07Ci0gICAgW2RlbGVn
YXRlIHJlbGVhc2VdOwotfQotCi1AZW5kCi0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1
dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwg
SlNTdHJpbmdSZWYgcGFzc3dvcmQpCi17Ci0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83ODgw
Njk5Pi4KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwNjAKLSAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybFN0cmluZ0NGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXNlcm5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCB1c2VybmFtZSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGFzc3dv
cmRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBw
YXNzd29yZCkpOwotCi0gICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVxdWVzdChBZG9wdE5T
LCBbW05TVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
KE5TU3RyaW5nICopdXJsU3RyaW5nQ0YuZ2V0KCldXSk7Ci0KLSAgICBbU3luY2hyb25vdXNMb2Fk
ZXIgbWFrZVJlcXVlc3Q6cmVxdWVzdC5nZXQoKSB3aXRoVXNlcm5hbWU6KE5TU3RyaW5nICopdXNl
cm5hbWVDRi5nZXQoKSBwYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZENGLmdldCgpXTsKLSNl
bmRpZgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKLXsKLSAg
ICBbTlNBcHAgYWJvcnRNb2RhbF07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6ZSkKLXsKLSAgICBbV2ViVmlldyBfc2V0
TG9hZFJlc291cmNlc1NlcmlhbGx5OnNlcmlhbGl6ZV07Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRl
cnZhbCkKLXsKLSAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0TWluaW11bVRpbWVySW50ZXJ2
YWw6bWluaW11bVRpbWVySW50ZXJ2YWxdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbk5hbWUpCi17Ci0jaWYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDYwCi0gICAgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uTmFtZSwgImx0ciIpKQotICAgICAgICBbW21haW5G
cmFtZSB3ZWJWaWV3XSBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDowXTsKLSAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVjdGlvbk5hbWUsICJy
dGwiKSkKLSAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gbWFrZUJhc2VXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ6MF07Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNlbmRpZgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1
dEZpZWxkKCkKLXsKLSAgICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0gW1tOU1RleHRGaWVsZCBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDEwMCwgMjApXTsKLSAgICB0ZXh0
RmllbGQudGFnID0gMTsKLSAgICBbW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10gY29udGVu
dFZpZXddIGFkZFN1YnZpZXc6dGV4dEZpZWxkXTsKLSAgICBbdGV4dEZpZWxkIHJlbGVhc2VdOwot
ICAgIAotICAgIFt0ZXh0RmllbGQgc2V0TmV4dEtleVZpZXc6W21haW5GcmFtZSB3ZWJWaWV3XV07
Ci0gICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0TmV4dEtleVZpZXc6dGV4dEZpZWxkXTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17
Ci0gICAgTlNWaWV3KiB0ZXh0RmllbGQgPSBbW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10g
Y29udGVudFZpZXddIHZpZXdXaXRoVGFnOjFdOwotICAgIGlmICh0ZXh0RmllbGQpIHsKLSAgICAg
ICAgW3RleHRGaWVsZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgZm9jdXNXZWJWaWV3
KCk7Ci0gICAgfQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXco
KQotewotICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJzdFJlc3BvbmRl
cjpbbWFpbkZyYW1lIHdlYlZpZXddXTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCi17Ci0gICAg
W1ttYWluRnJhbWUgd2ViVmlld10gX3NldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcjpiYWNraW5n
U2NhbGVGYWN0b3JdOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURl
c2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VW
aXNpYmlsaXR5KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5k
V2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0
cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCi19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUGl4ZWxEdW1wU3VwcG9y
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUGl4ZWxEdW1w
U3VwcG9ydE1hYy5tbQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL1BpeGVsRHVtcFN1cHBvcnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcg
QEAKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q0cuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5k
ZXJUcmVlLmgiIAotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
VGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTE4NCw4ICsxODQsOCBAQCBQYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENv
CiAKIFBhc3NSZWZQdHI8Qml0bWFwQ29udGV4dD4gY3JlYXRlUGFnZWRCaXRtYXBDb250ZXh0KCkK
IHsKLSAgICBpbnQgcGFnZVdpZHRoSW5QaXhlbHMgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4
Vmlld1dpZHRoOwotICAgIGludCBwYWdlSGVpZ2h0SW5QaXhlbHMgPSBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bWF4Vmlld0hlaWdodDsKKyAgICBpbnQgcGFnZVdpZHRoSW5QaXhlbHMgPSBUZXN0UnVu
bmVyOjptYXhWaWV3V2lkdGg7CisgICAgaW50IHBhZ2VIZWlnaHRJblBpeGVscyA9IFRlc3RSdW5u
ZXI6Om1heFZpZXdIZWlnaHQ7CiAgICAgaW50IG51bWJlck9mUGFnZXMgPSBbbWFpbkZyYW1lIG51
bWJlck9mUGFnZXM6cGFnZVdpZHRoSW5QaXhlbHM6cGFnZUhlaWdodEluUGl4ZWxzXTsKICAgICBz
aXplX3Qgcm93Qnl0ZXMgPSAwOwogICAgIHZvaWQqIGJ1ZmZlciA9IDA7CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUuaAkocmV2aXNpb24gMTI1MzM1KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDE0ICsyOCwxNCBAQAogCiAjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgogCi1jbGFzcyBM
YXlvdXRUZXN0Q29udHJvbGxlcjsKK2NsYXNzIFRlc3RSdW5uZXI7CiAKIEBpbnRlcmZhY2UgUG9s
aWN5RGVsZWdhdGUgOiBOU09iamVjdCB7CiAgICAgQk9PTCBwZXJtaXNzaXZlRGVsZWdhdGU7Ci0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXJUb05vdGlmeURvbmU7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlclRvTm90aWZ5RG9uZTsKIH0KIAogLSAodm9pZClzZXRQZXJtaXNz
aXZlOihCT09MKXBlcm1pc3NpdmU7Ci0tICh2b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6
KExheW91dFRlc3RDb250cm9sbGVyKiljb250cm9sbGVyOworLSAodm9pZClzZXRDb250cm9sbGVy
VG9Ob3RpZnlEb25lOihUZXN0UnVubmVyKiljb250cm9sbGVyOwogCiBAZW5kCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1BvbGljeURlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjUzMzUp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCiAKICNp
bXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW1wb3J0ICJMYXlvdXRUZXN0Q29udHJvbGxlci5o
IgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlBvbGljeURl
bGVnYXRlLmg+CkBAIC0xMzMsNyArMTMzLDcgQEAgLSAodm9pZClzZXRQZXJtaXNzaXZlOihCT09M
KXBlcm1pc3NpdmUKICAgICBwZXJtaXNzaXZlRGVsZWdhdGUgPSBwZXJtaXNzaXZlOwogfQogCi0t
ICh2b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6KExheW91dFRlc3RDb250cm9sbGVyKilj
b250cm9sbGVyCistICh2b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6KFRlc3RSdW5uZXIq
KWNvbnRyb2xsZXIKIHsKICAgICBjb250cm9sbGVyVG9Ob3RpZnlEb25lID0gY29udHJvbGxlcjsK
IH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVs
ZWdhdGUubW0JKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9S
ZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2ltcG9ydCAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKIAogI2ltcG9ydCAiRHVtcFJlbmRlclRy
ZWUuaCIKLSNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW1wb3J0ICJUZXN0UnVu
bmVyLmgiCiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVHlw
ZXNJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFTb3VyY2VQcml2YXRlLmg+CkBA
IC0xMjEsNyArMTIxLDcgQEAgLSAoaWQpd2ViVmlldzogKFdlYlZpZXcgKil3diBpZGVudGlmaWVy
RgogewogICAgIEFTU0VSVChbW2RhdGFTb3VyY2Ugd2ViRnJhbWVdIGRhdGFTb3VyY2VdIHx8IFtb
ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gcHJvdmlzaW9uYWxEYXRhU291cmNlXSk7CiAKLSAgICBpZiAo
IWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
KCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKCkpCiAgICAgICAgIHJldHVybiBbW3JlcXVlc3QgVVJMXSBfZHJ0X2Rlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0XTsKIAogICAgIHJldHVybiBAIjx1bmtub3duPiI7CkBAIC0xNDAs
MjAgKzE0MCwyMCBAQCBCT09MIGhvc3RJc1VzZWRCeVNvbWVUZXN0c1RvR2VuZXJhdGVFcnJvCiAK
IC0oTlNVUkxSZXF1ZXN0ICopd2ViVmlldzogKFdlYlZpZXcgKil3diByZXNvdXJjZTppZGVudGlm
aWVyIHdpbGxTZW5kUmVxdWVzdDogKE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgcmVkaXJlY3RSZXNw
b25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdl
YkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAg
TlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSB3aWxs
U2VuZFJlcXVlc3QgJUAgcmVkaXJlY3RSZXNwb25zZSAlQCIsIGlkZW50aWZpZXIsIFtyZXF1ZXN0
IF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLAogICAgICAgICAgICAgW3Jl
ZGlyZWN0UmVzcG9uc2UgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwog
ICAgICAgICBwcmludGYoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9CiAKLSAg
ICBpZiAoIWRvbmUgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZGVmZXJNYWluUmVzb3VyY2VE
YXRhTG9hZCgpKSB7CisgICAgaWYgKCFkb25lICYmICFnVGVzdFJ1bm5lci0+ZGVmZXJNYWluUmVz
b3VyY2VEYXRhTG9hZCgpKSB7CiAgICAgICAgIFtkYXRhU291cmNlIF9zZXREZWZlck1haW5SZXNv
dXJjZURhdGFMb2FkOmZhbHNlXTsKICAgICB9CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQorICAgIGlmICghZG9u
ZSAmJiBnVGVzdFJ1bm5lci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0UmVzcG9uc2Up
IHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNO
dWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0UmVzcG9uc2UpIHsKICAgICAgICAgcHJpbnRmKCJS
ZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgfQpAQCAtMTYxLDcgKzE2MSw3IEBAIC0oTlNVUkxSZXF1ZXN0ICopd2ViVmlldzogKFdl
YlZpZXcgKil3diAKICAgICBOU1VSTCAqdXJsID0gW3JlcXVlc3QgVVJMXTsKICAgICBOU1N0cmlu
ZyAqaG9zdCA9IFt1cmwgaG9zdF07CiAgICAgaWYgKGhvc3QgJiYgKE5TT3JkZXJlZFNhbWUgPT0g
W1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaHR0cCJdIHx8IE5TT3JkZXJl
ZFNhbWUgPT0gW1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaHR0cHMiXSkp
IHsKLSAgICAgICAgTlNTdHJpbmcgKnRlc3RQYXRoT3JVUkwgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6Z0xheW91dFRlc3RDb250cm9sbGVyLT50ZXN0UGF0aE9yVVJMKCkuY19zdHIo
KV07CisgICAgICAgIE5TU3RyaW5nICp0ZXN0UGF0aE9yVVJMID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOmdUZXN0UnVubmVyLT50ZXN0UGF0aE9yVVJMKCkuY19zdHIoKV07CiAgICAg
ICAgIE5TU3RyaW5nICpsb3dlcmNhc2VUZXN0UGF0aE9yVVJMID0gW3Rlc3RQYXRoT3JVUkwgbG93
ZXJjYXNlU3RyaW5nXTsKICAgICAgICAgTlNTdHJpbmcgKnRlc3RIb3N0ID0gMDsKICAgICAgICAg
aWYgKFtsb3dlcmNhc2VUZXN0UGF0aE9yVVJMIGhhc1ByZWZpeDpAImh0dHA6Il0gfHwgW2xvd2Vy
Y2FzZVRlc3RQYXRoT3JVUkwgaGFzUHJlZml4OkAiaHR0cHM6Il0pCkBAIC0xNzYsMTMgKzE3Niwx
MyBAQCAtKE5TVVJMUmVxdWVzdCAqKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpuZXdSZXF1ZXN0ID0gW3JlcXVl
c3QgbXV0YWJsZUNvcHldOwotICAgIGNvbnN0IHNldDxzdHJpbmc+JiBjbGVhckhlYWRlcnMgPSBn
TGF5b3V0VGVzdENvbnRyb2xsZXItPndpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVycygpOworICAg
IGNvbnN0IHNldDxzdHJpbmc+JiBjbGVhckhlYWRlcnMgPSBnVGVzdFJ1bm5lci0+d2lsbFNlbmRS
ZXF1ZXN0Q2xlYXJIZWFkZXJzKCk7CiAgICAgZm9yIChzZXQ8c3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaGVhZGVyID0gY2xlYXJIZWFkZXJzLmJlZ2luKCk7IGhlYWRlciAhPSBjbGVhckhlYWRlcnMu
ZW5kKCk7ICsraGVhZGVyKSB7CiAgICAgICAgIE5TU3RyaW5nICpuc0hlYWRlciA9IFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoVVRGOFN0cmluZzpoZWFkZXItPmNfc3RyKCldOwogICAgICAgICBb
bmV3UmVxdWVzdCBzZXRWYWx1ZTpuaWwgZm9ySFRUUEhlYWRlckZpZWxkOm5zSGVhZGVyXTsKICAg
ICAgICAgW25zSGVhZGVyIHJlbGVhc2VdOwogICAgIH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyYg
ZGVzdGluYXRpb24gPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnJlZGlyZWN0aW9uRGVzdGluYXRp
b25Gb3JVUkwoW1t1cmwgYWJzb2x1dGVTdHJpbmddIFVURjhTdHJpbmddKTsKKyAgICBjb25zdCBz
dGQ6OnN0cmluZyYgZGVzdGluYXRpb24gPSBnVGVzdFJ1bm5lci0+cmVkaXJlY3Rpb25EZXN0aW5h
dGlvbkZvclVSTChbW3VybCBhYnNvbHV0ZVN0cmluZ10gVVRGOFN0cmluZ10pOwogICAgIGlmIChk
ZXN0aW5hdGlvbi5sZW5ndGgoKSkKICAgICAgICAgW25ld1JlcXVlc3Qgc2V0VVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpkZXN0aW5hdGlvbi5k
YXRhKCldXV07CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCAtKE5TVVJMUmVxdWVzdCAqKXdlYlZpZXc6
IChXZWJWaWV3ICopd3YgCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXd2IHJlc291cmNl
OihpZClpZGVudGlmaWVyIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0
YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKLSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+
aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcygpKSB7CisgICAgaWYgKCFnVGVzdFJ1bm5l
ci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcygpKSB7CiAgICAgICAgIE5TU3RyaW5n
ICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gU2ltdWxhdGluZyBjYW5jZWxsZWQgYXV0aGVudGljYXRp
b24gc2hlZXQiLCBpZGVudGlmaWVyXTsKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgW3N0cmluZyBV
VEY4U3RyaW5nXSk7CiAKQEAgLTE5OSwxMCArMTk5LDEwIEBAIC0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXd2IHJlc291cmNlOigKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBj
b25zdCBjaGFyKiB1c2VyID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5hdXRoZW50aWNhdGlvblVz
ZXJuYW1lKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFyKiB1c2VyID0gZ1Rlc3RSdW5uZXItPmF1
dGhlbnRpY2F0aW9uVXNlcm5hbWUoKS5jX3N0cigpOwogICAgIE5TU3RyaW5nICpuc1VzZXIgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgdXNlciA/IHVzZXIgOiAiIl07CiAKLSAg
ICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+YXV0aGVudGlj
YXRpb25QYXNzd29yZCgpLmNfc3RyKCk7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSBnVGVz
dFJ1bm5lci0+YXV0aGVudGljYXRpb25QYXNzd29yZCgpLmNfc3RyKCk7CiAgICAgTlNTdHJpbmcg
Km5zUGFzc3dvcmQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgcGFzc3dvcmQg
PyBwYXNzd29yZCA6ICIiXTsKIAogICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0g
UmVzcG9uZGluZyB3aXRoICVAOiVAIiwgaWRlbnRpZmllciwgbnNVc2VyLCBuc1Bhc3N3b3JkXTsK
QEAgLTIxOCwxMSArMjE4LDExIEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXd2IHJlc291
cmNlOigKIAogLSh2b2lkKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgcmVzb3VyY2U6aWRlbnRpZmll
ciBkaWRSZWNlaXZlUmVzcG9uc2U6IChOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgZnJvbURhdGFT
b3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsK
ICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JUAgLSBkaWRSZWNlaXZlUmVzcG9uc2UgJUAiLCBpZGVudGlmaWVyLCBbcmVzcG9uc2UgX2RydF9k
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwogICAgICAgICBwcmludGYoIiVzXG4i
LCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkKKyAgICBpZiAo
IWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCiAg
ICAgICAgIHByaW50ZigiJXMgaGFzIE1JTUUgdHlwZSAlc1xuIiwgW1tbW3Jlc3BvbnNlIFVSTF0g
cmVsYXRpdmVQYXRoXSBsYXN0UGF0aENvbXBvbmVudF0gVVRGOFN0cmluZ10sIFtbcmVzcG9uc2Ug
TUlNRVR5cGVdIFVURjhTdHJpbmddKTsKIH0KIApAQCAtMjMyLDcgKzIzMiw3IEBAIC0odm9pZCl3
ZWJWaWV3OiAoV2ViVmlldyAqKXd2IHJlc291cmNlOmkKIAogLSh2b2lkKXdlYlZpZXc6IChXZWJW
aWV3ICopd3YgcmVzb3VyY2U6aWRlbnRpZmllciBkaWRGaW5pc2hMb2FkaW5nRnJvbURhdGFTb3Vy
Y2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAg
ICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAg
LSBkaWRGaW5pc2hMb2FkaW5nIiwgaWRlbnRpZmllcl07CiAgICAgICAgIHByaW50ZigiJXNcbiIs
IFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTI0MCw3ICsyNDAsNyBAQCAtKHZvaWQp
d2ViVmlldzogKFdlYlZpZXcgKil3diByZXNvdXJjZTppCiAKIC0odm9pZCl3ZWJWaWV3OiAoV2Vi
VmlldyAqKXd2IHJlc291cmNlOmlkZW50aWZpZXIgZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6KE5T
RXJyb3IgKillcnJvciBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UK
IHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAlQCIs
IGlkZW50aWZpZXIsIFtlcnJvciBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
XV07CiAgICAgICAgIHByaW50ZigiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0K
QEAgLTI1NSw3ICsyNTUsNyBAQCAtICh2b2lkKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgcGx1Z0lu
RmFpCiAKIC0oTlNDYWNoZWRVUkxSZXNwb25zZSAqKSB3ZWJWaWV3OiAoV2ViVmlldyAqKXd2IHJl
c291cmNlOihpZClpZGVudGlmaWVyIHdpbGxDYWNoZVJlc3BvbnNlOihOU0NhY2hlZFVSTFJlc3Bv
bnNlICopcmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNl
CiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFdpbGxDYWNo
ZVJlc3BvbnNlKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBXaWxsQ2Fj
aGVSZXNwb25zZSgpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAIC0gd2lsbENhY2hlUmVzcG9uc2U6IGNhbGxlZCIsIGlkZW50aWZp
ZXJdOwogICAgICAgICBwcmludGYoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9
CkBAIC0yNjYsMTEgKzI2NiwxMSBAQCAtKEJPT0wpd2ViVmlldzogKFdlYlZpZXcqKXdlYlZpZXcg
c2hvdWxkCiB7CiAgICAgLy8gT25seSBsb2cgdGhlIG1lc3NhZ2Ugd2hlbiBzaG91bGRQYWludEJy
b2tlbkltYWdlKCkgcmV0dXJucyBOTzsgdGhpcyBhdm9pZHMgY2hhbmdpbmcgcmVzdWx0cyBvZiBs
YXlvdXQgdGVzdHMgd2l0aCBmYWlsZWQKICAgICAvLyBpbWFnZXMsIGUuZy4sIHNlY3VyaXR5L2Js
b2NrLXRlc3Qtbm8tcG9ydC5odG1sLgotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSAmJiAhZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zaG91bGRQYWludEJyb2tlbkltYWdlKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RS
dW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSAmJiAhZ1Rlc3RSdW5uZXItPnNob3Vs
ZFBhaW50QnJva2VuSW1hZ2UoKSkgewogICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAtIHNob3VsZFBhaW50QnJva2VuSW1hZ2U6IE5PIiwg
W2ltYWdlVVJMIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAg
ICAgcHJpbnRmKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpOworICAg
IHJldHVybiBnVGVzdFJ1bm5lci0+c2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpOwogfQogQGVuZApJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHJldmlzaW9u
IDEyNTMzNSkJKGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tOjEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAi
TGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiRWRpdGluZ0RlbGVnYXRlLmgiCisj
aW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIgorI2ltcG9ydCAiUG9saWN5RGVsZWdh
dGUuaCIKKyNpbXBvcnQgIlN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlVJRGVs
ZWdhdGUuaCIKKyNpbXBvcnQgIldvcmtRdWV1ZS5oIgorI2ltcG9ydCAiV29ya1F1ZXVlSXRlbS5o
IgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFdl
YktpdC9ET01Eb2N1bWVudC5oPgorI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4KKyNpbXBv
cnQgPFdlYktpdC9XZWJBcHBsaWNhdGlvbkNhY2hlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViQmFj
a0ZvcndhcmRMaXN0Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViQ29yZVN0YXRpc3RpY3MuaD4KKyNp
bXBvcnQgPFdlYktpdC9XZWJET01PcGVyYXRpb25zUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dlYkRhdGFTb3VyY2UuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJEYXRhYmFzZU1hbmFnZXJQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRGV2aWNlT3JpZW50YXRpb24uaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jay5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYkZyYW1lLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJIVE1MUmVwcmVzZW50YXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJIaXN0b3J5Lmg+CisjaW1wb3J0IDxXZWJLaXQv
V2ViSGlzdG9yeVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJJY29uRGF0YWJhc2VQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViSW5zcGVjdG9yUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dlYk5TVVJMRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0RXJyb3JzLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJRdW90YU1hbmFnZXIuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJTY3JpcHRXb3JsZC5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlNl
Y3VyaXR5T3JpZ2luUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlN0b3JhZ2VNYW5hZ2Vy
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJWaWV3Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XZWJXb3JrZXJzUHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0N1cnJlbnRU
aW1lLmg+CisjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCitAaW50ZXJmYWNlIENvbW1hbmRWYWxpZGF0aW9uVGFyZ2V0IDogTlNPYmplY3QgPE5TVmFs
aWRhdGVkVXNlckludGVyZmFjZUl0ZW0+Cit7CisgICAgU0VMIF9hY3Rpb247Cit9CistIChpZClp
bml0V2l0aEFjdGlvbjooU0VMKWFjdGlvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIENvbW1h
bmRWYWxpZGF0aW9uVGFyZ2V0CisKKy0gKGlkKWluaXRXaXRoQWN0aW9uOihTRUwpYWN0aW9uCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBfYWN0aW9uID0gYWN0aW9uOworICAgIHJldHVybiBzZWxmOworfQorCist
IChTRUwpYWN0aW9uCit7CisgICAgcmV0dXJuIF9hY3Rpb247Cit9CisKKy0gKE5TSW50ZWdlcil0
YWcKK3sKKyAgICByZXR1cm4gMDsKK30KKworQGVuZAorCitMYXlvdXRUZXN0Q29udHJvbGxlcjo6
fkxheW91dFRlc3RDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCB1cmwpKTsKKworICAgIGlmICghZGlzYWxsb3dlZFVSTHMpCisgICAgICAgIGRp
c2FsbG93ZWRVUkxzID0gQ0ZTZXRDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAs
IE5VTEwpOworCisgICAgLy8gQ2Fub25pY2FsaXplIHRoZSBVUkwKKyAgICBOU1VSTFJlcXVlc3Qg
KnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07CisgICAgcmVxdWVzdCA9IFtOU1VSTFByb3Rv
Y29sIGNhbm9uaWNhbFJlcXVlc3RGb3JSZXF1ZXN0OnJlcXVlc3RdOworCisgICAgQ0ZTZXRBZGRW
YWx1ZShkaXNhbGxvd2VkVVJMcywgW3JlcXVlc3QgVVJMXSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCit7CisgICAgcmV0dXJuIFtb
bWFpbkZyYW1lIHdlYlZpZXddIHNob3VsZENsb3NlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCit7CisgICAgW1dlYkFwcGxpY2F0
aW9uQ2FjaGUgZGVsZXRlQWxsQXBwbGljYXRpb25DYWNoZXNdOworfQorCitsb25nIGxvbmcgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNT
dHJpbmdSZWYgdXJsKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRD
RiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CisgICAg
V2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIGlu
aXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07
CisgICAgbG9uZyBsb25nIHVzYWdlID0gW1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGlza1VzYWdlRm9y
T3JpZ2luOm9yaWdpbl07CisgICAgW29yaWdpbiByZWxlYXNlXTsKKyAgICByZXR1cm4gdXNhZ2U7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQorewor
ICAgIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIHN5bmNMb2Nh
bFN0b3JhZ2VdOworfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3Rv
cmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCB1cmwpKTsKKyAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tX
ZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKKyAgICBsb25nIGxvbmcgdXNhZ2UgPSBbW1dlYlN0
b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBkaXNrVXNhZ2VGb3JPcmlnaW46
b3JpZ2luXTsKKyAgICBbb3JpZ2luIHJlbGVhc2VdOworICAgIHJldHVybiB1c2FnZTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0
aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgW3N0b3JhZ2VEZWxlZ2F0ZSBsb2dOb3RpZmlj
YXRpb25zOm51bWJlciBjb250cm9sbGVyOnRoaXNdOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQor
eworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CisKKyAgICBXZWJTZWN1cml0eU9y
aWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0KCldXTsKKyAgICBbV2ViQXBw
bGljYXRpb25DYWNoZSBkZWxldGVDYWNoZUZvck9yaWdpbjpvcmlnaW5dOworICAgIFtvcmlnaW4g
cmVsZWFzZV07Cit9CisKK0pTVmFsdWVSZWYgb3JpZ2luc0FycmF5VG9KUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgTlNBcnJheSAqb3JpZ2lucykKK3sKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW29y
aWdpbnMgY291bnRdOworCisgICAgSlNWYWx1ZVJlZiBqc09yaWdpbnNBcnJheVtjb3VudF07Cisg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBOU1N0
cmluZyAqb3JpZ2luID0gW1tvcmlnaW5zIG9iamVjdEF0SW5kZXg6aV0gZGF0YWJhc2VJZGVudGlm
aWVyXTsKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9yaWdpbkpTKEFkb3B0LCBK
U1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpb3JpZ2luKSk7CisgICAgICAg
IGpzT3JpZ2luc0FycmF5W2ldID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgb3JpZ2luSlMu
Z2V0KCkpOworICAgIH0KKworICAgIHJldHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBj
b3VudCwganNPcmlnaW5zQXJyYXksIE5VTEwpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RD
b250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCit7CisgICAgcmV0dXJuIG9yaWdpbnNBcnJheVRvSlMoY29udGV4dCwgW1dlYkFwcGxpY2F0
aW9uQ2FjaGUgb3JpZ2luc1dpdGhDYWNoZV0pOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hh
cmVkV2ViRGF0YWJhc2VNYW5hZ2VyXSBkZWxldGVBbGxEYXRhYmFzZXNdOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIFtbV2Vi
U3RvcmFnZU1hbmFnZXIgc2hhcmVkV2ViU3RvcmFnZU1hbmFnZXJdIGRlbGV0ZUFsbE9yaWdpbnNd
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxl
SW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIFtXZWJTdG9yYWdlTWFuYWdlciBzZXRT
dG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw6aW50ZXJ2YWxdOworfQorCitKU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKK3sKKyAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0LCBbW1dlYlN0
b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmlnaW5zXSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0
cmluZ1JlZiBVUkwpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVUkwpKTsKKyAgICAK
KyAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxv
Y10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0YuZ2V0
KCldXTsKKyAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBk
ZWxldGVPcmlnaW46b3JpZ2luXTsKKyAgICBbb3JpZ2luIHJlbGVhc2VdOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit7CisgICAgV2ViQmFj
a0ZvcndhcmRMaXN0ICpiYWNrRm9yd2FyZExpc3QgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBiYWNr
Rm9yd2FyZExpc3RdOworICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW1tiYWNrRm9yd2FyZExp
c3QgY3VycmVudEl0ZW1dIHJldGFpbl07CisKKyAgICAvLyBXZSBjbGVhciB0aGUgaGlzdG9yeSBi
eSBzZXR0aW5nIHRoZSBiYWNrL2ZvcndhcmQgbGlzdCdzIGNhcGFjaXR5IHRvIDAKKyAgICAvLyB0
aGVuIHJlc3RvcmluZyBpdCBiYWNrIGFuZCBhZGRpbmcgYmFjayB0aGUgY3VycmVudCBpdGVtLgor
ICAgIGludCBjYXBhY2l0eSA9IFtiYWNrRm9yd2FyZExpc3QgY2FwYWNpdHldOworICAgIFtiYWNr
Rm9yd2FyZExpc3Qgc2V0Q2FwYWNpdHk6MF07CisgICAgW2JhY2tGb3J3YXJkTGlzdCBzZXRDYXBh
Y2l0eTpjYXBhY2l0eV07CisgICAgW2JhY2tGb3J3YXJkTGlzdCBhZGRJdGVtOml0ZW1dOworICAg
IFtiYWNrRm9yd2FyZExpc3QgZ29Ub0l0ZW06aXRlbV07CisgICAgW2l0ZW0gcmVsZWFzZV07Cit9
CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1l
KEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0Yo
QWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSkp
OworICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7CisgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilbbmFtZU5TIF93
ZWJfZGVjb2RlSG9zdE5hbWVdKTsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IG5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBuYW1lKSk7CisgICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmlu
ZyAqKW5hbWVDRi5nZXQoKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmco
KENGU3RyaW5nUmVmKVtuYW1lTlMgX3dlYl9lbmNvZGVIb3N0TmFtZV0pOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3sKKyAgICBkaXNwbGF5V2ViVmlldygpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCit7CisgICAg
aWYgKCFbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldKSB7CisgICAgICAgIFdlYkhp
c3RvcnkgKmhpc3RvcnkgPSBbW1dlYkhpc3RvcnkgYWxsb2NdIGluaXRdOworICAgICAgICBbV2Vi
SGlzdG9yeSBzZXRPcHRpb25hbFNoYXJlZEhpc3Rvcnk6aGlzdG9yeV07CisgICAgICAgIFtoaXN0
b3J5IHJlbGVhc2VdOworICAgIH0KK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIHZhbHVlKQoreyAgIAorICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3
XSBfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOmNvbnRleHQgZm9yRWxlbWVudDp2
YWx1ZV07Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK3sKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gc3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYp
W21haW5GcmFtZSBfbGF5ZXJUcmVlQXNUZXh0XSkpOworICAgIHJldHVybiBzdHJpbmc7Cit9CisK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4
dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3Qp
IGNvbnN0Cit7CisgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtET01FbGVtZW50IF9ET01FbGVt
ZW50RnJvbUpTQ29udGV4dDpjb250ZXh0IHZhbHVlOm5vZGVPYmplY3RdOworICAgIGlmICghZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOworCisgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilbZWxlbWVudCBfbWFya2VyVGV4dEZvckxpc3RJdGVt
XSkpOworICAgIHJldHVybiBtYXJrZXJUZXh0OworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBwcm9wZXJ0eVZhbHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpW21haW5GcmFtZSBwYWdlUHJvcGVydHk6cHJvcGVydHlOYW1lOnBhZ2VOdW1iZXJd
KSk7CisgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50
IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1h
cmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKK3sKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVttYWluRnJhbWUgcGFnZVNpemVBbmRNYXJn
aW5zSW5QaXhlbHM6cGFnZU51bWJlcjp3aWR0aDpoZWlnaHQ6bWFyZ2luVG9wOm1hcmdpblJpZ2h0
Om1hcmdpbkJvdHRvbTptYXJnaW5MZWZ0XSkpOworICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdp
ZHRoSW5QaXhlbHMsIGZsb2F0IHBhZ2VIZWlnaHRJblBpeGVscykKK3sKKyAgICByZXR1cm4gW21h
aW5GcmFtZSBudW1iZXJPZlBhZ2VzOnBhZ2VXaWR0aEluUGl4ZWxzOnBhZ2VIZWlnaHRJblBpeGVs
c107Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQoreworICAgIHJldHVybiBbW1ttYWluRnJhbWUgd2Vi
Vmlld10gVUlEZWxlZ2F0ZV0gbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdHNdOworfQorCitzaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVt
Q291bnQoKQoreworICAgIHJldHVybiBbW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9y
eV0gYWxsSXRlbXNdIGNvdW50XTsKK30KKwordW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gW1dlYldvcmtlcnNQcml2
YXRlIHdvcmtlclRocmVhZENvdW50XTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAoreworICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJtYWMiKSk7CisgICAgcmV0dXJuIHBsYXRmb3JtTmFtZTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7CisgICAgaWYgKG1fd2FpdFRvRHVt
cCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQor
ICAgICAgICBkdW1wKCk7CisgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7Cit9CisKK3N0YXRpYyBp
bmxpbmUgc3RkOjpzdHJpbmcgc3RyaW5nRnJvbUpTU3RyaW5nKEpTU3RyaW5nUmVmIGpzU3RyaW5n
KQoreworICAgIHNpemVfdCBtYXhCdWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENT
dHJpbmdTaXplKGpzU3RyaW5nKTsKKyAgICBjaGFyKiB1dGY4QnVmZmVyID0gbmV3IGNoYXJbbWF4
QnVmZmVyU2l6ZV07CisgICAgc2l6ZV90IGJ5dGVzV3JpdHRlblRvVVRGOEJ1ZmZlciA9IEpTU3Ry
aW5nR2V0VVRGOENTdHJpbmcoanNTdHJpbmcsIHV0ZjhCdWZmZXIsIG1heEJ1ZmZlclNpemUpOwor
ICAgIHN0ZDo6c3RyaW5nIHN0ZFN0cmluZyh1dGY4QnVmZmVyLCBieXRlc1dyaXR0ZW5Ub1VURjhC
dWZmZXIgLSAxKTsgLy8gYnl0ZXNXcml0dGVuVG9VVEY4QnVmZmVyIGluY2x1ZGVzIGEgdHJhaWxp
bmcgXDAgd2hpY2ggc3RkOjpzdHJpbmcgZG9lc24ndCBuZWVkLgorICAgIGRlbGV0ZVtdIHV0ZjhC
dWZmZXI7CisgICAgcmV0dXJuIHN0ZFN0cmluZzsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qg
aW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0b3J5TmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGly
ZWN0b3J5TmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxQYXRoKQoreworICAgIHN0ZDo6c3Ry
aW5nIHNlYXJjaEtleSA9ICIvIiArIGRpcmVjdG9yeU5hbWUgKyAiLyI7CisgICAgc2l6ZV90IGlu
ZGV4T2ZTZWFyY2hLZXlTdGFydCA9IGZ1bGxQYXRoLnJmaW5kKHNlYXJjaEtleSk7CisgICAgaWYg
KGluZGV4T2ZTZWFyY2hLZXlTdGFydCA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8vIENh
bGxlcnMgZXhwZWN0IHRoZSByZXR1cm4gdmFsdWUgbm90IHRvIGVuZCBpbiAiLyIsIHNvIHNlYXJj
aEtleS5sZW5ndGgoKSAtIDEuCisgICAgcmV0dXJuIGluZGV4T2ZTZWFyY2hLZXlTdGFydCArIHNl
YXJjaEtleS5sZW5ndGgoKSAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpzdHJpbmcgcmVz
b3VyY2VSb290QWJzb2x1dGVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBj
b25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRSb290TmFtZSkKK3sKKyAgICBjaGFyKiBsb2NhbFJl
c291cmNlUm9vdEVudiA9IGdldGVudigiTE9DQUxfUkVTT1VSQ0VfUk9PVCIpOworICAgIGlmIChs
b2NhbFJlc291cmNlUm9vdEVudikKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGxvY2FsUmVz
b3VyY2VSb290RW52KTsKKworICAgIC8vIFRoaXMgZmFsbGJhY2sgYXBwcm9hY2ggd29ya3MgZm9y
IG5vbi1odHRwIHRlc3RzIGFuZCBpcyB1c2VmdWwKKyAgICAvLyBpbiB0aGUgY2FzZSB3aGVuIHdl
J3JlIHJ1bm5pbmcgRFJUIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAgICByZXR1
cm4gdGVzdFBhdGhPclVSTC5zdWJzdHIoMCwgaW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0b3J5
TmFtZShleHBlY3RlZFJvb3ROYW1lLCB0ZXN0UGF0aE9yVVJMKSk7Cit9CisKK0pTU3RyaW5nUmVm
IExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1N0cmluZ1JlZiBsb2NhbFJlc291cmNlSlNTdHJpbmcpCit7CisgICAgLy8gVGhl
IHBhc3NlZCBpbiBwYXRoIHdpbGwgYmUgYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgcmVzb3VyY2Ug
c3RhcnRpbmcKKyAgICAvLyB3aXRoICIvdG1wIiBvciAiL3RtcC9MYXlvdXRUZXN0cyIsIG9wdGlv
bmFsbHkgc3RhcnRpbmcgd2l0aCB0aGUgZXhwbGljaXQgZmlsZTovLyBwcm90b2NvbC4KKyAgICAv
LyAvdG1wIG1hcHMgdG8gRFVNUFJFTkRFUlRSRUVfVEVNUCwgYW5kIC90bXAvTGF5b3V0VGVzdHMg
bWFwcyB0byBMT0NBTF9SRVNPVVJDRV9ST09ULgorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hv
dWxkIHdvcmsgb24gYWxsICpuaXggcGxhdGZvcm1zIGFuZCBjYW4gYmUgbW92ZWQgaW50byBMYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAuCisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRSb290TmFtZTsK
KyAgICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdDsKKyAgICBzdGQ6OnN0
cmluZyBsb2NhbFJlc291cmNlU3RyaW5nID0gc3RyaW5nRnJvbUpTU3RyaW5nKGxvY2FsUmVzb3Vy
Y2VKU1N0cmluZyk7CisKKyAgICBpZiAobG9jYWxSZXNvdXJjZVN0cmluZy5maW5kKCJMYXlvdXRU
ZXN0cyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIGV4cGVjdGVkUm9vdE5hbWUg
PSAiTGF5b3V0VGVzdHMiOworICAgICAgICBhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdCA9IHJl
c291cmNlUm9vdEFic29sdXRlUGF0aChtX3Rlc3RQYXRoT3JVUkwsIGV4cGVjdGVkUm9vdE5hbWUp
OworICAgIH0gZWxzZSBpZiAobG9jYWxSZXNvdXJjZVN0cmluZy5maW5kKCJ0bXAiKSAhPSBzdGQ6
OnN0cmluZzo6bnBvcykgeworICAgICAgICBleHBlY3RlZFJvb3ROYW1lID0gInRtcCI7CisgICAg
ICAgIGFic29sdXRlUGF0aFRvUmVzb3VyY2VSb290ID0gZ2V0ZW52KCJEVU1QUkVOREVSVFJFRV9U
RU1QIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHBh
dGhUb0xvY2FsUmVzb3VyY2Ugd2FzIHBhc3NlZCBhIHBhdGggaXQgZG9lc24ndCBrbm93IGhvdyB0
byBtYXAuCisgICAgfQorICAgIEFTU0VSVCghYWJzb2x1dGVQYXRoVG9SZXNvdXJjZVJvb3QuZW1w
dHkoKSk7CisgICAgc2l6ZV90IGluZGV4T2ZTZXBhcmF0b3JBZnRlclJvb3ROYW1lID0gaW5kZXhP
ZlNlcGFyYXRvckFmdGVyRGlyZWN0b3J5TmFtZShleHBlY3RlZFJvb3ROYW1lLCBsb2NhbFJlc291
cmNlU3RyaW5nKTsKKyAgICBzdGQ6OnN0cmluZyBhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2Ug
PSBhYnNvbHV0ZVBhdGhUb1Jlc291cmNlUm9vdCArIGxvY2FsUmVzb3VyY2VTdHJpbmcuc3Vic3Ry
KGluZGV4T2ZTZXBhcmF0b3JBZnRlclJvb3ROYW1lKTsKKworICAgIC8vIE5vdGU6IEl0J3MgaW1w
b3J0YW50IHRoYXQgd2Uga2VlcCB0aGUgZmlsZTovLyBvciBodHRwIHRlc3RzIHdpbGwgZ2V0IGNv
bmZ1c2VkLgorICAgIGlmIChsb2NhbFJlc291cmNlU3RyaW5nLmZpbmQoImZpbGU6Ly8iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBBU1NFUlQoYWJzb2x1dGVQYXRoVG9Mb2NhbFJl
c291cmNlWzBdID09ICcvJyk7CisgICAgICAgIGFic29sdXRlUGF0aFRvTG9jYWxSZXNvdXJjZSA9
IHN0ZDo6c3RyaW5nKCJmaWxlOi8vIikgKyBhYnNvbHV0ZVBhdGhUb0xvY2FsUmVzb3VyY2U7Cisg
ICAgfQorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNvbHV0ZVBh
dGhUb0xvY2FsUmVzb3VyY2UuY19zdHIoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKK3sKKyAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOworICAgIE5TU3RyaW5nICp1cmxOUyA9IChO
U1N0cmluZyAqKXVybENGLmdldCgpOworCisgICAgTlNVUkwgKm5zdXJsID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6dXJsTlMgcmVsYXRpdmVUb1VSTDpbW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gcmVz
cG9uc2VdIFVSTF1dOworICAgIE5TU3RyaW5nICpuc3VybFN0cmluZyA9IFtuc3VybCBhYnNvbHV0
ZVN0cmluZ107CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtuc3VybFN0cmluZyBVVEY4U3RyaW5n
XSkpOworICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0
ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFjY2VwdHNFZGl0aW5nKGJvb2wgbmV3QWNjZXB0c0VkaXRpbmcpCit7CisgICAgWyhFZGl0aW5n
RGVsZWdhdGUgKilbW21haW5GcmFtZSB3ZWJWaWV3XSBlZGl0aW5nRGVsZWdhdGVdIHNldEFjY2Vw
dHNFZGl0aW5nOm5ld0FjY2VwdHNFZGl0aW5nXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit7
CisgICAgaWYgKGFsd2F5c0FjY2VwdENvb2tpZXMgPT0gbV9hbHdheXNBY2NlcHRDb29raWVzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2Fsd2F5c0FjY2VwdENvb2tpZXMgPSBhbHdheXNBY2Nl
cHRDb29raWVzOworICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xp
Y3kgPSBhbHdheXNBY2NlcHRDb29raWVzID8gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlz
IDogTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Cisg
ICAgW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Npb25Db29raWVB
Y2NlcHRQb2xpY3k6Y29va2llQWNjZXB0UG9saWN5XTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkK
K3sKKyAgICBbV2ViQXBwbGljYXRpb25DYWNoZSBzZXRNYXhpbXVtU2l6ZTpzaXplXTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3Jp
Z2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xOjgwMDAiXV07CisgICAgW1tvcmlnaW4gYXBwbGlj
YXRpb25DYWNoZVF1b3RhTWFuYWdlcl0gc2V0UXVvdGE6cXVvdGFdOworICAgIFtvcmlnaW4gcmVs
ZWFzZV07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJl
ZmVyZW5jZXNdIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkOmZsYWddOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKK3sKKyAgICBET01FbGVt
ZW50ICplbGVtZW50ID0gW0RPTUVsZW1lbnQgX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0OmNvbnRl
eHQgdmFsdWU6bm9kZU9iamVjdF07CisgICAgaWYgKCFlbGVtZW50IHx8ICFbZWxlbWVudCBpc0tp
bmRPZkNsYXNzOltET01IVE1MSW5wdXRFbGVtZW50IGNsYXNzXV0pCisgICAgICAgIHJldHVybjsK
KworICAgIFsoRE9NSFRNTElucHV0RWxlbWVudCAqKWVsZW1lbnQgX3NldEF1dG9maWxsZWQ6YXV0
b2ZpbGxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKK3sKKyAgICBpZiAo
c2V0RGVsZWdhdGUpIHsKKyAgICAgICAgW3BvbGljeURlbGVnYXRlIHNldFBlcm1pc3NpdmU6cGVy
bWlzc2l2ZV07CisgICAgICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRl
OnBvbGljeURlbGVnYXRlXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW1ttYWluRnJhbWUgd2ViVmll
d10gc2V0UG9saWN5RGVsZWdhdGU6bmlsXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7ICAgIAorICAg
IFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBp
bml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8vIl1dOworICAgIFtbb3Jp
Z2luIGRhdGFiYXNlUXVvdGFNYW5hZ2VyXSBzZXRRdW90YTpxdW90YV07CisgICAgW29yaWdpbiBy
ZWxlYXNlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKK3sKKyAg
ICBbW21haW5GcmFtZSB3ZWJWaWV3XSBnb0JhY2tdOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIFtbbWFpbkZyYW1l
IHdlYlZpZXddIHNldERlZmVyc0NhbGxiYWNrczpkZWZlcnNdOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJv
b2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCit7CisgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBzY2hlbWVDRlN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBzY2hlbWUpKTsKKyAgICBbV2ViVmlldyBfc2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbjpmb3JiaWRkZW4gZm9yVVJMU2NoZW1lOihOU1N0cmluZyAqKXNjaGVtZUNG
U3RyaW5nLmdldCgpXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0Rl
dmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wg
Y2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91Ymxl
IGdhbW1hKQoreworICAgIC8vIER1bXBSZW5kZXJUcmVlIGNvbmZpZ3VyZWQgdGhlIFdlYlZpZXcg
dG8gdXNlIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXJNb2NrLgorICAgIGlkPFdlYkRldmlj
ZU9yaWVudGF0aW9uUHJvdmlkZXI+IHByb3ZpZGVyID0gW1ttYWluRnJhbWUgd2ViVmlld10gX2Rl
dmljZU9yaWVudGF0aW9uUHJvdmlkZXJdOworICAgIFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlk
ZXJNb2NrICptb2NrUHJvdmlkZXIgPSBzdGF0aWNfY2FzdDxXZWJEZXZpY2VPcmllbnRhdGlvblBy
b3ZpZGVyTW9jayo+KHByb3ZpZGVyKTsKKyAgICBXZWJEZXZpY2VPcmllbnRhdGlvbiAqb3JpZW50
YXRpb24gPSBbW1dlYkRldmljZU9yaWVudGF0aW9uIGFsbG9jXSBpbml0V2l0aENhblByb3ZpZGVB
bHBoYTpjYW5Qcm92aWRlQWxwaGEgYWxwaGE6YWxwaGEgY2FuUHJvdmlkZUJldGE6Y2FuUHJvdmlk
ZUJldGEgYmV0YTpiZXRhIGNhblByb3ZpZGVHYW1tYTpjYW5Qcm92aWRlR2FtbWEgZ2FtbWE6Z2Ft
bWFdOworICAgIFttb2NrUHJvdmlkZXIgc2V0T3JpZW50YXRpb246b3JpZW50YXRpb25dOworICAg
IFtvcmllbnRhdGlvbiByZWxlYXNlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3kpCit7CisgICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiAqcG9z
aXRpb24gPSBbW1dlYkdlb2xvY2F0aW9uUG9zaXRpb24gYWxsb2NdIGluaXRXaXRoVGltZXN0YW1w
OmN1cnJlbnRUaW1lKCkgbGF0aXR1ZGU6bGF0aXR1ZGUgbG9uZ2l0dWRlOmxvbmdpdHVkZSBhY2N1
cmFjeTphY2N1cmFjeV07CisgICAgW1tNb2NrR2VvbG9jYXRpb25Qcm92aWRlciBzaGFyZWRdIHNl
dFBvc2l0aW9uOnBvc2l0aW9uXTsKKyAgICBbcG9zaXRpb24gcmVsZWFzZV07Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBK
U1N0cmluZ1JlZiBtZXNzYWdlKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWVzc2Fn
ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1l
c3NhZ2UpKTsKKyAgICBOU1N0cmluZyAqbWVzc2FnZU5TID0gKE5TU3RyaW5nICopbWVzc2FnZUNG
LmdldCgpOworICAgIE5TRXJyb3IgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldl
YktpdEVycm9yRG9tYWluIGNvZGU6Y29kZSB1c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0Om1lc3NhZ2VOUyBmb3JLZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV1d
OworICAgIFtbTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIgc2hhcmVkXSBzZXRFcnJvcjplcnJvcl07
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihib29sIGFsbG93KQoreworICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxv
dyk7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIFVJRGVsZWdhdGVdIGRpZFNldE1vY2tHZW9s
b2NhdGlvblBlcm1pc3Npb25dOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRN
b2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5j
ZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
c3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1
dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxh
eW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0
YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKK3sKKyAgICAvLyBGSVhNRTog
V29ya2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KKyAgICBzdGF0aWMgV2ViSWNvbkRh
dGFiYXNlICpzaGFyZWRXZWJJY29uRGF0YWJhc2UgPSBOVUxMOworICAgIGlmICghc2hhcmVkV2Vi
SWNvbkRhdGFiYXNlKSB7CisgICAgICAgIGlmICghaWNvbkRhdGFiYXNlRW5hYmxlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgc2hhcmVkV2ViSWNvbkRhdGFiYXNlID0gW1dlYkljb25E
YXRhYmFzZSBzaGFyZWRJY29uRGF0YWJhc2VdOworICAgICAgICBpZiAoW3NoYXJlZFdlYkljb25E
YXRhYmFzZSBpc0VuYWJsZWRdID09IGljb25EYXRhYmFzZUVuYWJsZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFtzaGFyZWRXZWJJY29uRGF0YWJhc2Ugc2V0RW5hYmxlZDppY29u
RGF0YWJhc2VFbmFibGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFp
bkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCit7CisgICAgTlNWaWV3ICpkb2N1bWVu
dFZpZXcgPSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgCisgICAg
TlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyID0gZmxhZyA/IGRvY3VtZW50VmlldyA6IG5pbDsK
KyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gd2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6Zmly
c3RSZXNwb25kZXJdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRl
QnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3sKKyAgICBbW1tt
YWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQ6
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBbW1ttYWluRnJhbWUg
d2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFhTU0F1ZGl0b3JFbmFibGVkOmVuYWJsZWRdOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQ6ZW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit7Cisg
ICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRTcGF0aWFsTmF2aWdhdGlv
bkVuYWJsZWQ6ZW5hYmxlZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
bG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBbW1tt
YWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzOmVuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
bGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQoreworICAgIFtbW21haW5G
cmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
OmVuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZChib29sIHBvcHVwQmxvY2tpbmdFbmFibGVkKQoreworICAgIFtbW21haW5GcmFt
ZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21h
dGljYWxseTohcG9wdXBCbG9ja2luZ0VuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIHBsdWdpbnNFbmFibGVkKQoreworICAgIFtb
W21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0UGx1Z0luc0VuYWJsZWQ6cGx1Z2lu
c0VuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBbW1ttYWluRnJhbWUgd2Vi
Vmlld10gcHJlZmVyZW5jZXNdIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQ6ZW5hYmxl
ZF07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBz
ZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDplbmFibGVkXTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3lj
bGVzKQoreworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFRhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50czpjeWNsZXNdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VE
YXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit7CisgICAgW1ttYWluRnJhbWUg
d2ViVmlld10gX3NldERhc2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yVXNlQmFj
a3dhcmRDb21wYXRpYmlsaXR5TW9kZSB0bzpmbGFnXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBbW1dl
YlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxl
ZDpmbGFnXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gcGF0aENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHBhdGgpKTsKKyAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3Ry
aW5nICopcGF0aENGLmdldCgpXTsKKyAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVy
ZW5jZXNdIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb246dXJsXTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIERPTUVsZW1lbnQg
KmVsZW1lbnQgPSBbRE9NRWxlbWVudCBfRE9NRWxlbWVudEZyb21KU0NvbnRleHQ6Y29udGV4dCB2
YWx1ZTpub2RlT2JqZWN0XTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIVtlbGVtZW50IGlzS2luZE9m
Q2xhc3M6W0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHZhbHVlKSk7CisgICAgWyhET01IVE1MSW5wdXRF
bGVtZW50ICopZWxlbWVudCBfc2V0VmFsdWVGb3JVc2VyOihOU1N0cmluZyAqKXZhbHVlQ0YuZ2V0
KCldOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVh
dHVyZShKU1N0cmluZ1JlZiBtb2RlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit7CisgICAg
W1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRMb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHk6Tk9dOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBl
bmRpbmdMb2FkUmVxdWVzdHMoKQoreworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF9kaXNwYXRj
aFBlbmRpbmdMb2FkUmVxdWVzdHNdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpv
dmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sK
KyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGtleUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleSkpOworICAgIE5TU3RyaW5nICprZXlOUyA9
IChOU1N0cmluZyAqKWtleUNGLmdldCgpOworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2
YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IHZhbHVlKSk7CisgICAgTlNTdHJpbmcgKnZhbHVlTlMgPSAoTlNTdHJpbmcgKil2YWx1ZUNGLmdl
dCgpOworCisgICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBfc2V0UHJl
ZmVyZW5jZUZvclRlc3RXaXRoVmFsdWU6dmFsdWVOUyBmb3JLZXk6a2V5TlNdOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQoreworICAgIFtX
ZWJIaXN0b3J5IF9yZW1vdmVBbGxWaXNpdGVkTGlua3NdOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1Jl
ZiBqc1VSTCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybFN0cmluZyhBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBqc1VSTCkpOworICAgIDo6c2V0UGVyc2lzdGVudFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24odXJsU3RyaW5nLmdldCgpKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQoreworICAgIDo6
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oMCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCit7CisgICAg
bV93aW5kb3dJc0tleSA9IHdpbmRvd0lzS2V5OworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF91
cGRhdGVBY3RpdmVTdGF0ZV07Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgW1ttYWluRnJhbWUgd2Vi
Vmlld10gc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOmZsYWddOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wg
ZmxhZykKK3sKKyAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRTZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkOmZsYWddOworfQorCitzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgd2Fp
dFRvRHVtcFdhdGNoZG9nSW50ZXJ2YWwgPSAzMC4wOworCitzdGF0aWMgdm9pZCB3YWl0VW50aWxE
b25lV2F0Y2hkb2dGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCogaW5mbykKK3sK
KyAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdh
aXRVbnRpbERvbmUpCit7CisgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKKyAgICBp
ZiAobV93YWl0VG9EdW1wICYmIHNob3VsZFNldFdhaXRUb0R1bXBXYXRjaGRvZygpKQorICAgICAg
ICBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyB3YWl0VG9EdW1wV2F0Y2hkb2dJ
bnRlcnZhbCwgMCwgMCwgMCwgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQsIE5VTEwpKTsKK30K
KworaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCit7CisgICAgcmV0dXJu
IENGQXJyYXlHZXRDb3VudChvcGVuV2luZG93c1JlZik7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmlu
Z1JlZiBqc1N0cmluZykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRvcHRD
RiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNTdHJpbmcpKTsK
KyAgICBOU1N0cmluZyAqaWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7CisgICAgCisgICAg
RE9NRWxlbWVudCAqZWxlbWVudCA9IFtbbWFpbkZyYW1lIERPTURvY3VtZW50XSBnZXRFbGVtZW50
QnlJZDppZE5TXTsKKyAgICBpZCByZXAgPSBbW21haW5GcmFtZSBkYXRhU291cmNlXSByZXByZXNl
bnRhdGlvbl07CisgICAgCisgICAgaWYgKFtyZXAgY2xhc3NdID09IFtXZWJIVE1MUmVwcmVzZW50
YXRpb24gY2xhc3NdKQorICAgICAgICByZXR1cm4gWyhXZWJIVE1MUmVwcmVzZW50YXRpb24gKily
ZXAgZWxlbWVudERvZXNBdXRvQ29tcGxldGU6ZWxlbWVudF07CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVm
IG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
bmFtZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IG5hbWUpKTsKKyAgICBOU1N0cmluZyAqbmFtZU5TID0gKE5TU3RyaW5nICopbmFtZUNGLmdldCgp
OworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB2YWx1ZUNGKEFkb3B0Q0YsIEpTU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHZhbHVlKSk7CisgICAgTlNTdHJpbmcg
KnZhbHVlTlMgPSAoTlNTdHJpbmcgKil2YWx1ZUNGLmdldCgpOworCisgICAgW1ttYWluRnJhbWUg
d2ViVmlld10gX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpuYW1lTlMgdmFsdWU6dmFsdWVOU107
Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQor
eworICAgIFdlYkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOworCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5n
ZXQoKSwgMCk7CisgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRh
cmdldENGU3RyaW5nKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHRhcmdldCkpOworCisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVf
dD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAw
KTsKKyAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlv
bk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKKwor
ICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiQ2FzZUluc2Vuc2l0aXZlIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlOworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKKyAgICAgICAgICAg
IG9wdGlvbnMgfD0gV2ViRmluZE9wdGlvbnNBdFdvcmRTdGFydHM7CisgICAgICAgIGVsc2UgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0IikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkZpbmRP
cHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7CisgICAgICAgIGVsc2UgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIp
KQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICAg
ICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiV3JhcEFyb3VuZCIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJGaW5kT3B0aW9uc1dy
YXBBcm91bmQ7CisgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
b3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAgIG9wdGlv
bnMgfD0gV2ViRmluZE9wdGlvbnNTdGFydEluU2VsZWN0aW9uOworICAgIH0KKworICAgIHJldHVy
biBbW21haW5GcmFtZSB3ZWJWaWV3XSBmaW5kU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldENGU3Ry
aW5nLmdldCgpIG9wdGlvbnM6b3B0aW9uc107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCit7CisgICAgW1tXZWJQcmVmZXJlbmNl
cyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRDYWNoZU1vZGVsOmNhY2hlTW9kZWxdOworfQorCiti
b29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5h
bWUpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSkpOworICAgIE5TU3RyaW5n
ICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7CisKKyAgICAvLyBBY2NlcHQgY29t
bWFuZCBzdHJpbmdzIHdpdGggY2FwaXRhbCBsZXR0ZXJzIGZvciBmaXJzdCBsZXR0ZXIgd2l0aG91
dCB0cmFpbGluZyBjb2xvbi4KKyAgICBpZiAoIVtuYW1lTlMgaGFzU3VmZml4OkAiOiJdICYmIFtu
YW1lTlMgbGVuZ3RoXSkgeworICAgICAgICBuYW1lTlMgPSBbW1tbbmFtZU5TIHN1YnN0cmluZ1Rv
SW5kZXg6MV0gbG93ZXJjYXNlU3RyaW5nXQorICAgICAgICAgICAgc3RyaW5nQnlBcHBlbmRpbmdT
dHJpbmc6W25hbWVOUyBzdWJzdHJpbmdGcm9tSW5kZXg6MV1dCisgICAgICAgICAgICBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpAIjoiXTsKKyAgICB9CisKKyAgICBTRUwgc2VsZWN0b3IgPSBOU1Nl
bGVjdG9yRnJvbVN0cmluZyhuYW1lTlMpOworICAgIFJldGFpblB0cjxDb21tYW5kVmFsaWRhdGlv
blRhcmdldD4gdGFyZ2V0KEFkb3B0TlMsIFtbQ29tbWFuZFZhbGlkYXRpb25UYXJnZXQgYWxsb2Nd
IGluaXRXaXRoQWN0aW9uOnNlbGVjdG9yXSk7CisgICAgaWQgdmFsaWRhdG9yID0gW05TQXBwIHRh
cmdldEZvckFjdGlvbjpzZWxlY3RvciB0bzpbbWFpbkZyYW1lIHdlYlZpZXddIGZyb206dGFyZ2V0
LmdldCgpXTsKKyAgICBpZiAoIXZhbGlkYXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghW3ZhbGlkYXRvciByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFbdmFsaWRhdG9yIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IodmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTopXSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIFt2YWxpZGF0b3IgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTp0YXJnZXQu
Z2V0KCldOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
aWRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBl
bGVtZW50SWQpKTsKKyAgICBOU1N0cmluZyAqaWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYW5pbWF0aW9uTmFtZSkpOworICAgIE5TU3Ry
aW5nICpuYW1lTlMgPSAoTlNTdHJpbmcgKiluYW1lQ0YuZ2V0KCk7CisgICAgCisgICAgcmV0dXJu
IFttYWluRnJhbWUgX3BhdXNlQW5pbWF0aW9uOm5hbWVOUyBvbk5vZGU6W1ttYWluRnJhbWUgRE9N
RG9jdW1lbnRdIGdldEVsZW1lbnRCeUlkOmlkTlNdIGF0VGltZTp0aW1lXTsKK30KKworYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1l
bnRJZCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRvcHRDRiwgSlNTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZWxlbWVudElkKSk7CisgICAgTlNT
dHJpbmcgKmlkTlMgPSAoTlNTdHJpbmcgKilpZENGLmdldCgpOworICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHByb3BlcnR5TmFtZSkpOworICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNTdHJp
bmcgKiluYW1lQ0YuZ2V0KCk7CisgICAgCisgICAgcmV0dXJuIFttYWluRnJhbWUgX3BhdXNlVHJh
bnNpdGlvbk9mUHJvcGVydHk6bmFtZU5TIG9uTm9kZTpbW21haW5GcmFtZSBET01Eb2N1bWVudF0g
Z2V0RWxlbWVudEJ5SWQ6aWROU10gYXRUaW1lOnRpbWVdOworfQorCit1bnNpZ25lZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gW21haW5GcmFtZSBfbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zXTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKK3sKKyAgICBzZXRX
YWl0VG9EdW1wKHRydWUpOworICAgIFtwb2xpY3lEZWxlZ2F0ZSBzZXRDb250cm9sbGVyVG9Ob3Rp
ZnlEb25lOnRoaXNdOworICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRl
OnBvbGljeURlbGVnYXRlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmlu
Z1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJv
b2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBzb3VyY2VPcmlnaW5DRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzb3VyY2VPcmlnaW4pKTsKKyAgICBOU1N0cmluZyAqc291cmNlT3JpZ2lu
TlMgPSAoTlNTdHJpbmcgKilzb3VyY2VPcmlnaW5DRi5nZXQoKTsKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHByb3RvY29sQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZGVzdGluYXRpb25Qcm90b2NvbCkpOworICAgIE5TU3RyaW5nICpkZXN0
aW5hdGlvblByb3RvY29sTlMgPSAoTlNTdHJpbmcgKilwcm90b2NvbENGLmdldCgpOworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc3RpbmF0aW9uSG9zdCkpOworICAgIE5TU3RyaW5nICpk
ZXN0aW5hdGlvbkhvc3ROUyA9IChOU1N0cmluZyAqKWhvc3RDRi5nZXQoKTsKKyAgICBbV2ViVmll
dyBfYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlXaXRoU291cmNlT3JpZ2luOnNvdXJjZU9y
aWdpbk5TIGRlc3RpbmF0aW9uUHJvdG9jb2w6ZGVzdGluYXRpb25Qcm90b2NvbE5TIGRlc3RpbmF0
aW9uSG9zdDpkZXN0aW5hdGlvbkhvc3ROUyBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluczphbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWluc107Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdp
biwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRp
b25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQoreworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gc291cmNlT3JpZ2luQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291cmNlT3JpZ2luKSk7CisgICAgTlNTdHJpbmcgKnNv
dXJjZU9yaWdpbk5TID0gKE5TU3RyaW5nICopc291cmNlT3JpZ2luQ0YuZ2V0KCk7CisgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBwcm90b2NvbENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc3RpbmF0aW9uUHJvdG9jb2wpKTsKKyAgICBOU1N0
cmluZyAqZGVzdGluYXRpb25Qcm90b2NvbE5TID0gKE5TU3RyaW5nICopcHJvdG9jb2xDRi5nZXQo
KTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3RDRihBZG9wdENGLCBKU1N0cmluZ0Nv
cHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZXN0aW5hdGlvbkhvc3QpKTsKKyAgICBO
U1N0cmluZyAqZGVzdGluYXRpb25Ib3N0TlMgPSAoTlNTdHJpbmcgKilob3N0Q0YuZ2V0KCk7Cisg
ICAgW1dlYlZpZXcgX3JlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5V2l0aFNvdXJjZU9y
aWdpbjpzb3VyY2VPcmlnaW5OUyBkZXN0aW5hdGlvblByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9j
b2xOUyBkZXN0aW5hdGlvbkhvc3Q6ZGVzdGluYXRpb25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnM6YWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnNdOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24s
IEpTU3RyaW5nUmVmIHBvbGljeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNl
LCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc291cmNlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgc291cmNlKSk7CisgICAgTlNTdHJpbmcgKnNvdXJjZU5TID0gKE5TU3RyaW5n
ICopc291cmNlQ0YuZ2V0KCk7CisgICAgW1dlYlZpZXcgX2FkZFVzZXJTY3JpcHRUb0dyb3VwOkAi
b3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIgd29ybGQ6W1dlYlNjcmlwdFdvcmxkIHdvcmxkXSBz
b3VyY2U6c291cmNlTlMgdXJsOm5pbCB3aGl0ZWxpc3Q6bmlsIGJsYWNrbGlzdDpuaWwgaW5qZWN0
aW9uVGltZToocnVuQXRTdGFydCA/IFdlYkluamVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYkluamVj
dEF0RG9jdW1lbnRFbmQpIGluamVjdGVkRnJhbWVzOihhbGxGcmFtZXMgPyBXZWJJbmplY3RJbkFs
bEZyYW1lcyA6IFdlYkluamVjdEluVG9wRnJhbWVPbmx5KV07Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBh
bGxGcmFtZXMpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VDRihBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2UpKTsKKyAg
ICBOU1N0cmluZyAqc291cmNlTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VDRi5nZXQoKTsKKyAgICBb
V2ViVmlldyBfYWRkVXNlclN0eWxlU2hlZXRUb0dyb3VwOkAib3JnLndlYmtpdC5EdW1wUmVuZGVy
VHJlZSIgd29ybGQ6W1dlYlNjcmlwdFdvcmxkIHdvcmxkXSBzb3VyY2U6c291cmNlTlMgdXJsOm5p
bCB3aGl0ZWxpc3Q6bmlsIGJsYWNrbGlzdDpuaWwgaW5qZWN0ZWRGcmFtZXM6KGFsbEZyYW1lcyA/
IFdlYkluamVjdEluQWxsRnJhbWVzIDogV2ViSW5qZWN0SW5Ub3BGcmFtZU9ubHkpXTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkOmVuYWJsZWRdOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQp
Cit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRBc3luY2hyb25v
dXNTcGVsbENoZWNraW5nRW5hYmxlZDplbmFibGVkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXdd
IGluc3BlY3Rvcl0gc2hvdzpuaWxdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bG9zZVdlYkluc3BlY3RvcigpCit7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rv
cl0gY2xvc2U6bmlsXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7CisgICAgTlNTdHJpbmcgKnNjcmlwdE5T
ID0gKE5TU3RyaW5nICopc2NyaXB0Q0YuZ2V0KCk7CisgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXdd
IGluc3BlY3Rvcl0gZXZhbHVhdGVJbkZyb250ZW5kOm5pbCBjYWxsSWQ6Y2FsbElkIHNjcmlwdDpz
Y3JpcHROU107Cit9CisKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPFdlYlNj
cmlwdFdvcmxkPiA+IFdvcmxkTWFwOworc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCit7Cisg
ICAgc3RhdGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOworICAgIHJldHVybiBtYXA7
Cit9CisKK3Vuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChXZWJTY3JpcHRXb3JsZCAqd29ybGQpCit7
CisgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7Cisg
ICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
UmVmIHNjcmlwdCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdENGKEFkb3B0
Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNjcmlwdCkpOwor
ICAgIE5TU3RyaW5nICpzY3JpcHROUyA9IChOU1N0cmluZyAqKXNjcmlwdENGLmdldCgpOworCisg
ICAgLy8gQSB3b3JsZElEIG9mIDAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIGEgbmV3IHdvcmxkLiBB
bnkgb3RoZXIgd29ybGRJRCBjb3JyZXNwb25kcyB0byBhIHdvcmxkCisgICAgLy8gdGhhdCBpcyBj
cmVhdGVkIG9uY2UgYW5kIGNhY2hlZCBmb3JldmVyLgorICAgIFdlYlNjcmlwdFdvcmxkICp3b3Js
ZDsKKyAgICBpZiAoIXdvcmxkSUQpCisgICAgICAgIHdvcmxkID0gW1dlYlNjcmlwdFdvcmxkIHdv
cmxkXTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmV0YWluUHRyPFdlYlNjcmlwdFdvcmxkPiYgd29y
bGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICAgICAgaWYgKCF3b3JsZFNsb3QpCisgICAgICAgICAgICB3b3JsZFNsb3QuYWRvcHROUyhbW1dl
YlNjcmlwdFdvcmxkIGFsbG9jXSBpbml0XSk7CisgICAgICAgIHdvcmxkID0gd29ybGRTbG90Lmdl
dCgpOworICAgIH0KKworICAgIFttYWluRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOnNjcmlwdE5TIHdpdGhHbG9iYWxPYmplY3Q6Z2xvYmFsT2JqZWN0IGluU2Ny
aXB0V29ybGQ6d29ybGRdOworfQorCitAaW50ZXJmYWNlIEFQSVRlc3REZWxlZ2F0ZSA6IE5TT2Jq
ZWN0Cit7CisgICAgYm9vbCogbV9jb25kaXRpb247Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBBUElUZXN0RGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhDb21wbGV0aW9uQ29uZGl0aW9uOihi
b29sKiljb25kaXRpb24KK3sKKyAgICBbc3VwZXIgaW5pdF07CisgICAgQVNTRVJUKGNvbmRpdGlv
bik7CisgICAgbV9jb25kaXRpb24gPSBjb25kaXRpb247CisgICAgKm1fY29uZGl0aW9uID0gZmFs
c2U7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNl
bmRlciBkaWRGYWlsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lCit7CisgICAgcHJpbnRmKCJBUEkgVGVzdCBsb2FkIGZhaWxlZFxuIik7Cisg
ICAgKm1fY29uZGl0aW9uID0gdHJ1ZTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICop
c2VuZGVyIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvciBm
b3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworICAgIHByaW50ZigiQVBJIFRlc3QgbG9hZCBm
YWlsZWQgcHJvdmlzaW9uYWxcbiIpOworICAgICptX2NvbmRpdGlvbiA9IHRydWU7Cit9CisKKy0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGaW5pc2hMb2FkRm9yRnJhbWU6KFdl
YkZyYW1lICopZnJhbWUKK3sKKyAgICBwcmludGYoIkFQSSBUZXN0IGxvYWQgc3VjY2VlZGVkXG4i
KTsKKyAgICAqbV9jb25kaXRpb24gPSB0cnVlOworfQorCitAZW5kCisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYg
dXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCit7CisgICAgTlNBdXRvcmVsZWFzZVBvb2wg
KnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gdXRmOERhdGFDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCB1dGY4RGF0YSkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gYmFzZVVSTENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGJhc2VVUkwpKTsKKyAgICAKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3QgZnJhbWVOYW1lOkAiIiBncm91cE5hbWU6
QCIiXTsKKworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIEFQSVRlc3REZWxlZ2F0ZSAqZGVs
ZWdhdGUgPSBbW0FQSVRlc3REZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhDb21wbGV0aW9uQ29uZGl0
aW9uOiZkb25lXTsKKyAgICBbd2ViVmlldyBzZXRGcmFtZUxvYWREZWxlZ2F0ZTpkZWxlZ2F0ZV07
CisKKyAgICBbW3dlYlZpZXcgbWFpbkZyYW1lXSBsb2FkRGF0YTpbKE5TU3RyaW5nICopdXRmOERh
dGFDRi5nZXQoKSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gTUlNRVR5
cGU6QCJ0ZXh0L2h0bWwiIHRleHRFbmNvZGluZ05hbWU6QCJ1dGYtOCIgYmFzZVVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMQ0YuZ2V0KCldXTsKKyAgICAKKyAgICB3
aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0
b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1
bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRp
c3RhbnRQYXN0XV07CisgICAgICAgIFtwb29sIHJlbGVhc2VdOworICAgIH0KKyAgICAgICAgCisg
ICAgW3dlYlZpZXcgY2xvc2VdOworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworICAgIFtkZWxlZ2F0
ZSByZWxlYXNlXTsKKyAgICBbcG9vbCByZWxlYXNlXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKK3sKKyAgICBXZWJW
aWV3ICp2aWV3ID0gW21haW5GcmFtZSB3ZWJWaWV3XTsKKyAgICBbdmlldyBnb1RvQmFja0Zvcndh
cmRJdGVtOltbdmlldyBiYWNrRm9yd2FyZExpc3RdIGN1cnJlbnRJdGVtXV07Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sIGVkaXRhYmxlKQor
eworICAgIFdlYlZpZXcgKnZpZXcgPSBbbWFpbkZyYW1lIHdlYlZpZXddOworICAgIFt2aWV3IHNl
dEVkaXRhYmxlOmVkaXRhYmxlXTsKK30KKworc3RhdGljIE5TU3RyaW5nICpTeW5jaHJvbm91c0xv
YWRlclJ1bkxvb3BNb2RlID0gQCJEdW1wUmVuZGVyVHJlZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9v
cE1vZGUiOworCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDYwCitA
cHJvdG9jb2wgTlNVUkxDb25uZWN0aW9uRGVsZWdhdGUgPE5TT2JqZWN0PgorQGVuZAorI2VuZGlm
CisKK0BpbnRlcmZhY2UgU3luY2hyb25vdXNMb2FkZXIgOiBOU09iamVjdCA8TlNVUkxDb25uZWN0
aW9uRGVsZWdhdGU+Cit7CisgICAgTlNTdHJpbmcgKm1fdXNlcm5hbWU7CisgICAgTlNTdHJpbmcg
Km1fcGFzc3dvcmQ7CisgICAgQk9PTCBtX2lzRG9uZTsKK30KKysgKHZvaWQpbWFrZVJlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgd2l0aFVzZXJuYW1lOihOU1N0cmluZyAqKXVzZXJuYW1l
IHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkOworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
U3luY2hyb25vdXNMb2FkZXIgOiBOU09iamVjdAorLSAodm9pZClkZWFsbG9jCit7CisgICAgW21f
dXNlcm5hbWUgcmVsZWFzZV07CisgICAgW21fcGFzc3dvcmQgcmVsZWFzZV07CisKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKEJPT0wpY29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCit7CisgICAgcmV0dXJuIFlFUzsK
K30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSAqKWNoYWxsZW5nZQoreworICAgIGlmIChbY2hhbGxlbmdlIHByZXZpb3VzRmFpbHVyZUNv
dW50XSA9PSAwKSB7CisgICAgICAgIFJldGFpblB0cjxOU1VSTENyZWRlbnRpYWw+IGNyZWRlbnRp
YWwoQWRvcHROUywgW1tOU1VSTENyZWRlbnRpYWwgYWxsb2NdICBpbml0V2l0aFVzZXI6bV91c2Vy
bmFtZSBwYXNzd29yZDptX3Bhc3N3b3JkIHBlcnNpc3RlbmNlOk5TVVJMQ3JlZGVudGlhbFBlcnNp
c3RlbmNlRm9yU2Vzc2lvbl0pOworICAgICAgICBbW2NoYWxsZW5nZSBzZW5kZXJdIHVzZUNyZWRl
bnRpYWw6Y3JlZGVudGlhbC5nZXQoKSBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVu
Z2VdOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFtbY2hhbGxlbmdlIHNlbmRlcl0gY2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlXTsKK30KKworLSAodm9pZCljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5T
RXJyb3IgKillcnJvcgoreworICAgIHByaW50ZigiU3luY2hyb25vdXNMb2FkZXIgZmFpbGVkOiAl
c1xuIiwgW1tlcnJvciBkZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10pOworICAgIG1faXNEb25lID0g
WUVTOworfQorCistICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5l
Y3Rpb24gKiljb25uZWN0aW9uCit7CisgICAgbV9pc0RvbmUgPSBZRVM7Cit9CisKKysgKHZvaWQp
bWFrZVJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgd2l0aFVzZXJuYW1lOihOU1N0cmlu
ZyAqKXVzZXJuYW1lIHBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkCit7CisgICAgQVNTRVJU
KCFbW3JlcXVlc3QgVVJMXSB1c2VyXSk7CisgICAgQVNTRVJUKCFbW3JlcXVlc3QgVVJMXSBwYXNz
d29yZF0pOworCisgICAgU3luY2hyb25vdXNMb2FkZXIgKmRlbGVnYXRlID0gW1tTeW5jaHJvbm91
c0xvYWRlciBhbGxvY10gaW5pdF07CisgICAgZGVsZWdhdGUtPm1fdXNlcm5hbWUgPSBbdXNlcm5h
bWUgY29weV07CisgICAgZGVsZWdhdGUtPm1fcGFzc3dvcmQgPSBbcGFzc3dvcmQgY29weV07CisK
KyAgICBOU1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBbW05TVVJMQ29ubmVjdGlvbiBhbGxv
Y10gaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUgc3RhcnRJbW1lZGlh
dGVseTpOT107CisgICAgW2Nvbm5lY3Rpb24gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBj
dXJyZW50UnVuTG9vcF0gZm9yTW9kZTpTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlXTsKKyAg
ICBbY29ubmVjdGlvbiBzdGFydF07CisgICAgCisgICAgd2hpbGUgKCFkZWxlZ2F0ZS0+bV9pc0Rv
bmUpCisgICAgICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBydW5Nb2RlOlN5bmNocm9u
b3VzTG9hZGVyUnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVdXTsK
KworICAgIFtjb25uZWN0aW9uIGNhbmNlbF07CisgICAgCisgICAgW2Nvbm5lY3Rpb24gcmVsZWFz
ZV07CisgICAgW2RlbGVnYXRlIHJlbGVhc2VdOworfQorCitAZW5kCisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmlu
Z1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYgcGFzc3dvcmQpCit7CisgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS83ODgwNjk5Pi4KKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwNjAKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybFN0cmluZ0NGKEFkb3B0Q0Ys
IEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gdXNlcm5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1c2VybmFtZSkpOworICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gcGFzc3dvcmRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBwYXNzd29yZCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4g
cmVxdWVzdChBZG9wdE5TLCBbW05TVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJM
IFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsU3RyaW5nQ0YuZ2V0KCldXSk7CisKKyAgICBb
U3luY2hyb25vdXNMb2FkZXIgbWFrZVJlcXVlc3Q6cmVxdWVzdC5nZXQoKSB3aXRoVXNlcm5hbWU6
KE5TU3RyaW5nICopdXNlcm5hbWVDRi5nZXQoKSBwYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29y
ZENGLmdldCgpXTsKKyNlbmRpZgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphYm9y
dE1vZGFsKCkKK3sKKyAgICBbTlNBcHAgYWJvcnRNb2RhbF07Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6ZSkKK3sKKyAg
ICBbV2ViVmlldyBfc2V0TG9hZFJlc291cmNlc1NlcmlhbGx5OnNlcmlhbGl6ZV07Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBt
aW5pbXVtVGltZXJJbnRlcnZhbCkKK3sKKyAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0TWlu
aW11bVRpbWVySW50ZXJ2YWw6bWluaW11bVRpbWVySW50ZXJ2YWxdOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbk5h
bWUpCit7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDYwCisgICAg
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uTmFtZSwgImx0ciIpKQor
ICAgICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodDowXTsKKyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRp
cmVjdGlvbk5hbWUsICJydGwiKSkKKyAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gbWFrZUJh
c2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6MF07CisgICAgZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3sKKyAgICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0g
W1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDEwMCwg
MjApXTsKKyAgICB0ZXh0RmllbGQudGFnID0gMTsKKyAgICBbW1tbbWFpbkZyYW1lIHdlYlZpZXdd
IHdpbmRvd10gY29udGVudFZpZXddIGFkZFN1YnZpZXc6dGV4dEZpZWxkXTsKKyAgICBbdGV4dEZp
ZWxkIHJlbGVhc2VdOworICAgIAorICAgIFt0ZXh0RmllbGQgc2V0TmV4dEtleVZpZXc6W21haW5G
cmFtZSB3ZWJWaWV3XV07CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0TmV4dEtleVZpZXc6
dGV4dEZpZWxkXTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21l
SW5wdXRGaWVsZCgpCit7CisgICAgTlNWaWV3KiB0ZXh0RmllbGQgPSBbW1tbbWFpbkZyYW1lIHdl
YlZpZXddIHdpbmRvd10gY29udGVudFZpZXddIHZpZXdXaXRoVGFnOjFdOworICAgIGlmICh0ZXh0
RmllbGQpIHsKKyAgICAgICAgW3RleHRGaWVsZCByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAg
ICAgZm9jdXNXZWJWaWV3KCk7CisgICAgfQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojpmb2N1c1dlYlZpZXcoKQoreworICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1h
a2VGaXJzdFJlc3BvbmRlcjpbbWFpbkZyYW1lIHdlYlZpZXddXTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVG
YWN0b3IpCit7CisgICAgW1ttYWluRnJhbWUgd2ViVmlld10gX3NldEN1c3RvbUJhY2tpbmdTY2Fs
ZUZhY3RvcjpiYWNraW5nU2NhbGVGYWN0b3JdOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBj
aGFyKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZl
cldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbQkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgotI2ltcG9y
dCAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlRlc3RSdW5uZXIuaCIKIAogI2lt
cG9ydCAiRWRpdGluZ0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92aWRl
ci5oIgpAQCAtMTA3LDExICsxMDcsMTEgQEAgLSAoTlNJbnRlZ2VyKXRhZwogCiBAZW5kCiAKLUxh
eW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQorVGVzdFJ1bm5lcjo6
flRlc3RSdW5uZXIoKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNh
bGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dl
ZFVSTChKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxD
RihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwp
KTsKIApAQCAtMTI1LDE3ICsxMjUsMTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
RGlzYWxsb3dlZAogICAgIENGU2V0QWRkVmFsdWUoZGlzYWxsb3dlZFVSTHMsIFtyZXF1ZXN0IFVS
TF0pOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcoKQorYm9vbCBUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewog
ICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3XSBzaG91bGRDbG9zZV07CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQordm9pZCBU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsKICAgICBbV2ViQXBwbGlj
YXRpb25DYWNoZSBkZWxldGVBbGxBcHBsaWNhdGlvbkNhY2hlc107CiB9CiAKLWxvbmcgbG9uZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihK
U1N0cmluZ1JlZiB1cmwpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURp
c2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCB1cmwpKTsKICAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1
cml0eU9yaWdpbiBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3Ry
aW5nICopdXJsQ0YuZ2V0KCldXTsKQEAgLTE0NCwxMiArMTQ0LDEyIEBAIGxvbmcgbG9uZyBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXQKICAgICByZXR1cm4gdXNhZ2U7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQordm9pZCBUZXN0UnVubmVy
OjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKICAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdl
YlN0b3JhZ2VNYW5hZ2VyXSBzeW5jTG9jYWxTdG9yYWdlXTsKIH0KIAotbG9uZyBsb25nIExheW91
dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdS
ZWYgdXJsKQorbG9uZyBsb25nIFRlc3RSdW5uZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9y
aWdpbihKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxD
RihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwp
KTsKICAgICBXZWJTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBh
bGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdXJsQ0Yu
Z2V0KCldXTsKQEAgLTE1OCwxMiArMTU4LDEyIEBAIGxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bG9jYWxTdG8KICAgICByZXR1cm4gdXNhZ2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVt
YmVyKQordm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KHVuc2lnbmVkIG51bWJlcikKIHsKICAgICBbc3RvcmFnZURlbGVnYXRlIGxvZ05vdGlmaWNhdGlv
bnM6bnVtYmVyIGNvbnRyb2xsZXI6dGhpc107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiB1cmwpCit2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiB1
cmwpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKIApAQCAtMTg2LDMyICsx
ODYsMzIgQEAgSlNWYWx1ZVJlZiBvcmlnaW5zQXJyYXlUb0pTKEpTQ29udGV4dFJlZgogICAgIHJl
dHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwganNPcmlnaW5zQXJyYXksIE5V
TEwpOwogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCitKU1ZhbHVlUmVmIFRlc3RSdW5u
ZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKIHsK
ICAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0LCBbV2ViQXBwbGljYXRpb25DYWNo
ZSBvcmlnaW5zV2l0aENhY2hlXSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQWxsRGF0YWJhc2VzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQog
ewogICAgIFtbV2ViRGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcl0gZGVs
ZXRlQWxsRGF0YWJhc2VzXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRl
QWxsTG9jYWxTdG9yYWdlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdl
KCkKIHsKICAgICBbW1dlYlN0b3JhZ2VNYW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBk
ZWxldGVBbGxPcmlnaW5zXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3Rv
cmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKIHsKICAg
ICBbV2ViU3RvcmFnZU1hbmFnZXIgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsOmludGVy
dmFsXTsKIH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhM
b2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIHJl
dHVybiBvcmlnaW5zQXJyYXlUb0pTKGNvbnRleHQsIFtbV2ViU3RvcmFnZU1hbmFnZXIgc2hhcmVk
V2ViU3RvcmFnZU1hbmFnZXJdIG9yaWdpbnNdKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkK
IHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVSTCkpOwogICAgIApAQCAtMjIwLDcgKzIy
MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3QKICAgICBbb3Jp
Z2luIHJlbGVhc2VdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tG
b3J3YXJkTGlzdCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKIHsK
ICAgICBXZWJCYWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YXJkTGlzdCA9IFtbbWFpbkZyYW1lIHdl
YlZpZXddIGJhY2tGb3J3YXJkTGlzdF07CiAgICAgV2ViSGlzdG9yeUl0ZW0gKml0ZW0gPSBbW2Jh
Y2tGb3J3YXJkTGlzdCBjdXJyZW50SXRlbV0gcmV0YWluXTsKQEAgLTIzNSwyNiArMjM1LDI2IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcncKICAgICBbaXRlbSByZWxl
YXNlXTsKIH0KIAotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVk
SG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlE
ZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IG5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBuYW1lKSk7CiAgICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVD
Ri5nZXQoKTsKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5n
UmVmKVtuYW1lTlMgX3dlYl9kZWNvZGVIb3N0TmFtZV0pOwogfQogCi1KU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQor
SlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBu
YW1lKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0YsIEpTU3Ry
aW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWUpKTsKICAgICBOU1N0cmlu
ZyAqbmFtZU5TID0gKE5TU3RyaW5nICopbmFtZUNGLmdldCgpOwogICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW25hbWVOUyBfd2ViX2VuY29kZUhvc3RO
YW1lXSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQordm9pZCBU
ZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKICAgICBkaXNwbGF5V2ViVmlldygpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCit2b2lkIFRlc3RSdW5uZXI6
OmtlZXBXZWJIaXN0b3J5KCkKIHsKICAgICBpZiAoIVtXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVk
SGlzdG9yeV0pIHsKICAgICAgICAgV2ViSGlzdG9yeSAqaGlzdG9yeSA9IFtbV2ViSGlzdG9yeSBh
bGxvY10gaW5pdF07CkBAIC0yNjMsMTggKzI2MywxOCBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjprZWVwV2ViSGlzdG9yCiAgICAgfQogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6OmNvbXB1dGVk
U3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiB2YWx1ZSkKIHsgICAKICAgICByZXR1cm4gW1ttYWluRnJhbWUgd2ViVmlld10gX2NvbXB1dGVk
U3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzpjb250ZXh0IGZvckVsZW1lbnQ6dmFsdWVdOwogfQog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJl
ZUFzVGV4dCgpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6bGF5
ZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3Ry
aW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW21haW5G
cmFtZSBfbGF5ZXJUcmVlQXNUZXh0XSkpOwogICAgIHJldHVybiBzdHJpbmc7CiB9CiAKLUpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxp
c3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJ
dGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0CiB7
CiAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtET01FbGVtZW50IF9ET01FbGVtZW50RnJvbUpT
Q29udGV4dDpjb250ZXh0IHZhbHVlOm5vZGVPYmplY3RdOwogICAgIGlmICghZWxlbWVudCkKQEAg
LTI4NCw0NSArMjg0LDQ1IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29u
dHIKICAgICByZXR1cm4gbWFya2VyVGV4dDsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0
UnVubmVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51
bWJlcikgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVttYWluRnJh
bWUgcGFnZVByb3BlcnR5OnByb3BlcnR5TmFtZTpwYWdlTnVtYmVyXSkpOwogICAgIHJldHVybiBw
cm9wZXJ0eVZhbHVlOwogfQogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1h
cmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gVGVzdFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIs
IGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBp
bnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKIHsKICAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKVttYWluRnJhbWUgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHM6
cGFnZU51bWJlcjp3aWR0aDpoZWlnaHQ6bWFyZ2luVG9wOm1hcmdpblJpZ2h0Om1hcmdpbkJvdHRv
bTptYXJnaW5MZWZ0XSkpOwogICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwogfQogCi1pbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMs
IGZsb2F0IHBhZ2VIZWlnaHRJblBpeGVscykKK2ludCBUZXN0UnVubmVyOjpudW1iZXJPZlBhZ2Vz
KGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMpCiB7CiAg
ICAgcmV0dXJuIFttYWluRnJhbWUgbnVtYmVyT2ZQYWdlczpwYWdlV2lkdGhJblBpeGVsczpwYWdl
SGVpZ2h0SW5QaXhlbHNdOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
UGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK2ludCBUZXN0UnVubmVyOjpu
dW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiB7CiAgICAgcmV0
dXJuIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBVSURlbGVnYXRlXSBudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0c107CiB9CiAKLXNpemVfdCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitzaXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9y
eUl0ZW1Db3VudCgpCiB7CiAgICAgcmV0dXJuIFtbW1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRI
aXN0b3J5XSBhbGxJdGVtc10gY291bnRdOwogfQogCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAordW5zaWduZWQgVGVzdFJ1bm5lcjo6d29y
a2VyVGhyZWFkQ291bnQoKSBjb25zdAogewogICAgIHJldHVybiBbV2ViV29ya2Vyc1ByaXZhdGUg
d29ya2VyVGhyZWFkQ291bnRdOwogfQogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gVGVzdFJ1bm5lcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKICAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibWFjIikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQordm9pZCBUZXN0UnVubmVyOjpub3RpZnlE
b25lKCkKIHsKICAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdv
cmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCiAgICAgICAgIGR1bXAoKTsKQEAgLTM2MiwxMiAr
MzYyLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RkOjpzdHJpbmcgcmVzb3VyY2VSb290QWIKICAgICBy
ZXR1cm4gdGVzdFBhdGhPclVSTC5zdWJzdHIoMCwgaW5kZXhPZlNlcGFyYXRvckFmdGVyRGlyZWN0
b3J5TmFtZShleHBlY3RlZFJvb3ROYW1lLCB0ZXN0UGF0aE9yVVJMKSk7CiB9CiAKLUpTU3RyaW5n
UmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBsb2NhbFJlc291cmNlSlNTdHJpbmcpCitKU1N0cmluZ1Jl
ZiBUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1N0cmluZ1JlZiBsb2NhbFJlc291cmNlSlNTdHJpbmcpCiB7CiAgICAgLy8gVGhlIHBhc3NlZCBp
biBwYXRoIHdpbGwgYmUgYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgcmVzb3VyY2Ugc3RhcnRpbmcK
ICAgICAvLyB3aXRoICIvdG1wIiBvciAiL3RtcC9MYXlvdXRUZXN0cyIsIG9wdGlvbmFsbHkgc3Rh
cnRpbmcgd2l0aCB0aGUgZXhwbGljaXQgZmlsZTovLyBwcm90b2NvbC4KICAgICAvLyAvdG1wIG1h
cHMgdG8gRFVNUFJFTkRFUlRSRUVfVEVNUCwgYW5kIC90bXAvTGF5b3V0VGVzdHMgbWFwcyB0byBM
T0NBTF9SRVNPVVJDRV9ST09ULgotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIHdvcmsg
b24gYWxsICpuaXggcGxhdGZvcm1zIGFuZCBjYW4gYmUgbW92ZWQgaW50byBMYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAuCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgd29yayBvbiBhbGwg
Km5peCBwbGF0Zm9ybXMgYW5kIGNhbiBiZSBtb3ZlZCBpbnRvIFRlc3RSdW5uZXIuY3BwLgogICAg
IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUm9vdE5hbWU7CiAgICAgc3RkOjpzdHJpbmcgYWJzb2x1dGVQ
YXRoVG9SZXNvdXJjZVJvb3Q7CiAgICAgc3RkOjpzdHJpbmcgbG9jYWxSZXNvdXJjZVN0cmluZyA9
IHN0cmluZ0Zyb21KU1N0cmluZyhsb2NhbFJlc291cmNlSlNTdHJpbmcpOwpAQCAtMzkzLDcgKzM5
Myw3IEBAIEpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG8KICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYWJzb2x1dGVQYXRoVG9Mb2NhbFJlc291
cmNlLmNfc3RyKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQo
SlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit2b2lkIFRlc3RSdW5uZXI6OnF1
ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKIHsKICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHVybENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOwogICAgIE5TU3RyaW5nICp1cmxOUyA9IChOU1N0cmlu
ZyAqKXVybENGLmdldCgpOwpAQCAtNDA1LDEyICs0MDUsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cXVldWVMb2FkKEpTUwogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5l
dyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgbmV3QWNjZXB0c0VkaXRpbmcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgbmV3QWNjZXB0c0VkaXRp
bmcpCiB7CiAgICAgWyhFZGl0aW5nRGVsZWdhdGUgKilbW21haW5GcmFtZSB3ZWJWaWV3XSBlZGl0
aW5nRGVsZWdhdGVdIHNldEFjY2VwdHNFZGl0aW5nOm5ld0FjY2VwdHNFZGl0aW5nXTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFs
d2F5c0FjY2VwdENvb2tpZXMpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tp
ZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQogewogICAgIGlmIChhbHdheXNBY2NlcHRDb29r
aWVzID09IG1fYWx3YXlzQWNjZXB0Q29va2llcykKICAgICAgICAgcmV0dXJuOwpAQCAtNDIwLDI0
ICs0MjAsMjQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZQogICAg
IFtXZWJQcmVmZXJlbmNlcyBfc2V0Q3VycmVudE5ldHdvcmtMb2FkZXJTZXNzaW9uQ29va2llQWNj
ZXB0UG9saWN5OmNvb2tpZUFjY2VwdFBvbGljeV07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit2
b2lkIFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25n
IHNpemUpCiB7CiAgICAgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgc2V0TWF4aW11bVNpemU6c2l6ZV07
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmln
aW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAg
ICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2Nd
IGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMTo4MDAw
Il1dOwogICAgIFtbb3JpZ2luIGFwcGxpY2F0aW9uQ2FjaGVRdW90YU1hbmFnZXJdIHNldFF1b3Rh
OnF1b3RhXTsKICAgICBbb3JpZ2luIHJlbGVhc2VdOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykKIHsKICAg
ICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkOmZsYWddOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRv
ZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wg
YXV0b2ZpbGxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxsZWQpCiB7CiAgICAg
RE9NRWxlbWVudCAqZWxlbWVudCA9IFtET01FbGVtZW50IF9ET01FbGVtZW50RnJvbUpTQ29udGV4
dDpjb250ZXh0IHZhbHVlOm5vZGVPYmplY3RdOwogICAgIGlmICghZWxlbWVudCB8fCAhW2VsZW1l
bnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTElucHV0RWxlbWVudCBjbGFzc11dKQpAQCAtNDQ2LDcg
KzQ0Niw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQKICAgICBb
KERPTUhUTUxJbnB1dEVsZW1lbnQgKillbGVtZW50IF9zZXRBdXRvZmlsbGVkOmF1dG9maWxsZWRd
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkK
IHsKICAgICBpZiAoc2V0RGVsZWdhdGUpIHsKICAgICAgICAgW3BvbGljeURlbGVnYXRlIHNldFBl
cm1pc3NpdmU6cGVybWlzc2l2ZV07CkBAIC00NTUsMzAgKzQ1NSwzMCBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpCiAgICAgICAgIFtbbWFpbkZyYW1lIHdlYlZpZXdd
IHNldFBvbGljeURlbGVnYXRlOm5pbF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBUZXN0UnVu
bmVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKIHsgICAgCiAg
ICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2Nd
IGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZmlsZTovLy8iXV07CiAgICAgW1tv
cmlnaW4gZGF0YWJhc2VRdW90YU1hbmFnZXJdIHNldFF1b3RhOnF1b3RhXTsKICAgICBbb3JpZ2lu
IHJlbGVhc2VdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQordm9p
ZCBUZXN0UnVubmVyOjpnb0JhY2soKQogewogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIGdvQmFj
a107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9v
bCBkZWZlcnMpCit2b2lkIFRlc3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMp
CiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOmRlZmVyc107
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShi
b29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc2NoZW1lQ0ZTdHJpbmcoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgc2NoZW1lKSk7CiAgICAgW1dlYlZpZXcgX3NldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW46Zm9yYmlkZGVuIGZvclVSTFNjaGVtZTooTlNTdHJpbmcgKilzY2hlbWVD
RlN0cmluZy5nZXQoKV07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29s
IGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJs
ZSBnYW1tYSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wg
Y2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJs
ZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogICAgIC8vIER1
bXBSZW5kZXJUcmVlIGNvbmZpZ3VyZWQgdGhlIFdlYlZpZXcgdG8gdXNlIFdlYkRldmljZU9yaWVu
dGF0aW9uUHJvdmlkZXJNb2NrLgogICAgIGlkPFdlYkRldmljZU9yaWVudGF0aW9uUHJvdmlkZXI+
IHByb3ZpZGVyID0gW1ttYWluRnJhbWUgd2ViVmlld10gX2RldmljZU9yaWVudGF0aW9uUHJvdmlk
ZXJdOwpAQCAtNDg4LDE0ICs0ODgsMTQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0RldmljZQogICAgIFtvcmllbnRhdGlvbiByZWxlYXNlXTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5KQogewogICAgIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24gKnBvc2l0
aW9uID0gW1tXZWJHZW9sb2NhdGlvblBvc2l0aW9uIGFsbG9jXSBpbml0V2l0aFRpbWVzdGFtcDpj
dXJyZW50VGltZSgpIGxhdGl0dWRlOmxhdGl0dWRlIGxvbmdpdHVkZTpsb25naXR1ZGUgYWNjdXJh
Y3k6YWNjdXJhY3ldOwogICAgIFtbTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIgc2hhcmVkXSBzZXRQ
b3NpdGlvbjpwb3NpdGlvbl07CiAgICAgW3Bvc2l0aW9uIHJlbGVhc2VdOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNT
dHJpbmdSZWYgbWVzc2FnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJy
b3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCiB7CiAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBtZXNzYWdlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgbWVzc2FnZSkpOwogICAgIE5TU3RyaW5nICptZXNzYWdlTlMgPSAoTlNTdHJp
bmcgKiltZXNzYWdlQ0YuZ2V0KCk7CkBAIC01MDMsMzEgKzUwMywzMSBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAgW1tNb2NrR2VvbG9jYXRpb25Qcm92aWRl
ciBzaGFyZWRdIHNldEVycm9yOmVycm9yXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit2b2lkIFRlc3RSdW5uZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogewogICAgIHNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIFVJ
RGVsZWdhdGVdIGRpZFNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb25dOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYg
cmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCit2b2lkIFRl
c3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRv
dWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKIHsKICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMu
CiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4
NS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0Nv
bnRleHRSZWYgaW5wdXRFbGVtZW50KQordm9pZCBUZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0
KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFz
ZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzY0
ODAxMDg+CiAgICAgc3RhdGljIFdlYkljb25EYXRhYmFzZSAqc2hhcmVkV2ViSWNvbkRhdGFiYXNl
ID0gTlVMTDsKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRJY29uRGF0YWJhCiAgICAgW3NoYXJlZFdlYkljb25EYXRhYmFzZSBzZXRFbmFibGVkOmljb25E
YXRhYmFzZUVuYWJsZWRdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWlu
RnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TWFp
bkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCiB7CiAgICAgTlNWaWV3ICpkb2N1bWVu
dFZpZXcgPSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgCkBAIC01
NDksNzkgKzU0OSw3OSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJ
CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVyOmZp
cnN0UmVzcG9uZGVyXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZDpwcml2YXRlQnJvd3NpbmdFbmFibGVkXTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
W1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRYU1NBdWRpdG9yRW5hYmxlZDpl
bmFibGVkXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVu
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBw
cmVmZXJlbmNlc10gc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZDplbmFibGVkXTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNl
dFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZDplbmFibGVkXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFi
bGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJM
cyhib29sIGVuYWJsZWQpCiB7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2Vz
XSBzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczplbmFibGVkXTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJv
b2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMczplbmFibGVkXTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBwb3B1cEJs
b2NraW5nRW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Ym9vbCBwb3B1cEJsb2NraW5nRW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJhbWUgd2ViVmlld10g
cHJlZmVyZW5jZXNdIHNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHk6IXBv
cHVwQmxvY2tpbmdFbmFibGVkXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UGx1Z2luc0VuYWJsZWQoYm9vbCBwbHVnaW5zRW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
UGx1Z2luc0VuYWJsZWQoYm9vbCBwbHVnaW5zRW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJhbWUg
d2ViVmlld10gcHJlZmVyZW5jZXNdIHNldFBsdWdJbnNFbmFibGVkOnBsdWdpbnNFbmFibGVkXTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3
XSBwcmVmZXJlbmNlc10gc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZDplbmFibGVkXTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlv
bkVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5r
RGV0ZWN0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmll
d10gc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6ZW5hYmxlZF07CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29s
IGN5Y2xlcykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
KGJvb2wgY3ljbGVzKQogewogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50czpjeWNsZXNdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKIHsKICAg
ICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0RGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJk
QmVoYXZpb3JVc2VCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlIHRvOmZsYWddOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFn
KQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQog
ewogICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkOmZsYWddOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit2b2lkIFRlc3RSdW5uZXI6
OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXRoKSk7CiAgICAgTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOihOU1N0cmluZyAqKXBhdGhDRi5nZXQoKV07CiAgICAgW1tXZWJQcmVmZXJlbmNl
cyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uOnVybF07CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQogewogICAgIERPTUVsZW1lbnQg
KmVsZW1lbnQgPSBbRE9NRWxlbWVudCBfRE9NRWxlbWVudEZyb21KU0NvbnRleHQ6Y29udGV4dCB2
YWx1ZTpub2RlT2JqZWN0XTsKICAgICBpZiAoIWVsZW1lbnQgfHwgIVtlbGVtZW50IGlzS2luZE9m
Q2xhc3M6W0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3NdXSkKQEAgLTYzMSwyMiArNjMxLDIyIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXMKICAgICBbKERPTUhUTUxJ
bnB1dEVsZW1lbnQgKillbGVtZW50IF9zZXRWYWx1ZUZvclVzZXI6KE5TU3RyaW5nICopdmFsdWVD
Ri5nZXQoKV07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVk
aWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFZpZXdNb2Rl
TWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCiB7CiAgICAgW1tXZWJQcmVm
ZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk6
Tk9dOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2Fk
UmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMo
KQogewogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF9kaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVz
dHNdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2Uo
SlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBrZXlDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXkpKTsKICAgICBOU1N0cmluZyAqa2V5TlMgPSAo
TlNTdHJpbmcgKilrZXlDRi5nZXQoKTsKQEAgLTY1NywzNCArNjU3LDM0IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5k
YXJkUHJlZmVyZW5jZXNdIF9zZXRQcmVmZXJlbmNlRm9yVGVzdFdpdGhWYWx1ZTp2YWx1ZU5TIGZv
cktleTprZXlOU107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZp
c2l0ZWRMaW5rcygpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCiB7
CiAgICAgW1dlYkhpc3RvcnkgX3JlbW92ZUFsbFZpc2l0ZWRMaW5rc107CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpT
U3RyaW5nUmVmIGpzVVJMKQordm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxl
U2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHVybFN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBqc1VSTCkp
OwogICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24odXJsU3RyaW5nLmdl
dCgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNl
clN0eWxlU2hlZXQoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVT
aGVldCgpCiB7CiAgICAgOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbigwKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5k
b3dJc0tleSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tl
eSkKIHsKICAgICBtX3dpbmRvd0lzS2V5ID0gd2luZG93SXNLZXk7CiAgICAgW1ttYWluRnJhbWUg
d2ViVmlld10gX3VwZGF0ZUFjdGl2ZVN0YXRlXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBbW21h
aW5GcmFtZSB3ZWJWaWV3XSBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6ZmxhZ107CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkOmZsYWddOwogfQpAQCAtNjkzLDIyICs2OTMs
MjIgQEAgc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHdhaXRUb0R1bXBXYQogCiBzdGF0aWMg
dm9pZCB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwg
dm9pZCogaW5mbykKIHsKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKTsKKyAgICBnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJGaXJlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1w
KGJvb2wgd2FpdFVudGlsRG9uZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFRvRHVtcChib29s
IHdhaXRVbnRpbERvbmUpCiB7CiAgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKICAg
ICBpZiAobV93YWl0VG9EdW1wICYmIHNob3VsZFNldFdhaXRUb0R1bXBXYXRjaGRvZygpKQogICAg
ICAgICBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coQ0ZSdW5Mb29wVGltZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyB3YWl0VG9EdW1wV2F0Y2hk
b2dJbnRlcnZhbCwgMCwgMCwgMCwgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQsIE5VTEwpKTsK
IH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCitpbnQgVGVzdFJ1
bm5lcjo6d2luZG93Q291bnQoKQogewogICAgIHJldHVybiBDRkFycmF5R2V0Q291bnQob3Blbldp
bmRvd3NSZWYpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1
dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYganNTdHJpbmcpCitib29sIFRl
c3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmlu
Z1JlZiBqc1N0cmluZykKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0YoQWRvcHRD
RiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwganNTdHJpbmcpKTsK
ICAgICBOU1N0cmluZyAqaWROUyA9IChOU1N0cmluZyAqKWlkQ0YuZ2V0KCk7CkBAIC03MjIsNyAr
NzIyLDcgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQo
SlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6OmV4
ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQogewogICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWUpKTsKICAgICBOU1N0cmluZyAqbmFtZU5TID0gKE5T
U3RyaW5nICopbmFtZUNGLmdldCgpOwpAQCAtNzMzLDcgKzczMyw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEoKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfZXhl
Y3V0ZUNvcmVDb21tYW5kQnlOYW1lOm5hbWVOUyB2YWx1ZTp2YWx1ZU5TXTsKIH0KIAotYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNT
dHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkpCitib29sIFRlc3RSdW5u
ZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwg
SlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQogewogICAgIFdlYkZpbmRPcHRpb25zIG9wdGlvbnMg
PSAwOwogCkBAIC03NjksMTIgKzc2OSwxMiBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpm
aW5kU3RyaW5nKEpTCiAgICAgcmV0dXJuIFtbbWFpbkZyYW1lIHdlYlZpZXddIGZpbmRTdHJpbmc6
KE5TU3RyaW5nICopdGFyZ2V0Q0ZTdHJpbmcuZ2V0KCkgb3B0aW9uczpvcHRpb25zXTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2FjaGVNb2RlbCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2FjaGVNb2RlbCkKIHsKICAgICBb
W1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIHNldENhY2hlTW9kZWw6Y2FjaGVN
b2RlbF07CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQo
SlNTdHJpbmdSZWYgbmFtZSkKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0
cmluZ1JlZiBuYW1lKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZUNGKEFkb3B0
Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWUpKTsKICAg
ICBOU1N0cmluZyAqbmFtZU5TID0gKE5TU3RyaW5nICopbmFtZUNGLmdldCgpOwpAQCAtNzk4LDcg
Kzc5OCw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWIKICAgICBy
ZXR1cm4gW3ZhbGlkYXRvciB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOnRhcmdldC5nZXQoKV07
CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0
cmluZ1JlZiBlbGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBK
U1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBpZENG
KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGVsZW1l
bnRJZCkpOwogICAgIE5TU3RyaW5nICppZE5TID0gKE5TU3RyaW5nICopaWRDRi5nZXQoKTsKQEAg
LTgwOCw3ICs4MDgsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlv
CiAgICAgcmV0dXJuIFttYWluRnJhbWUgX3BhdXNlQW5pbWF0aW9uOm5hbWVOUyBvbk5vZGU6W1tt
YWluRnJhbWUgRE9NRG9jdW1lbnRdIGdldEVsZW1lbnRCeUlkOmlkTlNdIGF0VGltZTp0aW1lXTsK
IH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3Ry
aW5nUmVmIGVsZW1lbnRJZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpT
U3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGlkQ0Yo
QWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZWxlbWVu
dElkKSk7CiAgICAgTlNTdHJpbmcgKmlkTlMgPSAoTlNTdHJpbmcgKilpZENGLmdldCgpOwpAQCAt
ODE4LDE5ICs4MTgsMTkgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0
aQogICAgIHJldHVybiBbbWFpbkZyYW1lIF9wYXVzZVRyYW5zaXRpb25PZlByb3BlcnR5Om5hbWVO
UyBvbk5vZGU6W1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIGdldEVsZW1lbnRCeUlkOmlkTlNdIGF0
VGltZTp0aW1lXTsKIH0KIAotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIHJldHVybiBbbWFpbkZyYW1lIF9udW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnNdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0
Rm9yUG9saWN5RGVsZWdhdGUoKQordm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdh
dGUoKQogewogICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7CiAgICAgW3BvbGljeURlbGVnYXRlIHNl
dENvbnRyb2xsZXJUb05vdGlmeURvbmU6dGhpc107CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10g
c2V0UG9saWN5RGVsZWdhdGU6cG9saWN5RGVsZWdhdGVdOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3Vy
Y2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRl
c3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3ZvaWQgVGVz
dFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNl
T3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0
aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW5DRihBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2VPcmlnaW4pKTsKICAgICBOU1N0cmlu
ZyAqc291cmNlT3JpZ2luTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VPcmlnaW5DRi5nZXQoKTsKQEAg
LTg0MSw3ICs4NDEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nl
CiAgICAgW1dlYlZpZXcgX2FkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5V2l0aFNvdXJjZU9y
aWdpbjpzb3VyY2VPcmlnaW5OUyBkZXN0aW5hdGlvblByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9j
b2xOUyBkZXN0aW5hdGlvbkhvc3Q6ZGVzdGluYXRpb25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnM6YWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnNdOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1Jl
ZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5n
UmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3Zv
aWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdS
ZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmlu
Z1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7
CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VPcmlnaW5DRihBZG9wdENGLCBKU1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2VPcmlnaW4pKTsKICAg
ICBOU1N0cmluZyAqc291cmNlT3JpZ2luTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VPcmlnaW5DRi5n
ZXQoKTsKQEAgLTg1Miw0NiArODUyLDQ2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
bW92ZU9yaWdpbkEKICAgICBbV2ViVmlldyBfcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnlXaXRoU291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbk5TIGRlc3RpbmF0aW9uUHJvdG9jb2w6ZGVz
dGluYXRpb25Qcm90b2NvbE5TIGRlc3RpbmF0aW9uSG9zdDpkZXN0aW5hdGlvbkhvc3ROUyBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWluczphbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluc107CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1Jl
ZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KQordm9pZCBUZXN0UnVubmVyOjpzZXRT
Y3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGlj
eSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQs
IGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5n
UmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHNvdXJjZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHNvdXJjZSkpOwogICAgIE5TU3RyaW5nICpzb3VyY2VOUyA9
IChOU1N0cmluZyAqKXNvdXJjZUNGLmdldCgpOwogICAgIFtXZWJWaWV3IF9hZGRVc2VyU2NyaXB0
VG9Hcm91cDpAIm9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUiIHdvcmxkOltXZWJTY3JpcHRXb3Js
ZCB3b3JsZF0gc291cmNlOnNvdXJjZU5TIHVybDpuaWwgd2hpdGVsaXN0Om5pbCBibGFja2xpc3Q6
bmlsIGluamVjdGlvblRpbWU6KHJ1bkF0U3RhcnQgPyBXZWJJbmplY3RBdERvY3VtZW50U3RhcnQg
OiBXZWJJbmplY3RBdERvY3VtZW50RW5kKSBpbmplY3RlZEZyYW1lczooYWxsRnJhbWVzID8gV2Vi
SW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJJbmplY3RJblRvcEZyYW1lT25seSldOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3Vy
Y2UsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc291cmNlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgc291cmNlKSk7CiAgICAgTlNTdHJpbmcgKnNvdXJjZU5TID0gKE5TU3RyaW5n
ICopc291cmNlQ0YuZ2V0KCk7CiAgICAgW1dlYlZpZXcgX2FkZFVzZXJTdHlsZVNoZWV0VG9Hcm91
cDpAIm9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUiIHdvcmxkOltXZWJTY3JpcHRXb3JsZCB3b3Js
ZF0gc291cmNlOnNvdXJjZU5TIHVybDpuaWwgd2hpdGVsaXN0Om5pbCBibGFja2xpc3Q6bmlsIGlu
amVjdGVkRnJhbWVzOihhbGxGcmFtZXMgPyBXZWJJbmplY3RJbkFsbEZyYW1lcyA6IFdlYkluamVj
dEluVG9wRnJhbWVPbmx5KV07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERl
dmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJhbWUg
d2ViVmlld10gcHJlZmVyZW5jZXNdIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQ6ZW5hYmxlZF07
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFtbW21haW5GcmFt
ZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQ6ZW5hYmxlZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNw
ZWN0b3IoKQordm9pZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKCkKIHsKICAgICBbW1tt
YWluRnJhbWUgd2ViVmlld10gaW5zcGVjdG9yXSBzaG93Om5pbF07CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xv
c2VXZWJJbnNwZWN0b3IoKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBpbnNwZWN0b3Jd
IGNsb3NlOm5pbF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNT
dHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7CiAgICAgTlNT
dHJpbmcgKnNjcmlwdE5TID0gKE5TU3RyaW5nICopc2NyaXB0Q0YuZ2V0KCk7CkBAIC05MTYsMTIg
KzkxNiwxMiBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoV2ViU2NyaXB0V29ybGQgCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RS
ZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RS
ZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBzY3JpcHRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzY3JpcHQpKTsKICAgICBOU1N0cmluZyAqc2NyaXB0TlMgPSAoTlNTdHJp
bmcgKilzY3JpcHRDRi5nZXQoKTsKQEAgLTk3OCw3ICs5NzgsNyBAQCAtICh2b2lkKXdlYlZpZXc6
KFdlYlZpZXcgKilzZW5kZXIgZGlkRmluCiAKIEBlbmQKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0
YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdE5ld1dpbmRv
d0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVS
TCkKIHsKICAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wg
YWxsb2NdIGluaXRdOwogCkBAIC0xMDA1LDEzICsxMDA1LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFwaVRlc3ROZXdXaW4KICAgICBbcG9vbCByZWxlYXNlXTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKIHsK
ICAgICBXZWJWaWV3ICp2aWV3ID0gW21haW5GcmFtZSB3ZWJWaWV3XTsKICAgICBbdmlldyBnb1Rv
QmFja0ZvcndhcmRJdGVtOltbdmlldyBiYWNrRm9yd2FyZExpc3RdIGN1cnJlbnRJdGVtXV07CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sIGVk
aXRhYmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCBlZGl0YWJs
ZSkKIHsKICAgICBXZWJWaWV3ICp2aWV3ID0gW21haW5GcmFtZSB3ZWJWaWV3XTsKICAgICBbdmll
dyBzZXRFZGl0YWJsZTplZGl0YWJsZV07CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCArICh2b2lkKW1h
a2VSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1CiAKIEBlbmQKIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5n
UmVmIHVzZXJuYW1lLCBKU1N0cmluZ1JlZiBwYXNzd29yZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXV0
aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHVzZXJuYW1lLCBK
U1N0cmluZ1JlZiBwYXNzd29yZCkKIHsKICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzc4ODA2
OTk+LgogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA2MApAQCAtMTEw
NiwyMiArMTEwNiwyMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVT
CiAjZW5kaWYKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit2
b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewogICAgIFtOU0FwcCBhYm9ydE1vZGFsXTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJv
b2wgc2VyaWFsaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9v
bCBzZXJpYWxpemUpCiB7CiAgICAgW1dlYlZpZXcgX3NldExvYWRSZXNvdXJjZXNTZXJpYWxseTpz
ZXJpYWxpemVdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGlt
ZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCit2b2lkIFRlc3RSdW5uZXI6
OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsK
ICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0TWluaW11bVRpbWVySW50ZXJ2YWw6bWluaW11
bVRpbWVySW50ZXJ2YWxdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0
RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbk5hbWUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uTmFtZSkKIHsKICNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwNjAKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhkaXJlY3Rpb25OYW1lLCAibHRyIikpCkBAIC0xMTMzLDcgKzExMzMsNyBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0CiAjZW5kaWYKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCit2b2lkIFRl
c3RSdW5uZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQogewogICAgIE5TVGV4dEZpZWxkICp0ZXh0
RmllbGQgPSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgMTAwLCAyMCldOwogICAgIHRleHRGaWVsZC50YWcgPSAxOwpAQCAtMTE0NCw3ICsxMTQ0LDcg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdQogICAgIFtbbWFpbkZy
YW1lIHdlYlZpZXddIHNldE5leHRLZXlWaWV3OnRleHRGaWVsZF07CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQordm9pZCBUZXN0UnVubmVy
OjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKICAgICBOU1ZpZXcqIHRleHRGaWVsZCA9IFtb
W1ttYWluRnJhbWUgd2ViVmlld10gd2luZG93XSBjb250ZW50Vmlld10gdmlld1dpdGhUYWc6MV07
CiAgICAgaWYgKHRleHRGaWVsZCkgewpAQCAtMTE1MywzNyArMTE1MywzNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJCiAgICAgfQogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQordm9pZCBUZXN0UnVubmVyOjpmb2N1c1dlYlZp
ZXcoKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJzdFJlc3Bv
bmRlcjpbbWFpbkZyYW1lIHdlYlZpZXddXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCit2b2lk
IFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFj
dG9yKQogewogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIF9zZXRDdXN0b21CYWNraW5nU2NhbGVG
YWN0b3I6YmFja2luZ1NjYWxlRmFjdG9yXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit2
b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5n
UmVmIHRpdGxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQordm9pZCBUZXN0UnVubmVyOjpy
ZXNldFBhZ2VWaXNpYmlsaXR5KCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2Vu
ZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpzZW5kV2Vi
SW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmlu
Z1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpkZWxpdmVy
V2ViSW50ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURl
bGVnYXRlLm1tCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAi
RHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLmgi
CiAjaW1wb3J0ICJFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJMYXlvdXRUZXN0
Q29udHJvbGxlci5oIgorI2ltcG9ydCAiVGVzdFJ1bm5lci5oIgogI2ltcG9ydCA8V2ViS2l0L1dl
YkFwcGxpY2F0aW9uQ2FjaGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTgwLDEwICs4MCwxMCBA
QCAtICh2b2lkKW1vZGFsV2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhCiAKIC0gKHZvaWQpd2Vi
Vmlld1J1bk1vZGFsOihXZWJWaWV3ICopc2VuZGVyCiB7Ci0gICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zZXRXaW5kb3dJc0tleShmYWxzZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldFdpbmRvd0lz
S2V5KGZhbHNlKTsKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKG1vZGFsV2luZG93V2lsbENsb3NlOikg
bmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICBbTlNB
cHAgcnVuTW9kYWxGb3JXaW5kb3c6W3NlbmRlciB3aW5kb3ddXTsKLSAgICBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPnNldFdpbmRvd0lzS2V5KHRydWUpOworICAgIGdUZXN0UnVubmVyLT5zZXRXaW5k
b3dJc0tleSh0cnVlKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHJ1
bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0
aWF0ZWRCeUZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCkBAIC0xMTEsNyArMTExLDcgQEAgLSAoQk9P
TCl3ZWJWaWV3OihXZWJWaWV3ICopYyBydW5CZWZvcmVVbgogICAgIGlmICghZG9uZSkKICAgICAg
ICAgcHJpbnRmKCJDT05GSVJNIE5BVklHQVRJT046ICVzXG4iLCBbbWVzc2FnZSBVVEY4U3RyaW5n
XSk7CiAgICAgCi0gICAgcmV0dXJuICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3VsZFN0YXlP
blBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKCk7CisgICAgcmV0dXJuICFnVGVzdFJ1bm5l
ci0+c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKTsKIH0KIAogCkBA
IC0xMjUsMjUgKzEyNSwyNSBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZHJh
Z0ltCiAKIC0gKHZvaWQpd2ViVmlld0ZvY3VzOihXZWJWaWV3ICopd2ViVmlldwogewotICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+c2V0V2luZG93SXNLZXkodHJ1ZSk7CisgICAgZ1Rlc3RSdW5u
ZXItPnNldFdpbmRvd0lzS2V5KHRydWUpOwogfQogCiAtICh2b2lkKXdlYlZpZXdVbmZvY3VzOihX
ZWJWaWV3ICopd2ViVmlldwogewotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0V2luZG93
SXNLZXkoZmFsc2UpOworICAgIGdUZXN0UnVubmVyLT5zZXRXaW5kb3dJc0tleShmYWxzZSk7CiB9
CiAKIC0gKFdlYlZpZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGNyZWF0ZVdlYlZpZXdX
aXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAogewotICAgIGlmICghZ0xheW91dFRl
c3RDb250cm9sbGVyLT5jYW5PcGVuV2luZG93cygpKQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmNh
bk9wZW5XaW5kb3dzKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgd2FpdFVudGlsRG9uZSBoYXMgYmVlbiBjYWxsZWQuCi0gICAgQVNTRVJUKGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcCgpKTsKKyAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIt
PndhaXRUb0R1bXAoKSk7CiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gY3JlYXRlV2ViVmlld0Fu
ZE9mZnNjcmVlbldpbmRvdygpOwogICAgIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXIt
Pm5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5u
ZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2ViVmlldyBfbG9hZEJh
Y2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKICAgICByZXR1cm4gW3dl
YlZpZXcgYXV0b3JlbGVhc2VdOwpAQCAtMTUzLDcgKzE1Myw3IEBAIC0gKHZvaWQpd2ViVmlld0Ns
b3NlOihXZWJWaWV3ICopc2VuZGVyCiB7CiAgICAgTlNXaW5kb3cqIHdpbmRvdyA9IFtzZW5kZXIg
d2luZG93XTsKICAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5jYWxsQ2xvc2VPbldl
YlZpZXdzKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5jYWxsQ2xvc2VPbldlYlZpZXdzKCkpCiAg
ICAgICAgIFtzZW5kZXIgY2xvc2VdOwogICAgIAogICAgIFt3aW5kb3cgY2xvc2VdOwpAQCAtMTYx
LDcgKzE2MSw3IEBAIC0gKHZvaWQpd2ViVmlld0Nsb3NlOihXZWJWaWV3ICopc2VuZGVyCiAKIC0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBmcmFtZTooV2ViRnJhbWUgKilmcmFtZSBl
eGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4g
KilvcmlnaW4gZGF0YWJhc2U6KE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCiB7Ci0gICAg
aWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERhdGFiYXNlQ2FsbGJhY2tz
KCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBEYXRhYmFzZUNhbGxiYWNr
cygpKSB7CiAgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4
Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOnslcywgJXMsICVpfSBkYXRhYmFz
ZTolc1xuIiwgW1tvcmlnaW4gcHJvdG9jb2xdIFVURjhTdHJpbmddLCBbW29yaWdpbiBob3N0XSBV
VEY4U3RyaW5nXSwgCiAgICAgICAgICAgICBbb3JpZ2luIHBvcnRdLCBbZGF0YWJhc2VJZGVudGlm
aWVyIFVURjhTdHJpbmddKTsKICAgICB9CkBAIC0xNzIsNyArMTcyLDcgQEAgLSAodm9pZCl3ZWJW
aWV3OihXZWJWaWV3ICopc2VuZGVyIGZyYW1lOgogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
KilzZW5kZXIgZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0eU9y
aWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4gdG90YWxTcGFjZU5lZWRlZDooTlNVSW50
ZWdlcil0b3RhbFNwYWNlTmVlZGVkCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpKSB7CisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2Fs
bGJhY2tzKCkpIHsKICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIG51bWJlcnMgZnJvbSAzMDAwMCAt
IDM5OTk5IHdpbGwgb3V0cHV0IGFzIDMwMDAwLgogICAgICAgICAvLyBSb3VuZGluZyB1cCBvciBk
b3duIG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAgICAvLyBz
dWZmaWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdl
IHdlcmUKQEAgLTE4Miw3ICsxODIsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5k
ZXIgZXhjZWVkCiAgICAgICAgICAgICBbW29yaWdpbiBwcm90b2NvbF0gVVRGOFN0cmluZ10sIFtb
b3JpZ2luIGhvc3RdIFVURjhTdHJpbmddLCBbb3JpZ2luIHBvcnRdLCB0cnVuY2F0ZWRTcGFjZU5l
ZWRlZCk7CiAgICAgfQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZGlzYWxsb3dJ
bmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+
ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRPcmlnaW5R
dW90YSA9IFtXZWJBcHBsaWNhdGlvbkNhY2hlIGRlZmF1bHRPcmlnaW5RdW90YV07CkBAIC0xOTEs
MjAgKzE5MSwyMCBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZXhjZWVkCiAK
IC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzZXRTdGF0dXNUZXh0OihOU1N0cmlu
ZyAqKXRleHQKIHsKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU3RhdHVzQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0
OiVzXG4iLCBbdGV4dCBVVEY4U3RyaW5nXSk7CiB9CiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjoo
V2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4gZnJhbWU6KFdlYkZyYW1lICopZnJhbWUgbGlzdGVu
ZXI6KGlkPFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPilsaXN0ZW5lcgogewotICAgIGlmICgh
Z0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKSB7Cisg
ICAgaWYgKCFnVGVzdFJ1bm5lci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSkgewogICAg
ICAgICBpZiAoIW1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycykKICAgICAg
ICAgICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycyA9IFtbTlNNdXRh
YmxlU2V0IHNldF0gcmV0YWluXTsKICAgICAgICAgW21fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlz
c2lvbkxpc3RlbmVycyBhZGRPYmplY3Q6bGlzdGVuZXJdOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9u
KCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKICAgICAg
ICAgW2xpc3RlbmVyIGFsbG93XTsKICAgICBlbHNlCiAgICAgICAgIFtsaXN0ZW5lciBkZW55XTsK
QEAgLTIxMiw3ICsyMTIsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRl
Y2lkCiAKIC0gKHZvaWQpZGlkU2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbgogewotICAgIEFT
U0VSVChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkp
OworICAgIEFTU0VSVChnVGVzdFJ1bm5lci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSk7
CiAgICAgaWYgKG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycyAmJiAhbV90
aW1lcikKICAgICAgICAgbV90aW1lciA9IFtOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJ
bnRlcnZhbDowIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0aW1lckZpcmVkKSB1c2Vy
SW5mbzowIHJlcGVhdHM6Tk9dOwogfQpAQCAtMjI3LDEyICsyMjcsMTIgQEAgLSAoaW50KW51bWJl
ck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzcwogCiAtICh2b2lkKXRpbWVyRmlyZWQKIHsKLSAg
ICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNl
dCgpKTsKKyAgICBBU1NFUlQoZ1Rlc3RSdW5uZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0
KCkpOwogICAgIG1fdGltZXIgPSAwOwogICAgIE5TRW51bWVyYXRvciogZW51bWVyYXRvciA9IFtt
X3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMgb2JqZWN0RW51bWVyYXRvcl07
CiAgICAgaWQ8V2ViQWxsb3dEZW55UG9saWN5TGlzdGVuZXI+IGxpc3RlbmVyOwogICAgIHdoaWxl
ICgobGlzdGVuZXIgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkpIHsKLSAgICAgICAgaWYgKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgIGlm
IChnVGVzdFJ1bm5lci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICBbbGlz
dGVuZXIgYWxsb3ddOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBbbGlzdGVuZXIgZGVueV07
CkBAIC0yNjAsNyArMjYwLDcgQEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW5XaXRoTGlzdGVuZXI6
KE5TTwogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQ6KERPTUVsZW1lbnQqKWVsZW1lbnQgbGlzdGVuZXI6KE5TT2JqZWN0PFdlYktp
dEZ1bGxTY3JlZW5MaXN0ZW5lcj4qKWxpc3RlbmVyCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKQorICAgIGlmICghZ1Rlc3RS
dW5uZXItPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKQogICAgICAgICBbc2VsZiBwZXJm
b3JtU2VsZWN0b3I6QHNlbGVjdG9yKGVudGVyRnVsbFNjcmVlbldpdGhMaXN0ZW5lcjopIHdpdGhP
YmplY3Q6bGlzdGVuZXIgYWZ0ZXJEZWxheTowXTsKIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBAIC0g
KHZvaWQpZXhpdEZ1bGxTY3JlZW5XaXRoTGlzdGVuZXI6KE5TT2IKIAogLSAodm9pZCl3ZWJWaWV3
OihXZWJWaWV3ICopd2ViVmlldyBleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQ6KERPTUVsZW1lbnQq
KWVsZW1lbnQgbGlzdGVuZXI6KE5TT2JqZWN0PFdlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lcj4qKWxp
c3RlbmVyCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmhhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvcigpKQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmhhc0N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvcigpKQogICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGV4
aXRGdWxsU2NyZWVuV2l0aExpc3RlbmVyOikgd2l0aE9iamVjdDpsaXN0ZW5lciBhZnRlckRlbGF5
OjBdOwogfQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUu
cHJvCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgRXZlbnRTZW5kZXJRdC5oIFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuaCBcCiAg
ICAgV29ya1F1ZXVlSXRlbVF0LmggXAotICAgIExheW91dFRlc3RDb250cm9sbGVyUXQuaCBcCisg
ICAgVGVzdFJ1bm5lclF0LmggXAogICAgIEdDQ29udHJvbGxlclF0LmggXAogICAgIFF0SW5pdGlh
bGl6ZVRlc3RGb250cy5oIFwKICAgICB0ZXN0cGx1Z2luLmgKQEAgLTQyLDcgKzQyLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgRXZlbnRTZW5kZXJRdC5jcHAgXAogICAgIFRleHRJbnB1dENvbnRyb2xs
ZXJRdC5jcHAgXAogICAgIFdvcmtRdWV1ZUl0ZW1RdC5jcHAgXAotICAgIExheW91dFRlc3RDb250
cm9sbGVyUXQuY3BwIFwKKyAgICBUZXN0UnVubmVyUXQuY3BwIFwKICAgICBHQ0NvbnRyb2xsZXJR
dC5jcHAgXAogICAgIFF0SW5pdGlhbGl6ZVRlc3RGb250cy5jcHAgXAogICAgIHRlc3RwbHVnaW4u
Y3BwIFwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQu
Y3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXJRdC5oIgog
I2luY2x1ZGUgIkdDQ29udHJvbGxlclF0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXJRdC5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENv
bnRyb2xsZXJRdC5oIgogI2luY2x1ZGUgIlF0SW5pdGlhbGl6ZVRlc3RGb250cy5oIgogI2luY2x1
ZGUgInRlc3RwbHVnaW4uaCIKQEAgLTE3Niw3ICsxNzYsNyBAQCBRV2ViSW5zcGVjdG9yKiBXZWJQ
YWdlOjp3ZWJJbnNwZWN0b3IoKQogdm9pZCBXZWJQYWdlOjpyZXNldFNldHRpbmdzKCkKIHsKICAg
ICAvLyBBZnRlciBlYWNoIGxheW91dCB0ZXN0LCByZXNldCB0aGUgc2V0dGluZ3MgdGhhdCBtYXkg
aGF2ZSBiZWVuIGNoYW5nZWQgYnkKLSAgICAvLyBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlk
ZVByZWZlcmVuY2UoKSBvciBzaW1pbGFyLgorICAgIC8vIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVm
ZXJlbmNlKCkgb3Igc2ltaWxhci4KICAgICBzZXR0aW5ncygpLT5yZXNldEZvbnRTaXplKFFXZWJT
ZXR0aW5nczo6RGVmYXVsdEZvbnRTaXplKTsKICAgICBzZXR0aW5ncygpLT5yZXNldEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cyk7CiAgICAgc2V0dGluZ3Mo
KS0+cmVzZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0RW5hYmxlZCk7CkBAIC0x
OTQsMTYgKzE5NCwxNiBAQCB2b2lkIFdlYlBhZ2U6OnJlc2V0U2V0dGluZ3MoKQogICAgIHNldHRp
bmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Q1NTR3JpZExheW91dEVuYWJsZWQp
OwogICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQpOwogCi0gICAgbV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKLSAgICBtX2RydC0+bGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQodHJ1ZSk7Ci0gICAg
bV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQo
ZmFsc2UpOwotICAgIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zZXRNb2NrU2Nyb2xs
YmFyc0VuYWJsZWQoZmFsc2UpOwotICAgIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5z
ZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQodHJ1ZSk7Ci0gICAgbV9kcnQtPmxheW91dFRlc3RD
b250cm9sbGVyKCktPnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoZmFsc2UpOwot
ICAgIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNl
KTsKKyAgICBtX2RydC0+dGVzdFJ1bm5lcigpLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChmYWxz
ZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQodHJ1ZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+c2V0RnJhbWVGbGF0dGVuaW5nRW5h
YmxlZChmYWxzZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+c2V0TW9ja1Njcm9sbGJhcnNF
bmFibGVkKGZhbHNlKTsKKyAgICBtX2RydC0+dGVzdFJ1bm5lcigpLT5zZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQodHJ1ZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+c2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxzZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+
c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAKICAgICAvLyBnbG9iYWxTZXR0aW5ncyBtdXN0IGJl
IHJlc2V0IGV4cGxpY2l0bHkuCi0gICAgbV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPnNl
dFhTU0F1ZGl0b3JFbmFibGVkKGZhbHNlKTsKKyAgICBtX2RydC0+dGVzdFJ1bm5lcigpLT5zZXRY
U1NBdWRpdG9yRW5hYmxlZChmYWxzZSk7CiAKICAgICBRV2ViU2V0dGluZ3M6OnNldE1heGltdW1Q
YWdlc0luQ2FjaGUoMCk7IC8vIHJlc2V0IHRvIGRlZmF1bHQKICAgICBzZXR0aW5ncygpLT5zZXRV
c2VyU3R5bGVTaGVldFVybChRVXJsKCkpOyAvLyByZXNldCB0byBkZWZhdWx0CkBAIC0yMzIsMTIg
KzIzMiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtCiB7CiAg
ICAgc3dpdGNoIChmZWF0dXJlKSB7CiAgICAgY2FzZSBOb3RpZmljYXRpb25zOgotICAgICAgICBp
ZiAoIW1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pZ25vcmVSZXFlc3RGb3JQZXJtaXNz
aW9uKCkpCisgICAgICAgIGlmICghbV9kcnQtPnRlc3RSdW5uZXIoKS0+aWdub3JlUmVxZXN0Rm9y
UGVybWlzc2lvbigpKQogICAgICAgICAgICAgc2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIGZl
YXR1cmUsIFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBHZW9sb2NhdGlvbjoKLSAgICAgICAgaWYgKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKQotICAgICAgICAgICAgaWYgKG1fZHJ0LT5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKKyAgICAgICAg
aWYgKG1fZHJ0LT50ZXN0UnVubmVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpCisg
ICAgICAgICAgICBpZiAobV9kcnQtPnRlc3RSdW5uZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9u
KCkpCiAgICAgICAgICAgICAgICAgc2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIGZlYXR1cmUs
IFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBzZXRGZWF0dXJlUGVybWlzc2lvbihmcmFtZSwgZmVhdHVyZSwgUGVybWlzc2lvbkRlbmll
ZEJ5VXNlcik7CkBAIC0yNjUsOSArMjY1LDkgQEAgdm9pZCBXZWJQYWdlOjpwZXJtaXNzaW9uU2V0
KFFXZWJQYWdlOjpGZQogICAgIHN3aXRjaCAoZmVhdHVyZSkgewogICAgIGNhc2UgR2VvbG9jYXRp
b246CiAgICAgICAgIHsKLSAgICAgICAgUV9BU1NFUlQobV9kcnQtPmxheW91dFRlc3RDb250cm9s
bGVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpOworICAgICAgICBRX0FTU0VSVCht
X2RydC0+dGVzdFJ1bm5lcigpLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKTsKICAgICAg
ICAgZm9yZWFjaCAoUVdlYkZyYW1lKiBmcmFtZSwgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0
cykKLSAgICAgICAgICAgIGlmIChtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9j
YXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgICAgICBpZiAobV9kcnQtPnRlc3RSdW5uZXIoKS0+
Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICAgICAgc2V0RmVhdHVyZVBlcm1p
c3Npb24oZnJhbWUsIGZlYXR1cmUsIFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRGZWF0dXJlUGVybWlzc2lvbihmcmFtZSwgZmVh
dHVyZSwgUGVybWlzc2lvbkRlbmllZEJ5VXNlcik7CkBAIC0zMzAsOCArMzMwLDggQEAgYm9vbCBX
ZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZQogCiBib29sIFdlYlBhZ2U6OmFjY2Vw
dE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFOZXR3b3JrUmVxdWVz
dCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV9kcnQtPmxheW91
dFRlc3RDb250cm9sbGVyKCktPndhaXRGb3JQb2xpY3koKSkKLSAgICAgICAgbV9kcnQtPmxheW91
dFRlc3RDb250cm9sbGVyKCktPm5vdGlmeURvbmUoKTsKKyAgICBpZiAobV9kcnQtPnRlc3RSdW5u
ZXIoKS0+d2FpdEZvclBvbGljeSgpKQorICAgICAgICBtX2RydC0+dGVzdFJ1bm5lcigpLT5ub3Rp
ZnlEb25lKCk7CiAKICAgICByZXR1cm4gUVdlYlBhZ2U6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0
KGZyYW1lLCByZXF1ZXN0LCB0eXBlKTsKIH0KQEAgLTMzOSw3ICszMzksNyBAQCBib29sIFdlYlBh
Z2U6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXCiBib29sIFdlYlBhZ2U6OnN1cHBvcnRzRXh0
ZW5zaW9uKFFXZWJQYWdlOjpFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAogewogICAgIGlmIChl
eHRlbnNpb24gPT0gUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lvbikKLSAgICAgICAgcmV0dXJu
IG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRIYW5kbGVFcnJvclBhZ2VzKCk7
CisgICAgICAgIHJldHVybiBtX2RydC0+dGVzdFJ1bm5lcigpLT5zaG91bGRIYW5kbGVFcnJvclBh
Z2VzKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00MjQsNyArNDI0LDcgQEAgRHVtcFJl
bmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
d2ViUGFnZVNldEdyb3VwTmFtZShtX3BhZ2UsICJvcmcud2Via2l0LnF0LkR1bXBSZW5kZXJUcmVl
Iik7CiAKICAgICBtX21haW5WaWV3LT5zZXRDb250ZXh0TWVudVBvbGljeShRdDo6Tm9Db250ZXh0
TWVudSk7Ci0gICAgbV9tYWluVmlldy0+cmVzaXplKFFTaXplKExheW91dFRlc3RDb250cm9sbGVy
OjptYXhWaWV3V2lkdGgsIExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0KSk7Cisg
ICAgbV9tYWluVmlldy0+cmVzaXplKFFTaXplKFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aCwgVGVz
dFJ1bm5lcjo6bWF4Vmlld0hlaWdodCkpOwogCiAgICAgLy8gY2xlYW4gdXAgY2FjaGUgYnkgcmVz
ZXR0aW5nIHF1b3RhLgogICAgIHFpbnQ2NCBxdW90YSA9IHdlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+
b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpOwpAQCAtNDMyLDcgKzQzMiw3IEBAIER1
bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSgpCiAKICAgICAvLyBjcmVhdGUgb3VyIGNvbnRy
b2xsZXJzLiBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSBjb25uZWN0RnJhbWUsCiAgICAgLy8g
YXMgaXQgZXhwb3J0cyB0aGVyZSB0byB0aGUgSmF2YVNjcmlwdCBET00gd2luZG93LgotICAgIG1f
Y29udHJvbGxlciA9IG5ldyBMYXlvdXRUZXN0Q29udHJvbGxlcih0aGlzKTsKKyAgICBtX2NvbnRy
b2xsZXIgPSBuZXcgVGVzdFJ1bm5lcih0aGlzKTsKICAgICBjb25uZWN0KG1fY29udHJvbGxlciwg
U0lHTkFMKHNob3dQYWdlKCkpLCB0aGlzLCBTTE9UKHNob3dQYWdlKCkpKTsKICAgICBjb25uZWN0
KG1fY29udHJvbGxlciwgU0lHTkFMKGhpZGVQYWdlKCkpLCB0aGlzLCBTTE9UKGhpZGVQYWdlKCkp
KTsKIApAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRyeVJ1blByaW50
KFFXZWJGcmEKIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZv
cmVUZXN0aW5nKGNvbnN0IFFVcmwmIHVybCkKIHsKICAgICAvLyByZXNldCBzbyB0aGF0IGFueSBj
dXJyZW50IGxvYWRzIGFyZSBzdG9wcGVkCi0gICAgLy8gTk9URTogdGhhdCB0aGlzIGhhcyB0byBi
ZSBkb25lIGJlZm9yZSB0aGUgbGF5b3V0VGVzdENvbnRyb2xsZXIgaXMKKyAgICAvLyBOT1RFOiB0
aGF0IHRoaXMgaGFzIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSB0ZXN0UnVubmVyIGlzCiAgICAgLy8g
cmVzZXQgb3Igd2UgZ2V0IHRpbWVvdXRzIGZvciBzb21lIHRlc3RzLgogICAgIG1fcGFnZS0+Ymxv
Y2tTaWduYWxzKHRydWUpOwogICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6U3Rv
cCk7CkBAIC01MTksNyArNTE5LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cmVzZXRUb0NvbnNp
c3RlbnRTdAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwga25vd25PcmlnaW5zLnNpemUoKTsgKytp
KQogICAgICAgICBrbm93bk9yaWdpbnNbaV0uc2V0RGF0YWJhc2VRdW90YShkYXRhYmFzZURlZmF1
bHRRdW90YSk7CiAKLSAgICAvLyByZXNldCB0aGUgbGF5b3V0VGVzdENvbnRyb2xsZXIgYXQgdGhp
cyBwb2ludCwgc28gdGhhdCB3ZSB1bmRlciBubworICAgIC8vIHJlc2V0IHRoZSB0ZXN0UnVubmVy
IGF0IHRoaXMgcG9pbnQsIHNvIHRoYXQgd2UgdW5kZXIgbm8KICAgICAvLyBjaXJjdW1zdGFuY2Ug
ZHVtcCAoc3RvcCB0aGUgd2FpdFVudGlsRG9uZSB0aW1lcikgZHVyaW5nIHRoZSByZXNldAogICAg
IC8vIG9mIHRoZSBEUlQuCiAgICAgbV9jb250cm9sbGVyLT5yZXNldCgpOwpAQCAtNTYzLDcgKzU2
Myw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25zaXN0ZW50U3QKIAogICAgIFFM
b2NhbGU6OnNldERlZmF1bHQoUUxvY2FsZTo6YygpKTsKIAotICAgIGxheW91dFRlc3RDb250cm9s
bGVyKCktPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgdGVzdFJ1bm5lcigp
LT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwogI2lmbmRlZiBRX09TX1dJTkNFCiAg
ICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogI2VuZGlmCkBAIC01OTksMjEgKzU5OSwyMSBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlOjpvcGVuKGNvbnN0IFFVcmwmIHVyCiAgICAgcmVzZXRUb0NvbnNp
c3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcodXJsKTsKIAogICAgIGlmIChpc1dlYkluc3BlY3RvclRl
c3QobV9wYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkpKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5jbG9zZVdlYkluc3BlY3RvcigpOworICAgICAgICB0ZXN0UnVubmVyKCktPmNsb3Nl
V2ViSW5zcGVjdG9yKCk7CiAKICAgICBpZiAoaXNXZWJJbnNwZWN0b3JUZXN0KHVybCkpCi0gICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3dXZWJJbnNwZWN0b3IoKTsKKyAgICAgICAg
dGVzdFJ1bm5lcigpLT5zaG93V2ViSW5zcGVjdG9yKCk7CiAKICAgICBpZiAoaXNEdW1wQXNUZXh0
VGVzdCh1cmwpKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5kdW1wQXNUZXh0KCk7
CisgICAgICAgIHRlc3RSdW5uZXIoKS0+ZHVtcEFzVGV4dCgpOwogCiAgICAgaWYgKGlzR2xvYmFs
SGlzdG9yeVRlc3QodXJsKSkKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVtcEhp
c3RvcnlDYWxsYmFja3MoKTsKKyAgICAgICAgdGVzdFJ1bm5lcigpLT5kdW1wSGlzdG9yeUNhbGxi
YWNrcygpOwogCiAgICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3QgdG8gYmUgNDgweDM2MAogICAg
IGJvb2wgaXNXM0NUZXN0ID0gdXJsLnRvU3RyaW5nKCkuY29udGFpbnMoInN2Zy9XM0MtU1ZHLTEu
MSIpOwotICAgIGludCB3aWR0aCA9IGlzVzNDVGVzdCA/IDQ4MCA6IExheW91dFRlc3RDb250cm9s
bGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgaW50IGhlaWdodCA9IGlzVzNDVGVzdCA/IDM2MCA6IExh
eW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0OworICAgIGludCB3aWR0aCA9IGlzVzND
VGVzdCA/IDQ4MCA6IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAgICBpbnQgaGVpZ2h0ID0g
aXNXM0NUZXN0ID8gMzYwIDogVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodDsKICAgICBtX21haW5W
aWV3LT5yZXNpemUoUVNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIG1fcGFnZS0+c2V0UHJlZmVy
cmVkQ29udGVudHNTaXplKFFTaXplKCkpOwogICAgIG1fcGFnZS0+c2V0Vmlld3BvcnRTaXplKFFT
aXplKHdpZHRoLCBoZWlnaHQpKTsKQEAgLTg3Niw3ICs4NzYsNyBAQCBRU3RyaW5nIER1bXBSZW5k
ZXJUcmVlOjpkdW1wQmFja0ZvcndhcmRMCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGNvbnN0IGNoYXIgKm1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRUZXN0KExheW91dFRlc3RDb250
cm9sbGVyICpjb250cm9sbGVyKQorc3RhdGljIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWVTdHJpbmdG
b3JGYWlsZWRUZXN0KFRlc3RSdW5uZXIgKmNvbnRyb2xsZXIpCiB7CiAgICAgY29uc3QgY2hhciAq
ZXJyb3JNZXNzYWdlOwogICAgIGlmIChjb250cm9sbGVyLT5zaG91bGREdW1wQXNUZXh0KCkpCkBA
IC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpjb25uZWN0RnJhbWUoUVdl
YkZyCiB7CiAgICAgY29ubmVjdChmcmFtZSwgU0lHTkFMKGphdmFTY3JpcHRXaW5kb3dPYmplY3RD
bGVhcmVkKCkpLCB0aGlzLCBTTE9UKGluaXRKU09iamVjdHMoKSkpOwogICAgIGNvbm5lY3QoZnJh
bWUsIFNJR05BTChwcm92aXNpb25hbExvYWQoKSksCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlcigpLCBTTE9UKHByb3Zpc2lvbmFsTG9hZCgpKSk7CisgICAgICAgICAgICB0ZXN0UnVu
bmVyKCksIFNMT1QocHJvdmlzaW9uYWxMb2FkKCkpKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6ZHVtcERhdGFiYXNlUXVvdGEoUVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUVN0cmluZyYgZGJO
YW1lKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAko
cmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIFFUX0VORF9OQU1FU1BBQ0UK
IAogY2xhc3MgUVdlYkZyYW1lOwogCi1jbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKK2NsYXNz
IFRlc3RSdW5uZXI7CiBjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDsKIGNsYXNzIEV2ZW50
U2VuZGVyOwogY2xhc3MgVGV4dElucHV0Q29udHJvbGxlcjsKQEAgLTg1LDcgKzg1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7CiAgICAgdm9pZCByZXNldFRv
Q29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJsJik7CiAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciAqbGF5b3V0VGVzdENvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRyb2xsZXI7IH0KKyAgICBUZXN0UnVubmVyICp0ZXN0UnVubmVyKCkgY29uc3QgeyByZXR1cm4g
bV9jb250cm9sbGVyOyB9CiAgICAgRXZlbnRTZW5kZXIgKmV2ZW50U2VuZGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9ldmVudFNlbmRlcjsgfQogICAgIFRleHRJbnB1dENvbnRyb2xsZXIgKnRleHRJbnB1
dENvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHRJbnB1dENvbnRyb2xsZXI7IH0KICAg
ICBRU3RyaW5nIHBlcnNpc3RlbnRTdG9yYWdlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lz
dGVudFN0b3JhZ2VQYXRoOyB9CkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAgICBRU3Ry
aW5nIGR1bXBGcmFtZXNBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSk7CiAgICAgUVN0cmluZyBkdW1w
QmFja0ZvcndhcmRMaXN0KFFXZWJQYWdlKiBwYWdlKTsKICAgICBRU3RyaW5nIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpOwotICAgIExheW91dFRlc3RDb250cm9sbGVy
ICptX2NvbnRyb2xsZXI7CisgICAgVGVzdFJ1bm5lciAqbV9jb250cm9sbGVyOwogCiAgICAgYm9v
bCBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKICAgICBRU3RyaW5nIG1fZXhwZWN0ZWRIYXNo
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRy
b2xsZXJRdC5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk4OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0LmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0LmgiCi0jaW5jbHVkZSAiV29y
a1F1ZXVlLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbVF0LmgiCi0jaW5jbHVkZSA8UUNvcmVB
cHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPFFMb2NhbGU+Ci0jaW5jbHVk
ZSA8cXdlYnNldHRpbmdzLmg+Ci0KLUxheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29u
dHJvbGxlcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSogZHJ0KQotICAgIDogUU9iamVjdCgpCi0g
ICAgLCBtX2RydChkcnQpCi0gICAgLCBtX3Nob3VsZFRpbWVvdXQodHJ1ZSkKLSAgICAsIG1fdGlt
ZW91dCgzMDAwMCkKLXsKLSAgICByZXNldCgpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpkdW1wTm90aWZpY2F0aW9uKHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpyZXNldCgpCi17Ci0gICAgbV9oYXNEdW1wZWQgPSBmYWxzZTsKLSAgICBtX2xvYWRGaW5pc2hl
ZCA9IGZhbHNlOwotICAgIG1fdGV4dER1bXAgPSBmYWxzZTsKLSAgICBtX2R1bXBCYWNrRm9yd2Fy
ZExpc3QgPSBmYWxzZTsKLSAgICBtX2R1bXBDaGlsZHJlbkFzVGV4dCA9IGZhbHNlOwotICAgIG1f
ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMgPSBmYWxzZTsKLSAgICBtX2Nhbk9wZW5XaW5k
b3dzID0gZmFsc2U7Ci0gICAgbV93YWl0Rm9yRG9uZSA9IGZhbHNlOwotICAgIG1fZGlzYWxsb3dJ
bmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSA9IGZhbHNlOwotICAgIG1fZHVtcFRpdGxl
Q2hhbmdlcyA9IGZhbHNlOwotICAgIG1fZHVtcERhdGFiYXNlQ2FsbGJhY2tzID0gZmFsc2U7Ci0g
ICAgbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAg
bV9kdW1wU3RhdHVzQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAgbV90aW1lb3V0VGltZXIuc3RvcCgp
OwotICAgIG1fdG9wTG9hZGluZ0ZyYW1lID0gMDsKLSAgICBtX3dhaXRGb3JQb2xpY3kgPSBmYWxz
ZTsKLSAgICBtX2hhbmRsZUVycm9yUGFnZXMgPSBmYWxzZTsKLSAgICBtX3dlYkhpc3RvcnkgPSAw
OwotICAgIG1fZ2xvYmFsRmxhZyA9IGZhbHNlOwotICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVk
ID0gZmFsc2U7Ci0gICAgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuY2xlYXIo
KTsKLSAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gPSBmYWxzZTsKLSAgICBtX2lzR2Vv
bG9jYXRpb25QZXJtaXNzaW9uU2V0ID0gZmFsc2U7Ci0gICAgbV9pc1ByaW50aW5nID0gZmFsc2U7
Ci0gICAgbV9nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBmYWxzZTsKLQotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcihmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soZmFsc2UpOwotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyKGZhbHNl
KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZVJlc3Bv
bnNlTUlNRVR5cGVzKGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFdp
bGxDYWNoZVJlc3BvbnNlQ2FsbGJhY2tzKGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKTsKLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGZh
bHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGwoZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2Vu
ZFJlcXVlc3RDbGVhckhlYWRlcnMoUVN0cmluZ0xpc3QoKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmNsZWFyU2NyaXB0V29ybGRzKCk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGZhbHNlLCBmYWxzZSk7Ci0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5Q2FsbGJhY2tzKGZhbHNlKTsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyhmYWxzZSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0R2VvbG9jYXRpb25Nb2NrKG1fZHJ0LT53ZWJQ
YWdlKCkpOwotICAgIHNldEljb25EYXRhYmFzZUVuYWJsZWQoZmFsc2UpOwotICAgIGNsZWFyQWxs
RGF0YWJhc2VzKCk7Ci0gICAgLy8gVGhlIGRlZmF1bHQgc3RhdGUgZm9yIERSVCBpcyB0byBibG9j
ayB0aGlyZC1wYXJ0eSBjb29raWVzLCBtaW1pY2luZyB0aGUgTWFjIHBvcnQKLSAgICBzZXRBbHdh
eXNBY2NlcHRDb29raWVzKGZhbHNlKTsKLSAgICBlbWl0IGhpZGVQYWdlKCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnByb2Nlc3NXb3JrKCkKLXsKLSAgICAvLyBxRGVidWcoKSA8
PCAiPj4+cHJvY2Vzc1dvcmsiOwotCi0gICAgLy8gaWYgd2UgZGlkbid0IHN0YXJ0IGEgbmV3IGxv
YWQsIHRoZW4gd2UgZmluaXNoZWQgYWxsIHRoZSBjb21tYW5kcywgc28gd2UncmUgcmVhZHkgdG8g
ZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYm
ICFzaG91bGRXYWl0VW50aWxEb25lKCkpIHsKLSAgICAgICAgZW1pdCBkb25lKCk7Ci0gICAgICAg
IG1faGFzRHVtcGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLS8vIENhbGxlZCBvbiBsb2FkRmluaXNo
ZWQgb24gV2ViUGFnZQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF5YmVEdW1wKGJvb2wg
LypzdWNjZXNzKi8pCi17Ci0KLSAgICAvLyBUaGlzIGNhbiBoYXBwZW4gb24gYW55IG9mIHRoZSBo
dHRwL3Rlc3RzL3NlY3VyaXR5L3dpbmRvdy1ldmVudHMtKi5odG1sIHRlc3RzLCB3aGVyZSB0aGUg
dGVzdCBvcGVucwotICAgIC8vIGEgbmV3IHdpbmRvdywgY2FsbHMgdGhlIHVubG9hZCBhbmQgbG9h
ZCBldmVudCBoYW5kbGVycyBvbiB0aGUgd2luZG93J3MgcGFnZSwgYW5kIHRoZW4gaW1tZWRpYXRl
bHkKLSAgICAvLyBpc3N1ZXMgYSBub3RpZnlEb25lLiBOZWVkcyBpbnZlc3RpZ2F0aW9uLgotICAg
IGlmICghbV90b3BMb2FkaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEl0IGlz
IHBvc3NpYmxlIHRoYXQgd2UgZ2V0IGNhbGxlZCBieSB3aW5kb3dzIGNyZWF0ZWQgZnJvbSB0aGUg
bWFpbiBwYWdlIHRoYXQgaGF2ZSBmaW5pc2hlZAotICAgIC8vIGxvYWRpbmcsIHNvIHdlIGRvbid0
IEFTU0VSVCBoZXJlLiBBdCB0aGUgbW9tZW50IHdlIGRvIG5vdCBnYXRoZXIgcmVzdWx0cyBmcm9t
IHN1Y2ggd2luZG93cywKLSAgICAvLyBidXQgbWF5IG5lZWQgdG8gaW4gZnV0dXJlLgotICAgIGlm
IChzZW5kZXIoKSAhPSBtX3RvcExvYWRpbmdGcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2xvYWRGaW5pc2hlZCA9IHRydWU7Ci0gICAgLy8gYXMgdGhlIGZ1bmN0aW9uIGlz
IGNhbGxlZCBvbiBsb2FkRmluaXNoZWQsIHRoZSB0ZXN0IG1pZ2h0Ci0gICAgLy8gYWxyZWFkeSBo
YXZlIGR1bXBlZCBhbmQgdGh1cyBubyBsb25nZXIgYmUgYWN0aXZlLCB0aHVzCi0gICAgLy8gYmFp
bCBvdXQgaGVyZS4KLSAgICBpZiAobV9oYXNEdW1wZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbih0cnVlKTsgLy8gZmlyc3QgY29tcGxldGUg
bG9hZCBmcmVlemVzIHRoZSBxdWV1ZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0Ci0gICAgaWYg
KFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCi0gICAgICAgIFFUaW1lcjo6c2luZ2xlU2hv
dCgwLCB0aGlzLCBTTE9UKHByb2Nlc3NXb3JrKCkpKTsKLSAgICBlbHNlIGlmICghc2hvdWxkV2Fp
dFVudGlsRG9uZSgpKSB7Ci0gICAgICAgIGVtaXQgZG9uZSgpOwotICAgICAgICBtX2hhc0R1bXBl
ZCA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VW50
aWxEb25lKCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+d2FpdEZvckRvbmUiOwotICAgIG1f
d2FpdEZvckRvbmUgPSB0cnVlOwotCi0gICAgaWYgKCFtX3Nob3VsZFRpbWVvdXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fdGltZW91dFRpbWVyLnN0YXJ0KG1fdGltZW91dCwgdGhpcyk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKGNv
bnN0IFFTdHJpbmcmIG1vZGUpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0UHJvcGVydHko
Il9xX3ZpZXdNb2RlIiwgbW9kZSk7Ci19Ci0KLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2Vi
SGlzdG9yeUl0ZW1Db3VudCgpCi17Ci0gICAgaWYgKCFtX3dlYkhpc3RvcnkpCi0gICAgICAgIHJl
dHVybiAtMTsKLQotICAgIC8vIFN1YnRyYWN0IG9uZSBoZXJlIGFzIG91ciBRV2ViSGlzdG9yeTo6
Y291bnQoKSBpbmNsdWRlcyB0aGUgYWN0dWFsIHBhZ2UsCi0gICAgLy8gd2hpY2ggaXMgbm90IGNv
bnNpZGVyZWQgaW4gdGhlIERSVCB0ZXN0cy4KLSAgICByZXR1cm4gbV93ZWJIaXN0b3J5LT5jb3Vu
dCgpIC0gMTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3Rvcnko
KQotewotICAgIG1fd2ViSGlzdG9yeSA9IG1fZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgcURlYnVn
KCkgPDwgIj4+Pj5ub3RpZnlEb25lIjsKLQotICAgIGlmIChtX3Nob3VsZFRpbWVvdXQgJiYgIW1f
dGltZW91dFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGltZW91
dFRpbWVyLnN0b3AoKTsKLSAgICBtX3dhaXRGb3JEb25lID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0
aGUgcGFnZSBoYXMgbm90IGZpbmlzaGVkIGxvYWRpbmcgKGkuZS4gbG9hZEZpbmlzaGVkKCkgaGFz
IG5vdCBiZWVuIGVtaXR0ZWQpIHRoZW4KLSAgICAvLyBjb250ZW50IGNyZWF0ZWQgYnkgdGhlIGxp
a2VzIG9mIGRvY3VtZW50LndyaXRlKCkgSlMgbWV0aG9kcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUg
eWV0LgotICAgIC8vIFdoZW4gdGhlIHBhZ2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcsIG1heWJlRHVt
cCBhYm92ZSB3aWxsIGR1bXAgdGhlIHJlc3VsdHMgbm93IHRoYXQgd2UgaGF2ZQotICAgIC8vIGp1
c3Qgc2V0IHNob3VsZFdhaXRVbnRpbERvbmUgdG8gZmFsc2UuCi0gICAgaWYgKCFtX2xvYWRGaW5p
c2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW1pdCBkb25lKCk7Ci0KLSAgICAvLyBGSVhN
RTogaW52ZXN0aWdhdGUgd2h5IGFsd2F5cyByZXNldHRpbmcgdGhlc2UgcmVzdWx0IGluIHRpbWVv
dXRzCi0gICAgbV9oYXNEdW1wZWQgPSB0cnVlOwotICAgIG1fd2FpdEZvclBvbGljeSA9IGZhbHNl
OwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKLXsKLSAgICBy
ZXR1cm4gbV9kcnQtPndpbmRvd0NvdW50KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3Jp
Z2luKQotewotICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJh
bWUoKTsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXRGZWF0dXJlUGVybWlzc2lvbihmcmFtZSwg
UVdlYlBhZ2U6Ok5vdGlmaWNhdGlvbnMsIFFXZWJQYWdlOjpQZXJtaXNzaW9uR3JhbnRlZEJ5VXNl
cik7Ci0gICAgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnMuYXBwZW5kKG9yaWdp
bik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQotewotICAgIG1faWdub3JlRGVza3RvcE5vdGlmaWNh
dGlvbiA9IHRydWU7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3Rv
cE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKQotewotICAgIHJl
dHVybiAhbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uICYmIG1fZGVza3RvcE5vdGlmaWNhdGlv
bkFsbG93ZWRPcmlnaW5zLmNvbnRhaW5zKG9yaWdpbik7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcm
IHRpdGxlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzaW11bGF0ZURlc2t0b3BO
b3RpZmljYXRpb25DbGljayh0aXRsZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRpc3BsYXkoKQotewotICAgIGVtaXQgc2hvd1BhZ2UoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKCkKLXsKLSAgICBkaXNwbGF5KCk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkK
LXsKLSAgICBtX2RydC0+d2ViUGFnZSgpLT5oaXN0b3J5KCktPmNsZWFyKCk7Ci19Ci0KLVFTdHJp
bmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3QgUVN0cmlu
ZyYgdXJsKQotewotICAgIFFTdHJpbmcgbG9jYWxUbXBVcmwoUUxhdGluMVN0cmluZygiZmlsZTov
Ly90bXAvTGF5b3V0VGVzdHMiKSk7Ci0KLSAgICAvLyBUcmFuc2xhdGUgYSByZXF1ZXN0IGZvciAv
dG1wL0xheW91dFRlc3RzIHRvIHRoZSByZXBvc2l0b3J5IExheW91dFRlc3RzIGRpcmVjdG9yeS4K
LSAgICAvLyBEbyBub3QgcmVseSBvbiBhIHN5bWxpbmsgdG8gYmUgY3JlYXRlZCB2aWEgdGhlIHRl
c3QgcnVubmVyLCB3aGljaCB3aWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MuCi0gICAgaWYgKHVybC5z
dGFydHNXaXRoKGxvY2FsVG1wVXJsKSkgewotICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBsaXZl
cyBpbiBXZWJLaXQvV2ViS2l0QnVpbGQvPGJ1aWxkX21vZGU+L2Jpbi4KLSAgICAgICAgLy8gVHJh
bnNsYXRlIGZyb20gV2ViS2l0L1dlYktpdEJ1aWxkL1JlbGVhc2UvYmluID0+IFdlYktpdC9MYXlv
dXRUZXN0cy4KLSAgICAgICAgUUZpbGVJbmZvIGxheW91dFRlc3RzUm9vdChRQ29yZUFwcGxpY2F0
aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSArIFFMYXRpbjFTdHJpbmcoIi8uLi8uLi8uLi9MYXlv
dXRUZXN0cy8iKSk7Ci0gICAgICAgIGlmIChsYXlvdXRUZXN0c1Jvb3QuZXhpc3RzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gUUxhdGluMVN0cmluZygiZmlsZTovLyIpICsgbGF5b3V0VGVzdHNSb290
LmFic29sdXRlUGF0aCgpICsgdXJsLm1pZChsb2NhbFRtcFVybC5sZW5ndGgoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHVybDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKQotewotICAgIHFEZWJ1ZygpIDw8ICI+Pj5kdW1wRWRpdGluZ0NhbGxi
YWNrcyI7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEZyYW1lTG9hZGVy
KHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrKCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFByb2dy
ZXNzRmluaXNoZWRDYWxsYmFjayh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKQotewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyKHRydWUpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkK
LXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cyh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMoKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcyh0cnVlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZHVtcFdpbGxDYWNoZVJlc3BvbnNlQ2FsbGJhY2tzKHRydWUpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wSGlzdG9yeUNhbGxiYWNrcygpCi17Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5Q2FsbGJhY2tzKHRydWUpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QoYm9vbCBlbmFibGVkKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoZW5hYmxlZCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1
ZXN0UmV0dXJuc051bGwoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IFFTdHJpbmdMaXN0JiBoZWFkZXJz
KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVh
ckhlYWRlcnMoaGVhZGVycyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCBkZWZlcikKLXsKLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChkZWZlcik7Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlQmFja05hdmlnYXRpb24oaW50IGhvd0ZhckJh
Y2t3YXJkKQotewotICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlQmFja05hdmlnYXRpb24iIDw8
IGhvd0ZhckJhY2t3YXJkOwotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGhvd0ZhckJhY2t3YXJk
OyArK2kpCi0gICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBCYWNrSXRlbSgx
LCBtX2RydC0+d2ViUGFnZSgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1
ZXVlRm9yd2FyZE5hdmlnYXRpb24oaW50IGhvd0ZhckZvcndhcmQpCi17Ci0gICAgLy9xRGVidWco
KSA8PCAiPj4+cXVldWVGb3J3YXJkTmF2aWdhdGlvbiIgPDwgaG93RmFyRm9yd2FyZDsKLSAgICBm
b3IgKGludCBpID0gMDsgaSAhPSBob3dGYXJGb3J3YXJkOyArK2kpCi0gICAgICAgIFdvcmtRdWV1
ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBGb3J3YXJkSXRlbSgxLCBtX2RydC0+d2ViUGFnZSgpKSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChjb25zdCBRU3RyaW5n
JiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRhcmdldCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5x
dWV1ZUxvYWQiIDw8IHVybCA8PCB0YXJnZXQ7Ci0gICAgUVVybCBtYWluUmVzb3VyY2VVcmwgPSBt
X2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCk7Ci0gICAgUVN0cmluZyBhYnNvbHV0
ZVVybCA9IG1haW5SZXNvdXJjZVVybC5yZXNvbHZlZChRVXJsKHVybCkpLnRvRW5jb2RlZCgpOwot
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVybCwg
dGFyZ2V0LCBtX2RydC0+d2ViUGFnZSgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgUVN0cmluZyYgY29udGVudCwgY29uc3QgUVN0
cmluZyYgYmFzZVVSTCwgY29uc3QgUVN0cmluZyYgZmFpbGluZ1VSTCkKLXsKLSAgICBpZiAoZmFp
bGluZ1VSTC5pc0VtcHR5KCkpCi0gICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5l
dyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgbV9kcnQtPndlYlBhZ2UoKSkp
OwotICAgIGVsc2UKLSAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRB
bHRlcm5hdGVIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMLCBmYWlsaW5nVVJMLCBtX2Ry
dC0+d2ViUGFnZSgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlUmVs
b2FkKCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZVJlbG9hZCI7Ci0gICAgV29ya1F1
ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IFJlbG9hZEl0ZW0obV9kcnQtPndlYlBhZ2UoKSkpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3Qg
UVN0cmluZyYgc2NyaXB0KQotewotICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlTG9hZGluZ1Nj
cmlwdCIgPDwgc2NyaXB0OwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2Fk
aW5nU2NyaXB0SXRlbShzY3JpcHQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNj
cmlwdCkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQiIDw8
IHNjcmlwdDsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTm9uTG9hZGluZ1Nj
cmlwdEl0ZW0oc2NyaXB0LCBtX2RydC0+d2ViUGFnZSgpKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnByb3Zpc2lvbmFsTG9hZCgpCi17Ci0gICAgUVdlYkZyYW1lKiBmcmFtZSA9
IHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihzZW5kZXIoKSk7Ci0gICAgaWYgKCFtX3RvcExvYWRp
bmdGcmFtZSAmJiAhbV9oYXNEdW1wZWQpCi0gICAgICAgIG1fdG9wTG9hZGluZ0ZyYW1lID0gZnJh
bWU7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZl
bnQgKmV2KQotewotICAgIGlmIChldi0+dGltZXJJZCgpID09IG1fdGltZW91dFRpbWVyLnRpbWVy
SWQoKSkgewotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3
YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICIlcyIsIG1lc3NhZ2UpOwotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzIiwgbWVz
c2FnZSk7Ci0gICAgICAgIG5vdGlmeURvbmUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgUU9iamVj
dDo6dGltZXJFdmVudChldik7Ci19Ci0KLVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVu
Y29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpCi17Ci0gICAgUVN0cmluZyBlbmNvZGVk
ID0gUVN0cmluZzo6ZnJvbUxhdGluMShRVXJsOjp0b0FjZShob3N0ICsgUUxhdGluMVN0cmluZygi
Lm5vIikpKTsKLSAgICBlbmNvZGVkLnRydW5jYXRlKGVuY29kZWQubGVuZ3RoKCkgLSAzKTsgLy8g
c3RyaXAgLm5vCi0gICAgcmV0dXJuIGVuY29kZWQ7Ci19Ci0KLVFTdHJpbmcgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpCi17Ci0gICAgUVN0
cmluZyBkZWNvZGVkID0gUVVybDo6ZnJvbUFjZShob3N0LnRvTGF0aW4xKCkgKyBRQnl0ZUFycmF5
KCIubm8iKSk7Ci0gICAgZGVjb2RlZC50cnVuY2F0ZShkZWNvZGVkLmxlbmd0aCgpIC0gMyk7Ci0g
ICAgcmV0dXJuIGRlY29kZWQ7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1l
ZGlhVHlwZShjb25zdCBRU3RyaW5nJiB0eXBlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXRNZWRpYVR5cGUobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHR5cGUpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKG1fZHJ0LT53ZWJQ
YWdlKCkpOwotICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIGZhbHNlKTsKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJs
ZWQpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKLXsKLSAgICBtX2RydC0+d2ViUGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRy
YXNFbmFibGVkLCB0cnVlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVj
dG9yU2hvdyhtX2RydC0+d2ViUGFnZSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgUVN0cmluZyYgc2Ny
aXB0KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVjdXRl
U2NyaXB0KG1fZHJ0LT53ZWJQYWdlKCksIGNhbGxJZCwgc2NyaXB0KTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVuYWJsZWQp
Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJs
ZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChtX2RydC0+d2Vi
UGFnZSgpLCBlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNr
KCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Z29CYWNrKG1fZHJ0LT53ZWJQYWdl
KCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJv
b2wgZmxhZykKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJzTG9hZGlu
ZyhtX2RydC0+d2ViUGFnZSgpLCBmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQotewot
ICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMsIGVuYWJsZWQpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9v
bCBlbmFibGVkKQotewotICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsQ29udGVudENhbkFjY2Vzc0ZpbGVVcmxzLCBlbmFibGVk
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6
ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YShxdW90YSk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1l
bnQmIGVsZW1lbnQsIGJvb2wgaXNBdXRvZmlsbGVkKQotewotICAgIHJldHVybiBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0QXV0b2ZpbGxlZChlbGVtZW50LCBpc0F1dG9maWxsZWQpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQotewotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRWYWx1ZUZvclVzZXIoZWxlbWVudCwgdmFsdWUpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGaXhlZENvbnRlbnRzU2l6ZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCi17Ci0gICAgbV90b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKS0+c2V0UHJlZmVycmVk
Q29udGVudHNTaXplKFFTaXplKHdpZHRoLCBoZWlnaHQpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZSkKLXsKLSAg
ICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpQcml2YXRlQnJvd3NpbmdFbmFibGVkLCBlbmFibGUpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0g
ICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5n
czo6U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkLCBlbmFibGUpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZSkKLXsKLSAg
ICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsICFlbmFibGUpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQT1NJWExv
Y2FsZShjb25zdCBRU3RyaW5nJiBsb2NhbGUpCi17Ci0gICAgUUxvY2FsZSBxbG9jYWxlKGxvY2Fs
ZSk7Ci0gICAgUUxvY2FsZTo6c2V0RGVmYXVsdChxbG9jYWxlKTsKLX0gCi0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgaXNLZXkpCi17Ci0gICAgbV9kcnQt
PnN3aXRjaEZvY3VzKGlzS2V5KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGlzRmlyc3QpCi17Ci0gICAgLy9GSVhNRTog
b25seSBuZWVkIHRoaXMgZm9yIHRoZSBtb21lbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMjk5MAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlKQotewotICAgIG1fZHJ0LT53
ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQsIGVuYWJsZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIC8vIFNldCBY
U1NBdWRpdGluZ0VuYWJsZWQgZ2xvYmFsbHkgc28gdGhhdCB3aW5kb3dzIGNyZWF0ZWQgYnkgdGhl
IHRlc3QgaW5oZXJpdCBpdCB0b28uCi0gICAgLy8gcmVzZXRTZXR0aW5ncygpIHdpbGwgY2FsbCB0
aGlzIHRvIHJlc2V0IHRoZSBwYWdlIGFuZCBnbG9iYWwgc2V0dGluZyB0byBmYWxzZSBhZ2Fpbi4K
LSAgICAvLyBOZWVkZWQgYnkgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2xpbmstb3Bl
bnMtbmV3LXdpbmRvdy5odG1sCi0gICAgUVdlYlNldHRpbmdzKiBnbG9iYWxTZXR0aW5ncyA9IFFX
ZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKTsKLSAgICBnbG9iYWxTZXR0aW5ncy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6WFNTQXVkaXRpbmdFbmFibGVkLCBlbmFibGUpOwotICAgIG1f
ZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlhT
U0F1ZGl0aW5nRW5hYmxlZCwgZW5hYmxlKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYgYW5p
bWF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgZWxl
bWVudElkKQotewotICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWlu
RnJhbWUoKTsKLSAgICBRX0FTU0VSVChmcmFtZSk7Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpwYXVzZUFuaW1hdGlvbihmcmFtZSwgYW5pbWF0aW9uTmFtZSwgdGltZSwgZWxl
bWVudElkKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0gICAg
UVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwotICAgIFFf
QVNTRVJUKGZyYW1lKTsKLSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhdXNl
VHJhbnNpdGlvbk9mUHJvcGVydHkoZnJhbWUsIHByb3BlcnR5TmFtZSwgdGltZSwgZWxlbWVudElk
KTsKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdl
KCktPm1haW5GcmFtZSgpOwotICAgIFFfQVNTRVJUKGZyYW1lKTsKLSAgICByZXR1cm4gRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhmcmFtZSk7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQotewotICAg
IG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OkF1dG9Mb2FkSW1hZ2VzLCBmYWxzZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IFFTdHJp
bmcmIHVybCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcg
YWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgotfQotCi1sb25nIGxvbmcgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBR
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25D
YWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBpZiAoIW1f
dG9wTG9hZGluZ0ZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgbV90b3BMb2FkaW5nRnJhbWUt
PnNlY3VyaXR5T3JpZ2luKCkuc2V0QXBwbGljYXRpb25DYWNoZVF1b3RhKHF1b3RhKTsKLX0KLQot
bG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdl
Rm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNo
ZXMgZm9yIGFuIG9yaWdpbi4KLSAgICByZXR1cm4gMDsKLX0KLQotUVN0cmluZ0xpc3QgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2Fj
aGVzLgotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCBtb2RlbCkKLXsKLSAgICAvLyBxd2Vic2V0dGluZyBk
b2Vzbid0IGhhdmUgbWF0Y2hlZCBzZXR0aW5nIHlldCA6Ci0gICAgLy8gV0VCS0lUX0NBQ0hFX01P
REVMX0RPQ1VNRU5UX1ZJRVdFUgotICAgIC8vIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9C
Uk9XU0VSCi0gICAgLy8gV0VCS0lUX0NBQ0hFX01PREVMX1dFQl9CUk9XU0VSCi0KLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRh
YmFzZVF1b3RhKGludCBzaXplKQotewotICAgIGlmICghbV90b3BMb2FkaW5nRnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX3RvcExvYWRpbmdGcmFtZS0+c2VjdXJpdHlPcmlnaW4oKS5zZXRE
YXRhYmFzZVF1b3RhKHNpemUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVh
ckFsbERhdGFiYXNlcygpCi17Ci0gICAgUVdlYkRhdGFiYXNlOjpyZW1vdmVBbGxEYXRhYmFzZXMo
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoY29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0
aW5hdGlvblByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OndoaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvblByb3Rv
Y29sLCBkZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlv
blByb3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92
ZVdoaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvblByb3Rv
Y29sLCBkZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBl
bmFibGVkLCBib29sIHBlcm1pc3NpdmUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUpOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQotewotICAgIHNl
dEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUpOwotICAgIG1fd2FpdEZvclBvbGljeSA9IHRydWU7
Ci0gICAgd2FpdFVudGlsRG9uZSgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpv
dmVycmlkZVByZWZlcmVuY2UoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZh
bHVlKQotewotICAgIFFXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3RvcExvYWRpbmdGcmFtZS0+
cGFnZSgpLT5zZXR0aW5ncygpOwotCi0gICAgaWYgKG5hbWUgPT0gIldlYktpdEphdmFTY3JpcHRF
bmFibGVkIikKLSAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Okph
dmFzY3JpcHRFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAi
V2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbiwgdmFsdWUudG9C
b29sKCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZCIpCi0gICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsK
LSAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXREZWZhdWx0Rm9udFNpemUiKQotICAgICAgICBz
ZXR0aW5ncy0+c2V0Rm9udFNpemUoUVdlYlNldHRpbmdzOjpEZWZhdWx0Rm9udFNpemUsIHZhbHVl
LnRvSW50KCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVm
ZXJlbmNlS2V5IikKLSAgICAgICAgUVdlYlNldHRpbmdzOjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hl
KHZhbHVlLnRvSW50KCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdEVuYWJsZUNhcmV0
QnJvd3NpbmciKQotICAgICAgICBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZCh2YWx1ZS50b0Jvb2wo
KSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0UGx1Z2luc0VuYWJsZWQiKQotICAgICAg
ICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQsIHZh
bHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRXZWJHTEVuYWJsZWQi
KQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFi
bGVkLCB2YWx1ZS50b0Jvb2woKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0Q1NTUmVn
aW9uc0VuYWJsZWQiKQotICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5n
czo6Q1NTUmVnaW9uc0VuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1l
ID09ICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxlZCIpCi0gICAgICAgIHNldHRpbmdzLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpDU1NHcmlkTGF5b3V0RW5hYmxlZCwgdmFsdWUudG9Cb29s
KCkpOwotICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdEh5cGVybGlua0F1ZGl0aW5nRW5hYmxl
ZCIpCi0gICAgICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpIeXBlcmxp
bmtBdWRpdGluZ0VuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKLSAgICBlbHNlIGlmIChuYW1lID09
ICJXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCIpCi0gICAgICAgIHNldHRpbmdz
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCwgdmFsdWUudG9Cb29sKCkpOwotICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJFUlJPUjogTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSgpIGRvZXMgbm90IHN1cHBvcnQg
dGhlICclcycgcHJlZmVyZW5jZVxuIiwKLSAgICAgICAgICAgIG5hbWUudG9MYXRpbjEoKS5kYXRh
KCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKGNvbnN0IFFTdHJpbmcmIHVybCkKLXsKLSAgICBRQnl0ZUFycmF5IHVybERhdGEgPSBw
YXRoVG9Mb2NhbFJlc291cmNlKHVybCkudG9MYXRpbjEoKTsKLSAgICBtX3VzZXJTdHlsZVNoZWV0
TG9jYXRpb24gPSBRVXJsOjpmcm9tRW5jb2RlZCh1cmxEYXRhLCBRVXJsOjpTdHJpY3RNb2RlKTsK
LQotICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCkKLSAgICAgICAgc2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKHRydWUpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRD
YXJldEJyb3dzaW5nRW5hYmxlZChib29sIHZhbHVlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKGJvb2wgdmFsdWUpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIHZhbHVlKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAg
ICBpZiAoZW5hYmxlZCkKLSAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0
VXNlclN0eWxlU2hlZXRVcmwobV91c2VyU3R5bGVTaGVldExvY2F0aW9uKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJs
KFFVcmwoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIGNvbnN0IFFTdHJpbmcm
IHNjaGVtZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4sIHNjaGVtZSk7Ci19Ci0KLWludCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKQotewotICAgIHJldHVybiBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d29ya2VyVGhyZWFkQ291bnQoKTsKLX0KLQotaW50IExh
eW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBhZ2Vz
KG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKLXsKLSAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNob3VsZENsb3NlKG1fZHJ0LT53ZWJQ
YWdlKCktPm1haW5GcmFtZSgpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U2Nyb2xsYmFyUG9saWN5KGNvbnN0IFFTdHJpbmcmIG9yaWVudGF0aW9uLCBjb25zdCBRU3RyaW5n
JiBwb2xpY3kpCi17Ci0gICAgUXQ6Ok9yaWVudGF0aW9uIG87Ci0gICAgUXQ6OlNjcm9sbEJhclBv
bGljeSBwOwotCi0gICAgaWYgKG9yaWVudGF0aW9uID09ICJ2ZXJ0aWNhbCIpCi0gICAgICAgIG8g
PSBRdDo6VmVydGljYWw7Ci0gICAgZWxzZSBpZiAob3JpZW50YXRpb24gPT0gImhvcml6b250YWwi
KQotICAgICAgICBvID0gUXQ6Okhvcml6b250YWw7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAocG9saWN5ID09ICJvbiIpCi0gICAgICAgIHAgPSBRdDo6U2Nyb2xsQmFyQWx3
YXlzT247Ci0gICAgZWxzZSBpZiAocG9saWN5ID09ICJhdXRvIikKLSAgICAgICAgcCA9IFF0OjpT
Y3JvbGxCYXJBc05lZWRlZDsKLSAgICBlbHNlIGlmIChwb2xpY3kgPT0gIm9mZiIpCi0gICAgICAg
IHAgPSBRdDo6U2Nyb2xsQmFyQWx3YXlzT2ZmOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShv
LCBwKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxl
dGVFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZChib29sIGVuYWJsZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGUp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChjb25zdCBRU3Ry
aW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKG1fZHJ0LT53ZWJQYWdlKCksIG5hbWUs
IHZhbHVlKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxl
ZChjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6aXNDb21tYW5kRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBuYW1lKTsKLX0K
LQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBRU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IFFTdHJpbmdMaXN0JiBvcHRpb25BcnJheSkKLXsKLSAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZpbmRTdHJpbmcobV9kcnQtPndlYlBhZ2UoKSwgc3RyaW5n
LCBvcHRpb25BcnJheSk7Ci19Ci0KLVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtl
clRleHRGb3JMaXN0SXRlbShjb25zdCBRV2ViRWxlbWVudCYgbGlzdEl0ZW0pCi17Ci0gICAgcmV0
dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0obGlzdEl0
ZW0pOwotfQotCi1RVmFyaWFudE1hcCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50KSBjb25zdAot
ewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKGVsZW1lbnQpOwotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVy
OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYg
ZWxlbWVudElkKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZWxlbWVu
dERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5G
cmFtZSgpLCBlbGVtZW50SWQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRo
ZW50aWNhdGVTZXNzaW9uKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0
cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IElmIHRoZXJlIGlzIGEgY29uY2VwdCBwZXItc2Vzc2lv
biAocGVyLXByb2Nlc3MpIGNyZWRlbnRpYWwgc3RvcmFnZSwgdGhlIGNyZWRlbnRpYWxzIHNob3Vs
ZCBiZSBhZGRlZCB0byBpdCBmb3IgbGF0ZXIgdXNlLgotfQotCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChl
bmFibGUgJiYgIW1fZHJ0LT5wZXJzaXN0ZW50U3RvcmFnZVBhdGgoKS5pc0VtcHR5KCkpCi0gICAg
ICAgIFFXZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0aChtX2RydC0+cGVyc2lzdGVudFN0
b3JhZ2VQYXRoKCkpOwotICAgIGVsc2UKLSAgICAgICAgUVdlYlNldHRpbmdzOjpzZXRJY29uRGF0
YWJhc2VQYXRoKFFTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhh
LCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEs
IGRvdWJsZSBnYW1tYSkKLXsKLSAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBt
X2RydC0+Z2V0QWxsUGFnZXMoKTsKLSAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdl
LCBwYWdlcykKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbihwYWdlLCBjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwg
YmV0YSwgY2FuUHJvdmlkZUdhbW1hLCBnYW1tYSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Ci0gICAgUUxpc3Q8V2ViQ29yZTo6V2Vi
UGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7Ci0gICAgZm9yZWFjaCAoV2ViQ29y
ZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCi0gICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKHBhZ2UsIGFsbG93KTsKLX0KLQotaW50IExh
eW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0cygpCi17Ci0gICAgaW50IHBlbmRpbmdQZXJtaXNzaW9uQ291bnQgPSAwOwotICAgIFFM
aXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwotICAg
IGZvcmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBwZW5kaW5n
UGVybWlzc2lvbkNvdW50ICs9IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBlbmRp
bmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyhwYWdlKTsKLQotICAgIHJldHVybiBwZW5k
aW5nUGVybWlzc2lvbkNvdW50OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdykKLXsKLSAgICAgbV9pc0dlb2xv
Y2F0aW9uUGVybWlzc2lvblNldCA9IHRydWU7Ci0gICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9u
ID0gYWxsb3c7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2Nh
dGlvbkVycm9yKGludCBjb2RlLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQotewotICAgIFFMaXN0
PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwotICAgIGZv
cmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAgICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IocGFnZSwgY29kZSwgbWVzc2Fn
ZSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5
KQotewotICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQ
YWdlcygpOwotICAgIGZvcmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQotICAg
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
cGFnZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgUVN0cmluZyYgcmVz
dWx0LCBkb3VibGUgY29uZmlkZW5jZSwgY29uc3QgUVN0cmluZyYgbGFuZ3VhZ2UpCi17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChi
b29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxh
eW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVj
aElucHV0KGNvbnN0IFFTdHJpbmcmIGlucHV0RWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWUoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKLX0KLQot
UVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMo
aW50IHBhZ2VJbmRleCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQg
bWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KQotewotICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMo
bV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHBhZ2VJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCk7
Ci19Ci0KLVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBR
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKQotewotICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFnZVByb3BlcnR5KG1fZHJ0LT53ZWJQYWdlKCktPm1haW5G
cmFtZSgpLCBwcm9wZXJ0eU5hbWUsIHBhZ2VOdW1iZXIpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBRU3RyaW5nJiBzb3VyY2VDb2RlKQot
ewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVc2VyU3R5bGVTaGVldChtX2RydC0+
d2ViUGFnZSgpLCBzb3VyY2VDb2RlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKLXsKLSAgICBRV2ViSGlzdG9yeSogaGlzdG9yeSA9IG1f
ZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKTsKLSAgICBoaXN0b3J5LT5jbGVhcigpOwotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKHRydWUpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFT
dHJpbmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVSTFRvUmVkaXJlY3Qob3JpZ2luLCBkZXN0aW5hdGlvbik7
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFs
KGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobV9kcnQtPndlYlBhZ2UoKSwgbWluaW11bVRp
bWVySW50ZXJ2YWwpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVM
b2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzeW5jTG9jYWxTdG9yYWdlKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlu
a0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
Ci19Ci0KLVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpCi17
Ci0gICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpsYXllclRyZWVBc1RleHQobV9k
cnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRUZXh0RGlyZWN0aW9uKGNvbnN0IFFTdHJpbmcmIGRpcmVjdGlvbk5hbWUpCi17Ci0g
ICAgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImF1dG8iKQotICAgICAgICBtX2RydC0+d2ViUGFnZSgp
LT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0RGlyZWN0aW9uRGVmYXVsdCk7Ci0gICAg
ZWxzZSBpZiAoZGlyZWN0aW9uTmFtZSA9PSAicnRsIikKLSAgICAgICAgbV9kcnQtPndlYlBhZ2Uo
KS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0KTsK
LSAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJsdHIiKQotICAgICAgICBtX2RydC0+d2Vi
UGFnZSgpLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0RGlyZWN0aW9uTGVmdFRvUmln
aHQpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29r
aWVzKGJvb2wgYWNjZXB0KQotewotICAgIFFXZWJTZXR0aW5ncyogZ2xvYmFsU2V0dGluZ3MgPSBR
V2ViU2V0dGluZ3M6Omdsb2JhbFNldHRpbmdzKCk7Ci0gICAgaWYgKGFjY2VwdCkKLSAgICAgICAg
Z2xvYmFsU2V0dGluZ3MtPnNldFRoaXJkUGFydHlDb29raWVQb2xpY3koUVdlYlNldHRpbmdzOjpB
bHdheXNBbGxvd1RoaXJkUGFydHlDb29raWVzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gVGhp
cyBtYXRjaGVzIHRoZSBTYWZhcmkgdGhpcmQtcGFydHkgY29va2llIGJsb2NraW5nIHBvbGljeSB0
ZXN0ZWQgaW4gdGhpcmQtcGFydHktY29va2llLXJlbGF4aW5nLmh0bWwKLSAgICAgICAgZ2xvYmFs
U2V0dGluZ3MtPnNldFRoaXJkUGFydHlDb29raWVQb2xpY3koUVdlYlNldHRpbmdzOjpBbGxvd1Ro
aXJkUGFydHlXaXRoRXhpc3RpbmdDb29raWVzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsd2F5c0Jsb2NrQ29va2llcyhib29sIGJsb2NrKQotewotICAgIFFX
ZWJTZXR0aW5ncyogZ2xvYmFsU2V0dGluZ3MgPSBRV2ViU2V0dGluZ3M6Omdsb2JhbFNldHRpbmdz
KCk7Ci0gICAgaWYgKGJsb2NrKQotICAgICAgICBnbG9iYWxTZXR0aW5ncy0+c2V0VGhpcmRQYXJ0
eUNvb2tpZVBvbGljeShRV2ViU2V0dGluZ3M6OkFsd2F5c0Jsb2NrVGhpcmRQYXJ0eUNvb2tpZXMp
OwotICAgIGVsc2UKLSAgICAgICAgZ2xvYmFsU2V0dGluZ3MtPnNldFRoaXJkUGFydHlDb29raWVQ
b2xpY3koUVdlYlNldHRpbmdzOjpBbHdheXNBbGxvd1RoaXJkUGFydHlDb29raWVzKTsKLX0KLQot
Y29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdXaWR0aCA9IDgwMDsK
LWNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0ID0gNjAw
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGF5b3V0VGVzdENvbnRyb2xsZXJRdF9o
Ci0jZGVmaW5lIExheW91dFRlc3RDb250cm9sbGVyUXRfaAotCi0jaW5jbHVkZSA8UUJhc2ljVGlt
ZXI+Ci0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxRU2l6ZT4KLSNpbmNsdWRlIDxRU3Ry
aW5nPgotI2luY2x1ZGUgPFF0RGVidWc+Ci0jaW5jbHVkZSA8UVRpbWVyPgotI2luY2x1ZGUgPFFU
aW1lckV2ZW50PgotI2luY2x1ZGUgPFFWYXJpYW50PgotCi0jaW5jbHVkZSA8cXdlYmRhdGFiYXNl
Lmg+Ci0jaW5jbHVkZSA8cXdlYmVsZW1lbnQuaD4KLSNpbmNsdWRlIDxxd2ViZnJhbWUuaD4KLSNp
bmNsdWRlIDxxd2ViaGlzdG9yeS5oPgotI2luY2x1ZGUgPHF3ZWJwYWdlLmg+Ci0jaW5jbHVkZSA8
cXdlYnNlY3VyaXR5b3JpZ2luLmg+Ci0KLWNsYXNzIFFXZWJGcmFtZTsKLWNsYXNzIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OwotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIER1bXBSZW5k
ZXJUcmVlOwotfQotY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgOiBwdWJsaWMgUU9iamVjdCB7
Ci0gICAgUV9PQkpFQ1QKLSAgICBRX1BST1BFUlRZKGludCB3ZWJIaXN0b3J5SXRlbUNvdW50IFJF
QUQgd2ViSGlzdG9yeUl0ZW1Db3VudCkKLSAgICBRX1BST1BFUlRZKGludCB3b3JrZXJUaHJlYWRD
b3VudCBSRUFEIHdvcmtlclRocmVhZENvdW50KQotICAgIFFfUFJPUEVSVFkoYm9vbCBnbG9iYWxG
bGFnIFJFQUQgZ2xvYmFsRmxhZyBXUklURSBzZXRHbG9iYWxGbGFnKQotcHVibGljOgotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlKiBkcnQpOwotCi0gICAg
Ym9vbCBzaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhOyB9
Ci0gICAgYm9vbCBzaG91bGREdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHVtcDsg
fQotICAgIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVtcEJhY2tGb3J3YXJkTGlzdDsgfQotICAgIGJvb2wgc2hvdWxkRHVtcENoaWxkcmVuQXNUZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQ2hpbGRyZW5Bc1RleHQ7IH0KLSAgICBib29sIHNob3Vs
ZER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQotICAgIGJvb2wgc2hvdWxkRHVtcERhdGFiYXNlQ2Fs
bGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kdW1wRGF0YWJhc2VDYWxsYmFja3M7IH0KLSAgICBi
b29sIHNob3VsZER1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3M7IH0KLSAgICBi
b29sIHNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBTdGF0
dXNDYWxsYmFja3M7IH0KLSAgICBib29sIHNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdCB7IHJl
dHVybiBtX3dhaXRGb3JEb25lOyB9Ci0gICAgYm9vbCBzaG91bGRIYW5kbGVFcnJvclBhZ2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYW5kbGVFcnJvclBhZ2VzOyB9Ci0gICAgYm9vbCBjYW5PcGVuV2lu
ZG93cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuT3BlbldpbmRvd3M7IH0KLSAgICBib29sIHNob3Vs
ZER1bXBUaXRsZUNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBUaXRsZUNoYW5nZXM7IH0K
LSAgICBib29sIHdhaXRGb3JQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3dhaXRGb3JQb2xpY3k7
IH0KLSAgICBib29sIGlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24oKSBjb25zdCB7IHJldHVybiBt
X2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247IH0KLSAgICBib29sIGlzUHJpbnRpbmcoKSB7IHJl
dHVybiBtX2lzUHJpbnRpbmc7IH0KLQotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgbWF4Vmlld1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQgbWF4Vmlld0hlaWdodDsKLQotICAgIHZvaWQgc2V0VGltZW91dChpbnQgdGltZW91dCkg
eyBtX3RpbWVvdXQgPSB0aW1lb3V0OyB9Ci0gICAgdm9pZCBzZXRTaG91bGRUaW1lb3V0KGJvb2wg
ZmxhZykgeyBtX3Nob3VsZFRpbWVvdXQgPSBmbGFnOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lk
IHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKTsKLQotc2lnbmFsczoKLSAgICB2b2lkIGRvbmUoKTsK
LQotICAgIHZvaWQgc2hvd1BhZ2UoKTsKLSAgICB2b2lkIGhpZGVQYWdlKCk7Ci0gICAgdm9pZCBn
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKTsKLQotcHVibGljIHNsb3RzOgotICAgIHZvaWQgbWF5
YmVEdW1wKGJvb2wgb2spOwotICAgIHZvaWQgZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9u
Q2FjaGVRdW90YSgpIHsgbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3Rh
ID0gdHJ1ZTsgfQotICAgIHZvaWQgZHVtcEFzVGV4dCgpIHsgbV90ZXh0RHVtcCA9IHRydWU7IH0K
LSAgICB2b2lkIGR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpIHsgbV9kdW1wQ2hpbGRyZW5Bc1RleHQg
PSB0cnVlOyB9Ci0gICAgdm9pZCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIHsgbV9k
dW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyA9IHRydWU7IH0KLSAgICB2b2lkIGR1bXBEYXRh
YmFzZUNhbGxiYWNrcygpIHsgbV9kdW1wRGF0YWJhc2VDYWxsYmFja3MgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkgeyBtX2R1bXBBcHBs
aWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MgPSB0cnVlOyB9Ci0gICAgdm9pZCBkdW1wU3Rh
dHVzQ2FsbGJhY2tzKCkgeyBtX2R1bXBTdGF0dXNDYWxsYmFja3MgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBzZXRDYW5PcGVuV2luZG93cygpIHsgbV9jYW5PcGVuV2luZG93cyA9IHRydWU7IH0KLSAgICB2
b2lkIHNldFByaW50aW5nKCkgeyBtX2lzUHJpbnRpbmcgPSB0cnVlOyB9Ci0gICAgdm9pZCB3YWl0
VW50aWxEb25lKCk7Ci0gICAgaW50IHdlYkhpc3RvcnlJdGVtQ291bnQoKTsKLSAgICB2b2lkIGtl
ZXBXZWJIaXN0b3J5KCk7Ci0gICAgdm9pZCBub3RpZnlEb25lKCk7Ci0gICAgdm9pZCBkdW1wQmFj
a0ZvcndhcmRMaXN0KCkgeyBtX2R1bXBCYWNrRm9yd2FyZExpc3QgPSB0cnVlOyB9Ci0gICAgYm9v
bCBnbG9iYWxGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxGbGFnOyB9Ci0gICAgdm9pZCBz
ZXRHbG9iYWxGbGFnKGJvb2wgZmxhZykgeyBtX2dsb2JhbEZsYWcgPSBmbGFnOyB9Ci0gICAgdm9p
ZCBoYW5kbGVFcnJvclBhZ2VzKCkgeyBtX2hhbmRsZUVycm9yUGFnZXMgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkdW1wRWRpdGluZ0NhbGxiYWNrcygpOwotICAgIHZvaWQgZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpOwotICAgIHZvaWQgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpOwotICAgIHZv
aWQgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKTsKLSAgICB2b2lkIGR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKLSAgICB2b2lkIGR1bXBSZXNvdXJjZVJlc3BvbnNlTUlN
RVR5cGVzKCk7Ci0gICAgdm9pZCBkdW1wV2lsbENhY2hlUmVzcG9uc2UoKTsKLSAgICB2b2lkIGR1
bXBIaXN0b3J5Q2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5z
TnVsbE9uUmVkaXJlY3QoYm9vbCBlbmFibGVkKTsKLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVz
dFJldHVybnNOdWxsKGJvb2wgZW5hYmxlZCk7Ci0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RD
bGVhckhlYWRlcihjb25zdCBRU3RyaW5nTGlzdCYgaGVhZGVycyk7Ci0gICAgdm9pZCBxdWV1ZUJh
Y2tOYXZpZ2F0aW9uKGludCBob3dGYXJCYWNrd2FyZCk7Ci0gICAgdm9pZCBxdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uKGludCBob3dGYXJGb3J3YXJkKTsKLSAgICB2b2lkIHF1ZXVlTG9hZChjb25zdCBR
U3RyaW5nJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRhcmdldCA9IFFTdHJpbmcoKSk7Ci0gICAgdm9p
ZCBxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0IFFTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFFTdHJp
bmcmIGJhc2VVUkwgPSBRU3RyaW5nKCksIGNvbnN0IFFTdHJpbmcmIGZhaWxpbmdVUkwgPSBRU3Ry
aW5nKCkpOwotICAgIHZvaWQgcXVldWVSZWxvYWQoKTsKLSAgICB2b2lkIHF1ZXVlTG9hZGluZ1Nj
cmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwotICAgIHZvaWQgcXVldWVOb25Mb2FkaW5nU2Ny
aXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7Ci0gICAgdm9pZCBwcm92aXNpb25hbExvYWQoKTsK
LSAgICB2b2lkIHNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZShib29sID0gZmFs
c2UpIHt9Ci0gICAgaW50IHdpbmRvd0NvdW50KCk7Ci0gICAgdm9pZCBncmFudERlc2t0b3BOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7Ci0gICAgdm9pZCBpZ25v
cmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7Ci0gICAgYm9vbCBjaGVj
a0Rlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbik7Ci0g
ICAgdm9pZCBzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0
aXRsZSk7Ci0gICAgdm9pZCBkaXNwbGF5KCk7Ci0gICAgdm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRS
ZWdpb24oKTsKLSAgICB2b2lkIGNsZWFyQmFja0ZvcndhcmRMaXN0KCk7Ci0gICAgUVN0cmluZyBw
YXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IFFTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkdW1wVGl0
bGVDaGFuZ2VzKCkgeyBtX2R1bXBUaXRsZUNoYW5nZXMgPSB0cnVlOyB9Ci0gICAgUVN0cmluZyBl
bmNvZGVIb3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0KTsKLSAgICBRU3RyaW5nIGRlY29kZUhv
c3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpOwotICAgIHZvaWQgZHVtcFNlbGVjdGlvblJlY3Qo
KSBjb25zdCB7fQotICAgIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKTsKLSAg
ICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwotICAgIHZv
aWQgc2hvd1dlYkluc3BlY3RvcigpOwotICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoKTsKLSAg
ICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcm
IHNjcmlwdCk7Ci0gICAgdm9pZCByZW1vdmVBbGxWaXNpdGVkTGlua3MoKTsKLSAgICB2b2lkIHNl
dE1lZGlhVHlwZShjb25zdCBRU3RyaW5nJiB0eXBlKTsKLSAgICB2b2lkIHNldEZyYW1lRmxhdHRl
bmluZ0VuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNFbmFi
bGVkKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxl
VVJMcyhib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSk7Ci0gICAgdm9pZCBzZXRBdXRvZmlsbGVkKGNvbnN0IFFXZWJF
bGVtZW50JiwgYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IFFX
ZWJFbGVtZW50JiwgY29uc3QgUVN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgc2V0Rml4ZWRDb250
ZW50c1NpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICB2b2lkIHNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0U3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKGJvb2wgZW5hYmxlZCk7Ci0gICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sIGZs
YWcpOwotICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpOwotICAg
IHZvaWQgc2V0UE9TSVhMb2NhbGUoY29uc3QgUVN0cmluZyYgbG9jYWxlKTsKLSAgICB2b2lkIHJl
c2V0TG9hZEZpbmlzaGVkKCkgeyBtX2xvYWRGaW5pc2hlZCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBz
ZXRXaW5kb3dJc0tleShib29sIGlzS2V5KTsKLSAgICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RS
ZXNwb25kZXIoYm9vbCBpc0ZpcnN0KTsKLSAgICB2b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJv
b2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlKTsK
LSAgICB2b2lkIHNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lk
IHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0Vmlld01v
ZGVNZWRpYUZlYXR1cmUoY29uc3QgUVN0cmluZyYgbW9kZSk7Ci0gICAgdm9pZCBzZXRTbWFydElu
c2VydERlbGV0ZUVuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBleGVjQ29tbWFuZChj
b25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSA9IFFTdHJpbmcoKSk7Ci0g
ICAgYm9vbCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAg
IGJvb2wgZmluZFN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJpbmdMaXN0
JiBvcHRpb25BcnJheSk7Ci0KLSAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkKGNvbnN0IFFTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBR
U3RyaW5nJiBlbGVtZW50SWQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0
IFFTdHJpbmcmIGVsZW1lbnRJZCk7Ci0gICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYgZWxlbWVudElkKTsKLQotICAgIHVuc2lnbmVk
IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFT
dHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9z
dCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci0gICAgdm9pZCByZW1vdmVPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0
IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9u
SG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Ci0KLSAgICB2b2lkIGRpc3Bh
dGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpOwotICAgIHZvaWQgZGlzYWJsZUltYWdlTG9hZGluZygp
OwotCi0gICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7Ci0gICAgdm9pZCBjbGVh
ckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgdXJsKTsKLSAgICB2b2lk
IHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEp
OwotICAgIFFTdHJpbmdMaXN0IG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpOwotICAgIGxv
bmcgbG9uZyBhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcm
KTsgCi0gICAgdm9pZCBzZXRDYWNoZU1vZGVsKGludCk7Ci0KLSAgICB2b2lkIHNldERhdGFiYXNl
UXVvdGEoaW50IHNpemUpOwotICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAgICB2b2lk
IHNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGUpOwotCi0gICAgdm9pZCBzZXRDdXN0
b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSA9IGZhbHNlKTsK
LSAgICB2b2lkIHdhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpOwotCi0gICAgdm9pZCBvdmVycmlkZVBy
ZWZlcmVuY2UoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlKTsKLSAg
ICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgdXJsKTsKLSAg
ICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpOwotICAgIHZvaWQg
c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwg
Y29uc3QgUVN0cmluZyYgc2NoZW1lKTsKLSAgICBpbnQgd29ya2VyVGhyZWFkQ291bnQoKTsKLSAg
ICBpbnQgbnVtYmVyT2ZQYWdlcyhmbG9hdCB3aWR0aCA9IG1heFZpZXdXaWR0aCwgZmxvYXQgaGVp
Z2h0ID0gbWF4Vmlld0hlaWdodCk7Ci0gICAgYm9vbCBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXco
KTsKLSAgICAvLyBGb3Igbm93LCB0aGlzIGlzIGEgbm8tb3AuIFRoaXMgbWF5IGNoYW5nZSBkZXBl
bmRpbmcgb24gb3V0Y29tZSBvZgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzMzMwotICAgIHZvaWQgc2V0Q2FsbENsb3NlT25XZWJWaWV3cygpIHt9Ci0g
ICAgLy8gVGhpcyBpcyBhIG5vLW9wIC0gaXQgYWxsb3dzIHVzIHRvIHBhc3MKLSAgICAvLyBwbHVn
aW5zL2dldC11cmwtdGhhdC10aGUtcmVzb3VyY2UtbG9hZC1kZWxlZ2F0ZS13aWxsLWRpc2FsbG93
Lmh0bWwKLSAgICAvLyB3aGljaCBpcyBhIE1hYy1zcGVjaWZpYyB0ZXN0LgotICAgIHZvaWQgYWRk
RGlzYWxsb3dlZFVSTChjb25zdCBRU3RyaW5nJikge30KLQotICAgIHZvaWQgc2V0TW9ja0Rldmlj
ZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2Fu
UHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdh
bW1hKTsKLQotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNvZGUsIGNvbnN0
IFFTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpOwotICAg
IHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpOwotICAgIGludCBudW1i
ZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpOwotICAgIGJvb2wgaXNH
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2lzR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uU2V0OyB9Ci0gICAgYm9vbCBnZW9sb2NhdGlvblBlcm1pc3Npb24oKSBjb25zdCB7
IHJldHVybiBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsgfQotCi0gICAgdm9pZCBhZGRNb2NrU3Bl
ZWNoSW5wdXRSZXN1bHQoY29uc3QgUVN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwg
Y29uc3QgUVN0cmluZyYgbGFuZ3VhZ2UpOwotICAgIHZvaWQgc2V0TW9ja1NwZWVjaElucHV0RHVt
cFJlY3QoYm9vbCBmbGFnKTsKLSAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgUVN0cmlu
ZyYgaW5wdXRFbGVtZW50KTsKLQotICAgIHZvaWQgc2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hh
ciopOwotICAgIHZvaWQgcmVzZXRQYWdlVmlzaWJpbGl0eSgpOwotCi0gICAgdm9pZCBzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKTsKLQotICAgIC8vIEVtcHR5IHN0dWIgbWV0
aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0IG1vZGVsIGV4cG9zZWQgYnkgZ2xvYmFsIExh
eW91dFRlc3RDb250cm9sbGVyLgotICAgIHZvaWQgYWJvcnRNb2RhbCgpIHt9Ci0KLSAgICB2b2lk
IGFkZFVSTFRvUmVkaXJlY3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBjb25zdCBRU3RyaW5nJiBk
ZXN0aW5hdGlvbik7Ci0KLSAgICAvKgotICAgICAgICBQb2xpY3kgdmFsdWVzOiAnb24nLCAnYXV0
bycgb3IgJ29mZicuCi0gICAgICAgIE9yaWVudGF0aW9uIHZhbHVlczogJ3ZlcnRpY2FsJyBvciAn
aG9yaXpvbnRhbCcuCi0gICAgKi8KLSAgICB2b2lkIHNldFNjcm9sbGJhclBvbGljeShjb25zdCBR
U3RyaW5nJiBvcmllbnRhdGlvbiwgY29uc3QgUVN0cmluZyYgcG9saWN5KTsKLQotICAgIFFTdHJp
bmcgbWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IFFXZWJFbGVtZW50JiBsaXN0SXRlbSk7Ci0g
ICAgUVZhcmlhbnRNYXAgY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnN0IFFX
ZWJFbGVtZW50JiBlbGVtZW50KSBjb25zdDsKLQotICAgIC8vIFNpbXVsYXRlIGEgcmVxdWVzdCBh
biBlbWJlZGRpbmcgYXBwbGljYXRpb24gY291bGQgbWFrZSwgcG9wdWxhdGluZyBwZXItc2Vzc2lv
biBjcmVkZW50aWFsIHN0b3JhZ2UuCi0gICAgdm9pZCBhdXRoZW50aWNhdGVTZXNzaW9uKGNvbnN0
IFFTdHJpbmcmIHVybCwgY29uc3QgUVN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFFTdHJpbmcmIHBh
c3N3b3JkKTsKLQotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZShpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKLSAgICB2b2lkIGV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBz
Y3JpcHQpOwotICAgIFFTdHJpbmcgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJ
bmRleCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmln
aHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KTsKLSAgICBRU3RyaW5nIHBhZ2VQ
cm9wZXJ0eShjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKTsKLSAg
ICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IFFTdHJpbmcmIHNvdXJjZUNvZGUpOwotCi0g
ICAgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUpOwotICAgIAotICAgIHZvaWQg
b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKTsKLSAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFn
ZSgpOwotICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIpOwotICAgIGxvbmcgbG9uZyBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VG
b3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgdm9pZCBvYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcik7Ci0gICAgdm9p
ZCBzeW5jTG9jYWxTdG9yYWdlKCk7Ci0gICAgUVN0cmluZyBsYXllclRyZWVBc1RleHQoKTsKLSAg
ICB2b2lkIHNldFRleHREaXJlY3Rpb24oY29uc3QgUVN0cmluZyYgZGlyZWN0aW9uTmFtZSk7Ci0g
ICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAg
dm9pZCBzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wpOwotICAgIHZvaWQgc2V0QWx3YXlzQmxv
Y2tDb29raWVzKGJvb2wpOwotCi1wcml2YXRlIHNsb3RzOgotICAgIHZvaWQgcHJvY2Vzc1dvcmso
KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihi
b29sIGFsbG93KTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1faGFzRHVtcGVkOwotICAgIGJvb2wg
bV90ZXh0RHVtcDsKLSAgICBib29sIG1fZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2Fj
aGVRdW90YTsKLSAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKLSAgICBib29sIG1fZHVt
cENoaWxkcmVuQXNUZXh0OwotICAgIGJvb2wgbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
czsKLSAgICBib29sIG1fY2FuT3BlbldpbmRvd3M7Ci0gICAgYm9vbCBtX3dhaXRGb3JEb25lOwot
ICAgIGJvb2wgbV9kdW1wVGl0bGVDaGFuZ2VzOwotICAgIGJvb2wgbV9kdW1wRGF0YWJhc2VDYWxs
YmFja3M7Ci0gICAgYm9vbCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3M7
Ci0gICAgYm9vbCBtX2R1bXBTdGF0dXNDYWxsYmFja3M7Ci0gICAgYm9vbCBtX3dhaXRGb3JQb2xp
Y3k7Ci0gICAgYm9vbCBtX2hhbmRsZUVycm9yUGFnZXM7Ci0gICAgYm9vbCBtX2xvYWRGaW5pc2hl
ZDsKLSAgICBib29sIG1fZ2xvYmFsRmxhZzsKLSAgICBib29sIG1fdXNlclN0eWxlU2hlZXRFbmFi
bGVkOwotICAgIGJvb2wgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldDsKLSAgICBib29sIG1f
aXNQcmludGluZzsKLSAgICBib29sIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uOwotCi0gICAgUVVy
bCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0gICAgUUJhc2ljVGltZXIgbV90aW1lb3V0VGlt
ZXI7Ci0gICAgUVdlYkZyYW1lKiBtX3RvcExvYWRpbmdGcmFtZTsKLSAgICBXZWJDb3JlOjpEdW1w
UmVuZGVyVHJlZSogbV9kcnQ7Ci0gICAgUVdlYkhpc3RvcnkqIG1fd2ViSGlzdG9yeTsKLSAgICBR
U3RyaW5nTGlzdCBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2luczsKLSAgICBib29s
IG1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbjsKLQotICAgIGJvb2wgbV9zaG91bGRUaW1lb3V0
OwotICAgIGludCBtX3RpbWVvdXQ7Ci19OwotCi0jZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdF9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAJKHJl
dmlzaW9uIDEyNTMzNSkJKGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5jcHA6MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1
bm5lclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250
cm9sbGVyUXQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgorCisjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVRdC5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorI2luY2x1
ZGUgIldvcmtRdWV1ZUl0ZW1RdC5oIgorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjaW5j
bHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRTG9jYWxlPgorI2luY2x1ZGUgPHF3ZWJzZXR0aW5ncy5o
PgorCitMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoV2ViQ29yZTo6
RHVtcFJlbmRlclRyZWUqIGRydCkKKyAgICA6IFFPYmplY3QoKQorICAgICwgbV9kcnQoZHJ0KQor
ICAgICwgbV9zaG91bGRUaW1lb3V0KHRydWUpCisgICAgLCBtX3RpbWVvdXQoMzAwMDApCit7Cisg
ICAgcmVzZXQoKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcE5vdGlmaWNhdGlv
bih0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQoreworICAg
IG1faGFzRHVtcGVkID0gZmFsc2U7CisgICAgbV9sb2FkRmluaXNoZWQgPSBmYWxzZTsKKyAgICBt
X3RleHREdW1wID0gZmFsc2U7CisgICAgbV9kdW1wQmFja0ZvcndhcmRMaXN0ID0gZmFsc2U7Cisg
ICAgbV9kdW1wQ2hpbGRyZW5Bc1RleHQgPSBmYWxzZTsKKyAgICBtX2R1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zID0gZmFsc2U7CisgICAgbV9jYW5PcGVuV2luZG93cyA9IGZhbHNlOworICAg
IG1fd2FpdEZvckRvbmUgPSBmYWxzZTsKKyAgICBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNh
dGlvbkNhY2hlUXVvdGEgPSBmYWxzZTsKKyAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSBmYWxzZTsK
KyAgICBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrcyA9IGZhbHNlOworICAgIG1fZHVtcEFwcGxpY2F0
aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcyA9IGZhbHNlOworICAgIG1fZHVtcFN0YXR1c0NhbGxi
YWNrcyA9IGZhbHNlOworICAgIG1fdGltZW91dFRpbWVyLnN0b3AoKTsKKyAgICBtX3RvcExvYWRp
bmdGcmFtZSA9IDA7CisgICAgbV93YWl0Rm9yUG9saWN5ID0gZmFsc2U7CisgICAgbV9oYW5kbGVF
cnJvclBhZ2VzID0gZmFsc2U7CisgICAgbV93ZWJIaXN0b3J5ID0gMDsKKyAgICBtX2dsb2JhbEZs
YWcgPSBmYWxzZTsKKyAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZhbHNlOworICAgIG1f
ZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNsZWFyKCk7CisgICAgbV9pZ25vcmVE
ZXNrdG9wTm90aWZpY2F0aW9uID0gZmFsc2U7CisgICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lv
blNldCA9IGZhbHNlOworICAgIG1faXNQcmludGluZyA9IGZhbHNlOworICAgIG1fZ2VvbG9jYXRp
b25QZXJtaXNzaW9uID0gZmFsc2U7CisKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVt
cEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpk
dW1wRnJhbWVMb2FkZXIoZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1w
UHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGZhbHNlKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlcihmYWxzZSk7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoZmFsc2UpOworICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhmYWxz
ZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBXaWxsQ2FjaGVSZXNwb25zZUNh
bGxiYWNrcyhmYWxzZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyTWFp
blJlc291cmNlRGF0YUxvYWQodHJ1ZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChmYWxzZSk7CisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGZhbHNlKTsK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFk
ZXJzKFFTdHJpbmdMaXN0KCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhclNj
cmlwdFdvcmxkcygpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZShmYWxzZSwgZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpk
dW1wSGlzdG9yeUNhbGxiYWNrcyhmYWxzZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmR1bXBWaXNpdGVkTGlua3NDYWxsYmFja3MoZmFsc2UpOworICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpyZXNldEdlb2xvY2F0aW9uTW9jayhtX2RydC0+d2ViUGFnZSgpKTsKKyAgICBzZXRJ
Y29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKKyAgICBjbGVhckFsbERhdGFiYXNlcygpOworICAg
IC8vIFRoZSBkZWZhdWx0IHN0YXRlIGZvciBEUlQgaXMgdG8gYmxvY2sgdGhpcmQtcGFydHkgY29v
a2llcywgbWltaWNpbmcgdGhlIE1hYyBwb3J0CisgICAgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhm
YWxzZSk7CisgICAgZW1pdCBoaWRlUGFnZSgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpwcm9jZXNzV29yaygpCit7CisgICAgLy8gcURlYnVnKCkgPDwgIj4+PnByb2Nlc3NXb3Jr
IjsKKworICAgIC8vIGlmIHdlIGRpZG4ndCBzdGFydCBhIG5ldyBsb2FkLCB0aGVuIHdlIGZpbmlz
aGVkIGFsbCB0aGUgY29tbWFuZHMsIHNvIHdlJ3JlIHJlYWR5IHRvIGR1bXAgc3RhdGUKKyAgICBp
ZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhc2hvdWxkV2FpdFVudGls
RG9uZSgpKSB7CisgICAgICAgIGVtaXQgZG9uZSgpOworICAgICAgICBtX2hhc0R1bXBlZCA9IHRy
dWU7CisgICAgfQorfQorCisvLyBDYWxsZWQgb24gbG9hZEZpbmlzaGVkIG9uIFdlYlBhZ2UKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heWJlRHVtcChib29sIC8qc3VjY2VzcyovKQorewor
CisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIG9uIGFueSBvZiB0aGUgaHR0cC90ZXN0cy9zZWN1cml0
eS93aW5kb3ctZXZlbnRzLSouaHRtbCB0ZXN0cywgd2hlcmUgdGhlIHRlc3Qgb3BlbnMKKyAgICAv
LyBhIG5ldyB3aW5kb3csIGNhbGxzIHRoZSB1bmxvYWQgYW5kIGxvYWQgZXZlbnQgaGFuZGxlcnMg
b24gdGhlIHdpbmRvdydzIHBhZ2UsIGFuZCB0aGVuIGltbWVkaWF0ZWx5CisgICAgLy8gaXNzdWVz
IGEgbm90aWZ5RG9uZS4gTmVlZHMgaW52ZXN0aWdhdGlvbi4KKyAgICBpZiAoIW1fdG9wTG9hZGlu
Z0ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHdl
IGdldCBjYWxsZWQgYnkgd2luZG93cyBjcmVhdGVkIGZyb20gdGhlIG1haW4gcGFnZSB0aGF0IGhh
dmUgZmluaXNoZWQKKyAgICAvLyBsb2FkaW5nLCBzbyB3ZSBkb24ndCBBU1NFUlQgaGVyZS4gQXQg
dGhlIG1vbWVudCB3ZSBkbyBub3QgZ2F0aGVyIHJlc3VsdHMgZnJvbSBzdWNoIHdpbmRvd3MsCisg
ICAgLy8gYnV0IG1heSBuZWVkIHRvIGluIGZ1dHVyZS4KKyAgICBpZiAoc2VuZGVyKCkgIT0gbV90
b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sb2FkRmlu
aXNoZWQgPSB0cnVlOworICAgIC8vIGFzIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb24gbG9hZEZp
bmlzaGVkLCB0aGUgdGVzdCBtaWdodAorICAgIC8vIGFscmVhZHkgaGF2ZSBkdW1wZWQgYW5kIHRo
dXMgbm8gbG9uZ2VyIGJlIGFjdGl2ZSwgdGh1cworICAgIC8vIGJhaWwgb3V0IGhlcmUuCisgICAg
aWYgKG1faGFzRHVtcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBXb3JrUXVldWU6OnNoYXJl
ZCgpLT5zZXRGcm96ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRlIGxvYWQgZnJlZXplcyB0aGUg
cXVldWUgZm9yIHRoZSByZXN0IG9mIHRoaXMgdGVzdAorICAgIGlmIChXb3JrUXVldWU6OnNoYXJl
ZCgpLT5jb3VudCgpKQorICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMCwgdGhpcywgU0xPVChw
cm9jZXNzV29yaygpKSk7CisgICAgZWxzZSBpZiAoIXNob3VsZFdhaXRVbnRpbERvbmUoKSkgewor
ICAgICAgICBlbWl0IGRvbmUoKTsKKyAgICAgICAgbV9oYXNEdW1wZWQgPSB0cnVlOworICAgIH0K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9uZSgpCit7CisgICAg
Ly9xRGVidWcoKSA8PCAiPj4+PndhaXRGb3JEb25lIjsKKyAgICBtX3dhaXRGb3JEb25lID0gdHJ1
ZTsKKworICAgIGlmICghbV9zaG91bGRUaW1lb3V0KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3RpbWVvdXRUaW1lci5zdGFydChtX3RpbWVvdXQsIHRoaXMpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25zdCBRU3RyaW5nJiBtb2Rl
KQoreworICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldFByb3BlcnR5KCJfcV92aWV3TW9kZSIsIG1v
ZGUpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQo
KQoreworICAgIGlmICghbV93ZWJIaXN0b3J5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAv
LyBTdWJ0cmFjdCBvbmUgaGVyZSBhcyBvdXIgUVdlYkhpc3Rvcnk6OmNvdW50KCkgaW5jbHVkZXMg
dGhlIGFjdHVhbCBwYWdlLAorICAgIC8vIHdoaWNoIGlzIG5vdCBjb25zaWRlcmVkIGluIHRoZSBE
UlQgdGVzdHMuCisgICAgcmV0dXJuIG1fd2ViSGlzdG9yeS0+Y291bnQoKSAtIDE7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3sKKyAgICBtX3dlYkhp
c3RvcnkgPSBtX2RydC0+d2ViUGFnZSgpLT5oaXN0b3J5KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQoreworICAgIHFEZWJ1ZygpIDw8ICI+Pj4+bm90aWZ5
RG9uZSI7CisKKyAgICBpZiAobV9zaG91bGRUaW1lb3V0ICYmICFtX3RpbWVvdXRUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbWVvdXRUaW1lci5zdG9wKCk7Cisg
ICAgbV93YWl0Rm9yRG9uZSA9IGZhbHNlOworCisgICAgLy8gSWYgdGhlIHBhZ2UgaGFzIG5vdCBm
aW5pc2hlZCBsb2FkaW5nIChpLmUuIGxvYWRGaW5pc2hlZCgpIGhhcyBub3QgYmVlbiBlbWl0dGVk
KSB0aGVuCisgICAgLy8gY29udGVudCBjcmVhdGVkIGJ5IHRoZSBsaWtlcyBvZiBkb2N1bWVudC53
cml0ZSgpIEpTIG1ldGhvZHMgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHlldC4KKyAgICAvLyBXaGVu
IHRoZSBwYWdlIGhhcyBmaW5pc2hlZCBsb2FkaW5nLCBtYXliZUR1bXAgYWJvdmUgd2lsbCBkdW1w
IHRoZSByZXN1bHRzIG5vdyB0aGF0IHdlIGhhdmUKKyAgICAvLyBqdXN0IHNldCBzaG91bGRXYWl0
VW50aWxEb25lIHRvIGZhbHNlLgorICAgIGlmICghbV9sb2FkRmluaXNoZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGVtaXQgZG9uZSgpOworCisgICAgLy8gRklYTUU6IGludmVzdGlnYXRlIHdo
eSBhbHdheXMgcmVzZXR0aW5nIHRoZXNlIHJlc3VsdCBpbiB0aW1lb3V0cworICAgIG1faGFzRHVt
cGVkID0gdHJ1ZTsKKyAgICBtX3dhaXRGb3JQb2xpY3kgPSBmYWxzZTsKK30KKworaW50IExheW91
dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCit7CisgICAgcmV0dXJuIG1fZHJ0LT53aW5k
b3dDb3VudCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BO
b3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKK3sKKyAgICBRV2Vi
RnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7CisgICAgbV9kcnQt
PndlYlBhZ2UoKS0+c2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIFFXZWJQYWdlOjpOb3RpZmlj
YXRpb25zLCBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpOworICAgIG1fZGVza3Rv
cE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmFwcGVuZChvcmlnaW4pOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjppZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKCkKK3sKKyAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gPSB0cnVlOworfQor
Citib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKK3sKKyAgICByZXR1cm4gIW1faWdub3JlRGVz
a3RvcE5vdGlmaWNhdGlvbiAmJiBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5j
b250YWlucyhvcmlnaW4pOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0
ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2so
dGl0bGUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3sKKyAg
ICBlbWl0IHNob3dQYWdlKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3Bs
YXlJbnZhbGlkYXRlZFJlZ2lvbigpCit7CisgICAgZGlzcGxheSgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit7CisgICAgbV9kcnQtPndl
YlBhZ2UoKS0+aGlzdG9yeSgpLT5jbGVhcigpOworfQorCitRU3RyaW5nIExheW91dFRlc3RDb250
cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IFFTdHJpbmcmIHVybCkKK3sKKyAgICBR
U3RyaW5nIGxvY2FsVG1wVXJsKFFMYXRpbjFTdHJpbmcoImZpbGU6Ly8vdG1wL0xheW91dFRlc3Rz
IikpOworCisgICAgLy8gVHJhbnNsYXRlIGEgcmVxdWVzdCBmb3IgL3RtcC9MYXlvdXRUZXN0cyB0
byB0aGUgcmVwb3NpdG9yeSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCisgICAgLy8gRG8gbm90IHJl
bHkgb24gYSBzeW1saW5rIHRvIGJlIGNyZWF0ZWQgdmlhIHRoZSB0ZXN0IHJ1bm5lciwgd2hpY2gg
d2lsbCBub3Qgd29yayBvbiBXaW5kb3dzLgorICAgIGlmICh1cmwuc3RhcnRzV2l0aChsb2NhbFRt
cFVybCkpIHsKKyAgICAgICAgLy8gRHVtcFJlbmRlclRyZWUgbGl2ZXMgaW4gV2ViS2l0L1dlYktp
dEJ1aWxkLzxidWlsZF9tb2RlPi9iaW4uCisgICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIFdlYktp
dC9XZWJLaXRCdWlsZC9SZWxlYXNlL2JpbiA9PiBXZWJLaXQvTGF5b3V0VGVzdHMuCisgICAgICAg
IFFGaWxlSW5mbyBsYXlvdXRUZXN0c1Jvb3QoUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25E
aXJQYXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvLi4vLi4vLi4vTGF5b3V0VGVzdHMvIikpOworICAg
ICAgICBpZiAobGF5b3V0VGVzdHNSb290LmV4aXN0cygpKQorICAgICAgICAgICAgcmV0dXJuIFFM
YXRpbjFTdHJpbmcoImZpbGU6Ly8iKSArIGxheW91dFRlc3RzUm9vdC5hYnNvbHV0ZVBhdGgoKSAr
IHVybC5taWQobG9jYWxUbXBVcmwubGVuZ3RoKCkpOworICAgIH0KKworICAgIHJldHVybiB1cmw7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkK
K3sKKyAgICBxRGVidWcoKSA8PCAiPj4+ZHVtcEVkaXRpbmdDYWxsYmFja3MiOworICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyh0cnVlKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcih0cnVlKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpCit7
CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJh
Y2sodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBVc2VyR2VzdHVy
ZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlcih0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpCit7CisgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3ModHJ1ZSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkK
K3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1F
VHlwZXModHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBXaWxsQ2Fj
aGVSZXNwb25zZSgpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBXaWxsQ2Fj
aGVSZXNwb25zZUNhbGxiYWNrcyh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZHVtcEhpc3RvcnlDYWxsYmFja3MoKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpkdW1wSGlzdG9yeUNhbGxiYWNrcyh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGxPblJlZGlyZWN0KGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGVuYWJsZWQpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGVu
YWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVl
c3RDbGVhckhlYWRlcihjb25zdCBRU3RyaW5nTGlzdCYgaGVhZGVycykKK3sKKyAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKGhlYWRlcnMp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlck1haW5SZXNvdXJjZURh
dGFMb2FkKGJvb2wgZGVmZXIpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERl
ZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZGVmZXIpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dGYXJCYWNrd2FyZCkKK3sKKyAgICAv
L3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUJhY2tOYXZpZ2F0aW9uIiA8PCBob3dGYXJCYWNrd2FyZDsK
KyAgICBmb3IgKGludCBpID0gMDsgaSAhPSBob3dGYXJCYWNrd2FyZDsgKytpKQorICAgICAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgQmFja0l0ZW0oMSwgbV9kcnQtPndlYlBhZ2Uo
KSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKGludCBob3dGYXJGb3J3YXJkKQoreworICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlRm9y
d2FyZE5hdmlnYXRpb24iIDw8IGhvd0ZhckZvcndhcmQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
IT0gaG93RmFyRm9yd2FyZDsgKytpKQorICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1
ZShuZXcgRm9yd2FyZEl0ZW0oMSwgbV9kcnQtPndlYlBhZ2UoKSkpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoY29uc3QgUVN0cmluZyYgdXJsLCBjb25zdCBRU3Ry
aW5nJiB0YXJnZXQpCit7CisgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVMb2FkIiA8PCB1cmwg
PDwgdGFyZ2V0OworICAgIFFVcmwgbWFpblJlc291cmNlVXJsID0gbV9kcnQtPndlYlBhZ2UoKS0+
bWFpbkZyYW1lKCktPnVybCgpOworICAgIFFTdHJpbmcgYWJzb2x1dGVVcmwgPSBtYWluUmVzb3Vy
Y2VVcmwucmVzb2x2ZWQoUVVybCh1cmwpKS50b0VuY29kZWQoKTsKKyAgICBXb3JrUXVldWU6OnNo
YXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVcmwsIHRhcmdldCwgbV9kcnQtPndl
YlBhZ2UoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKGNvbnN0IFFTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFFTdHJpbmcmIGJhc2VVUkwsIGNv
bnN0IFFTdHJpbmcmIGZhaWxpbmdVUkwpCit7CisgICAgaWYgKGZhaWxpbmdVUkwuaXNFbXB0eSgp
KQorICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxTdHJpbmdJ
dGVtKGNvbnRlbnQsIGJhc2VVUkwsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKKyAgICBlbHNlCisgICAg
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkQWx0ZXJuYXRlSFRNTFN0cmlu
Z0l0ZW0oY29udGVudCwgYmFzZVVSTCwgZmFpbGluZ1VSTCwgbV9kcnQtPndlYlBhZ2UoKSkpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZVJlbG9hZCgpCit7CisgICAgLy9x
RGVidWcoKSA8PCAiPj4+cXVldWVSZWxvYWQiOworICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1
ZXVlKG5ldyBSZWxvYWRJdGVtKG1fZHJ0LT53ZWJQYWdlKCkpKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkK
K3sKKyAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUxvYWRpbmdTY3JpcHQiIDw8IHNjcmlwdDsK
KyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0ZW0oc2Ny
aXB0LCBtX2RydC0+d2ViUGFnZSgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit7CisgICAgLy9x
RGVidWcoKSA8PCAiPj4+cXVldWVOb25Mb2FkaW5nU2NyaXB0IiA8PCBzY3JpcHQ7CisgICAgV29y
a1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IE5vbkxvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCwg
bV9kcnQtPndlYlBhZ2UoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwcm92
aXNpb25hbExvYWQoKQoreworICAgIFFXZWJGcmFtZSogZnJhbWUgPSBxb2JqZWN0X2Nhc3Q8UVdl
YkZyYW1lKj4oc2VuZGVyKCkpOworICAgIGlmICghbV90b3BMb2FkaW5nRnJhbWUgJiYgIW1faGFz
RHVtcGVkKQorICAgICAgICBtX3RvcExvYWRpbmdGcmFtZSA9IGZyYW1lOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICpldikKK3sKKyAgICBp
ZiAoZXYtPnRpbWVySWQoKSA9PSBtX3RpbWVvdXRUaW1lci50aW1lcklkKCkpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogbWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5
RG9uZSB0byBiZSBjYWxsZWRcbiI7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBtZXNz
YWdlKTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIlcyIsIG1lc3NhZ2UpOworICAgICAgICBu
b3RpZnlEb25lKCk7CisgICAgfSBlbHNlCisgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXYp
OworfQorCitRU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjplbmNvZGVIb3N0TmFtZShjb25z
dCBRU3RyaW5nJiBob3N0KQoreworICAgIFFTdHJpbmcgZW5jb2RlZCA9IFFTdHJpbmc6OmZyb21M
YXRpbjEoUVVybDo6dG9BY2UoaG9zdCArIFFMYXRpbjFTdHJpbmcoIi5ubyIpKSk7CisgICAgZW5j
b2RlZC50cnVuY2F0ZShlbmNvZGVkLmxlbmd0aCgpIC0gMyk7IC8vIHN0cmlwIC5ubworICAgIHJl
dHVybiBlbmNvZGVkOworfQorCitRU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpkZWNvZGVI
b3N0TmFtZShjb25zdCBRU3RyaW5nJiBob3N0KQoreworICAgIFFTdHJpbmcgZGVjb2RlZCA9IFFV
cmw6OmZyb21BY2UoaG9zdC50b0xhdGluMSgpICsgUUJ5dGVBcnJheSgiLm5vIikpOworICAgIGRl
Y29kZWQudHJ1bmNhdGUoZGVjb2RlZC5sZW5ndGgoKSAtIDMpOworICAgIHJldHVybiBkZWNvZGVk
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNZWRpYVR5cGUoY29uc3QgUVN0
cmluZyYgdHlwZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWVkaWFUeXBl
KG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB0eXBlKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQoreworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JDbG9zZShtX2RydC0+d2ViUGFnZSgpKTsKKyAgICBtX2Ry
dC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZl
bG9wZXJFeHRyYXNFbmFibGVkLCBmYWxzZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZHJ0
LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVs
b3BlckV4dHJhc0VuYWJsZWQsIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2hvd1dlYkluc3BlY3RvcigpCit7CisgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+
c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgdHJ1ZSk7
CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3cobV9kcnQtPndl
YlBhZ2UoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJ
bnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNjcmlwdChtX2RydC0+d2Vi
UGFnZSgpLCBjYWxsSWQsIHNjcmlwdCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKG1fZHJ0LT53ZWJQYWdl
KCksIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU2Ny
b2xsYmFyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlZCk7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCit7CisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmdvQmFjayhtX2RydC0+d2ViUGFnZSgpKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGZsYWcpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERlZmVyc0xvYWRpbmcobV9kcnQtPndlYlBhZ2Uo
KSwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVy
c2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2RydC0+d2ViUGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRD
YW5BY2Nlc3NSZW1vdGVVcmxzLCBlbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgZW5hYmxlZCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKQoreworICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldE9mZmxp
bmVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGEocXVvdGEpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50LCBib29s
IGlzQXV0b2ZpbGxlZCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dEF1dG9maWxsZWQoZWxlbWVudCwgaXNBdXRvZmlsbGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBRU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
VmFsdWVGb3JVc2VyKGVsZW1lbnQsIHZhbHVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0Rml4ZWRDb250ZW50c1NpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAg
IG1fdG9wTG9hZGluZ0ZyYW1lLT5wYWdlKCktPnNldFByZWZlcnJlZENvbnRlbnRzU2l6ZShRU2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9kcnQtPndlYlBhZ2Uo
KS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCwgZW5hYmxlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIG1fZHJ0LT53ZWJQYWdl
KCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZCwgZW5hYmxlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9kcnQtPndlYlBhZ2Uo
KS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9w
ZW5XaW5kb3dzLCAhZW5hYmxlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgUVN0cmlu
ZyYgbG9jYWxlKQoreworICAgIFFMb2NhbGUgcWxvY2FsZShsb2NhbGUpOworICAgIFFMb2NhbGU6
OnNldERlZmF1bHQocWxvY2FsZSk7Cit9IAorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRXaW5kb3dJc0tleShib29sIGlzS2V5KQoreworICAgIG1fZHJ0LT5zd2l0Y2hGb2N1cyhpc0tl
eSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RS
ZXNwb25kZXIoYm9vbCBpc0ZpcnN0KQoreworICAgIC8vRklYTUU6IG9ubHkgbmVlZCB0aGlzIGZv
ciB0aGUgbW9tZW50OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5
OTAKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZChib29sIGVuYWJsZSkKK3sKKyAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5n
cygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkLCBlbmFibGUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRp
dG9yRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICAvLyBTZXQgWFNTQXVkaXRpbmdFbmFibGVk
IGdsb2JhbGx5IHNvIHRoYXQgd2luZG93cyBjcmVhdGVkIGJ5IHRoZSB0ZXN0IGluaGVyaXQgaXQg
dG9vLgorICAgIC8vIHJlc2V0U2V0dGluZ3MoKSB3aWxsIGNhbGwgdGhpcyB0byByZXNldCB0aGUg
cGFnZSBhbmQgZ2xvYmFsIHNldHRpbmcgdG8gZmFsc2UgYWdhaW4uCisgICAgLy8gTmVlZGVkIGJ5
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9saW5rLW9wZW5zLW5ldy13aW5kb3cuaHRt
bAorICAgIFFXZWJTZXR0aW5ncyogZ2xvYmFsU2V0dGluZ3MgPSBRV2ViU2V0dGluZ3M6Omdsb2Jh
bFNldHRpbmdzKCk7CisgICAgZ2xvYmFsU2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OlhTU0F1ZGl0aW5nRW5hYmxlZCwgZW5hYmxlKTsKKyAgICBtX2RydC0+d2ViUGFnZSgpLT5z
ZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpYU1NBdWRpdGluZ0VuYWJsZWQs
IGVuYWJsZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKK3sKKyAgICBR
V2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7CisgICAgUV9B
U1NFUlQoZnJhbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VB
bmltYXRpb24oZnJhbWUsIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Cit9CisKK2Jv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQoreworICAgIFFXZWJGcmFtZSogZnJhbWUg
PSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKTsKKyAgICBRX0FTU0VSVChmcmFtZSk7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYXVzZVRyYW5zaXRpb25PZlByb3Bl
cnR5KGZyYW1lLCBwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7Cit9CisKK3Vuc2lnbmVk
IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAor
eworICAgIFFXZWJGcmFtZSogZnJhbWUgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKTsK
KyAgICBRX0FTU0VSVChmcmFtZSk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKK3sKKyAgICBtX2RydC0+d2ViUGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcywg
ZmFsc2UpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdM
b2FkUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4
IGZvciA2NzI3NDk1Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBw
bGljYXRpb25DYWNoZXMoKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckFs
bEFwcGxpY2F0aW9uQ2FjaGVzKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiB1cmwpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBj
YWNoZXMgZm9yIGFuIG9yaWdpbi4KK30KKworbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVy
Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBk
aXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4uCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fdG9wTG9hZGluZ0ZyYW1lLT5zZWN1cml0eU9yaWdpbigp
LnNldEFwcGxpY2F0aW9uQ2FjaGVRdW90YShxdW90YSk7Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBR
U3RyaW5nJiBvcmlnaW4pCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdl
dHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4u
CisgICAgcmV0dXJuIDA7Cit9CisKK1FTdHJpbmdMaXN0IExheW91dFRlc3RDb250cm9sbGVyOjpv
cmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gZ2V0IG9yaWdpbnMgdGhhdCBoYXZlIGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICByZXR1cm4g
UVN0cmluZ0xpc3QoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVN
b2RlbChpbnQgbW9kZWwpCit7CisgICAgLy8gcXdlYnNldHRpbmcgZG9lc24ndCBoYXZlIG1hdGNo
ZWQgc2V0dGluZyB5ZXQgOgorICAgIC8vIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9WSUVX
RVIKKyAgICAvLyBXRUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NFUgorICAgIC8vIFdF
QktJVF9DQUNIRV9NT0RFTF9XRUJfQlJPV1NFUgorCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YShpbnQgc2l6
ZSkKK3sKKyAgICBpZiAoIW1fdG9wTG9hZGluZ0ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
bV90b3BMb2FkaW5nRnJhbWUtPnNlY3VyaXR5T3JpZ2luKCkuc2V0RGF0YWJhc2VRdW90YShzaXpl
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQor
eworICAgIFFXZWJEYXRhYmFzZTo6cmVtb3ZlQWxsRGF0YWJhc2VzKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFT
dHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwg
Y29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3aGl0ZUxpc3RBY2Nlc3NG
cm9tT3JpZ2luKHNvdXJjZU9yaWdpbiwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25I
b3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFTdHJpbmcm
IHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3Qg
UVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZW1vdmVXaGl0ZUxpc3RBY2Nlc3NG
cm9tT3JpZ2luKHNvdXJjZU9yaWdpbiwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25I
b3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJt
aXNzaXZlKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xpY3lE
ZWxlZ2F0ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKK3sKKyAgICBzZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZSh0cnVlKTsKKyAgICBtX3dhaXRGb3JQb2xpY3kgPSB0cnVlOworICAgIHdhaXRVbnRpbERv
bmUoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNl
KGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKK3sKKyAgICBRV2Vi
U2V0dGluZ3MqIHNldHRpbmdzID0gbV90b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3Mo
KTsKKworICAgIGlmIChuYW1lID09ICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpCisgICAgICAg
IHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0RW5hYmxlZCwg
dmFsdWUudG9Cb29sKCkpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdFRhYlRvTGlua3NQ
cmVmZXJlbmNlS2V5IikKKyAgICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4sIHZhbHVlLnRvQm9vbCgpKTsKKyAgICBlbHNl
IGlmIChuYW1lID09ICJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQiKQor
ICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7CisgICAgZWxzZSBpZiAobmFt
ZSA9PSAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikKKyAgICAgICAgc2V0dGluZ3MtPnNldEZvbnRT
aXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZvbnRTaXplLCB2YWx1ZS50b0ludCgpKTsKKyAgICBl
bHNlIGlmIChuYW1lID09ICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIpCisgICAg
ICAgIFFXZWJTZXR0aW5nczo6c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSh2YWx1ZS50b0ludCgpKTsK
KyAgICBlbHNlIGlmIChuYW1lID09ICJXZWJLaXRFbmFibGVDYXJldEJyb3dzaW5nIikKKyAgICAg
ICAgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQodmFsdWUudG9Cb29sKCkpOworICAgIGVsc2UgaWYg
KG5hbWUgPT0gIldlYktpdFBsdWdpbnNFbmFibGVkIikKKyAgICAgICAgc2V0dGluZ3MtPnNldEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlBsdWdpbnNFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7Cisg
ICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0V2ViR0xFbmFibGVkIikKKyAgICAgICAgc2V0dGlu
Z3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgdmFsdWUudG9Cb29s
KCkpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gIldlYktpdENTU1JlZ2lvbnNFbmFibGVkIikKKyAg
ICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkNTU1JlZ2lvbnNFbmFi
bGVkLCB2YWx1ZS50b0Jvb2woKSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0Q1NTR3Jp
ZExheW91dEVuYWJsZWQiKQorICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6Q1NTR3JpZExheW91dEVuYWJsZWQsIHZhbHVlLnRvQm9vbCgpKTsKKyAgICBlbHNlIGlm
IChuYW1lID09ICJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKQorICAgICAgICBzZXR0
aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
LCB2YWx1ZS50b0Jvb2woKSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSAiV2ViS2l0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQiKQorICAgICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHZhbHVlLnRvQm9vbCgp
KTsKKyAgICBlbHNlCisgICAgICAgIHByaW50ZigiRVJST1I6IExheW91dFRlc3RDb250cm9sbGVy
OjpvdmVycmlkZVByZWZlcmVuY2UoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnJXMnIHByZWZlcmVu
Y2VcbiIsCisgICAgICAgICAgICBuYW1lLnRvTGF0aW4xKCkuZGF0YSgpKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBRU3Ry
aW5nJiB1cmwpCit7CisgICAgUUJ5dGVBcnJheSB1cmxEYXRhID0gcGF0aFRvTG9jYWxSZXNvdXJj
ZSh1cmwpLnRvTGF0aW4xKCk7CisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gUVVybDo6
ZnJvbUVuY29kZWQodXJsRGF0YSwgUVVybDo6U3RyaWN0TW9kZSk7CisKKyAgICBpZiAobV91c2Vy
U3R5bGVTaGVldEVuYWJsZWQpCisgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVl
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0Q2FyZXRC
cm93c2luZ0VuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgdmFsdWUpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIHZhbHVl
KQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
bV91c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBlbmFibGVkOworCisgICAgaWYgKGVuYWJsZWQpCisg
ICAgICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJs
KG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbik7CisgICAgZWxzZQorICAgICAgICBtX2RydC0+d2Vi
UGFnZSgpLT5zZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9y
VVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBjb25zdCBRU3RyaW5nJiBzY2hlbWUpCit7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JV
UkxTY2hlbWUoZm9yYmlkZGVuLCBzY2hlbWUpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndvcmtlclRocmVhZENvdW50KCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OndvcmtlclRocmVhZENvdW50KCk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQYWdlcyhtX2RydC0+d2ViUGFnZSgp
LT5tYWluRnJhbWUoKSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCit7CisgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzaG91bGRDbG9zZShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUo
KSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShj
b25zdCBRU3RyaW5nJiBvcmllbnRhdGlvbiwgY29uc3QgUVN0cmluZyYgcG9saWN5KQoreworICAg
IFF0OjpPcmllbnRhdGlvbiBvOworICAgIFF0OjpTY3JvbGxCYXJQb2xpY3kgcDsKKworICAgIGlm
IChvcmllbnRhdGlvbiA9PSAidmVydGljYWwiKQorICAgICAgICBvID0gUXQ6OlZlcnRpY2FsOwor
ICAgIGVsc2UgaWYgKG9yaWVudGF0aW9uID09ICJob3Jpem9udGFsIikKKyAgICAgICAgbyA9IFF0
OjpIb3Jpem9udGFsOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBvbGlj
eSA9PSAib24iKQorICAgICAgICBwID0gUXQ6OlNjcm9sbEJhckFsd2F5c09uOworICAgIGVsc2Ug
aWYgKHBvbGljeSA9PSAiYXV0byIpCisgICAgICAgIHAgPSBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQ7
CisgICAgZWxzZSBpZiAocG9saWN5ID09ICJvZmYiKQorICAgICAgICBwID0gUXQ6OlNjcm9sbEJh
ckFsd2F5c09mZjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPm1haW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3kobywgcCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGVu
YWJsZSkKK3sKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21hcnRJbnNlcnREZWxl
dGVFbmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIGVuYWJsZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFi
bGUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3Qg
UVN0cmluZyYgdmFsdWUpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV4ZWN1dGVD
b3JlQ29tbWFuZEJ5TmFtZShtX2RydC0+d2ViUGFnZSgpLCBuYW1lLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgUVN0cmluZyYg
bmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmlzQ29t
bWFuZEVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgbmFtZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3Ry
aW5nTGlzdCYgb3B0aW9uQXJyYXkpCit7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpmaW5kU3RyaW5nKG1fZHJ0LT53ZWJQYWdlKCksIHN0cmluZywgb3B0aW9uQXJyYXkpOwor
fQorCitRU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0o
Y29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKQoreworICAgIHJldHVybiBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGxpc3RJdGVtKTsKK30KKworUVZhcmlh
bnRNYXAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhl
bGVtZW50KTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKK3sKKyAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
Rm9yRWxlbWVudFdpdGhJZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgZWxlbWVudElk
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihj
b25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKQoreworICAgIC8v
IEZJWE1FOiBJZiB0aGVyZSBpcyBhIGNvbmNlcHQgcGVyLXNlc3Npb24gKHBlci1wcm9jZXNzKSBj
cmVkZW50aWFsIHN0b3JhZ2UsIHRoZSBjcmVkZW50aWFscyBzaG91bGQgYmUgYWRkZWQgdG8gaXQg
Zm9yIGxhdGVyIHVzZS4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRh
dGFiYXNlRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlICYmICFtX2RydC0+
cGVyc2lzdGVudFN0b3JhZ2VQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICBRV2ViU2V0dGluZ3M6
OnNldEljb25EYXRhYmFzZVBhdGgobV9kcnQtPnBlcnNpc3RlbnRTdG9yYWdlUGF0aCgpKTsKKyAg
ICBlbHNlCisgICAgICAgIFFXZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0aChRU3RyaW5n
KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50
YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRl
QmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCit7
CisgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2Vz
KCk7CisgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCisgICAgICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24ocGFnZSwg
Y2FuUHJvdmlkZUFscGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJldGEsIGJldGEsIGNhblByb3ZpZGVH
YW1tYSwgZ2FtbWEpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3sKKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b25Db21tb24oYWxsb3cpOworICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1f
ZHJ0LT5nZXRBbGxQYWdlcygpOworICAgIGZvcmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2Us
IHBhZ2VzKQorICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0
aW9uUGVybWlzc2lvbihwYWdlLCBhbGxvdyk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQoreworICAg
IGludCBwZW5kaW5nUGVybWlzc2lvbkNvdW50ID0gMDsKKyAgICBRTGlzdDxXZWJDb3JlOjpXZWJQ
YWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKKyAgICBmb3JlYWNoIChXZWJDb3Jl
OjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKKyAgICAgICAgcGVuZGluZ1Blcm1pc3Npb25Db3VudCAr
PSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHMocGFnZSk7CisKKyAgICByZXR1cm4gcGVuZGluZ1Blcm1pc3Npb25Db3Vu
dDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uQ29tbW9uKGJvb2wgYWxsb3cpCit7CisgICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25T
ZXQgPSB0cnVlOworICAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGFsbG93OworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29k
ZSwgY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdl
Kj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKKyAgICBmb3JlYWNoIChXZWJDb3JlOjpX
ZWJQYWdlKiBwYWdlLCBwYWdlcykKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNl
dE1vY2tHZW9sb2NhdGlvbkVycm9yKHBhZ2UsIGNvZGUsIG1lc3NhZ2UpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3sKKyAgICBRTGlzdDxX
ZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKKyAgICBmb3Jl
YWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKKyAgICAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKHBhZ2UsIGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZp
ZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3Ry
aW5nJiBpbnB1dEVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNo
IGlucHV0IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM5NDg1LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGludCB3b3JsZElELCBj
b25zdCBRU3RyaW5nJiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
aW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQobV9kcnQtPndlYlBhZ2Uo
KS0+bWFpbkZyYW1lKCksIHdvcmxkSUQsIHNjcmlwdCk7Cit9CisKK1FTdHJpbmcgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQg
bWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpLCBwYWdlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3As
IG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpOworfQorCitRU3RyaW5nIExh
eW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgUVN0cmluZyYgcHJvcGVydHlO
YW1lLCBpbnQgcGFnZU51bWJlcikKK3sKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnBhZ2VQcm9wZXJ0eShtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgcHJvcGVydHlO
YW1lLCBwYWdlTnVtYmVyKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNl
clN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSkKK3sKKyAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQobV9kcnQtPndlYlBhZ2UoKSwgc291cmNl
Q29kZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRM
aW5rcygpCit7CisgICAgUVdlYkhpc3RvcnkqIGhpc3RvcnkgPSBtX2RydC0+d2ViUGFnZSgpLT5o
aXN0b3J5KCk7CisgICAgaGlzdG9yeS0+Y2xlYXIoKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKQoreworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjphZGRVUkxUb1JlZGlyZWN0KG9yaWdpbiwgZGVzdGluYXRpb24pOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRp
bWVySW50ZXJ2YWwpCit7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1U
aW1lckludGVydmFsKG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3Jp
Z2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFn
ZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0
eShjb25zdCBjaGFyKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
KGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCitRU3RyaW5nIExh
eW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKQoreworICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6bGF5ZXJUcmVlQXNUZXh0KG1fZHJ0LT53ZWJQYWdlKCktPm1h
aW5GcmFtZSgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVj
dGlvbihjb25zdCBRU3RyaW5nJiBkaXJlY3Rpb25OYW1lKQoreworICAgIGlmIChkaXJlY3Rpb25O
YW1lID09ICJhdXRvIikKKyAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+dHJpZ2dlckFjdGlvbihR
V2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvbkRlZmF1bHQpOworICAgIGVsc2UgaWYgKGRpcmVjdGlv
bk5hbWUgPT0gInJ0bCIpCisgICAgICAgIG1fZHJ0LT53ZWJQYWdlKCktPnRyaWdnZXJBY3Rpb24o
UVdlYlBhZ2U6OlNldFRleHREaXJlY3Rpb25SaWdodFRvTGVmdCk7CisgICAgZWxzZSBpZiAoZGly
ZWN0aW9uTmFtZSA9PSAibHRyIikKKyAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+dHJpZ2dlckFj
dGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0KTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkK
K3sKKyAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9i
YWxTZXR0aW5ncygpOworICAgIGlmIChhY2NlcHQpCisgICAgICAgIGdsb2JhbFNldHRpbmdzLT5z
ZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlzQWxsb3dUaGlyZFBh
cnR5Q29va2llcyk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgU2Fm
YXJpIHRoaXJkLXBhcnR5IGNvb2tpZSBibG9ja2luZyBwb2xpY3kgdGVzdGVkIGluIHRoaXJkLXBh
cnR5LWNvb2tpZS1yZWxheGluZy5odG1sCisgICAgICAgIGdsb2JhbFNldHRpbmdzLT5zZXRUaGly
ZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWxsb3dUaGlyZFBhcnR5V2l0aEV4aXN0
aW5nQ29va2llcyk7CisgICAgfQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
bHdheXNCbG9ja0Nvb2tpZXMoYm9vbCBibG9jaykKK3sKKyAgICBRV2ViU2V0dGluZ3MqIGdsb2Jh
bFNldHRpbmdzID0gUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpOworICAgIGlmIChibG9j
aykKKyAgICAgICAgZ2xvYmFsU2V0dGluZ3MtPnNldFRoaXJkUGFydHlDb29raWVQb2xpY3koUVdl
YlNldHRpbmdzOjpBbHdheXNCbG9ja1RoaXJkUGFydHlDb29raWVzKTsKKyAgICBlbHNlCisgICAg
ICAgIGdsb2JhbFNldHRpbmdzLT5zZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5n
czo6QWx3YXlzQWxsb3dUaGlyZFBhcnR5Q29va2llcyk7Cit9CisKK2NvbnN0IHVuc2lnbmVkIExh
eW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGggPSA4MDA7Citjb25zdCB1bnNpZ25lZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1bm5lclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTAgKzI3LDEwIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0LmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lclF0LmgiCiAKICNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZVF0LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIK
ICNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlICJXb3JrUXVldWVJdGVtUXQuaCIKICNp
bmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPFFM
b2NhbGU+CiAjaW5jbHVkZSA8cXdlYnNldHRpbmdzLmg+CiAKLUxheW91dFRlc3RDb250cm9sbGVy
OjpMYXlvdXRUZXN0Q29udHJvbGxlcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSogZHJ0KQorVGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSogZHJ0KQogICAgIDog
UU9iamVjdCgpCiAgICAgLCBtX2RydChkcnQpCiAgICAgLCBtX3Nob3VsZFRpbWVvdXQodHJ1ZSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9s
bAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wTm90aWZpY2F0aW9uKHRydWUpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCgpCit2b2lkIFRlc3RSdW5uZXI6
OnJlc2V0KCkKIHsKICAgICBtX2hhc0R1bXBlZCA9IGZhbHNlOwogICAgIG1fbG9hZEZpbmlzaGVk
ID0gZmFsc2U7CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJl
c2V0KCkKICAgICBlbWl0IGhpZGVQYWdlKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnByb2Nlc3NXb3JrKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cHJvY2Vzc1dvcmsoKQogewogICAg
IC8vIHFEZWJ1ZygpIDw8ICI+Pj5wcm9jZXNzV29yayI7CiAKQEAgLTExMSw3ICsxMTEsNyBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwcm9jZXNzV29yaygpCiB9CiAKIC8vIENhbGxlZCBv
biBsb2FkRmluaXNoZWQgb24gV2ViUGFnZQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF5
YmVEdW1wKGJvb2wgLypzdWNjZXNzKi8pCit2b2lkIFRlc3RSdW5uZXI6Om1heWJlRHVtcChib29s
IC8qc3VjY2VzcyovKQogewogCiAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIG9uIGFueSBvZiB0aGUg
aHR0cC90ZXN0cy9zZWN1cml0eS93aW5kb3ctZXZlbnRzLSouaHRtbCB0ZXN0cywgd2hlcmUgdGhl
IHRlc3Qgb3BlbnMKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjptYXliZUR1bXAoYm9vCiAgICAgfQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3
YWl0VW50aWxEb25lKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgpCiB7CiAgICAg
Ly9xRGVidWcoKSA8PCAiPj4+PndhaXRGb3JEb25lIjsKICAgICBtX3dhaXRGb3JEb25lID0gdHJ1
ZTsKQEAgLTE1MywxMiArMTUzLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRV
bnRpbERvbmUKICAgICBtX3RpbWVvdXRUaW1lci5zdGFydChtX3RpbWVvdXQsIHRoaXMpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShjb25z
dCBRU3RyaW5nJiBtb2RlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVy
ZShjb25zdCBRU3RyaW5nJiBtb2RlKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldFByb3Bl
cnR5KCJfcV92aWV3TW9kZSIsIG1vZGUpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndlYkhpc3RvcnlJdGVtQ291bnQoKQoraW50IFRlc3RSdW5uZXI6OndlYkhpc3RvcnlJdGVtQ291
bnQoKQogewogICAgIGlmICghbV93ZWJIaXN0b3J5KQogICAgICAgICByZXR1cm4gLTE7CkBAIC0x
NjgsMTIgKzE2OCwxMiBAQCBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVt
CiAgICAgcmV0dXJuIG1fd2ViSGlzdG9yeS0+Y291bnQoKSAtIDE7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdl
Ykhpc3RvcnkoKQogewogICAgIG1fd2ViSGlzdG9yeSA9IG1fZHJ0LT53ZWJQYWdlKCktPmhpc3Rv
cnkoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit2b2lk
IFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIHFEZWJ1ZygpIDw8ICI+Pj4+bm90aWZ5
RG9uZSI7CiAKQEAgLTE5Nyw0OSArMTk3LDQ5IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om5vdGlmeURvbmUoKQogICAgIG1fd2FpdEZvclBvbGljeSA9IGZhbHNlOwogfQogCi1pbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK2ludCBUZXN0UnVubmVyOjp3aW5kb3dD
b3VudCgpCiB7CiAgICAgcmV0dXJuIG1fZHJ0LT53aW5kb3dDb3VudCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNv
bnN0IFFTdHJpbmcmIG9yaWdpbikKK3ZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnREZXNrdG9wTm90aWZp
Y2F0aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCiB7CiAgICAgUVdlYkZyYW1l
KiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPnNldEZlYXR1cmVQZXJtaXNzaW9uKGZyYW1lLCBRV2ViUGFnZTo6Tm90aWZpY2F0aW9u
cywgUVdlYlBhZ2U6OlBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKICAgICBtX2Rlc2t0b3BOb3Rp
ZmljYXRpb25BbGxvd2VkT3JpZ2lucy5hcHBlbmQob3JpZ2luKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6aWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cygpCit2b2lkIFRlc3RSdW5uZXI6Omlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMoKQogewogICAgIG1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbiA9IHRydWU7CiB9
CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKQorYm9vbCBUZXN0UnVubmVyOjpjaGVja0Rl
c2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKIHsKICAg
ICByZXR1cm4gIW1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbiAmJiBtX2Rlc2t0b3BOb3RpZmlj
YXRpb25BbGxvd2VkT3JpZ2lucy5jb250YWlucyhvcmlnaW4pOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhjb25zdCBRU3Ry
aW5nJiB0aXRsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9u
Q2xpY2soY29uc3QgUVN0cmluZyYgdGl0bGUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKHRpdGxlKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXko
KQogewogICAgIGVtaXQgc2hvd1BhZ2UoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheUlu
dmFsaWRhdGVkUmVnaW9uKCkKIHsKICAgICBkaXNwbGF5KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xl
YXJCYWNrRm9yd2FyZExpc3QoKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPmhpc3RvcnkoKS0+
Y2xlYXIoKTsKIH0KIAotUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxS
ZXNvdXJjZShjb25zdCBRU3RyaW5nJiB1cmwpCitRU3RyaW5nIFRlc3RSdW5uZXI6OnBhdGhUb0xv
Y2FsUmVzb3VyY2UoY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIFFTdHJpbmcgbG9jYWxUbXBV
cmwoUUxhdGluMVN0cmluZygiZmlsZTovLy90bXAvTGF5b3V0VGVzdHMiKSk7CiAKQEAgLTI1Niw4
MiArMjU2LDgyIEBAIFFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2EKICAg
ICByZXR1cm4gdXJsOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRWRpdGlu
Z0NhbGxiYWNrcygpCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkKIHsK
ICAgICBxRGVidWcoKSA8PCAiPj4+ZHVtcEVkaXRpbmdDYWxsYmFja3MiOwogICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyh0cnVlKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpCit2b2lkIFRlc3RS
dW5uZXI6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKQogewogICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIodHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKQordm9pZCBUZXN0UnVubmVyOjpk
dW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayh0cnVlKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKQor
dm9pZCBUZXN0UnVubmVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpCiB7
CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
ZXIodHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKQordm9pZCBUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
KCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcyh0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJlc291cmNl
UmVzcG9uc2VNSU1FVHlwZXMoKQordm9pZCBUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlcygpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBSZXNvdXJj
ZVJlc3BvbnNlTUlNRVR5cGVzKHRydWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wV2lsbENhY2hlUmVzcG9uc2UoKQordm9pZCBUZXN0UnVubmVyOjpkdW1wV2lsbENhY2hl
UmVzcG9uc2UoKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wV2lsbENhY2hl
UmVzcG9uc2VDYWxsYmFja3ModHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBIaXN0b3J5Q2FsbGJhY2tzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEhpc3RvcnlDYWxs
YmFja3MoKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wSGlzdG9yeUNhbGxi
YWNrcyh0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRS
ZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZW5hYmxlZCkK
IHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGxPblJlZGlyZWN0KGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGJvb2wgZW5hYmxlZCkKIHsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwo
ZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbGxTZW5kUmVx
dWVzdENsZWFySGVhZGVyKGNvbnN0IFFTdHJpbmdMaXN0JiBoZWFkZXJzKQordm9pZCBUZXN0UnVu
bmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcihjb25zdCBRU3RyaW5nTGlzdCYgaGVh
ZGVycykKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0V2lsbFNlbmRSZXF1ZXN0
Q2xlYXJIZWFkZXJzKGhlYWRlcnMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGJvb2wgZGVmZXIpCit2b2lkIFRlc3RSdW5uZXI6
OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCBkZWZlcikKIHsKICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChkZWZlcik7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlQmFja05hdmlnYXRpb24oaW50IGhv
d0ZhckJhY2t3YXJkKQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBo
b3dGYXJCYWNrd2FyZCkKIHsKICAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUJhY2tOYXZpZ2F0
aW9uIiA8PCBob3dGYXJCYWNrd2FyZDsKICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBob3dGYXJC
YWNrd2FyZDsgKytpKQogICAgICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgQmFj
a0l0ZW0oMSwgbV9kcnQtPndlYlBhZ2UoKSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dGYXJGb3J3YXJkKQordm9pZCBUZXN0
UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dGYXJGb3J3YXJkKQogewogICAg
IC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iIDw8IGhvd0ZhckZvcndh
cmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaG93RmFyRm9yd2FyZDsgKytpKQogICAgICAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgRm9yd2FyZEl0ZW0oMSwgbV9kcnQtPndl
YlBhZ2UoKSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoY29u
c3QgUVN0cmluZyYgdXJsLCBjb25zdCBRU3RyaW5nJiB0YXJnZXQpCit2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZChjb25zdCBRU3RyaW5nJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRhcmdldCkKIHsK
ICAgICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZUxvYWQiIDw8IHVybCA8PCB0YXJnZXQ7CiAgICAg
UVVybCBtYWluUmVzb3VyY2VVcmwgPSBtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKS0+dXJs
KCk7CkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVM
b2FkKGNvbgogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNv
bHV0ZVVybCwgdGFyZ2V0LCBtX2RydC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgUVN0cmluZyYgY29udGVudCwg
Y29uc3QgUVN0cmluZyYgYmFzZVVSTCwgY29uc3QgUVN0cmluZyYgZmFpbGluZ1VSTCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBRU3RyaW5nJiBjb250ZW50LCBj
b25zdCBRU3RyaW5nJiBiYXNlVVJMLCBjb25zdCBRU3RyaW5nJiBmYWlsaW5nVVJMKQogewogICAg
IGlmIChmYWlsaW5nVVJMLmlzRW1wdHkoKSkKICAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+
cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMLCBtX2RydC0+d2Vi
UGFnZSgpKSk7CkBAIC0zNDcsMzIgKzM0NywzMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpxdWV1ZUxvYWRIVE1MCiAgICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBM
b2FkQWx0ZXJuYXRlSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgZmFpbGluZ1VSTCwg
bV9kcnQtPndlYlBhZ2UoKSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1
ZVJlbG9hZCgpCit2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIHsKICAgICAvL3FEZWJ1
ZygpIDw8ICI+Pj5xdWV1ZVJlbG9hZCI7CiAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUo
bmV3IFJlbG9hZEl0ZW0obV9kcnQtPndlYlBhZ2UoKSkpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KQordm9p
ZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KQog
ewogICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlTG9hZGluZ1NjcmlwdCIgPDwgc2NyaXB0Owog
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkaW5nU2NyaXB0SXRlbShzY3Jp
cHQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cXVldWVOb25Mb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKICAg
ICAvL3FEZWJ1ZygpIDw8ICI+Pj5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQiIDw8IHNjcmlwdDsKICAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTm9uTG9hZGluZ1NjcmlwdEl0ZW0oc2Ny
aXB0LCBtX2RydC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnByb3Zpc2lvbmFsTG9hZCgpCit2b2lkIFRlc3RSdW5uZXI6OnByb3Zpc2lvbmFsTG9hZCgpCiB7
CiAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IHFvYmplY3RfY2FzdDxRV2ViRnJhbWUqPihzZW5kZXIo
KSk7CiAgICAgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSAmJiAhbV9oYXNEdW1wZWQpCiAgICAgICAg
IG1fdG9wTG9hZGluZ0ZyYW1lID0gZnJhbWU7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKmV2KQordm9pZCBUZXN0UnVubmVyOjp0aW1lckV2
ZW50KFFUaW1lckV2ZW50ICpldikKIHsKICAgICBpZiAoZXYtPnRpbWVySWQoKSA9PSBtX3RpbWVv
dXRUaW1lci50aW1lcklkKCkpIHsKICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZSA9ICJGQUlM
OiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiI7CkBAIC0z
ODMsMTQ0ICszODMsMTQ0IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnRpbWVyRXZlbnQo
UVQKICAgICAgICAgUU9iamVjdDo6dGltZXJFdmVudChldik7CiB9CiAKLVFTdHJpbmcgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmVuY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpCitRU3Ry
aW5nIFRlc3RSdW5uZXI6OmVuY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpCiB7CiAg
ICAgUVN0cmluZyBlbmNvZGVkID0gUVN0cmluZzo6ZnJvbUxhdGluMShRVXJsOjp0b0FjZShob3N0
ICsgUUxhdGluMVN0cmluZygiLm5vIikpKTsKICAgICBlbmNvZGVkLnRydW5jYXRlKGVuY29kZWQu
bGVuZ3RoKCkgLSAzKTsgLy8gc3RyaXAgLm5vCiAgICAgcmV0dXJuIGVuY29kZWQ7CiB9CiAKLVFT
dHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcm
IGhvc3QpCitRU3RyaW5nIFRlc3RSdW5uZXI6OmRlY29kZUhvc3ROYW1lKGNvbnN0IFFTdHJpbmcm
IGhvc3QpCiB7CiAgICAgUVN0cmluZyBkZWNvZGVkID0gUVVybDo6ZnJvbUFjZShob3N0LnRvTGF0
aW4xKCkgKyBRQnl0ZUFycmF5KCIubm8iKSk7CiAgICAgZGVjb2RlZC50cnVuY2F0ZShkZWNvZGVk
Lmxlbmd0aCgpIC0gMyk7CiAgICAgcmV0dXJuIGRlY29kZWQ7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1lZGlhVHlwZShjb25zdCBRU3RyaW5nJiB0eXBlKQordm9pZCBUZXN0
UnVubmVyOjpzZXRNZWRpYVR5cGUoY29uc3QgUVN0cmluZyYgdHlwZSkKIHsKICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6c2V0TWVkaWFUeXBlKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFt
ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNw
ZWN0b3IoKQordm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCiB7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvckNsb3NlKG1fZHJ0LT53ZWJQYWdlKCkp
OwogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0
dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit2
b2lkIFRlc3RSdW5uZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0
dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
KQordm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChi
b29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCit2b2lkIFRlc3RSdW5uZXI6OnNob3dX
ZWJJbnNwZWN0b3IoKQogewogICAgIG1fZHJ0LT53ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQsIHRydWUpOwogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JTaG93KG1fZHJ0LT53ZWJQYWdl
KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVj
dG9yKGxvbmcgY2FsbElkLCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlw
dCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yRXhlY3V0ZVNj
cmlwdChtX2RydC0+d2ViUGFnZSgpLCBjYWxsSWQsIHNjcmlwdCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1fZHJ0LT53ZWJQ
YWdlKCksIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2so
KQordm9pZCBUZXN0UnVubmVyOjpnb0JhY2soKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0Ojpnb0JhY2sobV9kcnQtPndlYlBhZ2UoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZmxhZykKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
c2V0RGVmZXJzTG9hZGluZyhtX2RydC0+d2ViUGFnZSgpLCBmbGFnKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9v
bCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21G
aWxlVVJMcyhib29sIGVuYWJsZWQpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3Rl
VXJscywgZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCiB7CiAgICAgbV9kcnQt
PndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TG9jYWxD
b250ZW50Q2FuQWNjZXNzRmlsZVVybHMsIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGEpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YShxdW90YSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGJv
b2wgaXNBdXRvZmlsbGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKGNvbnN0IFFX
ZWJFbGVtZW50JiBlbGVtZW50LCBib29sIGlzQXV0b2ZpbGxlZCkKIHsKICAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQoZWxlbWVudCwgaXNBdXRvZmlsbGVk
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKGNvbnN0
IFFXZWJFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0VmFsdWVGb3JVc2VyKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50LCBjb25zdCBR
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0VmFsdWVG
b3JVc2VyKGVsZW1lbnQsIHZhbHVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0Rml4ZWRDb250ZW50c1NpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBUZXN0UnVu
bmVyOjpzZXRGaXhlZENvbnRlbnRzU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAg
bV90b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKS0+c2V0UHJlZmVycmVkQ29udGVudHNTaXplKFFTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZSkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQcml2YXRlQnJvd3NpbmdF
bmFibGVkLCBlbmFibGUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTcGF0
aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZSkKIHsKICAgICBtX2RydC0+d2ViUGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpTcGF0aWFsTmF2aWdh
dGlvbkVuYWJsZWQsIGVuYWJsZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRQ
b3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZSkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3Bl
bldpbmRvd3MsICFlbmFibGUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
bHVnaW5zRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFi
bGVkKGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFBPU0lYTG9jYWxlKGNvbnN0IFFTdHJpbmcmIGxvY2FsZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgUVN0cmluZyYgbG9jYWxlKQog
ewogICAgIFFMb2NhbGUgcWxvY2FsZShsb2NhbGUpOwogICAgIFFMb2NhbGU6OnNldERlZmF1bHQo
cWxvY2FsZSk7CiB9IAogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tl
eShib29sIGlzS2V5KQordm9pZCBUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tleShib29sIGlzS2V5
KQogewogICAgIG1fZHJ0LT5zd2l0Y2hGb2N1cyhpc0tleSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBpc0ZpcnN0KQor
dm9pZCBUZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgaXNGaXJz
dCkKIHsKICAgICAvL0ZJWE1FOiBvbmx5IG5lZWQgdGhpcyBmb3IgdGhlIG1vbWVudDogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkwCiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFi
bGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9v
bCBlbmFibGUpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCwgZW5hYmxlKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9v
bCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5h
YmxlKQogewogICAgIC8vIFNldCBYU1NBdWRpdGluZ0VuYWJsZWQgZ2xvYmFsbHkgc28gdGhhdCB3
aW5kb3dzIGNyZWF0ZWQgYnkgdGhlIHRlc3QgaW5oZXJpdCBpdCB0b28uCiAgICAgLy8gcmVzZXRT
ZXR0aW5ncygpIHdpbGwgY2FsbCB0aGlzIHRvIHJlc2V0IHRoZSBwYWdlIGFuZCBnbG9iYWwgc2V0
dGluZyB0byBmYWxzZSBhZ2Fpbi4KQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRYU1NBdWRpdG9yCiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6WFNTQXVkaXRpbmdFbmFibGVkLCBlbmFibGUp
OwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBhbmltYXRpb25OYW1lLAorYm9vbCBUZXN0UnVu
bmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBh
bmltYXRpb25OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBl
bGVtZW50SWQpCiB7CkBAIC01MzksNyArNTM5LDcgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpbwogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1
c2VBbmltYXRpb24oZnJhbWUsIGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCk7CiB9CiAK
LWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUsCitib29sIFRlc3RSdW5uZXI6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBRU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIHRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgZWxlbWVu
dElkKQogewpAQCAtNTQ4LDU5ICs1NDgsNTkgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGF1c2VUcmFuc2l0aQogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGF1c2VU
cmFuc2l0aW9uT2ZQcm9wZXJ0eShmcmFtZSwgcHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50SWQp
OwogfQogCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmlt
YXRpb25zKCkgY29uc3QKK3Vuc2lnbmVkIFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucygpIGNvbnN0CiB7CiAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpOwogICAgIFFfQVNTRVJUKGZyYW1lKTsKICAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhmcmFtZSk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQordm9pZCBUZXN0
UnVubmVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5z
ZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcywgZmFs
c2UpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2Fk
UmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMo
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNo
ZXMoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JP
cmlnaW4oY29uc3QgUVN0cmluZyYgdXJsKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0
aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBh
biBvcmlnaW4uCiB9CiAKLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9y
YWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCits
b25nIGxvbmcgVGVzdFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0
IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgogICAg
IHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBUZXN0UnVu
bmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1
b3RhKQogewogICAgIGlmICghbV90b3BMb2FkaW5nRnJhbWUpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3RvcExvYWRpbmdGcmFtZS0+c2VjdXJpdHlPcmlnaW4oKS5zZXRBcHBsaWNhdGlvbkNhY2hl
UXVvdGEocXVvdGEpOwogfQogCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luKQorbG9u
ZyBsb25nIFRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29u
c3QgUVN0cmluZyYgb3JpZ2luKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9y
dCBnZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3Jp
Z2luLgogICAgIHJldHVybiAwOwogfQogCi1RU3RyaW5nTGlzdCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkKK1FTdHJpbmdMaXN0IFRlc3RSdW5uZXI6
Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBnZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVzLgogICAgIHJldHVy
biBRU3RyaW5nTGlzdCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNo
ZU1vZGVsKGludCBtb2RlbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQgbW9k
ZWwpCiB7CiAgICAgLy8gcXdlYnNldHRpbmcgZG9lc24ndCBoYXZlIG1hdGNoZWQgc2V0dGluZyB5
ZXQgOgogICAgIC8vIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9WSUVXRVIKQEAgLTYxMCw0
MSArNjEwLDQxIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREYXRhYmFzZVF1b3RhKGludCBzaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1
b3RhKGludCBzaXplKQogewogICAgIGlmICghbV90b3BMb2FkaW5nRnJhbWUpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX3RvcExvYWRpbmdGcmFtZS0+c2VjdXJpdHlPcmlnaW4oKS5zZXREYXRhYmFz
ZVF1b3RhKHNpemUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERh
dGFiYXNlcygpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBR
V2ViRGF0YWJhc2U6OnJlbW92ZUFsbERhdGFiYXNlcygpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3RyaW5nJiBz
b3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNvbnN0IFFT
dHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykK
K3ZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0
cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBj
b25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndoaXRlTGlzdEFjY2Vzc0Zy
b21PcmlnaW4oc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkhv
c3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgUVN0cmluZyYg
c291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBjb25zdCBR
U3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMp
Cit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2Nv
bCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZW1vdmVXaGl0ZUxp
c3RBY2Nlc3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbiwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVz
dGluYXRpb25Ib3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwg
Ym9vbCBwZXJtaXNzaXZlKQordm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit2
b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB7CiAgICAgc2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUodHJ1ZSk7CiAgICAgbV93YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKICAgICB3
YWl0VW50aWxEb25lKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRl
UHJlZmVyZW5jZShjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRVmFyaWFudCYgdmFsdWUpCit2
b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBRU3RyaW5nJiBuYW1lLCBj
b25zdCBRVmFyaWFudCYgdmFsdWUpCiB7CiAgICAgUVdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1f
dG9wTG9hZGluZ0ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCk7CiAKQEAgLTY3MywxMSArNjczLDEx
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICBlbHNlIGlm
IChuYW1lID09ICJXZWJLaXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCIpCiAgICAgICAg
IHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZCwgdmFsdWUudG9Cb29sKCkpOwogICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJF
UlJPUjogTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSgpIGRvZXMgbm90
IHN1cHBvcnQgdGhlICclcycgcHJlZmVyZW5jZVxuIiwKKyAgICAgICAgcHJpbnRmKCJFUlJPUjog
VGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJyVz
JyBwcmVmZXJlbmNlXG4iLAogICAgICAgICAgICAgbmFtZS50b0xhdGluMSgpLmRhdGEoKSk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
Y29uc3QgUVN0cmluZyYgdXJsKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKGNvbnN0IFFTdHJpbmcmIHVybCkKIHsKICAgICBRQnl0ZUFycmF5IHVybERhdGEgPSBw
YXRoVG9Mb2NhbFJlc291cmNlKHVybCkudG9MYXRpbjEoKTsKICAgICBtX3VzZXJTdHlsZVNoZWV0
TG9jYXRpb24gPSBRVXJsOjpmcm9tRW5jb2RlZCh1cmxEYXRhLCBRVXJsOjpTdHJpY3RNb2RlKTsK
QEAgLTY4NiwxNyArNjg2LDE3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJT
dHlsZVMKICAgICAgICAgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRydWUpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sIHZhbHVl
KQordm9pZCBUZXN0UnVubmVyOjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sIHZhbHVlKQog
ewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZCht
X2RydC0+d2ViUGFnZSgpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgdmFsdWUpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgdmFsdWUpCiB7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKG1fZHJ0
LT53ZWJQYWdlKCksIHZhbHVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3VzZXJTdHlsZVNo
ZWV0RW5hYmxlZCA9IGVuYWJsZWQ7CiAKQEAgLTcwNiwyNyArNzA2LDI3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVMKICAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0VXNlclN0eWxlU2hlZXRVcmwoUVVybCgpKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVt
ZShib29sIGZvcmJpZGRlbiwgY29uc3QgUVN0cmluZyYgc2NoZW1lKQordm9pZCBUZXN0UnVubmVy
OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVu
LCBjb25zdCBRU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoZm9yYmlkZGVuLCBzY2hl
bWUpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkK
K2ludCBUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCgpCiB7CiAgICAgcmV0dXJuIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0Ojp3b3JrZXJUaHJlYWRDb3VudCgpOwogfQogCi1pbnQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkK
K2ludCBUZXN0UnVubmVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQp
CiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBhZ2VzKG1f
ZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK2Jvb2wgVGVz
dFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKIHsKICAgICByZXR1cm4gRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnNob3VsZENsb3NlKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFt
ZSgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5
KGNvbnN0IFFTdHJpbmcmIG9yaWVudGF0aW9uLCBjb25zdCBRU3RyaW5nJiBwb2xpY3kpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFNjcm9sbGJhclBvbGljeShjb25zdCBRU3RyaW5nJiBvcmllbnRhdGlv
biwgY29uc3QgUVN0cmluZyYgcG9saWN5KQogewogICAgIFF0OjpPcmllbnRhdGlvbiBvOwogICAg
IFF0OjpTY3JvbGxCYXJQb2xpY3kgcDsKQEAgLTc1MCw1MiArNzUwLDUyIEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclAKICAgICBtX2RydC0+d2ViUGFnZSgpLT5tYWlu
RnJhbWUoKS0+c2V0U2Nyb2xsQmFyUG9saWN5KG8sIHApOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBlbmFibGUpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGVuYWJsZSkKIHsK
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVk
KG1fZHJ0LT53ZWJQYWdlKCksIGVuYWJsZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFibGUpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFi
bGUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3Qg
UVN0cmluZyYgdmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKGNvbnN0IFFTdHJp
bmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQogewogICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUobV9kcnQtPndlYlBhZ2UoKSwgbmFtZSwg
dmFsdWUpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVk
KGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0Citib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVu
YWJsZWQoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmlzQ29tbWFuZEVuYWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgbmFtZSk7
CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgUVN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYgb3B0aW9uQXJyYXkpCitib29sIFRlc3RSdW5u
ZXI6OmZpbmRTdHJpbmcoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25zdCBRU3RyaW5nTGlzdCYg
b3B0aW9uQXJyYXkpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpmaW5k
U3RyaW5nKG1fZHJ0LT53ZWJQYWdlKCksIHN0cmluZywgb3B0aW9uQXJyYXkpOwogfQogCi1RU3Ry
aW5nIExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgUVdl
YkVsZW1lbnQmIGxpc3RJdGVtKQorUVN0cmluZyBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlz
dEl0ZW0oY29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKQogewogICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGxpc3RJdGVtKTsKIH0KIAot
UVZhcmlhbnRNYXAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK1FWYXJpYW50TWFw
IFRlc3RSdW5uZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb25zdCBRV2Vi
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhlbGVtZW50KTsKIH0KIAot
Ym9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGVsZW1lbnRJZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxl
bWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGVsZW1l
bnRJZCkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmVsZW1lbnREb2Vz
QXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUo
KSwgZWxlbWVudElkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGlj
YXRlU2Vzc2lvbihjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcm
KQordm9pZCBUZXN0UnVubmVyOjphdXRoZW50aWNhdGVTZXNzaW9uKGNvbnN0IFFTdHJpbmcmLCBj
b25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6IElmIHRoZXJl
IGlzIGEgY29uY2VwdCBwZXItc2Vzc2lvbiAocGVyLXByb2Nlc3MpIGNyZWRlbnRpYWwgc3RvcmFn
ZSwgdGhlIGNyZWRlbnRpYWxzIHNob3VsZCBiZSBhZGRlZCB0byBpdCBmb3IgbGF0ZXIgdXNlLgog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJv
b2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wg
ZW5hYmxlKQogewogICAgIGlmIChlbmFibGUgJiYgIW1fZHJ0LT5wZXJzaXN0ZW50U3RvcmFnZVBh
dGgoKS5pc0VtcHR5KCkpCiAgICAgICAgIFFXZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0
aChtX2RydC0+cGVyc2lzdGVudFN0b3JhZ2VQYXRoKCkpOwpAQCAtODAzLDE0ICs4MDMsMTQgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYQogICAgICAgICBRV2ViU2V0
dGluZ3M6OnNldEljb25EYXRhYmFzZVBhdGgoUVN0cmluZygpKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFs
cGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29s
IGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2Nr
RGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9v
bCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3Vi
bGUgZ2FtbWEpCiB7CiAgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQt
PmdldEFsbFBhZ2VzKCk7CiAgICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFn
ZXMpCiAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrRGV2aWNlT3JpZW50
YXRpb24ocGFnZSwgY2FuUHJvdmlkZUFscGhhLCBhbHBoYSwgY2FuUHJvdmlkZUJldGEsIGJldGEs
IGNhblByb3ZpZGVHYW1tYSwgZ2FtbWEpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiB7CiAgICAgc2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4g
cGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsKQEAgLTgxOCw3ICs4MTgsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvCiAgICAgICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uKHBhZ2UsIGFsbG93KTsKIH0K
IAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0cygpCitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQogewogICAgIGludCBwZW5kaW5nUGVybWlzc2lvbkNv
dW50ID0gMDsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0
QWxsUGFnZXMoKTsKQEAgLTgyOCwxMzMgKzgyOCwxMzMgQEAgaW50IExheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZlBlbmRpbgogICAgIHJldHVybiBwZW5kaW5nUGVybWlzc2lvbkNvdW50Owog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25D
b21tb24oYm9vbCBhbGxvdykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uQ29tbW9uKGJvb2wgYWxsb3cpCiB7CiAgICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25T
ZXQgPSB0cnVlOwogICAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGFsbG93OwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29k
ZSwgY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xv
Y2F0aW9uRXJyb3IoaW50IGNvZGUsIGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgUUxp
c3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CiAgICAg
Zm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCiAgICAgICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihwYWdlLCBjb2RlLCBtZXNz
YWdlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJh
Y3kpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQogewogICAgIFFMaXN0
PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwogICAgIGZv
cmVhY2ggKFdlYkNvcmU6OldlYlBhZ2UqIHBhZ2UsIHBhZ2VzKQogICAgICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24ocGFnZSwgbGF0aXR1ZGUs
IGxvbmdpdHVkZSwgYWNjdXJhY3kpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
ZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgUVN0cmluZyYgcmVzdWx0LCBkb3VibGUgY29u
ZmlkZW5jZSwgY29uc3QgUVN0cmluZyYgbGFuZ3VhZ2UpCit2b2lkIFRlc3RSdW5uZXI6OmFkZE1v
Y2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBRU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRl
bmNlLCBjb25zdCBRU3RyaW5nJiBsYW5ndWFnZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5n
JiBpbnB1dEVsZW1lbnQpCit2b2lkIFRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3Qg
UVN0cmluZyYgaW5wdXRFbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNw
ZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJ
RCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5n
JiBzY3JpcHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQs
IGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
bV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHdvcmxkSUQsIHNjcmlwdCk7CiB9CiAKLVFT
dHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGlu
dCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1h
cmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkKK1FTdHJpbmcgVGVz
dFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJn
aW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMobV9kcnQtPndlYlBhZ2UoKS0+bWFp
bkZyYW1lKCksIHBhZ2VJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFy
Z2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCk7CiB9CiAKLVFTdHJpbmcgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGludCBwYWdlTnVtYmVyKQorUVN0cmluZyBUZXN0UnVubmVyOjpwYWdlUHJvcGVydHkoY29uc3Qg
UVN0cmluZyYgcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikKIHsKICAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhZ2VQcm9wZXJ0eShtX2RydC0+d2ViUGFnZSgpLT5tYWlu
RnJhbWUoKSwgcHJvcGVydHlOYW1lLCBwYWdlTnVtYmVyKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYgc291cmNl
Q29kZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVXNlclN0eWxlU2hlZXQo
bV9kcnQtPndlYlBhZ2UoKSwgc291cmNlQ29kZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCiB7CiAgICAgUVdlYkhpc3RvcnkqIGhpc3RvcnkgPSBtX2RydC0+d2Vi
UGFnZSgpLT5oaXN0b3J5KCk7CiAgICAgaGlzdG9yeS0+Y2xlYXIoKTsKICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdDo6ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrcyh0cnVlKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVVJMVG9SZWRpcmVjdChjb25zdCBRU3RyaW5nJiBv
cmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uKQordm9pZCBUZXN0UnVubmVyOjphZGRV
UkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGlu
YXRpb24pCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmFkZFVSTFRvUmVkaXJlY3Qo
b3JpZ2luLCBkZXN0aW5hdGlvbik7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lcklu
dGVydmFsKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJ
bnRlcnZhbChtX2RydC0+d2ViUGFnZSgpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2Fs
U3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBR
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlm
aWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQordm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFn
ZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKIHsKICAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eSgpCit2b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewog
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoYm9vbCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9
CiAKLVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpCitRU3Ry
aW5nIFRlc3RSdW5uZXI6OmxheWVyVHJlZUFzVGV4dCgpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpsYXllclRyZWVBc1RleHQobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZy
YW1lKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9u
KGNvbnN0IFFTdHJpbmcmIGRpcmVjdGlvbk5hbWUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFRleHRE
aXJlY3Rpb24oY29uc3QgUVN0cmluZyYgZGlyZWN0aW9uTmFtZSkKIHsKICAgICBpZiAoZGlyZWN0
aW9uTmFtZSA9PSAiYXV0byIpCiAgICAgICAgIG1fZHJ0LT53ZWJQYWdlKCktPnRyaWdnZXJBY3Rp
b24oUVdlYlBhZ2U6OlNldFRleHREaXJlY3Rpb25EZWZhdWx0KTsKQEAgLTk2NCw3ICs5NjQsNyBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0CiAgICAgICAgIG1fZHJ0
LT53ZWJQYWdlKCktPnRyaWdnZXJBY3Rpb24oUVdlYlBhZ2U6OlNldFRleHREaXJlY3Rpb25MZWZ0
VG9SaWdodCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2Vw
dENvb2tpZXMoYm9vbCBhY2NlcHQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENv
b2tpZXMoYm9vbCBhY2NlcHQpCiB7CiAgICAgUVdlYlNldHRpbmdzKiBnbG9iYWxTZXR0aW5ncyA9
IFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKTsKICAgICBpZiAoYWNjZXB0KQpAQCAtOTc1
LDcgKzk3NSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2UKICAg
ICB9CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0Jsb2NrQ29va2ll
cyhib29sIGJsb2NrKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNCbG9ja0Nvb2tpZXMoYm9v
bCBibG9jaykKIHsKICAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRpbmdzID0gUVdlYlNldHRp
bmdzOjpnbG9iYWxTZXR0aW5ncygpOwogICAgIGlmIChibG9jaykKQEAgLTk4NCw1ICs5ODQsNSBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNCbG9jCiAgICAgICAgIGdsb2Jh
bFNldHRpbmdzLT5zZXRUaGlyZFBhcnR5Q29va2llUG9saWN5KFFXZWJTZXR0aW5nczo6QWx3YXlz
QWxsb3dUaGlyZFBhcnR5Q29va2llcyk7CiB9CiAKLWNvbnN0IHVuc2lnbmVkIExheW91dFRlc3RD
b250cm9sbGVyOjptYXhWaWV3V2lkdGggPSA4MDA7Ci1jb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodCA9IDYwMDsKK2NvbnN0IHVuc2lnbmVkIFRlc3RSdW5u
ZXI6Om1heFZpZXdXaWR0aCA9IDgwMDsKK2NvbnN0IHVuc2lnbmVkIFRlc3RSdW5uZXI6Om1heFZp
ZXdIZWlnaHQgPSA2MDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVy
UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQu
aAkocmV2aXNpb24gMTI1MzM1KQkoZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRU
ZXN0Q29udHJvbGxlclF0Lmg6MTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVz
dFJ1bm5lclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXlvdXRUZXN0Q29udHJvbGxlclF0X2gKKyNkZWZpbmUg
TGF5b3V0VGVzdENvbnRyb2xsZXJRdF9oCisKKyNpbmNsdWRlIDxRQmFzaWNUaW1lcj4KKyNpbmNs
dWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFTaXplPgorI2luY2x1ZGUgPFFTdHJpbmc+CisjaW5j
bHVkZSA8UXREZWJ1Zz4KKyNpbmNsdWRlIDxRVGltZXI+CisjaW5jbHVkZSA8UVRpbWVyRXZlbnQ+
CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisKKyNpbmNsdWRlIDxxd2ViZGF0YWJhc2UuaD4KKyNpbmNs
dWRlIDxxd2ViZWxlbWVudC5oPgorI2luY2x1ZGUgPHF3ZWJmcmFtZS5oPgorI2luY2x1ZGUgPHF3
ZWJoaXN0b3J5Lmg+CisjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KKyNpbmNsdWRlIDxxd2Vic2VjdXJp
dHlvcmlnaW4uaD4KKworY2xhc3MgUVdlYkZyYW1lOworY2xhc3MgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ7CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRHVtcFJlbmRlclRyZWU7Cit9
CitjbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09C
SkVDVAorICAgIFFfUFJPUEVSVFkoaW50IHdlYkhpc3RvcnlJdGVtQ291bnQgUkVBRCB3ZWJIaXN0
b3J5SXRlbUNvdW50KQorICAgIFFfUFJPUEVSVFkoaW50IHdvcmtlclRocmVhZENvdW50IFJFQUQg
d29ya2VyVGhyZWFkQ291bnQpCisgICAgUV9QUk9QRVJUWShib29sIGdsb2JhbEZsYWcgUkVBRCBn
bG9iYWxGbGFnIFdSSVRFIHNldEdsb2JhbEZsYWcpCitwdWJsaWM6CisgICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIGRydCk7CisKKyAgICBib29sIHNob3Vs
ZERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSBjb25zdCB7IHJldHVy
biBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGE7IH0KKyAgICBib29s
IHNob3VsZER1bXBBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHREdW1wOyB9CisgICAgYm9v
bCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQmFja0Zv
cndhcmRMaXN0OyB9CisgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRyZW5Bc1RleHQoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBDaGlsZHJlbkFzVGV4dDsgfQorICAgIGJvb2wgc2hvdWxkRHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zOyB9CisgICAgYm9vbCBzaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSBj
b25zdCB7IHJldHVybiBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxk
RHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxk
RHVtcFN0YXR1c0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNr
czsgfQorICAgIGJvb2wgc2hvdWxkV2FpdFVudGlsRG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Fp
dEZvckRvbmU7IH0KKyAgICBib29sIHNob3VsZEhhbmRsZUVycm9yUGFnZXMoKSBjb25zdCB7IHJl
dHVybiBtX2hhbmRsZUVycm9yUGFnZXM7IH0KKyAgICBib29sIGNhbk9wZW5XaW5kb3dzKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5PcGVuV2luZG93czsgfQorICAgIGJvb2wgc2hvdWxkRHVtcFRpdGxl
Q2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFRpdGxlQ2hhbmdlczsgfQorICAgIGJvb2wg
d2FpdEZvclBvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdEZvclBvbGljeTsgfQorICAgIGJv
b2wgaWdub3JlUmVxZXN0Rm9yUGVybWlzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlRGVz
a3RvcE5vdGlmaWNhdGlvbjsgfQorICAgIGJvb2wgaXNQcmludGluZygpIHsgcmV0dXJuIG1faXNQ
cmludGluZzsgfQorCisgICAgdm9pZCByZXNldCgpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCBtYXhWaWV3V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtYXhW
aWV3SGVpZ2h0OworCisgICAgdm9pZCBzZXRUaW1lb3V0KGludCB0aW1lb3V0KSB7IG1fdGltZW91
dCA9IHRpbWVvdXQ7IH0KKyAgICB2b2lkIHNldFNob3VsZFRpbWVvdXQoYm9vbCBmbGFnKSB7IG1f
c2hvdWxkVGltZW91dCA9IGZsYWc7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgdGltZXJFdmVu
dChRVGltZXJFdmVudCopOworCitzaWduYWxzOgorICAgIHZvaWQgZG9uZSgpOworCisgICAgdm9p
ZCBzaG93UGFnZSgpOworICAgIHZvaWQgaGlkZVBhZ2UoKTsKKyAgICB2b2lkIGdlb2xvY2F0aW9u
UGVybWlzc2lvblNldCgpOworCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBtYXliZUR1bXAoYm9v
bCBvayk7CisgICAgdm9pZCBkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3Rh
KCkgeyBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEgPSB0cnVlOyB9
CisgICAgdm9pZCBkdW1wQXNUZXh0KCkgeyBtX3RleHREdW1wID0gdHJ1ZTsgfQorICAgIHZvaWQg
ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgeyBtX2R1bXBDaGlsZHJlbkFzVGV4dCA9IHRydWU7IH0K
KyAgICB2b2lkIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkgeyBtX2R1bXBDaGlsZEZy
YW1lU2Nyb2xsUG9zaXRpb25zID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKCkgeyBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrcyA9IHRydWU7IH0KKyAgICB2b2lkIGR1bXBB
cHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3MoKSB7IG1fZHVtcEFwcGxpY2F0aW9uQ2Fj
aGVEZWxlZ2F0ZUNhbGxiYWNrcyA9IHRydWU7IH0KKyAgICB2b2lkIGR1bXBTdGF0dXNDYWxsYmFj
a3MoKSB7IG1fZHVtcFN0YXR1c0NhbGxiYWNrcyA9IHRydWU7IH0KKyAgICB2b2lkIHNldENhbk9w
ZW5XaW5kb3dzKCkgeyBtX2Nhbk9wZW5XaW5kb3dzID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0UHJp
bnRpbmcoKSB7IG1faXNQcmludGluZyA9IHRydWU7IH0KKyAgICB2b2lkIHdhaXRVbnRpbERvbmUo
KTsKKyAgICBpbnQgd2ViSGlzdG9yeUl0ZW1Db3VudCgpOworICAgIHZvaWQga2VlcFdlYkhpc3Rv
cnkoKTsKKyAgICB2b2lkIG5vdGlmeURvbmUoKTsKKyAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExp
c3QoKSB7IG1fZHVtcEJhY2tGb3J3YXJkTGlzdCA9IHRydWU7IH0KKyAgICBib29sIGdsb2JhbEZs
YWcoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbEZsYWc7IH0KKyAgICB2b2lkIHNldEdsb2JhbEZs
YWcoYm9vbCBmbGFnKSB7IG1fZ2xvYmFsRmxhZyA9IGZsYWc7IH0KKyAgICB2b2lkIGhhbmRsZUVy
cm9yUGFnZXMoKSB7IG1faGFuZGxlRXJyb3JQYWdlcyA9IHRydWU7IH0KKyAgICB2b2lkIGR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCk7CisgICAgdm9pZCBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCk7Cisg
ICAgdm9pZCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCk7CisgICAgdm9pZCBkdW1wVXNl
ckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpOworICAgIHZvaWQgZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcygpOworICAgIHZvaWQgZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKTsK
KyAgICB2b2lkIGR1bXBXaWxsQ2FjaGVSZXNwb25zZSgpOworICAgIHZvaWQgZHVtcEhpc3RvcnlD
YWxsYmFja3MoKTsKKyAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRp
cmVjdChib29sIGVuYWJsZWQpOworICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051
bGwoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVy
KGNvbnN0IFFTdHJpbmdMaXN0JiBoZWFkZXJzKTsKKyAgICB2b2lkIHF1ZXVlQmFja05hdmlnYXRp
b24oaW50IGhvd0ZhckJhY2t3YXJkKTsKKyAgICB2b2lkIHF1ZXVlRm9yd2FyZE5hdmlnYXRpb24o
aW50IGhvd0ZhckZvcndhcmQpOworICAgIHZvaWQgcXVldWVMb2FkKGNvbnN0IFFTdHJpbmcmIHVy
bCwgY29uc3QgUVN0cmluZyYgdGFyZ2V0ID0gUVN0cmluZygpKTsKKyAgICB2b2lkIHF1ZXVlTG9h
ZEhUTUxTdHJpbmcoY29uc3QgUVN0cmluZyYgY29udGVudCwgY29uc3QgUVN0cmluZyYgYmFzZVVS
TCA9IFFTdHJpbmcoKSwgY29uc3QgUVN0cmluZyYgZmFpbGluZ1VSTCA9IFFTdHJpbmcoKSk7Cisg
ICAgdm9pZCBxdWV1ZVJlbG9hZCgpOworICAgIHZvaWQgcXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0
IFFTdHJpbmcmIHNjcmlwdCk7CisgICAgdm9pZCBxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3Qg
UVN0cmluZyYgc2NyaXB0KTsKKyAgICB2b2lkIHByb3Zpc2lvbmFsTG9hZCgpOworICAgIHZvaWQg
c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGJvb2wgPSBmYWxzZSkge30KKyAg
ICBpbnQgd2luZG93Q291bnQoKTsKKyAgICB2b2lkIGdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKTsKKyAgICB2b2lkIGlnbm9yZURlc2t0b3BO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKTsKKyAgICBib29sIGNoZWNrRGVza3RvcE5v
dGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKTsKKyAgICB2b2lkIHNp
bXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKKyAg
ICB2b2lkIGRpc3BsYXkoKTsKKyAgICB2b2lkIGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbigpOwor
ICAgIHZvaWQgY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICBRU3RyaW5nIHBhdGhUb0xvY2Fs
UmVzb3VyY2UoY29uc3QgUVN0cmluZyYgdXJsKTsKKyAgICB2b2lkIGR1bXBUaXRsZUNoYW5nZXMo
KSB7IG1fZHVtcFRpdGxlQ2hhbmdlcyA9IHRydWU7IH0KKyAgICBRU3RyaW5nIGVuY29kZUhvc3RO
YW1lKGNvbnN0IFFTdHJpbmcmIGhvc3QpOworICAgIFFTdHJpbmcgZGVjb2RlSG9zdE5hbWUoY29u
c3QgUVN0cmluZyYgaG9zdCk7CisgICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0IHt9
CisgICAgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzaG93V2Vi
SW5zcGVjdG9yKCk7CisgICAgdm9pZCBjbG9zZVdlYkluc3BlY3RvcigpOworICAgIHZvaWQgZXZh
bHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsK
KyAgICB2b2lkIHJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOworICAgIHZvaWQgc2V0TWVkaWFUeXBl
KGNvbnN0IFFTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBl
bmFibGUpOworICAgIHZvaWQgc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9v
bCBlbmFibGUpOworICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wg
ZW5hYmxlKTsKKyAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKTsKKyAgICB2b2lkIHNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmLCBi
b29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVsZW1lbnQm
LCBjb25zdCBRU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBzZXRGaXhlZENvbnRlbnRzU2l6ZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9v
bCBlbmFibGVkKTsKKyAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZyk7CisgICAg
dm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRQ
T1NJWExvY2FsZShjb25zdCBRU3RyaW5nJiBsb2NhbGUpOworICAgIHZvaWQgcmVzZXRMb2FkRmlu
aXNoZWQoKSB7IG1fbG9hZEZpbmlzaGVkID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldFdpbmRvd0lz
S2V5KGJvb2wgaXNLZXkpOworICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihi
b29sIGlzRmlyc3QpOworICAgIHZvaWQgc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29s
KTsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGUp
OworICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZvaWQg
c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRWaWV3TW9kZU1lZGlhRmVh
dHVyZShjb25zdCBRU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZChib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAgICB2b2lkIGV4ZWNDb21tYW5kKGNvbnN0IFFTdHJp
bmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcmIHZhbHVlID0gUVN0cmluZygpKTsKKyAgICBib29sIGlz
Q29tbWFuZEVuYWJsZWQoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgYm9vbCBmaW5k
U3RyaW5nKGNvbnN0IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVN0cmluZ0xpc3QmIG9wdGlvbkFy
cmF5KTsKKworICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29u
c3QgUVN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFFTdHJpbmcmIGVs
ZW1lbnRJZCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQo
Y29uc3QgUVN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgUVN0cmluZyYg
ZWxlbWVudElkKTsKKyAgICBib29sIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdp
dGhJZChjb25zdCBRU3RyaW5nJiBlbGVtZW50SWQpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVz
dGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGNvbnN0IFFTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYg
ZGVzdGluYXRpb25Qcm90b2NvbCwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29s
IGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKworICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5n
TG9hZFJlcXVlc3RzKCk7CisgICAgdm9pZCBkaXNhYmxlSW1hZ2VMb2FkaW5nKCk7CisKKyAgICB2
b2lkIGNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKTsKKyAgICB2b2lkIGNsZWFyQXBwbGljYXRp
b25DYWNoZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CisgICAgUVN0
cmluZ0xpc3Qgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgbG9uZyBsb25nIGFw
cGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYpOyAKKyAgICB2
b2lkIHNldENhY2hlTW9kZWwoaW50KTsKKworICAgIHZvaWQgc2V0RGF0YWJhc2VRdW90YShpbnQg
c2l6ZSk7CisgICAgdm9pZCBjbGVhckFsbERhdGFiYXNlcygpOworICAgIHZvaWQgc2V0SWNvbkRh
dGFiYXNlRW5hYmxlZChib29sIGVuYWJsZSk7CisKKyAgICB2b2lkIHNldEN1c3RvbVBvbGljeURl
bGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlID0gZmFsc2UpOworICAgIHZvaWQg
d2FpdEZvclBvbGljeURlbGVnYXRlKCk7CisKKyAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShj
b25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRVmFyaWFudCYgdmFsdWUpOworICAgIHZvaWQgc2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2V0
VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCk7CisgICAgdm9pZCBzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBjb25zdCBRU3Ry
aW5nJiBzY2hlbWUpOworICAgIGludCB3b3JrZXJUaHJlYWRDb3VudCgpOworICAgIGludCBudW1i
ZXJPZlBhZ2VzKGZsb2F0IHdpZHRoID0gbWF4Vmlld1dpZHRoLCBmbG9hdCBoZWlnaHQgPSBtYXhW
aWV3SGVpZ2h0KTsKKyAgICBib29sIGNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpOworICAgIC8v
IEZvciBub3csIHRoaXMgaXMgYSBuby1vcC4gVGhpcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBv
dXRjb21lIG9mCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMzMzMzCisgICAgdm9pZCBzZXRDYWxsQ2xvc2VPbldlYlZpZXdzKCkge30KKyAgICAvLyBUaGlz
IGlzIGEgbm8tb3AgLSBpdCBhbGxvd3MgdXMgdG8gcGFzcworICAgIC8vIHBsdWdpbnMvZ2V0LXVy
bC10aGF0LXRoZS1yZXNvdXJjZS1sb2FkLWRlbGVnYXRlLXdpbGwtZGlzYWxsb3cuaHRtbAorICAg
IC8vIHdoaWNoIGlzIGEgTWFjLXNwZWNpZmljIHRlc3QuCisgICAgdm9pZCBhZGREaXNhbGxvd2Vk
VVJMKGNvbnN0IFFTdHJpbmcmKSB7fQorCisgICAgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0
YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpOworCisg
ICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgY29uc3QgUVN0cmluZyYg
bWVzc2FnZSk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSk7CisgICAgdm9pZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdyk7CisgICAgaW50IG51bWJlck9mUGVuZGlu
Z0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCk7CisgICAgYm9vbCBpc0dlb2xvY2F0aW9u
UGVybWlzc2lvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25T
ZXQ7IH0KKyAgICBib29sIGdlb2xvY2F0aW9uUGVybWlzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
Z2VvbG9jYXRpb25QZXJtaXNzaW9uOyB9CisKKyAgICB2b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJl
c3VsdChjb25zdCBRU3RyaW5nJiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBRU3Ry
aW5nJiBsYW5ndWFnZSk7CisgICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29s
IGZsYWcpOworICAgIHZvaWQgc3RhcnRTcGVlY2hJbnB1dChjb25zdCBRU3RyaW5nJiBpbnB1dEVs
ZW1lbnQpOworCisgICAgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKik7CisgICAg
dm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KCk7CisKKyAgICB2b2lkIHNldEF1dG9tYXRpY0xpbmtE
ZXRlY3Rpb25FbmFibGVkKGJvb2wpOworCisgICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2Vl
cCBwYXJpdHkgd2l0aCBvYmplY3QgbW9kZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENv
bnRyb2xsZXIuCisgICAgdm9pZCBhYm9ydE1vZGFsKCkge30KKworICAgIHZvaWQgYWRkVVJMVG9S
ZWRpcmVjdChjb25zdCBRU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9u
KTsKKworICAgIC8qCisgICAgICAgIFBvbGljeSB2YWx1ZXM6ICdvbicsICdhdXRvJyBvciAnb2Zm
Jy4KKyAgICAgICAgT3JpZW50YXRpb24gdmFsdWVzOiAndmVydGljYWwnIG9yICdob3Jpem9udGFs
Jy4KKyAgICAqLworICAgIHZvaWQgc2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IFFTdHJpbmcmIG9y
aWVudGF0aW9uLCBjb25zdCBRU3RyaW5nJiBwb2xpY3kpOworCisgICAgUVN0cmluZyBtYXJrZXJU
ZXh0Rm9yTGlzdEl0ZW0oY29uc3QgUVdlYkVsZW1lbnQmIGxpc3RJdGVtKTsKKyAgICBRVmFyaWFu
dE1hcCBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oY29uc3QgUVdlYkVsZW1lbnQm
IGVsZW1lbnQpIGNvbnN0OworCisgICAgLy8gU2ltdWxhdGUgYSByZXF1ZXN0IGFuIGVtYmVkZGlu
ZyBhcHBsaWNhdGlvbiBjb3VsZCBtYWtlLCBwb3B1bGF0aW5nIHBlci1zZXNzaW9uIGNyZWRlbnRp
YWwgc3RvcmFnZS4KKyAgICB2b2lkIGF1dGhlbnRpY2F0ZVNlc3Npb24oY29uc3QgUVN0cmluZyYg
dXJsLCBjb25zdCBRU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgUVN0cmluZyYgcGFzc3dvcmQpOwor
CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGlu
dCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOworICAgIHZvaWQgZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7Cisg
ICAgUVN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1h
cmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpOworICAgIFFTdHJpbmcgcGFnZVByb3BlcnR5KGNv
bnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpOworICAgIHZvaWQgYWRk
VXNlclN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyYgc291cmNlQ29kZSk7CisKKyAgICB2b2lkIHNl
dE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSk7CisgICAgCisgICAgdm9pZCBvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCk7CisgICAg
dm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihj
b25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9ic2VydmVTdG9yYWdl
VHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKTsKKyAgICB2b2lkIHN5bmNMb2Nh
bFN0b3JhZ2UoKTsKKyAgICBRU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpOworICAgIHZvaWQgc2V0
VGV4dERpcmVjdGlvbihjb25zdCBRU3RyaW5nJiBkaXJlY3Rpb25OYW1lKTsKKyAgICB2b2lkIGdv
QmFjaygpOworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICB2b2lkIHNldEFs
d2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CisgICAgdm9pZCBzZXRBbHdheXNCbG9ja0Nvb2tpZXMo
Ym9vbCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBwcm9jZXNzV29yaygpOworCitwcml2
YXRlOgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cp
OworCitwcml2YXRlOgorICAgIGJvb2wgbV9oYXNEdW1wZWQ7CisgICAgYm9vbCBtX3RleHREdW1w
OworICAgIGJvb2wgbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhOwor
ICAgIGJvb2wgbV9kdW1wQmFja0ZvcndhcmRMaXN0OworICAgIGJvb2wgbV9kdW1wQ2hpbGRyZW5B
c1RleHQ7CisgICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOworICAgIGJv
b2wgbV9jYW5PcGVuV2luZG93czsKKyAgICBib29sIG1fd2FpdEZvckRvbmU7CisgICAgYm9vbCBt
X2R1bXBUaXRsZUNoYW5nZXM7CisgICAgYm9vbCBtX2R1bXBEYXRhYmFzZUNhbGxiYWNrczsKKyAg
ICBib29sIG1fZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrczsKKyAgICBib29s
IG1fZHVtcFN0YXR1c0NhbGxiYWNrczsKKyAgICBib29sIG1fd2FpdEZvclBvbGljeTsKKyAgICBi
b29sIG1faGFuZGxlRXJyb3JQYWdlczsKKyAgICBib29sIG1fbG9hZEZpbmlzaGVkOworICAgIGJv
b2wgbV9nbG9iYWxGbGFnOworICAgIGJvb2wgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQ7CisgICAg
Ym9vbCBtX2lzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0OworICAgIGJvb2wgbV9pc1ByaW50aW5n
OworICAgIGJvb2wgbV9nZW9sb2NhdGlvblBlcm1pc3Npb247CisKKyAgICBRVXJsIG1fdXNlclN0
eWxlU2hlZXRMb2NhdGlvbjsKKyAgICBRQmFzaWNUaW1lciBtX3RpbWVvdXRUaW1lcjsKKyAgICBR
V2ViRnJhbWUqIG1fdG9wTG9hZGluZ0ZyYW1lOworICAgIFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVl
KiBtX2RydDsKKyAgICBRV2ViSGlzdG9yeSogbV93ZWJIaXN0b3J5OworICAgIFFTdHJpbmdMaXN0
IG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zOworICAgIGJvb2wgbV9pZ25vcmVE
ZXNrdG9wTm90aWZpY2F0aW9uOworCisgICAgYm9vbCBtX3Nob3VsZFRpbWVvdXQ7CisgICAgaW50
IG1fdGltZW91dDsKK307CisKKyNlbmRpZiAvLyBMYXlvdXRUZXN0Q29udHJvbGxlclF0X2gKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5oCShyZXZpc2lvbiAxMjUzMzUp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVubmVyUXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOCArMjcsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIExheW91dFRl
c3RDb250cm9sbGVyUXRfaAotI2RlZmluZSBMYXlvdXRUZXN0Q29udHJvbGxlclF0X2gKKyNpZm5k
ZWYgVGVzdFJ1bm5lclF0X2gKKyNkZWZpbmUgVGVzdFJ1bm5lclF0X2gKIAogI2luY2x1ZGUgPFFC
YXNpY1RpbWVyPgogI2luY2x1ZGUgPFFPYmplY3Q+CkBAIC01MSwxMyArNTEsMTMgQEAgY2xhc3Mg
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RHVtcFJlbmRlclRyZWU7CiB9Ci1jbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlciA6IHB1YmxpYyBR
T2JqZWN0IHsKK2NsYXNzIFRlc3RSdW5uZXIgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9PQkpF
Q1QKICAgICBRX1BST1BFUlRZKGludCB3ZWJIaXN0b3J5SXRlbUNvdW50IFJFQUQgd2ViSGlzdG9y
eUl0ZW1Db3VudCkKICAgICBRX1BST1BFUlRZKGludCB3b3JrZXJUaHJlYWRDb3VudCBSRUFEIHdv
cmtlclRocmVhZENvdW50KQogICAgIFFfUFJPUEVSVFkoYm9vbCBnbG9iYWxGbGFnIFJFQUQgZ2xv
YmFsRmxhZyBXUklURSBzZXRHbG9iYWxGbGFnKQogcHVibGljOgotICAgIExheW91dFRlc3RDb250
cm9sbGVyKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlKiBkcnQpOworICAgIFRlc3RSdW5uZXIoV2Vi
Q29yZTo6RHVtcFJlbmRlclRyZWUqKTsKIAogICAgIGJvb2wgc2hvdWxkRGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWxsb3dJbmNy
ZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YTsgfQogICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dER1bXA7IH0KQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJs
aWMgc2xvdHM6CiAKICAgICB2b2lkIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJv
b2wpOwogCi0gICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJpdHkgd2l0aCBvYmpl
Y3QgbW9kZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENvbnRyb2xsZXIuCisgICAgLy8g
RW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJpdHkgd2l0aCBvYmplY3QgbW9kZWwgZXhwb3Nl
ZCBieSBnbG9iYWwgVGVzdFJ1bm5lci4KICAgICB2b2lkIGFib3J0TW9kYWwoKSB7fQogCiAgICAg
dm9pZCBhZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcmIG9yaWdpbiwgY29uc3QgUVN0cmlu
ZyYgZGVzdGluYXRpb24pOwpAQCAtMzE3LDQgKzMxNyw0IEBAIHByaXZhdGU6CiAgICAgaW50IG1f
dGltZW91dDsKIH07CiAKLSNlbmRpZiAvLyBMYXlvdXRUZXN0Q29udHJvbGxlclF0X2gKKyNlbmRp
ZiAvLyBUZXN0UnVubmVyUXRfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERl
c2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAkocmV2aXNp
b24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERlc2t0b3BOb3RpZmlj
YXRpb25QcmVzZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlci5oIgogCiAjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1
ZGUgIlRlc3RSdW5uZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQlNUUi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTm90aWZpY2F0aW9uQ2xpZW50Lmg+CkBAIC0xMjUsNyArMTI1LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBEUlREZXNrdG9wTm90aQogewogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAgSlNTdHJpbmdSZWYg
anNPcmlnaW4gPSBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSKG9yaWdpbik7Ci0gICAgYm9vbCBhbGxv
d2VkID0gOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb24oanNPcmlnaW4pOworICAgIGJvb2wgYWxsb3dlZCA9IDo6Z1Rlc3RSdW5uZXItPmNo
ZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oanNPcmlnaW4pOwogCiAgICAgaWYgKGFs
bG93ZWQpCiAgICAgICAgICpyZXN1bHQgPSBXZWJDb3JlOjpOb3RpZmljYXRpb25DbGllbnQ6OlBl
cm1pc3Npb25BbGxvd2VkOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5k
ZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAK
ICNpbmNsdWRlICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWREZWxlZ2F0
ZS5oIgogI2luY2x1ZGUgIkhpc3RvcnlEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBv
bGljeURlbGVnYXRlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKKyNpbmNs
dWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiVUlEZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKQEAgLTEwNSw3
ICsxMDUsNyBAQCBDT01QdHI8SGlzdG9yeURlbGVnYXRlPiBzaGFyZWRIaXN0b3J5RGVsCiBJV2Vi
RnJhbWUqIGZyYW1lOwogSFdORCB3ZWJWaWV3V2luZG93OwogCi1SZWZQdHI8TGF5b3V0VGVzdENv
bnRyb2xsZXI+IGdMYXlvdXRUZXN0Q29udHJvbGxlcjsKK1JlZlB0cjxUZXN0UnVubmVyPiBnVGVz
dFJ1bm5lcjsKIAogVUlOVF9QVFIgd2FpdFRvRHVtcFdhdGNoZG9nID0gMDsKIApAQCAtNDI0LDcg
KzQyNCw3IEBAIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oSVdlYkZyYW1lKiAKICAgICAg
ICAgcHJpbnRmKCJzY3JvbGxlZCB0byAlLmYsJS5mXG4iLCAoZG91YmxlKXNjcm9sbFBvc2l0aW9u
LmN4LCAoZG91YmxlKXNjcm9sbFBvc2l0aW9uLmN5KTsKICAgICB9CiAKLSAgICBpZiAoOjpnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkpIHsKKyAg
ICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSkgewog
ICAgICAgICBDT01QdHI8SUVudW1WQVJJQU5UPiBlbnVtS2lkczsKICAgICAgICAgaWYgKEZBSUxF
RChmcmFtZS0+Y2hpbGRGcmFtZXMoJmVudW1LaWRzKSkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC00ODEsNyArNDgxLDcgQEAgc3RhdGljIHdzdHJpbmcgZHVtcEZyYW1lc0FzVGV4dChJV2ViRnJh
bQogCiAgICAgU3lzRnJlZVN0cmluZyhpbm5lclRleHQpOwogCi0gICAgaWYgKDo6Z0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgeworICAgIGlmICg6OmdUZXN0
UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgewogICAgICAgICBDT01QdHI8SUVudW1W
QVJJQU5UPiBlbnVtS2lkczsKICAgICAgICAgaWYgKEZBSUxFRChmcmFtZS0+Y2hpbGRGcmFtZXMo
JmVudW1LaWRzKSkpCiAgICAgICAgICAgICByZXR1cm4gTCIiOwpAQCAtNzEzLDggKzcxMyw4IEBA
IHZvaWQgZHVtcCgpCiAgICAgICAgIGlmIChTVUNDRUVERUQoZGF0YVNvdXJjZS0+cmVzcG9uc2Uo
JnJlc3BvbnNlKSkgJiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIEJTVFIgbWltZVR5cGU7CiAg
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3BvbnNlLT5NSU1FVHlwZSgmbWltZVR5cGUpKSAm
JiAhX3Rjc2NtcChtaW1lVHlwZSwgVEVYVCgidGV4dC9wbGFpbiIpKSkgewotICAgICAgICAgICAg
ICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAg
ICAgICAgICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0
cyhmYWxzZSk7CisgICAgICAgICAgICAgICAgOjpnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0
cnVlKTsKKyAgICAgICAgICAgICAgICA6OmdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVz
dWx0cyhmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXNGcmVlU3RyaW5nKG1p
bWVUeXBlKTsKICAgICAgICAgfQpAQCAtNzI2LDE4ICs3MjYsMTggQEAgdm9pZCBkdW1wKCkKICAg
ICAgICAgOjpJbnZhbGlkYXRlUmVjdCh3ZWJWaWV3V2luZG93LCAwLCBUUlVFKTsKICAgICAgICAg
OjpTZW5kTWVzc2FnZSh3ZWJWaWV3V2luZG93LCBXTV9QQUlOVCwgMCwgMCk7CiAKLSAgICAgICAg
aWYgKDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNUZXh0KCkpIHsKKyAgICAgICAgaWYg
KDo6Z1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSkgewogICAgICAgICAgICAgd3N0cmluZyByZXN1
bHQgPSBkdW1wRnJhbWVzQXNUZXh0KGZyYW1lKTsKICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9
IFN5c0FsbG9jU3RyaW5nTGVuKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJp
dmF0ZTsKICAgICAgICAgICAgIGlmIChGQUlMRUQoZnJhbWUtPlF1ZXJ5SW50ZXJmYWNlKCZmcmFt
ZVByaXZhdGUpKSkKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICBmcmFt
ZVByaXZhdGUtPnJlbmRlclRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb24oZ0xheW91dFRlc3RD
b250cm9sbGVyLT5pc1ByaW50aW5nKCksICZyZXN1bHRTdHJpbmcpOworICAgICAgICAgICAgZnJh
bWVQcml2YXRlLT5yZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uKGdUZXN0UnVubmVy
LT5pc1ByaW50aW5nKCksICZyZXN1bHRTdHJpbmcpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoIXJlc3VsdFN0cmluZykKLSAgICAgICAgICAgIHByaW50ZigiRVJST1I6IG5pbCBy
ZXN1bHQgZnJvbSAlcyIsIDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNUZXh0KCkgPyAi
SURPTUVsZW1lbnQ6OmlubmVyVGV4dCIgOiAiSUZyYW1lVmlld1ByaXZhdGU6OnJlbmRlclRyZWVB
c0V4dGVybmFsUmVwcmVzZW50YXRpb24iKTsKKyAgICAgICAgICAgIHByaW50ZigiRVJST1I6IG5p
bCByZXN1bHQgZnJvbSAlcyIsIDo6Z1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSA/ICJJRE9NRWxl
bWVudDo6aW5uZXJUZXh0IiA6ICJJRnJhbWVWaWV3UHJpdmF0ZTo6cmVuZGVyVHJlZUFzRXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHN0cmluZ0xlbmd0aCA9IFN5c1N0cmluZ0xlbihyZXN1bHRTdHJpbmcpOwogICAgICAgICAgICAg
aW50IGJ1ZmZlclNpemUgPSA6OldpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgcmVzdWx0
U3RyaW5nLCBzdHJpbmdMZW5ndGgsIDAsIDAsIDAsIDApOwpAQCAtNzQ1LDEwICs3NDUsMTAgQEAg
dm9pZCBkdW1wKCkKICAgICAgICAgICAgIDo6V2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAw
LCByZXN1bHRTdHJpbmcsIHN0cmluZ0xlbmd0aCwgYnVmZmVyLCBidWZmZXJTaXplICsgMSwgMCwg
MCk7CiAgICAgICAgICAgICBmd3JpdGUoYnVmZmVyLCAxLCBidWZmZXJTaXplLCBzdGRvdXQpOwog
ICAgICAgICAgICAgZnJlZShidWZmZXIpOwotICAgICAgICAgICAgaWYgKCE6OmdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKQorICAgICAgICAgICAgaWYgKCE6OmdUZXN0UnVubmVy
LT5kdW1wQXNUZXh0KCkpCiAgICAgICAgICAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24o
ZnJhbWUpOwogICAgICAgICB9Ci0gICAgICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcEJhY2tGb3J3YXJkTGlzdCgpKQorICAgICAgICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEJh
Y2tGb3J3YXJkTGlzdCgpKQogICAgICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEZvckFsbFdp
bmRvd3MoKTsKICAgICB9CiAKQEAgLTc2MCwxMCArNzYwLDEwIEBAIHZvaWQgZHVtcCgpCiAgICAg
fQogCiAgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAotICAgICAmJiBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKLSAgICAgJiYgIWdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCi0gICAgICYmICFnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkKLSAgICAgICAgZHVtcFdlYlZpZXdB
c1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5leHBl
Y3RlZFBpeGVsSGFzaCgpKTsKKyAgICAgJiYgZ1Rlc3RSdW5uZXItPmdlbmVyYXRlUGl4ZWxSZXN1
bHRzKCkKKyAgICAgJiYgIWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkKKyAgICAg
JiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpCisgICAgICAgIGR1bXBX
ZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdUZXN0UnVubmVyLT5leHBlY3Rl
ZFBpeGVsSGFzaCgpKTsKIAogICAgIHByaW50ZigiI0VPRlxuIik7ICAgLy8gdGVybWluYXRlIHRo
ZSAocG9zc2libHkgZW1wdHkpIHBpeGVscyBibG9jawogICAgIGZmbHVzaChzdGRvdXQpOwpAQCAt
ODkzLDcgKzg5Myw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQK
ICAgICBpZiAoU1VDQ0VFREVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQog
ICAgICAgICByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKHByZWZlcmVuY2VzLmdldCgp
KTsKIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBpZiAoZ1Rlc3RSdW5u
ZXIpIHsKICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBmcmFtZS0+Z2xvYmFs
Q29udGV4dCgpOwogICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2Jq
ZWN0KGNvbnRleHQpOwogICAgIH0KQEAgLTkzNCwxNSArOTM0LDE1IEBAIHN0YXRpYyB2b2lkIHJl
c2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQKIAogc3RhdGljIHZvaWQgc2l6ZVdlYlZpZXdGb3JD
dXJyZW50VGVzdCgpCiB7Ci0gICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ0xheW91dFRlc3RDb250
cm9sbGVyLT50ZXN0UGF0aE9yVVJMKCkuZmluZCgic3ZnXFxXM0MtU1ZHLTEuMSIpICE9IHN0cmlu
Zzo6bnBvcyk7CisgICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXItPnRlc3RQYXRo
T3JVUkwoKS5maW5kKCJzdmdcXFczQy1TVkctMS4xIikgIT0gc3RyaW5nOjpucG9zKTsKICAgICB1
bnNpZ25lZCB3aWR0aDsKICAgICB1bnNpZ25lZCBoZWlnaHQ7CiAgICAgaWYgKGlzU1ZHVzNDVGVz
dCkgewogICAgICAgICB3aWR0aCA9IDQ4MDsKICAgICAgICAgaGVpZ2h0ID0gMzYwOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHdpZHRoID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdXaWR0
aDsKLSAgICAgICAgaGVpZ2h0ID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQ7
CisgICAgICAgIHdpZHRoID0gVGVzdFJ1bm5lcjo6bWF4Vmlld1dpZHRoOworICAgICAgICBoZWln
aHQgPSBUZXN0UnVubmVyOjptYXhWaWV3SGVpZ2h0OwogICAgIH0KIAogICAgIDo6U2V0V2luZG93
UG9zKHdlYlZpZXdXaW5kb3csIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFNXUF9OT01PVkUpOwpA
QCAtOTc3LDIyICs5NzcsMjIgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlu
cHV0TAogCiAgICAgQ0ZSZWxlYXNlKHVybCk7CiAKLSAgICA6OmdMYXlvdXRUZXN0Q29udHJvbGxl
ciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBjb21tYW5kLmV4cGVj
dGVkUGl4ZWxIYXNoKTsKKyAgICA6OmdUZXN0UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKHBh
dGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgZG9uZSA9IGZhbHNlOwog
ICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0
KCk7Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRJY29uRGF0YWJhc2VFbmFibGVkKGZh
bHNlKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CiAK
ICAgICBpZiAoc2hvdWxkTG9nRnJhbWVMb2FkRGVsZWdhdGVzKHBhdGhPclVSTC5jX3N0cigpKSkK
LSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KHRydWUpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0
cnVlKTsKIAogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoU1VDQ0VFREVE
KGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpIHsKICAgICAgICAgQ09NUHRyPElXZWJWaWV3UHJp
dmF0ZT4gdmlld1ByaXZhdGU7CiAgICAgICAgIGlmIChTVUNDRUVERUQod2ViVmlldy0+UXVlcnlJ
bnRlcmZhY2UoJnZpZXdQcml2YXRlKSkpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRMb2dIaXN0
b3J5RGVsZWdhdGVzKHBhdGhPclVSTC5jX3N0cigpKSkgewotICAgICAgICAgICAgICAgIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+c2V0RHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcyh0cnVlKTsg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEhpc3RvcnlE
ZWxlZ2F0ZUNhbGxiYWNrcyh0cnVlKTsgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2aWV3
UHJpdmF0ZS0+c2V0SGlzdG9yeURlbGVnYXRlKHNoYXJlZEhpc3RvcnlEZWxlZ2F0ZS5nZXQoKSk7
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB2aWV3UHJpdmF0ZS0+c2V0SGlz
dG9yeURlbGVnYXRlKDApOwpAQCAtMTAwNSwxMyArMTAwNSwxMyBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3Rh
dGVCZWZvcmVUZXN0aW5nKCk7CiAKICAgICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFz
KHBhdGhPclVSTC5jX3N0cigpKSkgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNl
dERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIGdUZXN0UnVubmVyLT5zZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwogICAgICAgICBpZiAoc2hvdWxkT3BlbldlYklu
c3BlY3RvcihwYXRoT3JVUkwuY19zdHIoKSkpCi0gICAgICAgICAgICBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPnNob3dXZWJJbnNwZWN0b3IoKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVyLT5zaG93
V2ViSW5zcGVjdG9yKCk7CiAgICAgfQogICAgIGlmIChzaG91bGREdW1wQXNUZXh0KHBhdGhPclVS
TC5jX3N0cigpKSkgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBBc1Rl
eHQodHJ1ZSk7Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhl
bFJlc3VsdHMoZmFsc2UpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVl
KTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsK
ICAgICB9CiAKICAgICBwcmV2VGVzdEJGSXRlbSA9IDA7CkBAIC0xMDQ5LDE1ICsxMDQ5LDE1IEBA
IHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICB9CiAKICAgICBp
ZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHBhdGhPclVSTC5jX3N0cigpKSkgewotICAg
ICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNsb3NlV2ViSW5zcGVjdG9yKCk7Ci0gICAgICAg
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7
CisgICAgICAgIGdUZXN0UnVubmVyLT5jbG9zZVdlYkluc3BlY3RvcigpOworICAgICAgICBnVGVz
dFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7CiAgICAgfQogCiAgICAg
cmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCk7CiAKICAgICBmcmFt
ZS0+c3RvcExvYWRpbmcoKTsKIAotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+Y2xv
c2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkpIHsKKyAgICBpZiAoOjpnVGVzdFJ1bm5l
ci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkpIHsKICAgICAgICAgVmVjdG9y
PEhXTkQ+IHdpbmRvd3MgPSBvcGVuV2luZG93cygpOwogICAgICAgICB1bnNpZ25lZCBzaXplID0g
d2luZG93cy5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKQEAgLTEwNzMsNyArMTA3Myw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3Ry
aW5nJiBpbnB1dEwKIAogZXhpdDoKICAgICBTeXNGcmVlU3RyaW5nKHVybEJTdHIpOwotICAgIDo6
Z0xheW91dFRlc3RDb250cm9sbGVyLmNsZWFyKCk7CisgICAgOjpnVGVzdFJ1bm5lci5jbGVhcigp
OwogCiAgICAgcmV0dXJuOwogfQpAQCAtMTE5Nyw4ICsxMTk3LDggQEAgV2luZG93VG9XZWJWaWV3
TWFwJiB3aW5kb3dUb1dlYlZpZXdNYXAoKQogCiBJV2ViVmlldyogY3JlYXRlV2ViVmlld0FuZE9m
ZnNjcmVlbldpbmRvdyhIV05EKiB3ZWJWaWV3V2luZG93KQogewotICAgIHVuc2lnbmVkIG1heFZp
ZXdXaWR0aCA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgdW5zaWdu
ZWQgbWF4Vmlld0hlaWdodCA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0Owor
ICAgIHVuc2lnbmVkIG1heFZpZXdXaWR0aCA9IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAg
ICB1bnNpZ25lZCBtYXhWaWV3SGVpZ2h0ID0gVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodDsKICAg
ICBIV05EIGhvc3RXaW5kb3cgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9UT09MV0lORE9XLCBrRHVt
cFJlbmRlclRyZWVDbGFzc05hbWUsIFRFWFQoIkR1bXBSZW5kZXJUcmVlIiksIFdTX1BPUFVQLAog
ICAgICAgLW1heFZpZXdXaWR0aCwgLW1heFZpZXdIZWlnaHQsIG1heFZpZXdXaWR0aCwgbWF4Vmll
d0hlaWdodCwgMCwgMCwgR2V0TW9kdWxlSGFuZGxlKDApLCAwKTsKIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCShyZXZpc2lvbiAxMjUz
MzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00MzgsMTUgKzQzOCwxNSBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxUZXN0UnVubmVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFRlc3RSdW5uZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxMYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXFRlc3RSdW5uZXJXaW4uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVnYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVn
YXRlLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0Vk
aXRpbmdEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNs
dWRlICJFZGl0aW5nRGVsZWdhdGUuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0j
aW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgpAQCAtMTI4LDcgKzEyOCw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKICAgICB9CiAKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkgJiYgIWRvbmUpCisgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkgJiYgIWRvbmUpCiAgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIpLCBkdW1wKHJhbmdlKSk7
CiAKICAgICAqcmVzdWx0ID0gbV9hY2NlcHRzRWRpdGluZzsKQEAgLTE0NSw3ICsxNDUsNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CiAgICAgfQogCi0gICAgaWYgKDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAgICAgICBfdHByaW50ZihURVhUKCJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTolc1xuIiksIGR1bXAocmFu
Z2UpKTsKIAogICAgICpyZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5nOwpAQCAtMTY0LDcgKzE2NCw3
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgVEVY
VCgiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiKSwKICAgICB9OwogCi0gICAgaWYgKDo6Z0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAg
IGlmICg6OmdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAg
ICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiVz
IHJlcGxhY2luZ0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iKSwgZHVtcFBhdGgobm9kZSks
IGR1bXAocmFuZ2UpLCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CiAKICAgICByZXR1cm4g
U19PSzsKQEAgLTE4OCw3ICsxODgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRp
bmdEZWxlZ2F0CiAgICAgICAgIFRFWFQoIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiksCiAg
ICAgfTsKIAotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSAmJiAhZG9uZSkKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSAmJiAhZG9uZSkKICAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBERUxFR0FU
RTogc2hvdWxkSW5zZXJ0VGV4dDolcyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlvbjol
c1xuIiksIHRleHQgPyB0ZXh0IDogVEVYVCgiIiksIGR1bXAocmFuZ2UpLCBpbnNlcnRhY3Rpb25z
dHJpbmdbYWN0aW9uXSk7CiAKICAgICAqcmVzdWx0ID0gbV9hY2NlcHRzRWRpdGluZzsKQEAgLTIw
NSw3ICsyMDUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgfQogCi0gICAgaWYgKDo6Z0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAgIGlmICg6OmdU
ZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAgICAgICBfdHBy
aW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZTolc1xuIiks
IGR1bXAocmFuZ2UpKTsKIAogICAgICpyZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5nOwpAQCAtMjM0
LDcgKzIzNCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAg
ICAgICAgVEVYVCgiVFJVRSIpCiAgICAgfTsKIAotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkKKyAgICBpZiAoOjpnVGVzdFJ1
bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkKICAgICAgICAgX3RwcmludGYo
VEVYVCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTolcyB0
b0RPTVJhbmdlOiVzIGFmZmluaXR5OiVzIHN0aWxsU2VsZWN0aW5nOiVzXG4iKSwgZHVtcChjdXJy
ZW50UmFuZ2UpLCBkdW1wKHByb3Bvc2VkUmFuZ2UpLCBhZmZpbml0eXN0cmluZ1tzZWxlY3Rpb25B
ZmZpbml0eV0sIGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsKIAogICAgICpyZXN1bHQgPSBt
X2FjY2VwdHNFZGl0aW5nOwpAQCAtMjUyLDcgKzI1Miw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAK
LSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkg
JiYgIWRvbmUpCisgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkg
JiYgIWRvbmUpCiAgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEFwcGx5U3R5bGU6JXMgdG9FbGVtZW50c0luRE9NUmFuZ2U6JXNcbiIpLCBURVhUKCInc3R5bGUg
ZGVzY3JpcHRpb24nIikvKltbc3R5bGUgZGVzY3JpcHRpb25dIFVURjhTdHJpbmddKi8sIGR1bXAo
cmFuZ2UpKTsKIAogICAgICpyZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5nOwpAQCAtMjcwLDcgKzI3
MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpCisgICAgaWYgKDo6Z1Rlc3RSdW5u
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpCiAgICAgICAgIF90cHJpbnRmKFRF
WFQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVR5cGluZ1N0eWxlOiVzIHRvU3R5bGU6
JXNcbiIpLCBURVhUKCInY3VycmVudFN0eWxlIGRlc2NyaXB0aW9uJyIpLCBURVhUKCIncHJvcG9z
ZWRTdHlsZSBkZXNjcmlwdGlvbiciKSk7CiAKICAgICAqcmVzdWx0ID0gbV9hY2NlcHRzRWRpdGlu
ZzsKQEAgLTI4Nyw3ICsyODcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdE
ZWxlZ2F0CiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgfQogCi0gICAgaWYgKDo6Z0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAg
IGlmICg6OmdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAg
ICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiBkb1BsYXRmb3JtQ29tbWFuZDol
c1xuIiksIGNvbW1hbmQgPyBjb21tYW5kIDogVEVYVCgiIikpOwogCiAgICAgKnJlc3VsdCA9IG1f
YWNjZXB0c0VkaXRpbmc7CkBAIC0yOTcsNyArMjk3LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBFZGl0aW5nRGVsZWdhdAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVs
ZWdhdGU6OndlYlZpZXdEaWRCZWdpbkVkaXRpbmcoIAogICAgIC8qIFtpbl0gKi8gSVdlYk5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aW9uKQogewotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgeworICAgIGlmICg6OmdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKSB7CiAgICAgICAgIEJTVFIgbmFt
ZTsKICAgICAgICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lKTsKICAgICAgICAgX3RwcmludGYo
VEVYVCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzolc1xuIiksIG5h
bWUgPyBuYW1lIDogVEVYVCgiIikpOwpAQCAtMzA5LDcgKzMwOSw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRp
dGluZ0RlbGVnYXRlOjp3ZWJWaWV3RGlkQ2hhbmdlKCAKICAgICAvKiBbaW5dICovIElXZWJOb3Rp
ZmljYXRpb24gKm5vdGlmaWNhdGlvbikKIHsKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKKyAgICBpZiAoOjpnVGVzdFJ1
bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgewogICAgICAgICBCU1RSIG5h
bWU7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZSk7CiAgICAgICAgIF90cHJpbnRm
KFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6JXNcbiIpLCBu
YW1lID8gbmFtZSA6IFRFWFQoIiIpKTsKQEAgLTMyMSw3ICszMjEsNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVk
aXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZEVuZEVkaXRpbmcoIAogICAgIC8qIFtpbl0gKi8gSVdl
Yk5vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKQogewotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgeworICAgIGlmICg6OmdU
ZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKSB7CiAgICAgICAgIEJT
VFIgbmFtZTsKICAgICAgICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lKTsKICAgICAgICAgX3Rw
cmludGYoVEVYVCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6JXNcbiIp
LCBuYW1lID8gbmFtZSA6IFRFWFQoIiIpKTsKQEAgLTMzMyw3ICszMzMsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVkaXRpbmdEZWxlZ2F0ZTo6d2ViVmlld0RpZENoYW5nZVR5cGluZ1N0eWxlKCAKICAgICAvKiBb
aW5dICovIElXZWJOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikKIHsKLSAgICBpZiAoOjpnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKKyAg
ICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgewog
ICAgICAgICBCU1RSIG5hbWU7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZSk7CiAg
ICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VU
eXBpbmdTdHlsZTolc1xuIiksIG5hbWUgPyBuYW1lIDogVEVYVCgiIikpOwpAQCAtMzQ1LDcgKzM0
NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjp3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uKCAKICAgICAvKiBbaW5dICovIElXZWJOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikKIHsK
LSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkg
JiYgIWRvbmUpIHsKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSAmJiAhZG9uZSkgewogICAgICAgICBCU1RSIG5hbWU7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+
bmFtZSgmbmFtZSk7CiAgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246JXNcbiIpLCBuYW1lID8gbmFtZSA6IFRFWFQoIiIpKTsK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNw
cAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9h
ZERlbGVnYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJH
Q0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1
ZGUgIlRlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgpA
QCAtMTIyLDcgKzEyMiw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVs
ZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAogICAgIC8qIFtpbl0gKi8gSVdl
YkZyYW1lKiBmcmFtZSkgCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZVxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RS
ZXN1bHQoZnJhbWUpLmNfc3RyKCkpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgc2V0IHRo
aXMgb25jZSBwZXIgdGVzdC4gIElmIGl0IGdldHMgY2xlYXJlZCwgYW5kIHRoZW4gc2V0IGFnYWlu
LCB3ZSBtaWdodApAQCAtMTM3LDcgKzEzNyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAogICAgIC8q
IFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkKIHsgCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYo
IiVzIC0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVc
biIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAog
ICAgIHJldHVybiBTX09LOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJFcnJvciAqZXJyb3IsCiAg
ICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJp
bnRmKCIlcyAtIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JcbiIsIGRlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAogICAgIGxvY2F0aW9uQ2hh
bmdlRG9uZShlcnJvciwgZnJhbWUpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJW
aWV3LAogICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkKIHsKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAogICAgIENPTVB0cjxJV2ViVmll
d1ByaXZhdGU+IHdlYlZpZXdQcml2YXRlOwpAQCAtMTc2LDEwICsxNzYsMTAgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAgIC8qIFtpbl0gKi8gQlNUUiB0aXRs
ZSwKICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCiB7Ci0gICAgaWYgKCFkb25lICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAg
ICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVRpdGxlOiAlU1xuIiwgZGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNfc3RyKCksIHRpdGxlKTsKIAotICAgIGlmICg6OmdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hhbmdlcygpICYmICFkb25lKQorICAgIGlmICg6
OmdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkgJiYgIWRvbmUpCiAgICAgICAgIHByaW50
ZigiVElUTEUgQ0hBTkdFRDogJVNcbiIsIHRpdGxlID8gdGl0bGUgOiBMIiIpOwogICAgIHJldHVy
biBTX09LOwogfQpAQCAtMTg4LDcgKzE4OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAogICAgIC8q
IFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wSWNvbkNoYW5nZXMoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RS
dW5uZXItPmR1bXBJY29uQ2hhbmdlcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkQ2hhbmdl
SWNvbnNcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigp
KTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgRnJhbWVMb2Fk
RGVsZWdhdGU6OnByb2Nlc3NXb3JrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gaWYgd2Ug
ZmluaXNoIGFsbCB0aGUgY29tbWFuZHMsIHdlJ3JlIHJlYWR5IHRvIGR1bXAgc3RhdGUKLSAgICBp
ZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhOjpnTGF5b3V0VGVzdENv
bnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJv
Y2Vzc1dvcmsoKSAmJiAhOjpnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQogICAgICAgICBkdW1w
KCk7CiB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIEZyYW1lTG9hZERlbGVnYXRlOjpsb2Nh
dGlvbkNoYW5nZURvCiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAgICBXb3JrUXVldWU6OnNo
YXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7CiAKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkg
ewpAQCAtMjU3LDcgKzI1Nyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2Fk
RGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAogICAgIC8qIFtpbl0gKi8g
SVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRG
aW5pc2hMb2FkRm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZy
YW1lKS5jX3N0cigpKTsKIAogICAgIGxvY2F0aW9uQ2hhbmdlRG9uZSgwLCBmcmFtZSk7CkBAIC0y
NjksNyArMjY5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwog
ICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yKiBlcnJvciwKICAgICAvKiBbaW5dICovIElXZWJGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmFpbExvYWRX
aXRoRXJyb3JcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0
cigpKTsKIAogICAgIGxvY2F0aW9uQ2hhbmdlRG9uZShlcnJvciwgZnJhbWUpOwpAQCAtMjgzLDcg
KzI4Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAv
KiBbaW5dICovIERBVEUgZmlyZURhdGUsCiAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1l
KQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIHdpbGxQZXJmb3JtQ2xpZW50UmVk
aXJlY3RUb1VSTDogJVMgXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFt
ZSkuY19zdHIoKSwKICAgICAgICAgICAgICAgICB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoc3Rk
Ojp3c3RyaW5nKHVybCwgOjpTeXNTdHJpbmdMZW4odXJsKSkpLmNfc3RyKCkpOwogCkBAIC0yOTQs
NyArMjk0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAg
IC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCiAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUg
KmZyYW1lKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZENhbmNlbENsaWVu
dFJlZGlyZWN0Rm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZy
YW1lKS5jX3N0cigpKTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMzYwLDcgKzM2MCw3IEBAIHZv
aWQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2IKIAogICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKIAotICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5tYWtlV2luZG93
T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgOjpnVGVzdFJ1
bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNlcHRpb24p
OwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKIAogICAgIG1fZ2NDb250cm9sbGVyLT5tYWtlV2lu
ZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7CkBAIC0zODQsNyAr
Mzg0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAgIC8q
IFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlciwKICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJh
bWUpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWVcbiIsCiAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoZnJhbWUpLmNfc3RyKCkpOwogICAgIGlmICghZG9uZSkgewpAQCAtNDA4LDcgKzQw
OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBb
aW5dICovIElXZWJWaWV3ICpzZW5kZXIsCiAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1l
KQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50
c0ZvckZyYW1lXG4iLAogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIApAQCAtNDI1LDcgKzQyNSw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RnJhbWVMb2FkRGVsZWdhdGU6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoIAogICAgIC8qIFtp
bl0gKi8gSVdlYlZpZXcgKnNlbmRlcikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiZGlk
RGlzcGxheUluc2VjdXJlQ29udGVudFxuIik7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTQzNSw3
ICs0MzUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1lTG9hZERlbGVnCiAgICAg
LyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAogICAgIC8qIFtpbl0gKi8gSVdlYlNlY3VyaXR5
T3JpZ2luICpvcmlnaW4pCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoImRpZFJ1bkluc2Vj
dXJlQ29udGVudFxuIik7CiAKICAgICByZXR1cm4gU19PSzsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vSGlzdG9yeURlbGVnYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNs
dWRlICJEdW1wUmVuZGVyVHJlZVdpbi5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRl
IDxXZWJLaXQvV2ViS2l0Lmg+CiAKQEAgLTgwLDcgKzgwLDcgQEAgVUxPTkcgSGlzdG9yeURlbGVn
YXRlOjpSZWxlYXNlKHZvaWQpCiAvLyBJV2ViSGlzdG9yeURlbGVnYXRlCiBIUkVTVUxUIEhpc3Rv
cnlEZWxlZ2F0ZTo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoSVdlYlZpZXcqIHdlYlZp
ZXcsIElXZWJOYXZpZ2F0aW9uRGF0YSogbmF2aWdhdGlvbkRhdGEsIElXZWJGcmFtZSogd2ViRnJh
bWUpCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdh
dGVDYWxsYmFja3MoKSkKKyAgICBpZiAoIWdUZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRl
Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogCiAgICAgQlNUUiB1cmxCU1RSOwpA
QCAtMTUxLDcgKzE1MSw3IEBAIEhSRVNVTFQgSGlzdG9yeURlbGVnYXRlOjpkaWROYXZpZ2F0ZVdp
dGgKIAogSFJFU1VMVCBIaXN0b3J5RGVsZWdhdGU6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZy
b21VUkwoSVdlYlZpZXcqLCBCU1RSIHNvdXJjZVVSTCwgQlNUUiBkZXN0aW5hdGlvblVSTCwgSVdl
YkZyYW1lKikKIHsKLSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlE
ZWxlZ2F0ZUNhbGxiYWNrcygpKQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmR1bXBIaXN0b3J5RGVs
ZWdhdGVDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuIFNfT0s7CiAKICAgICB3c3RyaW5nIHNv
dXJjZTsKQEAgLTE2OCw3ICsxNjgsNyBAQCBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6ZGlkUGVy
Zm9ybUNsaWVuCiAgICAgCiBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6ZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0RnJvbVVSTChJV2ViVmlldyogd2ViVmlldywgQlNUUiBzb3VyY2VVUkwsIEJTVFIg
ZGVzdGluYXRpb25VUkwsIElXZWJGcmFtZSogd2ViRnJhbWUpCiB7Ci0gICAgaWYgKCFnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICBpZiAo
IWdUZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJl
dHVybiBTX09LOwogCiAgICAgd3N0cmluZyBzb3VyY2U7CkBAIC0xODUsNyArMTg1LDcgQEAgSFJF
U1VMVCBIaXN0b3J5RGVsZWdhdGU6OmRpZFBlcmZvcm1TZXJ2ZQogCiBIUkVTVUxUIEhpc3RvcnlE
ZWxlZ2F0ZTo6dXBkYXRlSGlzdG9yeVRpdGxlKElXZWJWaWV3KiB3ZWJWaWV3LCBCU1RSIHRpdGxl
QlNUUiwgQlNUUiB1cmxCU1RSKQogewotICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
dW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFnVGVzdFJ1bm5lci0+ZHVt
cEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQogICAgICAgICByZXR1cm4gU19PSzsKICAgICAK
ICAgICB3c3RyaW5nIHVybDsKQEAgLTIwMiw3ICsyMDIsNyBAQCBIUkVTVUxUIEhpc3RvcnlEZWxl
Z2F0ZTo6dXBkYXRlSGlzdG9yeVRpCiAgICAgCiBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6cG9w
dWxhdGVWaXNpdGVkTGlua3NGb3JXZWJWaWV3KElXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIGlm
ICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkp
CisgICAgaWYgKCFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQog
ICAgICAgICByZXR1cm4gU19PSzsKIAogICAgIEJTVFIgdXJsQlNUUjsKQEAgLTIxNCw3ICsyMTQs
NyBAQCBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6cG9wdWxhdGVWaXNpdGVkCiAgICAgICAgIHVy
bCA9IHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3c3RyaW5nRnJvbUJTVFIodXJsQlNUUikpOwog
ICAgIFN5c0ZyZWVTdHJpbmcodXJsQlNUUik7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2soKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1
bXBWaXNpdGVkTGlua3NDYWxsYmFjaygpKQogICAgICAgICBwcmludGYoIkFza2VkIHRvIHBvcHVs
YXRlIHZpc2l0ZWQgbGlua3MgZm9yIFdlYlZpZXcgXCIlU1wiXG4iLCB1cmwuY19zdHIoKSk7CiAK
ICAgICByZXR1cm4gU19PSzsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxNDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJFZGl0aW5nRGVsZWdhdGUuaCIKLSNp
bmNsdWRlICJQb2xpY3lEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1
ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRh
dGlvbi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZCU1RSLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgotI2lu
Y2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KLSNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Q09NQVBJLmg+
Ci0jaW5jbHVkZSA8Y29tdXRpbC5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNpbmNsdWRlIDxz
aGxndWlkLmg+Ci0jaW5jbHVkZSA8c2hvYmppZGwuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBz
dGQ6OnN0cmluZzsKLXVzaW5nIHN0ZDo6d3N0cmluZzsKLQotc3RhdGljIGJvb2wgcmVzb2x2ZUN5
Z3dpblBhdGgoY29uc3Qgd3N0cmluZyYgY3lnd2luUGF0aCwgd3N0cmluZyYgd2luZG93c1BhdGgp
OwotCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKLXsKLSAg
ICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmll
dygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyByZXNldCB3ZWJ2aWV3LXJl
bGF0ZWQgc3RhdGVzIGJhY2sgdG8gZGVmYXVsdCB2YWx1ZXMgaW4gcHJlcGFyYXRpb24gZm9yIG5l
eHQgdGVzdAotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7Ci0gICAg
aWYgKFNVQ0NFRURFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKLSAg
ICAgICAgdmlld1ByaXZhdGUtPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhUUlVFKTsK
LQotICAgIENPTVB0cjxJV2ViVmlld0VkaXRpbmc+IHZpZXdFZGl0aW5nOwotICAgIGlmIChGQUlM
RUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdFZGl0aW5nKSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci0gICAgaWYgKEZB
SUxFRCh2aWV3RWRpdGluZy0+ZWRpdGluZ0RlbGVnYXRlKCZkZWxlZ2F0ZSkpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgQ09NUHRyPEVkaXRpbmdEZWxlZ2F0ZT4gZWRpdGluZ0RlbGVnYXRlKFF1ZXJ5
LCB2aWV3RWRpdGluZy5nZXQoKSk7Ci0gICAgaWYgKGVkaXRpbmdEZWxlZ2F0ZSkKLSAgICAgICAg
ZWRpdGluZ0RlbGVnYXRlLT5zZXRBY2NlcHRzRWRpdGluZyhUUlVFKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsK
LSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENPTVB0cjxJV2ViQmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7Ci0g
ICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5iYWNrRm9yd2FyZExpc3QoJmJhY2tGb3J3YXJkTGlzdCkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYkhpc3RvcnlJdGVtPiBpdGVtOwot
ICAgIGlmIChGQUlMRUQoYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgmaXRlbSkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBjbGVhciB0aGUgaGlzdG9yeSBieSBzZXR0aW5nIHRo
ZSBiYWNrL2ZvcndhcmQgbGlzdCdzIGNhcGFjaXR5IHRvIDAKLSAgICAvLyB0aGVuIHJlc3Rvcmlu
ZyBpdCBiYWNrIGFuZCBhZGRpbmcgYmFjayB0aGUgY3VycmVudCBpdGVtLgotICAgIGludCBjYXBh
Y2l0eTsKLSAgICBpZiAoRkFJTEVEKGJhY2tGb3J3YXJkTGlzdC0+Y2FwYWNpdHkoJmNhcGFjaXR5
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJhY2tGb3J3YXJkTGlzdC0+c2V0Q2FwYWNpdHko
MCk7Ci0gICAgYmFja0ZvcndhcmRMaXN0LT5zZXRDYXBhY2l0eShjYXBhY2l0eSk7Ci0gICAgYmFj
a0ZvcndhcmRMaXN0LT5hZGRJdGVtKGl0ZW0uZ2V0KCkpOwotICAgIGJhY2tGb3J3YXJkTGlzdC0+
Z29Ub0l0ZW0oaXRlbS5nZXQoKSk7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3
OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7Ci0g
ICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQk9PTCByZXN1bHQ7Ci0gICAgdmlld1ByaXZhdGUt
PnNob3VsZENsb3NlKCZyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUpTU3RyaW5n
UmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVm
IG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLSAgICByZXR1cm4gMDsKLX0KLQot
SlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNT
dHJpbmdSZWYgbmFtZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQotICAgIHJldHVybiAw
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkK
LXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+
d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ09NUHRyPElX
ZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVm
ZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHByZWZl
cmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoRkFMU0UpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQotewotICAgIGRpc3BsYXlXZWJWaWV3
KCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKLXsK
LSAgICBDT01QdHI8SVdlYkhpc3Rvcnk+IGhpc3Rvcnk7Ci0gICAgaWYgKEZBSUxFRChXZWJLaXRD
cmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5LCAwLCBfX3V1aWRvZihoaXN0b3J5KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZoaXN0b3J5KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDT01QdHI8SVdlYkhpc3Rvcnk+IHNoYXJlZEhpc3Rvcnk7Ci0gICAgaWYgKEZBSUxFRChXZWJL
aXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5LCAwLCBfX3V1aWRvZihzaGFyZWRIaXN0
b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZzaGFyZWRIaXN0b3J5KSkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBoaXN0b3J5LT5zZXRPcHRpb25hbFNoYXJlZEhpc3Rvcnkoc2hhcmVk
SGlzdG9yeS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
bXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiB2YWx1ZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1KU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17
Ci0gICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUp
OwotICAgIGlmICghZnJhbWVQcml2YXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBC
U1RSIHRleHRCU1RSID0gMDsKLSAgICBIUkVTVUxUIGhyID0gZnJhbWVQcml2YXRlLT5sYXllclRy
ZWVBc1RleHQoJnRleHRCU1RSKTsKLQotICAgIHdzdHJpbmcgdGV4dCh0ZXh0QlNUUiwgU3lzU3Ry
aW5nTGVuKHRleHRCU1RSKSk7Ci0gICAgU3lzRnJlZVN0cmluZyh0ZXh0QlNUUik7Ci0gICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRleHRWYWx1ZUpTKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0gICAgcmV0dXJuIHRl
eHRWYWx1ZUpTOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBub2RlT2JqZWN0KSBjb25zdAotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsK
LSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlld1ByaXZhdGUoUXVlcnks
IHdlYlZpZXcpOwotICAgIGlmICghd2ViVmlld1ByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgQ09NUHRyPElET01FbGVtZW50PiBlbGVtZW50OwotICAgIGlmIChGQUlMRUQod2ViVmll
d1ByaXZhdGUtPmVsZW1lbnRGcm9tSlMoY29udGV4dCwgbm9kZU9iamVjdCwgJmVsZW1lbnQpKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDT01QdHI8SURPTUVsZW1lbnRQcml2YXRlPiBlbGVt
ZW50UHJpdmF0ZShRdWVyeSwgZWxlbWVudCk7Ci0gICAgaWYgKCFlbGVtZW50UHJpdmF0ZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBCU1RSIHRleHRCU1RSID0gMDsKLSAgICBpZiAoRkFJTEVE
KGVsZW1lbnRQcml2YXRlLT5tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oJnRleHRCU1RSKSkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHQo
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aEJTVFIodGV4dEJTVFIpKTsKLSAgICBTeXNGcmVlU3Ry
aW5nKHRleHRCU1RSKTsKLSAgICByZXR1cm4gbWFya2VyVGV4dDsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKLXsKLSAgICBDT01QdHI8SVdl
YlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotICAgIHBvbGlj
eURlbGVnYXRlLT5zZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lKHRoaXMpOwotICAgIHdlYlZpZXct
PnNldFBvbGljeURlbGVnYXRlKHBvbGljeURlbGVnYXRlKTsKLX0KLQotc2l6ZV90IExheW91dFRl
c3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKLXsKLSAgICBDT01QdHI8SVdlYkhp
c3Rvcnk+IGhpc3Rvcnk7Ci0gICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJ
RF9XZWJIaXN0b3J5LCAwLCBfX3V1aWRvZihoaXN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZoaXN0b3J5KSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENPTVB0cjxJV2ViSGlz
dG9yeT4gc2hhcmVkSGlzdG9yeTsKLSAgICBpZiAoRkFJTEVEKGhpc3RvcnktPm9wdGlvbmFsU2hh
cmVkSGlzdG9yeSgmc2hhcmVkSGlzdG9yeSkpIHx8ICFzaGFyZWRIaXN0b3J5KQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIENPTVB0cjxJV2ViSGlzdG9yeVByaXZhdGU+IHNoYXJlZEhpc3RvcnlQ
cml2YXRlOwotICAgIGlmIChGQUlMRUQoc2hhcmVkSGlzdG9yeS0+UXVlcnlJbnRlcmZhY2UoJnNo
YXJlZEhpc3RvcnlQcml2YXRlKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IGNvdW50
OwotICAgIGlmIChGQUlMRUQoc2hhcmVkSGlzdG9yeVByaXZhdGUtPmFsbEl0ZW1zKCZjb3VudCwg
MCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdW5zaWdu
ZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKLXsKLSAg
ICBDT01QdHI8SVdlYldvcmtlcnNQcml2YXRlPiB3b3JrZXJzOwotICAgIGlmIChGQUlMRUQoV2Vi
S2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViV29ya2Vyc1ByaXZhdGUsIDAsIF9fdXVpZG9mKHdv
cmtlcnMpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmtlcnMpKSkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHVuc2lnbmVkIGNvdW50OwotICAgIGlmIChGQUlMRUQod29ya2Vycy0+d29y
a2VyVGhyZWFkQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
b3VudDsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybU5hbWUoKSBjb25zdAotewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBw
bGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aW4iKSk7
Ci0gICAgcmV0dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgLy8gU2FtZSBhcyBvbiBtYWMuICBUaGlzIGNhbiBiZSBz
aGFyZWQuCi0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3Jr
UXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBkdW1wKCk7Ci0gICAgbV93YWl0VG9E
dW1wID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRo
VG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCi17
Ci0gICAgd3N0cmluZyBpbnB1dChKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIodXJsKSwgSlNTdHJp
bmdHZXRMZW5ndGgodXJsKSk7Ci0KLSAgICB3c3RyaW5nIGxvY2FsUGF0aDsKLSAgICBpZiAoIXJl
c29sdmVDeWd3aW5QYXRoKGlucHV0LCBsb2NhbFBhdGgpKSB7Ci0gICAgICAgIHByaW50ZigiRVJS
T1I6IEZhaWxlZCB0byByZXNvbHZlIEN5Z3dpbiBwYXRoICVTXG4iLCBpbnB1dC5jX3N0cigpKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMobG9jYWxQYXRoLmNfc3RyKCksIGxvY2FsUGF0aC5sZW5ndGgoKSk7Ci19Ci0K
LXN0YXRpYyB3c3RyaW5nIGpzU3RyaW5nUmVmVG9XU3RyaW5nKEpTU3RyaW5nUmVmIGpzU3RyKQot
ewotICAgIHNpemVfdCBsZW5ndGggPSBKU1N0cmluZ0dldExlbmd0aChqc1N0cik7Ci0gICAgVmVj
dG9yPFdDSEFSPiBidWZmZXIobGVuZ3RoICsgMSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCks
IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihqc1N0ciksIGxlbmd0aCAqIHNpemVvZihXQ0hBUikp
OwotICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKLQotICAgIHJldHVybiBidWZmZXIuZGF0YSgp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYg
dXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0gICAgQ09NUHRyPElXZWJEYXRhU291cmNlPiBk
YXRhU291cmNlOwotICAgIGlmIChGQUlMRUQoZnJhbWUtPmRhdGFTb3VyY2UoJmRhdGFTb3VyY2Up
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJVUkxSZXNwb25zZT4gcmVzcG9u
c2U7Ci0gICAgaWYgKEZBSUxFRChkYXRhU291cmNlLT5yZXNwb25zZSgmcmVzcG9uc2UpKSB8fCAh
cmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJTVFIgcmVzcG9uc2VVUkxCU1RSOwot
ICAgIGlmIChGQUlMRUQocmVzcG9uc2UtPlVSTCgmcmVzcG9uc2VVUkxCU1RSKSkpCi0gICAgICAg
IHJldHVybjsKLSAgICB3c3RyaW5nIHJlc3BvbnNlVVJMKHJlc3BvbnNlVVJMQlNUUiwgU3lzU3Ry
aW5nTGVuKHJlc3BvbnNlVVJMQlNUUikpOwotICAgIFN5c0ZyZWVTdHJpbmcocmVzcG9uc2VVUkxC
U1RSKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gcmVhbCByZWxhdGl2ZSBVUkwgcmVz
b2x1dGlvbiBoZXJlLgotICAgIGludCBsYXN0U2xhc2ggPSByZXNwb25zZVVSTC5yZmluZCgnLycp
OwotICAgIGlmIChsYXN0U2xhc2ggIT0gLTEpCi0gICAgICAgIHJlc3BvbnNlVVJMID0gcmVzcG9u
c2VVUkwuc3Vic3RyKDAsIGxhc3RTbGFzaCk7Ci0KLSAgICB3c3RyaW5nIHdVUkwgPSBqc1N0cmlu
Z1JlZlRvV1N0cmluZyh1cmwpOwotICAgIHdzdHJpbmcgd0Fic29sdXRlVVJMID0gcmVzcG9uc2VV
UkwgKyBURVhUKCIvIikgKyB3VVJMOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc0Fi
c29sdXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKHdBYnNvbHV0ZVVS
TC5kYXRhKCksIHdBYnNvbHV0ZVVSTC5sZW5ndGgoKSkpOwotCi0gICAgV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGpzQWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOwot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIGFj
Y2VwdHNFZGl0aW5nKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAo
RkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENPTVB0cjxJV2ViVmlld0VkaXRpbmc+IHZpZXdFZGl0aW5nOwotICAgIGlmIChGQUlMRUQod2Vi
Vmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdFZGl0aW5nKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBkZWxlZ2F0ZTsKLSAgICBpZiAoRkFJTEVE
KHZpZXdFZGl0aW5nLT5lZGl0aW5nRGVsZWdhdGUoJmRlbGVnYXRlKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEVkaXRpbmdEZWxlZ2F0ZSogZWRpdGluZ0RlbGVnYXRlID0gKEVkaXRpbmdEZWxl
Z2F0ZSopKElXZWJFZGl0aW5nRGVsZWdhdGUqKWRlbGVnYXRlLmdldCgpOwotICAgIGVkaXRpbmdE
ZWxlZ2F0ZS0+c2V0QWNjZXB0c0VkaXRpbmcoYWNjZXB0c0VkaXRpbmcpOwotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNj
ZXB0Q29va2llcykKLXsKLSAgICBpZiAoYWx3YXlzQWNjZXB0Q29va2llcyA9PSBtX2Fsd2F5c0Fj
Y2VwdENvb2tpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghOjpzZXRBbHdheXNBY2Nl
cHRDb29raWVzKGFsd2F5c0FjY2VwdENvb2tpZXMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9h
bHdheXNBY2NlcHRDb29raWVzID0gYWx3YXlzQWNjZXB0Q29va2llczsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFn
KQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1l
LT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2Vi
UHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVy
ZW5jZXMoJnByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2Vi
UHJlZmVyZW5jZXNQcml2YXRlPiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKLSAg
ICBpZiAoIXByZWZzUHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJlZnNQcml2YXRl
LT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChmbGFnKTsKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxsZWQpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3
PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlld1ByaXZh
dGUoUXVlcnksIHdlYlZpZXcpOwotICAgIGlmICghd2ViVmlld1ByaXZhdGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJRE9NRWxlbWVudD4gZWxlbWVudDsKLSAgICBpZiAoRkFJTEVE
KHdlYlZpZXdQcml2YXRlLT5lbGVtZW50RnJvbUpTKGNvbnRleHQsIG5vZGVPYmplY3QsICZlbGVt
ZW50KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJRm9ybXNBdXRvRmlsbFRyYW5z
aXRpb24+IGF1dG9maWxsRWxlbWVudChRdWVyeSwgZWxlbWVudCk7Ci0gICAgaWYgKCFhdXRvZmls
bEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG9maWxsRWxlbWVudC0+c2V0QXV0
b2ZpbGxlZChhdXRvZmlsbGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQot
ewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53
ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzZXREZWxlZ2F0
ZSkgewotICAgICAgICBwb2xpY3lEZWxlZ2F0ZS0+c2V0UGVybWlzc2l2ZShwZXJtaXNzaXZlKTsK
LSAgICAgICAgd2ViVmlldy0+c2V0UG9saWN5RGVsZWdhdGUocG9saWN5RGVsZWdhdGUpOwotICAg
IH0gZWxzZQotICAgICAgICB3ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZSgwKTsKLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2Fu
UHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBi
ZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1LgotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50IGNv
ZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
R2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICBzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAg
cmV0dXJuIC0xOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNo
SW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJp
bmdSZWYgbGFuZ3VhZ2UpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlu
cHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
b2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQp
Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFi
bGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKLXsKLSAgICAvLyBTZWUgYWxzbyA8cmRhcjov
L3Byb2JsZW0vNjQ4MDEwOD4KLSAgICBDT01QdHI8SVdlYkljb25EYXRhYmFzZT4gaWNvbkRhdGFi
YXNlOwotICAgIENPTVB0cjxJV2ViSWNvbkRhdGFiYXNlPiB0bXBJY29uRGF0YWJhc2U7Ci0gICAg
aWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJJY29uRGF0YWJhc2UsIDAs
IElJRF9JV2ViSWNvbkRhdGFiYXNlLCAodm9pZCoqKSZ0bXBJY29uRGF0YWJhc2UpKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChGQUlMRUQodG1wSWNvbkRhdGFiYXNlLT5zaGFyZWRJY29uRGF0
YWJhc2UoJmljb25EYXRhYmFzZSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpY29uRGF0YWJh
c2UtPnNldEVuYWJsZWQoaWNvbkRhdGFiYXNlRW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQot
ewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53
ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViUHJl
ZmVyZW5jZXM+IHByZWZlcmVuY2VzOwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5j
ZXMoJnByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByZWZlcmVuY2VzLT5z
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJs
ZWQpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJh
bWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElX
ZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVm
ZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElX
ZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZzUHJpdmF0ZShRdWVyeSwgcHJlZmVyZW5jZXMpOwot
ICAgIGlmICghcHJlZnNQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcmVmc1ByaXZh
dGUtPnNldFhTU0F1ZGl0b3JFbmFibGVkKGVuYWJsZWQpOwotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAg
ICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmll
dygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVu
Y2VzPiBwcmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZw
cmVmZXJlbmNlcykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVu
Y2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVmZXJlbmNlcyk7Ci0gICAgaWYgKCFw
cmVmc1ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByZWZzUHJpdmF0ZS0+c2V0RnJh
bWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBTcGF0aWFsTmF2aWdhdGlvbiBsYXlvdXQgdGVzdHMuCi19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7
Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKLSAgICBpZiAo
RkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1
ZXJ5LCBwcmVmZXJlbmNlcyk7Ci0gICAgaWYgKCFwcmVmc1ByaXZhdGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHByZWZzUHJpdmF0ZS0+c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVS
THMoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93Rmls
ZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3
PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7
Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZz
UHJpdmF0ZShRdWVyeSwgcHJlZmVyZW5jZXMpOwotICAgIGlmICghcHJlZnNQcml2YXRlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyhlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9w
dXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIENPTVB0cjxJV2ViVmlldz4g
d2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOwot
ICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRv
d3NBdXRvbWF0aWNhbGx5KCFlbmFibGVkKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZChib29sIGVuYWJsZWQpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3
OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYg
KEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZzUHJpdmF0ZShR
dWVyeSwgcHJlZmVyZW5jZXMpOwotICAgIGlmICghcHJlZnNQcml2YXRlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBwcmVmc1ByaXZhdGUtPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
ZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyhib29sIHNob3VsZEN5Y2xlKQotewotICAgIENPTVB0cjxJV2ViVmll
dz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRl
OwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdQcml2YXRlKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHZpZXdQcml2YXRlLT5zZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoc2hvdWxkQ3ljbGUgPyBUUlVFIDogRkFMU0UpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZs
YWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCEKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBDT01Q
dHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2Vi
VmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBw
cmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJl
bmNlcykpKQotICAgICAgICByZXR1cm47Ci0KLSAgIHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQoZmxhZyk7Ci19Ci0KLWJvb2wgYXBwZW5kQ29tcG9uZW50VG9QYXRoKHdzdHJp
bmcmIHBhdGgsIGNvbnN0IHdzdHJpbmcmIGNvbXBvbmVudCkKLXsKLSAgICBXQ0hBUiBidWZmZXJb
TUFYX1BBVEhdOwotCi0gICAgaWYgKHBhdGguc2l6ZSgpICsgMSA+IE1BWF9QQVRIKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZW1jcHkoYnVmZmVyLCBwYXRoLmRhdGEoKSwgcGF0aC5z
aXplKCkgKiBzaXplb2YoV0NIQVIpKTsKLSAgICBidWZmZXJbcGF0aC5zaXplKCldID0gJ1wwJzsK
LQotICAgIGlmICghUGF0aEFwcGVuZFcoYnVmZmVyLCBjb21wb25lbnQuY19zdHIoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBhdGggPSB3c3RyaW5nKGJ1ZmZlcik7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGZvbGxvd1Nob3J0Y3V0cyh3c3RyaW5nJiBwYXRo
KQotewotICAgIGlmIChQYXRoRmlsZUV4aXN0cyhwYXRoLmNfc3RyKCkpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIERvIHdlIGhhdmUgYSBzaG9ydGN1dD8KLSAgICB3c3RyaW5nIGxp
bmtQYXRoID0gcGF0aDsKLSAgICBsaW5rUGF0aC5hcHBlbmQoVEVYVCgiLmxuayIpKTsKLSAgICBp
ZiAoIVBhdGhGaWxlRXhpc3RzKGxpbmtQYXRoLmNfc3RyKCkpKQotICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gV2UgaGF2ZSBhIHNob3J0Y3V0LCBmaW5kIGl0cyB0YXJnZXQuCi0gICAgQ09N
UHRyPElTaGVsbExpbms+IHNob3J0Y3V0KENyZWF0ZSwgQ0xTSURfU2hlbGxMaW5rKTsKLSAgICBp
ZiAoIXNob3J0Y3V0KQotICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDT01QdHI8SVBlcnNpc3RG
aWxlPiBwZXJzaXN0RmlsZShRdWVyeSwgc2hvcnRjdXQpOwotICAgIGlmICghc2hvcnRjdXQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoRkFJTEVEKHBlcnNpc3RGaWxlLT5Mb2FkKGxp
bmtQYXRoLmNfc3RyKCksIFNUR01fUkVBRCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKEZBSUxFRChzaG9ydGN1dC0+UmVzb2x2ZSgwLCAwKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBXQ0hBUiB0YXJnZXRQYXRoW01BWF9QQVRIXTsKLSAgICBEV09SRCB0YXJnZXRQYXRo
TGVuID0gX2NvdW50b2YodGFyZ2V0UGF0aCk7Ci0gICAgaWYgKEZBSUxFRChzaG9ydGN1dC0+R2V0
UGF0aCh0YXJnZXRQYXRoLCB0YXJnZXRQYXRoTGVuLCAwLCAwKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIVBhdGhGaWxlRXhpc3RzKHRhcmdldFBhdGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gVXNlIHRoZSB0YXJnZXQgcGF0aCBhcyB0aGUgcmVzdWx0IHBhdGgg
aW5zdGVhZC4KLSAgICBwYXRoID0gd3N0cmluZyh0YXJnZXRQYXRoKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgYm9vbCByZXNvbHZlQ3lnd2luUGF0aChjb25zdCB3c3RyaW5nJiBj
eWd3aW5QYXRoLCB3c3RyaW5nJiB3aW5kb3dzUGF0aCkKLXsKLSAgICB3c3RyaW5nIGZpbGVQcm90
b2NvbCA9IEwiZmlsZTovLyI7Ci0gICAgYm9vbCBpc0ZpbGVQcm90b2NvbCA9IGN5Z3dpblBhdGgu
ZmluZChmaWxlUHJvdG9jb2wpICE9IHN0cmluZzo6bnBvczsKLSAgICBpZiAoY3lnd2luUGF0aFtp
c0ZpbGVQcm90b2NvbCA/IDcgOiAwXSAhPSAnLycpICAvLyBlbnN1cmUgcGF0aCBpcyBhYnNvbHV0
ZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBHZXQgdGhlIFJvb3QgcGF0aC4KLSAg
ICBXQ0hBUiByb290UGF0aFtNQVhfUEFUSF07Ci0gICAgRFdPUkQgcm9vdFBhdGhTaXplID0gX2Nv
dW50b2Yocm9vdFBhdGgpOwotICAgIERXT1JEIGtleVR5cGU7Ci0gICAgRFdPUkQgcmVzdWx0ID0g
OjpTSEdldFZhbHVlVyhIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNPRlRXQVJFXFxDeWdudXMg
U29sdXRpb25zXFxDeWd3aW5cXG1vdW50cyB2MlxcLyIpLCBURVhUKCJuYXRpdmUiKSwgJmtleVR5
cGUsICZyb290UGF0aCwgJnJvb3RQYXRoU2l6ZSk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEVSUk9S
X1NVQ0NFU1MgfHwga2V5VHlwZSAhPSBSRUdfU1opIHsKLSAgICAgICAgLy8gQ3lnd2luIDEuNyBk
b2Vzbid0IHN0b3JlIEN5Z3dpbidzIHJvb3QgYXMgYSBtb3VudCBwb2ludCBhbnltb3JlLCBiZWNh
dXNlIG1vdW50IHBvaW50cyBhcmUgbm93IHN0b3JlZCBpbiAvZXRjL2ZzdGFiLgotICAgICAgICAv
LyBIb3dldmVyLCAvZXRjL2ZzdGFiIGRvZXNuJ3QgY29udGFpbiBhbnkgaW5mb3JtYXRpb24gYWJv
dXQgd2hlcmUgLyBpcyBsb2NhdGVkIGFzIGEgV2luZG93cyBwYXRoLCBzbyB3ZSBuZWVkIHRvIHVz
ZSBDeWd3aW4ncwotICAgICAgICAvLyBuZXcgcmVnaXN0cnkga2V5IHRoYXQgaGFzIHRoZSByb290
LgotICAgICAgICByZXN1bHQgPSA6OlNIR2V0VmFsdWVXKEhLRVlfTE9DQUxfTUFDSElORSwgVEVY
VCgiU09GVFdBUkVcXEN5Z3dpblxcc2V0dXAiKSwgVEVYVCgicm9vdGRpciIpLCAma2V5VHlwZSwg
JnJvb3RQYXRoLCAmcm9vdFBhdGhTaXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTIHx8IGtleVR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHdpbmRvd3NQYXRoID0gd3N0cmluZyhyb290UGF0aCwgcm9vdFBhdGhTaXpl
KTsKLQotICAgIGludCBvbGRQb3MgPSBpc0ZpbGVQcm90b2NvbCA/IDggOiAxOwotICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgIGludCBuZXdQb3MgPSBjeWd3aW5QYXRoLmZpbmQoJy8nLCBvbGRQb3Mp
OwotCi0gICAgICAgIGlmIChuZXdQb3MgPT0gLTEpIHsKLSAgICAgICAgICAgIHdzdHJpbmcgcGF0
aENvbXBvbmVudCA9IGN5Z3dpblBhdGguc3Vic3RyKG9sZFBvcyk7Ci0KLSAgICAgICAgICAgIGlm
ICghYXBwZW5kQ29tcG9uZW50VG9QYXRoKHdpbmRvd3NQYXRoLCBwYXRoQ29tcG9uZW50KSkKLSAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFmb2xsb3dTaG9y
dGN1dHMod2luZG93c1BhdGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB3c3RyaW5nIHBhdGhDb21wb25l
bnQgPSBjeWd3aW5QYXRoLnN1YnN0cihvbGRQb3MsIG5ld1BvcyAtIG9sZFBvcyk7Ci0gICAgICAg
IGlmICghYXBwZW5kQ29tcG9uZW50VG9QYXRoKHdpbmRvd3NQYXRoLCBwYXRoQ29tcG9uZW50KSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWZvbGxvd1Nob3J0Y3V0
cyh3aW5kb3dzUGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgb2xk
UG9zID0gbmV3UG9zICsgMTsKLSAgICB9Ci0KLSAgICBpZiAoaXNGaWxlUHJvdG9jb2wpCi0gICAg
ICAgIHdpbmRvd3NQYXRoID0gZmlsZVByb3RvY29sICsgd2luZG93c1BhdGg7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKLXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdl
YlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKLSAg
ICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybFN0cmluZyhBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBqc1VSTCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJl
Zj4gdXJsKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aFN0cmluZygwLCB1cmxTdHJpbmcuZ2V0KCks
IDApKTsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm93IGNvcHkg
dGhlIGZpbGUgc3lzdGVtIHBhdGgsIFBPU0lYIHN0eWxlLgotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcGF0aENGKEFkb3B0Q0YsIENGVVJMQ29weUZpbGVTeXN0ZW1QYXRoKHVybC5nZXQoKSwg
a0NGVVJMUE9TSVhQYXRoU3R5bGUpKTsKLSAgICBpZiAoIXBhdGhDRikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgd3N0cmluZyBwYXRoID0gY2ZTdHJpbmdSZWZUb1dTdHJpbmcocGF0aENGLmdldCgp
KTsKLQotICAgIHdzdHJpbmcgcmVzdWx0UGF0aDsKLSAgICBpZiAoIXJlc29sdmVDeWd3aW5QYXRo
KHBhdGgsIHJlc3VsdFBhdGgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgcGF0aCBo
YXMgYmVlbiByZXNvbHZlZCwgbm93IGNvbnZlcnQgaXQgYmFjayB0byBhIENGVVJMLgotICAgIGlu
dCByZXN1bHQgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHJlc3VsdFBhdGguY19z
dHIoKSwgcmVzdWx0UGF0aC5zaXplKCkgKyAxLCAwLCAwLCAwLCAwKTsKLSAgICBWZWN0b3I8Y2hh
cj4gdXRmOFZlY3RvcihyZXN1bHQpOwotICAgIHJlc3VsdCA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUo
Q1BfVVRGOCwgMCwgcmVzdWx0UGF0aC5jX3N0cigpLCByZXN1bHRQYXRoLnNpemUoKSArIDEsIHV0
ZjhWZWN0b3IuZGF0YSgpLCByZXN1bHQsIDAsIDApOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB1cmwgPSBDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oMCwgKGNvbnN0IFVJbnQ4Kil1dGY4VmVjdG9yLmRhdGEoKSwgdXRmOFZlY3Rvci5zaXpl
KCkgLSAxLCBmYWxzZSk7Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJl
c3VsdFBhdGggPSBjZlN0cmluZ1JlZlRvV1N0cmluZyhDRlVSTEdldFN0cmluZyh1cmwuZ2V0KCkp
KTsKLQotICAgIEJTVFIgcmVzdWx0UGF0aEJTVFIgPSBTeXNBbGxvY1N0cmluZ0xlbihyZXN1bHRQ
YXRoLmRhdGEoKSwgcmVzdWx0UGF0aC5zaXplKCkpOwotICAgIHByZWZlcmVuY2VzLT5zZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uKHJlc3VsdFBhdGhCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKHJl
c3VsdFBhdGhCU1RSKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVG
b3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5n
UmVmIHZhbHVlKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJ
TEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENP
TVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXdQcml2YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsKLSAg
ICBpZiAoIXdlYlZpZXdQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SURP
TUVsZW1lbnQ+IGRvbUVsZW1lbnQ7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3UHJpdmF0ZS0+ZWxl
bWVudEZyb21KUyhjb250ZXh0LCBlbGVtZW50LCAmZG9tRWxlbWVudCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDT01QdHI8SURPTUhUTUxJbnB1dEVsZW1lbnQ+IGRvbUlucHV0RWxlbWVudDsK
LSAgICBpZiAoRkFJTEVEKGRvbUVsZW1lbnQtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NSFRNTElu
cHV0RWxlbWVudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZkb21JbnB1dEVsZW1lbnQpKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIF9ic3RyX3QgdmFsdWVCU1RSKEpTU3RyaW5nQ29weUJT
VFIodmFsdWUpLCBmYWxzZSk7Ci0KLSAgICBkb21JbnB1dEVsZW1lbnQtPnNldFZhbHVlRm9yVXNl
cih2YWx1ZUJTVFIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9k
ZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCi17Ci0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB1cmxTdHJpbmcoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwganNVUkwp
KTsKLSAgICA6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHVybFN0cmluZy5n
ZXQoKSk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVz
ZXJTdHlsZVNoZWV0KCkKLXsKLSAgICA6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKDApOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShi
b29sIGZsYWcpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09N
UHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SFdORCB3ZWJWaWV3V2luZG93OwotICAgIGlmIChGQUlMRUQodmlld1ByaXZhdGUtPnZpZXdXaW5k
b3coKE9MRV9IQU5ETEUqKSZ3ZWJWaWV3V2luZG93KSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IDo6U2VuZE1lc3NhZ2Uod2ViVmlld1dpbmRvdywgZmxhZyA/IFdNX1NFVEZPQ1VTIDogV01fS0lM
TEZPQ1VTLCAoV1BBUkFNKTo6R2V0RGVza3RvcFdpbmRvdygpLCAwKTsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykK
LXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+
d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlZp
ZXdFZGl0aW5nPiB2aWV3RWRpdGluZzsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50
ZXJmYWNlKCZ2aWV3RWRpdGluZykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aWV3RWRpdGlu
Zy0+c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGZsYWcgPyBUUlVFIDogRkFMU0UpOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAg
aWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDT01QdHI8SVdlYlZpZXdFZGl0aW5nPiB2aWV3RWRpdGluZzsKLSAgICBpZiAoRkFJTEVE
KHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3RWRpdGluZykpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB2aWV3RWRpdGluZy0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChm
bGFnID8gVFJVRSA6IEZBTFNFKTsKLX0KLQotc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIHdh
aXRUb0R1bXBXYXRjaGRvZ0ludGVydmFsID0gMzAuMDsKLQotc3RhdGljIHZvaWQgQ0FMTEJBQ0sg
d2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQoSFdORCwgVUlOVCwgVUlOVF9QVFIsIERXT1JEKQot
ewotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJl
ZCgpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wg
d2FpdFVudGlsRG9uZSkKLXsKLSAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOwotICAg
IGlmIChtX3dhaXRUb0R1bXAgJiYgIXdhaXRUb0R1bXBXYXRjaGRvZykKLSAgICAgICAgd2FpdFRv
RHVtcFdhdGNoZG9nID0gU2V0VGltZXIoMCwgMCwgd2FpdFRvRHVtcFdhdGNoZG9nSW50ZXJ2YWwg
KiAxMDAwLCB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJlZCk7Ci19Ci0KLWludCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQotewotICAgIHJldHVybiBvcGVuV2luZG93cygpLnNp
emUoKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29t
cGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKQotewotICAgIENPTVB0cjxJRE9N
RG9jdW1lbnQ+IGRvY3VtZW50OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPkRPTURvY3VtZW50KCZk
b2N1bWVudCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3c3RyaW5nIGlkV3N0cmlu
ZyA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKGlkKTsKLSAgICBCU1RSIGlkQlNUUiA9IFN5c0FsbG9j
U3RyaW5nTGVuKChPTEVDSEFSKilpZFdzdHJpbmcuY19zdHIoKSwgaWRXc3RyaW5nLmxlbmd0aCgp
KTsKLSAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAgSFJFU1VMVCByZXN1bHQg
PSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoaWRCU1RSLCAmZWxlbWVudCk7Ci0gICAgU3lzRnJl
ZVN0cmluZyhpZEJTVFIpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1
ZXJ5LCBmcmFtZSk7Ci0gICAgaWYgKCFmcmFtZVByaXZhdGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEJPT0wgYXV0b0NvbXBsZXRlczsKLSAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0
ZS0+ZWxlbWVudERvZXNBdXRvQ29tcGxldGUoZWxlbWVudC5nZXQoKSwgJmF1dG9Db21wbGV0ZXMp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGF1dG9Db21wbGV0ZXM7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5h
bWUsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIHdzdHJpbmcgd05hbWUgPSBqc1N0cmluZ1Jl
ZlRvV1N0cmluZyhuYW1lKTsKLSAgICB3c3RyaW5nIHdWYWx1ZSA9IGpzU3RyaW5nUmVmVG9XU3Ry
aW5nKHZhbHVlKTsKLQotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJ
TEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENP
TVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRlOwotICAgIGlmIChGQUlMRUQod2ViVmll
dy0+UXVlcnlJbnRlcmZhY2UoJnZpZXdQcml2YXRlKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEJTVFIgbmFtZUJTVFIgPSBTeXNBbGxvY1N0cmluZ0xlbigoT0xFQ0hBUiopd05hbWUuY19zdHIo
KSwgd05hbWUubGVuZ3RoKCkpOwotICAgIEJTVFIgdmFsdWVCU1RSID0gU3lzQWxsb2NTdHJpbmdM
ZW4oKE9MRUNIQVIqKXdWYWx1ZS5jX3N0cigpLCB3VmFsdWUubGVuZ3RoKCkpOwotICAgIHZpZXdQ
cml2YXRlLT5leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUobmFtZUJTVFIsIHZhbHVlQlNUUik7Ci0K
LSAgICBTeXNGcmVlU3RyaW5nKG5hbWVCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKHZhbHVlQlNU
Uik7Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0
UmVmIC8qIGNvbnRleHQgKi8sIEpTU3RyaW5nUmVmIC8qIHRhcmdldCAqLywgSlNPYmplY3RSZWYg
Lyogb3B0aW9uc0FycmF5ICovKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwo
aW50KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiAvKm5hbWUqLykKLXsKLSAgICBw
cmludGYoIkVSUk9SOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCgpIG5v
dCBpbXBsZW1lbnRlZFxuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4o
SlNTdHJpbmdSZWYgb3JpZ2luKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9y
dCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGUgZm9yIGFuIG9yaWdpbi4KLX0KLQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVu
c2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1
cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgotfQotCi1KU1ZhbHVlUmVmIExheW91dFRl
c3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNv
bnRleHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGhh
dmUgYXBwbGljYXRpb24gY2FjaGVzLgotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLX0KLQotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlv
bkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBnZXQgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVz
IGZvciBhbiBvcmlnaW4uCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsKLSAgICBDT01QdHI8SVdlYkRhdGFiYXNlTWFu
YWdlcj4gZGF0YWJhc2VNYW5hZ2VyOwotICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiB0
bXBEYXRhYmFzZU1hbmFnZXI7Ci0gICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShD
TFNJRF9XZWJEYXRhYmFzZU1hbmFnZXIsIDAsIElJRF9JV2ViRGF0YWJhc2VNYW5hZ2VyLCAodm9p
ZCoqKSZ0bXBEYXRhYmFzZU1hbmFnZXIpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChGQUlM
RUQodG1wRGF0YWJhc2VNYW5hZ2VyLT5zaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXIoJmRhdGFiYXNl
TWFuYWdlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkYXRhYmFzZU1hbmFnZXItPmRlbGV0
ZUFsbERhdGFiYXNlcygpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlk
ZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBD
T01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygm
d2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2Vz
PiBwcmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVm
ZXJlbmNlcykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVmZXJlbmNlcyk7Ci0gICAgaWYgKCFwcmVm
c1ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJTVFIga2V5QlNUUiA9IEpTU3RyaW5n
Q29weUJTVFIoa2V5KTsKLSAgICBCU1RSIHZhbHVlQlNUUiA9IEpTU3RyaW5nQ29weUJTVFIodmFs
dWUpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0UHJlZmVyZW5jZUZvclRlc3Qoa2V5QlNUUiwgdmFs
dWVCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKGtleUJTVFIpOwotICAgIFN5c0ZyZWVTdHJpbmco
dmFsdWVCU1RSKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VR
dW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0gICAgQ09NUHRyPElXZWJEYXRhYmFz
ZU1hbmFnZXI+IGRhdGFiYXNlTWFuYWdlcjsKLSAgICBDT01QdHI8SVdlYkRhdGFiYXNlTWFuYWdl
cj4gdG1wRGF0YWJhc2VNYW5hZ2VyOwotCi0gICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0
YW5jZShDTFNJRF9XZWJEYXRhYmFzZU1hbmFnZXIsIDAsIElJRF9JV2ViRGF0YWJhc2VNYW5hZ2Vy
LCAodm9pZCoqKSZ0bXBEYXRhYmFzZU1hbmFnZXIpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChGQUlMRUQodG1wRGF0YWJhc2VNYW5hZ2VyLT5zaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXIoJmRh
dGFiYXNlTWFuYWdlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkYXRhYmFzZU1hbmFnZXIt
PnNldFF1b3RhKFRFWFQoImZpbGU6Ly8vIiksIHF1b3RhKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Z29CYWNrKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJs
ZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJy
aW5nLWxvYWRzLmh0bWwKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdS
ZWYgc2NoZW1lKQotewotICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXc7Ci0gICAg
aWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJWaWV3KSwgMCwgX191
dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViVmlldykpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQlNUUiBzY2hlbWVCU1RSID0gSlNTdHJpbmdDb3B5QlNUUihz
Y2hlbWUpOwotICAgIHdlYlZpZXctPnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWUoZm9yYmlkZGVuLCBzY2hlbWVCU1RSKTsKLSAgICBTeXNGcmVlU3RyaW5nKHNjaGVtZUJT
VFIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1T
aXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQotewotICAgIHByaW50ZigiRVJST1I6IExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKCkgbm90IGltcGxlbWVudGVk
XG4iKTsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUs
IEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAgICBDT01QdHI8SURPTURvY3VtZW50PiBkb2N1
bWVudDsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT5ET01Eb2N1bWVudCgmZG9jdW1lbnQpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQlNUUiBpZEJTVFIgPSBKU1N0cmluZ0NvcHlCU1RS
KGVsZW1lbnRJZCk7Ci0gICAgQ09NUHRyPElET01FbGVtZW50PiBlbGVtZW50OwotICAgIEhSRVNV
TFQgaHIgPSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoaWRCU1RSLCAmZWxlbWVudCk7Ci0gICAg
U3lzRnJlZVN0cmluZyhpZEJTVFIpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1
ZXJ5LCBmcmFtZSk7Ci0gICAgaWYgKCFmcmFtZVByaXZhdGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEJTVFIgbmFtZUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RSKGFuaW1hdGlvbk5hbWUp
OwotICAgIEJPT0wgd2FzUnVubmluZyA9IEZBTFNFOwotICAgIGhyID0gZnJhbWVQcml2YXRlLT5w
YXVzZUFuaW1hdGlvbihuYW1lQlNUUiwgZWxlbWVudC5nZXQoKSwgdGltZSwgJndhc1J1bm5pbmcp
OwotICAgIFN5c0ZyZWVTdHJpbmcobmFtZUJTVFIpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRCho
cikgJiYgd2FzUnVubmluZzsKLX0KLQotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwg
ZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKLXsKLSAgICBDT01QdHI8SURPTURv
Y3VtZW50PiBkb2N1bWVudDsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT5ET01Eb2N1bWVudCgmZG9j
dW1lbnQpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQlNUUiBpZEJTVFIgPSBKU1N0
cmluZ0NvcHlCU1RSKGVsZW1lbnRJZCk7Ci0gICAgQ09NUHRyPElET01FbGVtZW50PiBlbGVtZW50
OwotICAgIEhSRVNVTFQgaHIgPSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoaWRCU1RSLCAmZWxl
bWVudCk7Ci0gICAgU3lzRnJlZVN0cmluZyhpZEJTVFIpOwotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJh
bWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7Ci0gICAgaWYgKCFmcmFtZVByaXZhdGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEJTVFIgbmFtZUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RSKHBy
b3BlcnR5TmFtZSk7Ci0gICAgQk9PTCB3YXNSdW5uaW5nID0gRkFMU0U7Ci0gICAgaHIgPSBmcmFt
ZVByaXZhdGUtPnBhdXNlVHJhbnNpdGlvbihuYW1lQlNUUiwgZWxlbWVudC5nZXQoKSwgdGltZSwg
Jndhc1J1bm5pbmcpOwotICAgIFN5c0ZyZWVTdHJpbmcobmFtZUJTVFIpOwotCi0gICAgcmV0dXJu
IFNVQ0NFRURFRChocikgJiYgd2FzUnVubmluZzsKLX0KLQotdW5zaWduZWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgQ09NUHRy
PElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwotICAgIGlmICgh
ZnJhbWVQcml2YXRlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVJTlQgbnVtYmVyID0gMDsK
LSAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCZu
dW1iZXIpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbnVtYmVyOwotfQotCi1z
dGF0aWMgX2JzdHJfdCBic3RyVChKU1N0cmluZ1JlZiBqc1N0cmluZykKLXsKLSAgICAvLyBUaGUg
ZmFsc2UgcGFyYW1ldGVyIHRlbGxzIHRoZSBfYnN0cl90IGNvbnN0cnVjdG9yIHRvIGFkb3B0IHRo
ZSBCU1RSIHdlIHBhc3MgaXQuCi0gICAgcmV0dXJuIF9ic3RyX3QoSlNTdHJpbmdDb3B5QlNUUihq
c1N0cmluZyksIGZhbHNlKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmlu
Z1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJv
b2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3UHJp
dmF0ZT4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVp
ZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZ3ZWJWaWV3KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJWaWV3LT5hZGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShic3RyVChzb3VyY2VPcmlnaW4pLkdldEJTVFIoKSwgYnN0
clQoZGVzdGluYXRpb25Qcm90b2NvbCkuR2V0QlNUUigpLCBic3RyVChkZXN0aW5hdGlvbkhvc3Qp
LkdldEJTVFIoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmlu
Z1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3Ry
aW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykK
LXsKLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQo
V2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmlldyksIDAsIF9fdXVpZG9mKHdlYlZp
ZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZpZXcpKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHdlYlZpZXctPnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGJzdHJU
KHNvdXJjZU9yaWdpbikuR2V0QlNUUigpLCBic3RyVChkZXN0aW5hdGlvblByb3RvY29sKS5HZXRC
U1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uSG9zdCkuR2V0QlNUUigpLCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJh
clBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBh
bGxGcmFtZXMpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlldzsKLSAgICBp
ZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1
aWRvZih3ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxkPiB3b3JsZDsKLSAgICBp
ZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwg
MCwgX191dWlkb2Yod29ybGQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmxkKSkpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJWaWV3LT5hZGRVc2VyU2NyaXB0VG9Hcm91cChfYnN0
cl90KEwib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIpLkdldEJTVFIoKSwgd29ybGQuZ2V0KCks
IGJzdHJUKHNvdXJjZSkuR2V0QlNUUigpLCAwLCAwLCAwLCAwLCAwLCBydW5BdFN0YXJ0ID8gV2Vi
SW5qZWN0QXREb2N1bWVudFN0YXJ0IDogV2ViSW5qZWN0QXREb2N1bWVudEVuZCk7Ci19Ci0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYg
c291cmNlLCBib29sIGFsbEZyYW1lcykKLXsKLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3
ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2Vi
VmlldyksIDAsIF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndl
YlZpZXcpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+
IHdvcmxkOwotICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2Vi
U2NyaXB0V29ybGQpLCAwLCBfX3V1aWRvZih3b3JsZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
Pigmd29ybGQpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYlZpZXctPmFkZFVzZXJTdHls
ZVNoZWV0VG9Hcm91cChfYnN0cl90KEwib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIpLkdldEJT
VFIoKSwgd29ybGQuZ2V0KCksIGJzdHJUKHNvdXJjZSkuR2V0QlNUUigpLCAwLCAwLCAwLCAwLCAw
KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAg
IGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxF
RCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZzUHJpdmF0ZShRdWVyeSwg
cHJlZmVyZW5jZXMpOwotICAgIGlmICghcHJlZnNQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwcmVmc1ByaXZhdGUtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZW5hYmxlZCk7Ci19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKLXsKLSAgICBDT01Q
dHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2Vi
VmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2
aWV3UHJpdmF0ZShRdWVyeSwgd2ViVmlldyk7Ci0gICAgaWYgKCF2aWV3UHJpdmF0ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJJbnNwZWN0b3I+IGluc3BlY3RvcjsKLSAgICBp
ZiAoU1VDQ0VFREVEKHZpZXdQcml2YXRlLT5pbnNwZWN0b3IoJmluc3BlY3RvcikpKQotICAgICAg
ICBpbnNwZWN0b3ItPnNob3coKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xv
c2VXZWJJbnNwZWN0b3IoKQotewotICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKLSAgICBp
ZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsK
LSAgICBpZiAoIXZpZXdQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdl
Ykluc3BlY3Rvcj4gaW5zcGVjdG9yOwotICAgIGlmIChGQUlMRUQodmlld1ByaXZhdGUtPmluc3Bl
Y3RvcigmaW5zcGVjdG9yKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3Rvci0+Y2xv
c2UoKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3Bl
Y3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIENPTVB0cjxJV2Vi
Vmlldz4gd2ViVmlldzsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2
YXRlKFF1ZXJ5LCB3ZWJWaWV3KTsKLSAgICBpZiAoIXZpZXdQcml2YXRlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDT01QdHI8SVdlYkluc3BlY3Rvcj4gaW5zcGVjdG9yOwotICAgIGlmIChGQUlM
RUQodmlld1ByaXZhdGUtPmluc3BlY3RvcigmaW5zcGVjdG9yKSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENPTVB0cjxJV2ViSW5zcGVjdG9yUHJpdmF0ZT4gaW5zcGVjdG9yUHJpdmF0ZShRdWVy
eSwgaW5zcGVjdG9yKTsKLSAgICBpZiAoIWluc3BlY3RvclByaXZhdGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGluc3BlY3RvclByaXZhdGUtPmV2YWx1YXRlSW5Gcm9udGVuZChjYWxsSWQsIGJz
dHJUKHNjcmlwdCkuR2V0QlNUUigpKTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBD
T01QdHI8SVdlYlNjcmlwdFdvcmxkPiA+IFdvcmxkTWFwOwotc3RhdGljIFdvcmxkTWFwJiB3b3Js
ZE1hcCgpCi17Ci0gICAgc3RhdGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwotICAg
IHJldHVybiBtYXA7Ci19Ci0KLXVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChJV2ViU2NyaXB0V29y
bGQqIHdvcmxkKQotewotICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1h
cCgpLmVuZCgpOwotICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRN
YXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQg
PT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZpcnN0OwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVm
IGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2Jq
ZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+
IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwotICAgIGlmICghZnJhbWVQcml2YXRlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBBIHdvcmxkSUQgb2YgMCBhbHdheXMgY29ycmVzcG9uZHMg
dG8gYSBuZXcgd29ybGQuIEFueSBvdGhlciB3b3JsZElEIGNvcnJlc3BvbmRzIHRvIGEgd29ybGQK
LSAgICAvLyB0aGF0IGlzIGNyZWF0ZWQgb25jZSBhbmQgY2FjaGVkIGZvcmV2ZXIuCi0gICAgQ09N
UHRyPElXZWJTY3JpcHRXb3JsZD4gd29ybGQ7Ci0gICAgaWYgKCF3b3JsZElEKSB7Ci0gICAgICAg
IGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQp
LCAwLCBfX3V1aWRvZih3b3JsZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGQpKSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ09NUHRyPElXZWJT
Y3JpcHRXb3JsZD4mIHdvcmxkU2xvdCA9IHdvcmxkTWFwKCkuYWRkKHdvcmxkSUQsIDApLml0ZXJh
dG9yLT5zZWNvbmQ7Ci0gICAgICAgIGlmICghd29ybGRTbG90ICYmIEZBSUxFRChXZWJLaXRDcmVh
dGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVpZG9mKHdvcmxkU2xv
dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGRTbG90KSkpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB3b3JsZCA9IHdvcmxkU2xvdDsKLSAgICB9Ci0KLSAgICBCU1RSIHJl
c3VsdDsKLSAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+c3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdEluU2NyaXB0V29ybGQod29ybGQuZ2V0KCksIGdsb2JhbE9iamVjdCwgYnN0clQoc2Ny
aXB0KS5HZXRCU1RSKCksICZyZXN1bHQpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN5c0ZyZWVT
dHJpbmcocmVzdWx0KTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxs
VmlzaXRlZExpbmtzKCkKLXsKLSAgICBDT01QdHI8SVdlYkhpc3Rvcnk+IGhpc3Rvcnk7Ci0gICAg
aWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5LCAwLCBfX3V1
aWRvZihoaXN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZoaXN0b3J5KSkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYkhpc3Rvcnk+IHNoYXJlZEhpc3Rvcnk7Ci0g
ICAgaWYgKEZBSUxFRChoaXN0b3J5LT5vcHRpb25hbFNoYXJlZEhpc3RvcnkoJnNoYXJlZEhpc3Rv
cnkpKSB8fCAhc2hhcmVkSGlzdG9yeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElX
ZWJIaXN0b3J5UHJpdmF0ZT4gc2hhcmVkSGlzdG9yeVByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRChz
aGFyZWRIaXN0b3J5LT5RdWVyeUludGVyZmFjZSgmc2hhcmVkSGlzdG9yeVByaXZhdGUpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc2hhcmVkSGlzdG9yeVByaXZhdGUtPnJlbW92ZUFsbFZpc2l0
ZWRMaW5rcygpOwotfQotCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMo
ZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMsIGZsb2F0IHBhZ2VIZWlnaHRJblBpeGVscykKLXsKLSAg
ICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7Ci0g
ICAgaWYgKCFmcmFtZVByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHBhZ2VO
dW1iZXIgPSAtMTsKLSAgICBpZiAoRkFJTEVEKGZyYW1lUHJpdmF0ZS0+bnVtYmVyT2ZQYWdlcyhw
YWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzLCAmcGFnZU51bWJlcikpKQotICAg
ICAgICBwYWdlTnVtYmVyID0gLTE7Ci0gICAgcmV0dXJuIHBhZ2VOdW1iZXI7Ci19Ci0KLUpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4oKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0Rh
dGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkK
LXsKLQotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRv
bSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKLXsKLSAgICBD
T01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygm
d2ViVmlldykpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8SVdlYkJhY2tGb3J3YXJk
TGlzdD4gYmFja0ZvcndhcmRMaXN0OwotICAgIGlmIChGQUlMRUQod2ViVmlldy0+YmFja0Zvcndh
cmRMaXN0KCZiYWNrRm9yd2FyZExpc3QpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRy
PElXZWJIaXN0b3J5SXRlbT4gaXRlbTsKLSAgICBpZiAoRkFJTEVEKGJhY2tGb3J3YXJkTGlzdC0+
Y3VycmVudEl0ZW0oJml0ZW0pKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQk9PTCBzdWNjZXNz
OwotICAgIHdlYlZpZXctPmdvVG9CYWNrRm9yd2FyZEl0ZW0oaXRlbS5nZXQoKSwgJnN1Y2Nlc3Mp
OwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9v
bCkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lv
bihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQotewotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3Rv
cmFnZSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBu
dW1iZXIpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgotfQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
bG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JP
cmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBsb2NhbCBzdG9yYWdlIGRpc2sgdXNhZ2UgZm9yIGFu
IG9yaWdpbi4KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5p
bXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCi17Ci0gICAgQ09N
UHRyPElXZWJWaWV3PiB3ZWJWaWV3OwotICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndl
YlZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4g
dmlld1ByaXZhdGUoUXVlcnksIHdlYlZpZXcpOwotICAgIGlmICghdmlld1ByaXZhdGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHZpZXdQcml2YXRlLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZhbCht
aW5pbXVtVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQotewotICAgIENPTVB0cjxJV2Vi
RnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKLSAgICBpZiAoIWZyYW1l
UHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWVQcml2YXRlLT5zZXRUZXh0RGly
ZWN0aW9uKGJzdHJUKGRpcmVjdGlvbikuR2V0QlNUUigpKTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQotewotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQotewotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQotewotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0
cmluZ1JlZiB0aXRsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBh
Z2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmlu
Z1JlZikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVm
LCBKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChk
b3VibGUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxMjUzMzUp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVsZWdhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiUG9saWN5RGVsZWdhdGUuaCIKIAog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8c3RyaW5nPgogCiB1c2lu
ZyBzdGQ6OndzdHJpbmc7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVs
ZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUG9saWN5RGVs
ZWdhdGUuaAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Bv
bGljeURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1
ZGUgPFdlYktpdC9XZWJLaXQuaD4KIAotY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXI7CitjbGFz
cyBUZXN0UnVubmVyOwogCiBjbGFzcyBQb2xpY3lEZWxlZ2F0ZSA6IHB1YmxpYyBJV2ViUG9saWN5
RGVsZWdhdGUgewogcHVibGljOgpAQCAtNzEsMTIgKzcxLDEyIEBAIHB1YmxpYzoKIAogICAgIC8v
IFBvbGljeURlbGVnYXRlCiAgICAgdm9pZCBzZXRQZXJtaXNzaXZlKGJvb2wgcGVybWlzc2l2ZSkg
eyBtX3Blcm1pc3NpdmVEZWxlZ2F0ZSA9IHBlcm1pc3NpdmU7IH0KLSAgICB2b2lkIHNldENvbnRy
b2xsZXJUb05vdGlmeURvbmUoTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIHsgbV9j
b250cm9sbGVyVG9Ob3RpZnlEb25lID0gY29udHJvbGxlcjsgfQorICAgIHZvaWQgc2V0Q29udHJv
bGxlclRvTm90aWZ5RG9uZShUZXN0UnVubmVyKiBjb250cm9sbGVyKSB7IG1fY29udHJvbGxlclRv
Tm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7IH0KIAogcHJpdmF0ZToKICAgICBVTE9ORyBtX3JlZkNv
dW50OwogICAgIGJvb2wgbV9wZXJtaXNzaXZlRGVsZWdhdGU7Ci0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIG1fY29udHJvbGxlclRvTm90aWZ5RG9uZTsKKyAgICBUZXN0UnVubmVyKiBtX2NvbnRy
b2xsZXJUb05vdGlmeURvbmU7CiB9OwogCiAjZW5kaWYgLy8gUG9saWN5RGVsZWdhdGVfaApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUu
Y3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
LmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVu
bmVyLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdENPTUFQSS5oPgogI2luY2x1ZGUgPGNvbXV0
aWwuaD4KICNpbmNsdWRlIDxzc3RyZWFtPgpAQCAtMjA5LDcgKzIwOSw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUKICAgICAvKiBbaW5dICovIElXZWJEYXRhU291
cmNlKiBkYXRhU291cmNlLAogICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQogeyAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBCU1RSIHVybFN0cjsKICAgICAgICAg
aWYgKEZBSUxFRChyZXF1ZXN0LT5VUkwoJnVybFN0cikpKQogICAgICAgICAgICAgcmV0dXJuIEVf
RkFJTDsKQEAgLTIzOCwyNiArMjM4LDI2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVz
b3VyY2VMb2FkRGUKICAgICAvKiBbaW5dICovIElXZWJEYXRhU291cmNlKiBkYXRhU291cmNlLAog
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYlVSTFJlcXVlc3QgKipuZXdSZXF1ZXN0KQogewot
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNl
TG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiJVMgLSB3aWxsU2VuZFJlcXVlc3Qg
JVMgcmVkaXJlY3RSZXNwb25zZSAlU1xuIiwgCiAgICAgICAgICAgICBkZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChpZGVudGlmaWVyKS5jX3N0cigpLAogICAgICAgICAgICAgZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCkuY19zdHIoKSwKICAgICAgICAgICAg
IGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlZGlyZWN0UmVzcG9uc2UpLmNfc3Ry
KCkpOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
ZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgIWdUZXN0UnVu
bmVyLT5kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkpIHsKICAgICAgICAgQ09NUHRyPElXZWJE
YXRhU291cmNlUHJpdmF0ZT4gZGF0YVNvdXJjZVByaXZhdGUoUXVlcnksIGRhdGFTb3VyY2UpOwog
ICAgICAgICBpZiAoIWRhdGFTb3VyY2VQcml2YXRlKQogICAgICAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKICAgICAgICAgZGF0YVNvdXJjZVByaXZhdGUtPnNldERlZmVyTWFpblJlc291cmNlRGF0YUxv
YWQoRkFMU0UpOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rl
c3RSdW5uZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpIHsKICAgICAgICAgKm5ld1Jl
cXVlc3QgPSAwOwogICAgICAgICByZXR1cm4gU19PSzsKICAgICB9CiAKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QoKSAmJiByZWRpcmVjdFJlc3BvbnNlKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFJl
c3BvbnNlKSB7CiAgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIG51bGwgZm9yIHRoaXMgcmVkaXJl
Y3RcbiIpOwogICAgICAgICAqbmV3UmVxdWVzdCA9IDA7CiAgICAgICAgIHJldHVybiBTX09LOwpA
QCAtMjY1LDcgKzI2NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2Fk
RGUKIAogICAgIElXZWJNdXRhYmxlVVJMUmVxdWVzdCogcmVxdWVzdENvcHkgPSAwOwogICAgIHJl
cXVlc3QtPm11dGFibGVDb3B5KCZyZXF1ZXN0Q29weSk7Ci0gICAgY29uc3Qgc2V0PHN0cmluZz4m
IGNsZWFySGVhZGVycyA9IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0Q2xl
YXJIZWFkZXJzKCk7CisgICAgY29uc3Qgc2V0PHN0cmluZz4mIGNsZWFySGVhZGVycyA9IGdUZXN0
UnVubmVyLT53aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKTsKICAgICBmb3IgKHNldDxzdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBoZWFkZXIgPSBjbGVhckhlYWRlcnMuYmVnaW4oKTsgaGVhZGVy
ICE9IGNsZWFySGVhZGVycy5lbmQoKTsgKytoZWFkZXIpIHsKICAgICAgIEJTVFIgYnN0ckhlYWRl
ciA9IEJTVFJGcm9tU3RyaW5nKCpoZWFkZXIpOwogICAgICAgcmVxdWVzdENvcHktPnNldFZhbHVl
KDAsIGJzdHJIZWFkZXIpOwpAQCAtMjg2LDE0ICsyODYsMTQgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIGlmICghY2hhbGxlbmdlIHx8IEZBSUxFRChjaGFs
bGVuZ2UtPnNlbmRlcigmc2VuZGVyKSkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBp
ZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cygpKSB7CisgICAgaWYgKCFnVGVzdFJ1bm5lci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlcygpKSB7CiAgICAgICAgIHByaW50ZigiJVMgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgLSBTaW11bGF0aW5nIGNhbmNlbGxlZCBhdXRoZW50aWNhdGlvbiBzaGVldFxuIiwg
ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoaWRlbnRpZmllcikuY19zdHIoKSk7CiAg
ICAgICAgIHNlbmRlci0+Y29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNoYWxsZW5nZSk7CiAgICAgICAgIHJldHVybiBTX09LOwogICAgIH0KICAgICAK
LSAgICBjb25zdCBjaGFyKiB1c2VyID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5hdXRoZW50aWNh
dGlvblVzZXJuYW1lKCkuY19zdHIoKTsKLSAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+YXV0aGVudGljYXRpb25QYXNzd29yZCgpLmNfc3RyKCk7CisgICAg
Y29uc3QgY2hhciogdXNlciA9IGdUZXN0UnVubmVyLT5hdXRoZW50aWNhdGlvblVzZXJuYW1lKCku
Y19zdHIoKTsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IGdUZXN0UnVubmVyLT5hdXRoZW50
aWNhdGlvblBhc3N3b3JkKCkuY19zdHIoKTsKIAogICAgIHByaW50ZigiJVMgLSBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSBSZXNwb25kaW5nIHdpdGggJXM6JXNcbiIsIGRlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGlkZW50aWZpZXIpLmNfc3RyKCksIHVzZXIsIHBh
c3N3b3JkKTsKIApAQCAtMzEyLDEyICszMTIsMTIgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBSZXNvdXJjZUxvYWREZQogICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlc3BvbnNlKiByZXNwb25z
ZSwgCiAgICAgLyogW2luXSAqLyBJV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsKLSAgICBp
ZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgewogICAgICAgICBwcmludGYoIiVTIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICVT
XG4iLAogICAgICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoaWRlbnRp
ZmllcikuY19zdHIoKSwKICAgICAgICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHJlc3BvbnNlKS5jX3N0cigpKTsKICAgICB9Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkgeworICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkg
ewogICAgICAgICBCU1RSIG1pbWVUeXBlQlNUUjsKICAgICAgICAgaWYgKEZBSUxFRChyZXNwb25z
ZS0+TUlNRVR5cGUoJm1pbWVUeXBlQlNUUikpKQogICAgICAgICAgICAgRV9GQUlMOwpAQCAtMzQ0
LDcgKzM0NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUKICAg
ICAvKiBbaW5dICovIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKICAgICAvKiBbaW5dICovIElX
ZWJEYXRhU291cmNlKiBkYXRhU291cmNlKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9u
ZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAg
IHByaW50ZigiJVMgLSBkaWRGaW5pc2hMb2FkaW5nXG4iLAogICAgICAgICAgICAgZGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoaWRlbnRpZmllcikuY19zdHIoKSk7CiAgICAgfQpAQCAt
MzYwLDcgKzM2MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUK
ICAgICAvKiBbaW5dICovIElXZWJFcnJvciogZXJyb3IsCiAgICAgLyogW2luXSAqLyBJV2ViRGF0
YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBwcmlu
dGYoIiVTIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICVTXG4iLCAKICAgICAgICAgICAgIGRl
c2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGlkZW50aWZpZXIpLmNfc3RyKCksCiAgICAg
ICAgICAgICBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChlcnJvciwgaWRlbnRpZmll
cikuY19zdHIoKSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lckJs
YWNrV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1
bm5lckJsYWNrV2luLmNwcAkocmV2aXNpb24gMTI1MzM1KQkoZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOjEyNTMzNSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyQmxhY2tXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQ3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkVkaXRpbmdEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIlBv
bGljeURlbGVnYXRlLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisjaW5jbHVkZSAiV29ya1F1
ZXVlSXRlbS5oIgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZkJTVFIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CisjaW5jbHVkZSA8V2Vi
S2l0L1dlYktpdC5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJLaXRDT01BUEkuaD4KKyNpbmNsdWRl
IDxjb211dGlsLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5oPgorI2luY2x1ZGUgPHNobGd1aWQuaD4K
KyNpbmNsdWRlIDxzaG9iamlkbC5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIHN0ZDo6c3RyaW5n
OwordXNpbmcgc3RkOjp3c3RyaW5nOworCitzdGF0aWMgYm9vbCByZXNvbHZlQ3lnd2luUGF0aChj
b25zdCB3c3RyaW5nJiBjeWd3aW5QYXRoLCB3c3RyaW5nJiB3aW5kb3dzUGF0aCk7CisKK0xheW91
dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQoreworICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIHJlc2V0IHdlYnZpZXctcmVsYXRlZCBzdGF0
ZXMgYmFjayB0byBkZWZhdWx0IHZhbHVlcyBpbiBwcmVwYXJhdGlvbiBmb3IgbmV4dCB0ZXN0CisK
KyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0ZTsKKyAgICBpZiAoU1VDQ0VF
REVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQorICAgICAgICB2aWV3
UHJpdmF0ZS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFRSVUUpOworCisgICAgQ09N
UHRyPElXZWJWaWV3RWRpdGluZz4gdmlld0VkaXRpbmc7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3
LT5RdWVyeUludGVyZmFjZSgmdmlld0VkaXRpbmcpKSkKKyAgICAgICAgcmV0dXJuOworICAgIENP
TVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBkZWxlZ2F0ZTsKKyAgICBpZiAoRkFJTEVEKHZpZXdF
ZGl0aW5nLT5lZGl0aW5nRGVsZWdhdGUoJmRlbGVnYXRlKSkpCisgICAgICAgIHJldHVybjsKKyAg
ICBDT01QdHI8RWRpdGluZ0RlbGVnYXRlPiBlZGl0aW5nRGVsZWdhdGUoUXVlcnksIHZpZXdFZGl0
aW5nLmdldCgpKTsKKyAgICBpZiAoZWRpdGluZ0RlbGVnYXRlKQorICAgICAgICBlZGl0aW5nRGVs
ZWdhdGUtPnNldEFjY2VwdHNFZGl0aW5nKFRSVUUpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tG
b3J3YXJkTGlzdCgpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q09NUHRyPElXZWJCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKKyAgICBpZiAoRkFJ
TEVEKHdlYlZpZXctPmJhY2tGb3J3YXJkTGlzdCgmYmFja0ZvcndhcmRMaXN0KSkpCisgICAgICAg
IHJldHVybjsKKworICAgIENPTVB0cjxJV2ViSGlzdG9yeUl0ZW0+IGl0ZW07CisgICAgaWYgKEZB
SUxFRChiYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCZpdGVtKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFdlIGNsZWFyIHRoZSBoaXN0b3J5IGJ5IHNldHRpbmcgdGhlIGJhY2svZm9y
d2FyZCBsaXN0J3MgY2FwYWNpdHkgdG8gMAorICAgIC8vIHRoZW4gcmVzdG9yaW5nIGl0IGJhY2sg
YW5kIGFkZGluZyBiYWNrIHRoZSBjdXJyZW50IGl0ZW0uCisgICAgaW50IGNhcGFjaXR5OworICAg
IGlmIChGQUlMRUQoYmFja0ZvcndhcmRMaXN0LT5jYXBhY2l0eSgmY2FwYWNpdHkpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYmFja0ZvcndhcmRMaXN0LT5zZXRDYXBhY2l0eSgwKTsKKyAgICBi
YWNrRm9yd2FyZExpc3QtPnNldENhcGFjaXR5KGNhcGFjaXR5KTsKKyAgICBiYWNrRm9yd2FyZExp
c3QtPmFkZEl0ZW0oaXRlbS5nZXQoKSk7CisgICAgYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShp
dGVtLmdldCgpKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENs
b3NlT25XZWJWaWV3KCkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYg
KEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0ZTsKKyAgICBpZiAoRkFJ
TEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBCT09MIHJlc3VsdDsKKyAgICB2aWV3UHJpdmF0ZS0+c2hvdWxkQ2xv
c2UoJnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IQorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1Jl
ZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBu
YW1lKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQoreworICAgIENP
TVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3
ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDT01QdHI8SVdlYlByZWZlcmVu
Y2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZw
cmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJlZmVyZW5jZXMtPnNl
dExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShGQUxTRSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAgZGlzcGxheVdlYlZpZXcoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQoreworICAgIENPTVB0
cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3Rh
bmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKGhpc3RvcnkpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJmhpc3RvcnkpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJ
V2ViSGlzdG9yeT4gc2hhcmVkSGlzdG9yeTsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUlu
c3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKHNoYXJlZEhpc3RvcnkpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJnNoYXJlZEhpc3RvcnkpKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGhpc3RvcnktPnNldE9wdGlvbmFsU2hhcmVkSGlzdG9yeShzaGFyZWRIaXN0b3J5Lmdl
dCgpKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK3sKKyAgICBDT01Q
dHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7CisgICAgaWYg
KCFmcmFtZVByaXZhdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJTVFIgdGV4dEJT
VFIgPSAwOworICAgIEhSRVNVTFQgaHIgPSBmcmFtZVByaXZhdGUtPmxheWVyVHJlZUFzVGV4dCgm
dGV4dEJTVFIpOworCisgICAgd3N0cmluZyB0ZXh0KHRleHRCU1RSLCBTeXNTdHJpbmdMZW4odGV4
dEJTVFIpKTsKKyAgICBTeXNGcmVlU3RyaW5nKHRleHRCU1RSKTsKKyAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gdGV4dFZhbHVlSlMoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnModGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkpKTsKKyAgICByZXR1cm4gdGV4dFZhbHVlSlM7
Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFy
a2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVP
YmplY3QpIGNvbnN0Cit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3UHJpdmF0ZShRdWVyeSwgd2ViVmlldyk7
CisgICAgaWYgKCF3ZWJWaWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDT01Q
dHI8SURPTUVsZW1lbnQ+IGVsZW1lbnQ7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3UHJpdmF0ZS0+
ZWxlbWVudEZyb21KUyhjb250ZXh0LCBub2RlT2JqZWN0LCAmZWxlbWVudCkpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIENPTVB0cjxJRE9NRWxlbWVudFByaXZhdGU+IGVsZW1lbnRQcml2YXRl
KFF1ZXJ5LCBlbGVtZW50KTsKKyAgICBpZiAoIWVsZW1lbnRQcml2YXRlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEJTVFIgdGV4dEJTVFIgPSAwOworICAgIGlmIChGQUlMRUQoZWxlbWVudFBy
aXZhdGUtPm1hcmtlclRleHRGb3JMaXN0SXRlbSgmdGV4dEJTVFIpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWFya2VyVGV4dChBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoQlNUUih0ZXh0QlNUUikpOworICAgIFN5c0ZyZWVTdHJpbmcodGV4dEJT
VFIpOworICAgIHJldHVybiBtYXJrZXJUZXh0OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2Vi
VmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7CisgICAgcG9saWN5RGVsZWdhdGUt
PnNldENvbnRyb2xsZXJUb05vdGlmeURvbmUodGhpcyk7CisgICAgd2ViVmlldy0+c2V0UG9saWN5
RGVsZWdhdGUocG9saWN5RGVsZWdhdGUpOworfQorCitzaXplX3QgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQoreworICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlz
dG9yeTsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3Rv
cnksIDAsIF9fdXVpZG9mKGhpc3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmhpc3Rv
cnkpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ09NUHRyPElXZWJIaXN0b3J5PiBzaGFy
ZWRIaXN0b3J5OworICAgIGlmIChGQUlMRUQoaGlzdG9yeS0+b3B0aW9uYWxTaGFyZWRIaXN0b3J5
KCZzaGFyZWRIaXN0b3J5KSkgfHwgIXNoYXJlZEhpc3RvcnkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgQ09NUHRyPElXZWJIaXN0b3J5UHJpdmF0ZT4gc2hhcmVkSGlzdG9yeVByaXZhdGU7Cisg
ICAgaWYgKEZBSUxFRChzaGFyZWRIaXN0b3J5LT5RdWVyeUludGVyZmFjZSgmc2hhcmVkSGlzdG9y
eVByaXZhdGUpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgY291bnQ7CisgICAgaWYg
KEZBSUxFRChzaGFyZWRIaXN0b3J5UHJpdmF0ZS0+YWxsSXRlbXMoJmNvdW50LCAwKSkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNvdW50OworfQorCit1bnNpZ25lZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAoreworICAgIENPTVB0cjxJ
V2ViV29ya2Vyc1ByaXZhdGU+IHdvcmtlcnM7CisgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJ
bnN0YW5jZShDTFNJRF9XZWJXb3JrZXJzUHJpdmF0ZSwgMCwgX191dWlkb2Yod29ya2VycyksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ya2VycykpKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgdW5zaWduZWQgY291bnQ7CisgICAgaWYgKEZBSUxFRCh3b3JrZXJzLT53b3JrZXJUaHJlYWRD
b3VudCgmY291bnQpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvdW50OworfQor
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSgpIGNvbnN0Cit7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFt
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpbiIpKTsKKyAgICByZXR1
cm4gcGxhdGZvcm1OYW1lOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlE
b25lKCkKK3sKKyAgICAvLyBTYW1lIGFzIG9uIG1hYy4gIFRoaXMgY2FuIGJlIHNoYXJlZC4KKyAg
ICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hh
cmVkKCktPmNvdW50KCkpCisgICAgICAgIGR1bXAoKTsKKyAgICBtX3dhaXRUb0R1bXAgPSBmYWxz
ZTsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVz
b3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICB3c3Ry
aW5nIGlucHV0KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cih1cmwpLCBKU1N0cmluZ0dldExlbmd0
aCh1cmwpKTsKKworICAgIHdzdHJpbmcgbG9jYWxQYXRoOworICAgIGlmICghcmVzb2x2ZUN5Z3dp
blBhdGgoaW5wdXQsIGxvY2FsUGF0aCkpIHsKKyAgICAgICAgcHJpbnRmKCJFUlJPUjogRmFpbGVk
IHRvIHJlc29sdmUgQ3lnd2luIHBhdGggJVNcbiIsIGlucHV0LmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhsb2NhbFBhdGguY19zdHIoKSwgbG9jYWxQYXRoLmxlbmd0aCgpKTsKK30KKworc3RhdGljIHdz
dHJpbmcganNTdHJpbmdSZWZUb1dTdHJpbmcoSlNTdHJpbmdSZWYganNTdHIpCit7CisgICAgc2l6
ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TGVuZ3RoKGpzU3RyKTsKKyAgICBWZWN0b3I8V0NIQVI+
IGJ1ZmZlcihsZW5ndGggKyAxKTsKKyAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgSlNTdHJpbmdH
ZXRDaGFyYWN0ZXJzUHRyKGpzU3RyKSwgbGVuZ3RoICogc2l6ZW9mKFdDSEFSKSk7CisgICAgYnVm
ZmVyW2xlbmd0aF0gPSAnXDAnOworCisgICAgcmV0dXJuIGJ1ZmZlci5kYXRhKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3Ry
aW5nUmVmIHRhcmdldCkKK3sKKyAgICBDT01QdHI8SVdlYkRhdGFTb3VyY2U+IGRhdGFTb3VyY2U7
CisgICAgaWYgKEZBSUxFRChmcmFtZS0+ZGF0YVNvdXJjZSgmZGF0YVNvdXJjZSkpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlVSTFJlc3BvbnNlPiByZXNwb25zZTsKKyAgICBp
ZiAoRkFJTEVEKGRhdGFTb3VyY2UtPnJlc3BvbnNlKCZyZXNwb25zZSkpIHx8ICFyZXNwb25zZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQlNUUiByZXNwb25zZVVSTEJTVFI7CisgICAgaWYgKEZB
SUxFRChyZXNwb25zZS0+VVJMKCZyZXNwb25zZVVSTEJTVFIpKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHdzdHJpbmcgcmVzcG9uc2VVUkwocmVzcG9uc2VVUkxCU1RSLCBTeXNTdHJpbmdMZW4ocmVz
cG9uc2VVUkxCU1RSKSk7CisgICAgU3lzRnJlZVN0cmluZyhyZXNwb25zZVVSTEJTVFIpOworCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyByZWFsIHJlbGF0aXZlIFVSTCByZXNvbHV0aW9uIGhl
cmUuCisgICAgaW50IGxhc3RTbGFzaCA9IHJlc3BvbnNlVVJMLnJmaW5kKCcvJyk7CisgICAgaWYg
KGxhc3RTbGFzaCAhPSAtMSkKKyAgICAgICAgcmVzcG9uc2VVUkwgPSByZXNwb25zZVVSTC5zdWJz
dHIoMCwgbGFzdFNsYXNoKTsKKworICAgIHdzdHJpbmcgd1VSTCA9IGpzU3RyaW5nUmVmVG9XU3Ry
aW5nKHVybCk7CisgICAgd3N0cmluZyB3QWJzb2x1dGVVUkwgPSByZXNwb25zZVVSTCArIFRFWFQo
Ii8iKSArIHdVUkw7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzQWJzb2x1dGVVUkwo
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMod0Fic29sdXRlVVJMLmRhdGEoKSwg
d0Fic29sdXRlVVJMLmxlbmd0aCgpKSk7CisKKyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1
ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRp
bmcpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJh
bWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElX
ZWJWaWV3RWRpdGluZz4gdmlld0VkaXRpbmc7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVy
eUludGVyZmFjZSgmdmlld0VkaXRpbmcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRy
PElXZWJFZGl0aW5nRGVsZWdhdGU+IGRlbGVnYXRlOworICAgIGlmIChGQUlMRUQodmlld0VkaXRp
bmctPmVkaXRpbmdEZWxlZ2F0ZSgmZGVsZWdhdGUpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RWRpdGluZ0RlbGVnYXRlKiBlZGl0aW5nRGVsZWdhdGUgPSAoRWRpdGluZ0RlbGVnYXRlKikoSVdl
YkVkaXRpbmdEZWxlZ2F0ZSopZGVsZWdhdGUuZ2V0KCk7CisgICAgZWRpdGluZ0RlbGVnYXRlLT5z
ZXRBY2NlcHRzRWRpdGluZyhhY2NlcHRzRWRpdGluZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVz
KQoreworICAgIGlmIChhbHdheXNBY2NlcHRDb29raWVzID09IG1fYWx3YXlzQWNjZXB0Q29va2ll
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCE6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMo
YWx3YXlzQWNjZXB0Q29va2llcykpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Fsd2F5c0FjY2Vw
dENvb2tpZXMgPSBhbHdheXNBY2NlcHRDb29raWVzOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCit7CisgICAg
Q09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXco
JndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNl
cz4gcHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJl
ZmVyZW5jZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNl
c1ByaXZhdGU+IHByZWZzUHJpdmF0ZShRdWVyeSwgcHJlZmVyZW5jZXMpOworICAgIGlmICghcHJl
ZnNQcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmVmc1ByaXZhdGUtPnNldEF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKGZsYWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVP
YmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7
CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1
cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3UHJpdmF0ZShRdWVyeSwg
d2ViVmlldyk7CisgICAgaWYgKCF3ZWJWaWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ09NUHRyPElET01FbGVtZW50PiBlbGVtZW50OworICAgIGlmIChGQUlMRUQod2ViVmlld1By
aXZhdGUtPmVsZW1lbnRGcm9tSlMoY29udGV4dCwgbm9kZU9iamVjdCwgJmVsZW1lbnQpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElGb3Jtc0F1dG9GaWxsVHJhbnNpdGlvbj4gYXV0
b2ZpbGxFbGVtZW50KFF1ZXJ5LCBlbGVtZW50KTsKKyAgICBpZiAoIWF1dG9maWxsRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0b2ZpbGxFbGVtZW50LT5zZXRBdXRvZmlsbGVkKGF1
dG9maWxsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCit7CisgICAgQ09N
UHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndl
YlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNldERlbGVnYXRlKSB7CisgICAg
ICAgIHBvbGljeURlbGVnYXRlLT5zZXRQZXJtaXNzaXZlKHBlcm1pc3NpdmUpOworICAgICAgICB3
ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZShwb2xpY3lEZWxlZ2F0ZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIHdlYlZpZXctPnNldFBvbGljeURlbGVnYXRlKDApOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxw
aGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wg
Y2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzMzUuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJp
bmdSZWYgbWVzc2FnZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlv
biBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODI2NC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNvbW1vbihhbGxvdyk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVy
T2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICByZXR1cm4gLTE7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3Vs
dChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5n
dWFnZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0
IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJ
bnB1dER1bXBSZWN0KGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBz
cGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBp
Y29uRGF0YWJhc2VFbmFibGVkKQoreworICAgIC8vIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS82
NDgwMTA4PgorICAgIENPTVB0cjxJV2ViSWNvbkRhdGFiYXNlPiBpY29uRGF0YWJhc2U7CisgICAg
Q09NUHRyPElXZWJJY29uRGF0YWJhc2U+IHRtcEljb25EYXRhYmFzZTsKKyAgICBpZiAoRkFJTEVE
KFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkljb25EYXRhYmFzZSwgMCwgSUlEX0lXZWJJ
Y29uRGF0YWJhc2UsICh2b2lkKiopJnRtcEljb25EYXRhYmFzZSkpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKEZBSUxFRCh0bXBJY29uRGF0YWJhc2UtPnNoYXJlZEljb25EYXRhYmFzZSgmaWNv
bkRhdGFiYXNlKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGljb25EYXRhYmFzZS0+c2V0RW5h
YmxlZChpY29uRGF0YWJhc2VFbmFibGVkKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCEKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit7CisgICAgQ09N
UHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndl
YlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4g
cHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVy
ZW5jZXMpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJlZmVyZW5jZXMtPnNldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmll
dygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVu
Y2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZw
cmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVu
Y2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVmZXJlbmNlcyk7CisgICAgaWYgKCFw
cmVmc1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIHByZWZzUHJpdmF0ZS0+c2V0WFNT
QXVkaXRvckVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZl
cmVuY2VzOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2Vz
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRl
PiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKKyAgICBpZiAoIXByZWZzUHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJlZnNQcml2YXRlLT5zZXRGcmFtZUZsYXR0ZW5p
bmdFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIFNwYXRpYWxOYXZpZ2F0aW9uIGxheW91dCB0ZXN0cy4KK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMo
Ym9vbCBlbmFibGVkKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAo
RkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAg
IENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOworICAgIGlmIChGQUlMRUQod2Vi
Vmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCisgICAgICAgIHJldHVybjsKKworICAg
IENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlPiBwcmVmc1ByaXZhdGUoUXVlcnksIHByZWZl
cmVuY2VzKTsKKyAgICBpZiAoIXByZWZzUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cHJlZnNQcml2YXRlLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhlbmFibGVk
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJv
bUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7
CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1
cm47CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAo
RkFJTEVEKHdlYlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQorICAgICAgICByZXR1
cm47CisKKyAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1
ZXJ5LCBwcmVmZXJlbmNlcyk7CisgICAgaWYgKCFwcmVmc1ByaXZhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIHByZWZzUHJpdmF0ZS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGVu
YWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3Owor
ICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7CisgICAgaWYgKEZB
SUxFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRp
Y2FsbHkoIWVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVn
aW5zRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYg
KEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVEKHdl
YlZpZXctPnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVm
ZXJlbmNlcyk7CisgICAgaWYgKCFwcmVmc1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IHByZWZzUHJpdmF0ZS0+c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChlbmFibGVkKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGJvb2wgc2hvdWxkQ3ljbGUpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3
OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7CisgICAgaWYg
KEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgdmlld1ByaXZhdGUtPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyhzaG91bGRDeWNsZSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIENPTVB0cjxJV2ViVmll
dz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2Vz
OworICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgcHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0RW5hYmxl
ZChmbGFnKTsKK30KKworYm9vbCBhcHBlbmRDb21wb25lbnRUb1BhdGgod3N0cmluZyYgcGF0aCwg
Y29uc3Qgd3N0cmluZyYgY29tcG9uZW50KQoreworICAgIFdDSEFSIGJ1ZmZlcltNQVhfUEFUSF07
CisKKyAgICBpZiAocGF0aC5zaXplKCkgKyAxID4gTUFYX1BBVEgpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1lbWNweShidWZmZXIsIHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSAqIHNp
emVvZihXQ0hBUikpOworICAgIGJ1ZmZlcltwYXRoLnNpemUoKV0gPSAnXDAnOworCisgICAgaWYg
KCFQYXRoQXBwZW5kVyhidWZmZXIsIGNvbXBvbmVudC5jX3N0cigpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcGF0aCA9IHdzdHJpbmcoYnVmZmVyKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGJvb2wgZm9sbG93U2hvcnRjdXRzKHdzdHJpbmcmIHBhdGgpCit7CisgICAg
aWYgKFBhdGhGaWxlRXhpc3RzKHBhdGguY19zdHIoKSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgLy8gRG8gd2UgaGF2ZSBhIHNob3J0Y3V0PworICAgIHdzdHJpbmcgbGlua1BhdGggPSBw
YXRoOworICAgIGxpbmtQYXRoLmFwcGVuZChURVhUKCIubG5rIikpOworICAgIGlmICghUGF0aEZp
bGVFeGlzdHMobGlua1BhdGguY19zdHIoKSkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBXZSBoYXZlIGEgc2hvcnRjdXQsIGZpbmQgaXRzIHRhcmdldC4KKyAgICBDT01QdHI8SVNoZWxs
TGluaz4gc2hvcnRjdXQoQ3JlYXRlLCBDTFNJRF9TaGVsbExpbmspOworICAgIGlmICghc2hvcnRj
dXQpCisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENPTVB0cjxJUGVyc2lzdEZpbGU+IHBlcnNp
c3RGaWxlKFF1ZXJ5LCBzaG9ydGN1dCk7CisgICAgaWYgKCFzaG9ydGN1dCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChGQUlMRUQocGVyc2lzdEZpbGUtPkxvYWQobGlua1BhdGguY19z
dHIoKSwgU1RHTV9SRUFEKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoRkFJTEVE
KHNob3J0Y3V0LT5SZXNvbHZlKDAsIDApKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdD
SEFSIHRhcmdldFBhdGhbTUFYX1BBVEhdOworICAgIERXT1JEIHRhcmdldFBhdGhMZW4gPSBfY291
bnRvZih0YXJnZXRQYXRoKTsKKyAgICBpZiAoRkFJTEVEKHNob3J0Y3V0LT5HZXRQYXRoKHRhcmdl
dFBhdGgsIHRhcmdldFBhdGhMZW4sIDAsIDApKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghUGF0aEZpbGVFeGlzdHModGFyZ2V0UGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAvLyBVc2UgdGhlIHRhcmdldCBwYXRoIGFzIHRoZSByZXN1bHQgcGF0aCBpbnN0ZWFkLgor
ICAgIHBhdGggPSB3c3RyaW5nKHRhcmdldFBhdGgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIHJlc29sdmVDeWd3aW5QYXRoKGNvbnN0IHdzdHJpbmcmIGN5Z3dpblBhdGgs
IHdzdHJpbmcmIHdpbmRvd3NQYXRoKQoreworICAgIHdzdHJpbmcgZmlsZVByb3RvY29sID0gTCJm
aWxlOi8vIjsKKyAgICBib29sIGlzRmlsZVByb3RvY29sID0gY3lnd2luUGF0aC5maW5kKGZpbGVQ
cm90b2NvbCkgIT0gc3RyaW5nOjpucG9zOworICAgIGlmIChjeWd3aW5QYXRoW2lzRmlsZVByb3Rv
Y29sID8gNyA6IDBdICE9ICcvJykgIC8vIGVuc3VyZSBwYXRoIGlzIGFic29sdXRlCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEdldCB0aGUgUm9vdCBwYXRoLgorICAgIFdDSEFSIHJv
b3RQYXRoW01BWF9QQVRIXTsKKyAgICBEV09SRCByb290UGF0aFNpemUgPSBfY291bnRvZihyb290
UGF0aCk7CisgICAgRFdPUkQga2V5VHlwZTsKKyAgICBEV09SRCByZXN1bHQgPSA6OlNIR2V0VmFs
dWVXKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU09GVFdBUkVcXEN5Z251cyBTb2x1dGlvbnNc
XEN5Z3dpblxcbW91bnRzIHYyXFwvIiksIFRFWFQoIm5hdGl2ZSIpLCAma2V5VHlwZSwgJnJvb3RQ
YXRoLCAmcm9vdFBhdGhTaXplKTsKKworICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUyB8
fCBrZXlUeXBlICE9IFJFR19TWikgeworICAgICAgICAvLyBDeWd3aW4gMS43IGRvZXNuJ3Qgc3Rv
cmUgQ3lnd2luJ3Mgcm9vdCBhcyBhIG1vdW50IHBvaW50IGFueW1vcmUsIGJlY2F1c2UgbW91bnQg
cG9pbnRzIGFyZSBub3cgc3RvcmVkIGluIC9ldGMvZnN0YWIuCisgICAgICAgIC8vIEhvd2V2ZXIs
IC9ldGMvZnN0YWIgZG9lc24ndCBjb250YWluIGFueSBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSAv
IGlzIGxvY2F0ZWQgYXMgYSBXaW5kb3dzIHBhdGgsIHNvIHdlIG5lZWQgdG8gdXNlIEN5Z3dpbidz
CisgICAgICAgIC8vIG5ldyByZWdpc3RyeSBrZXkgdGhhdCBoYXMgdGhlIHJvb3QuCisgICAgICAg
IHJlc3VsdCA9IDo6U0hHZXRWYWx1ZVcoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTT0ZUV0FS
RVxcQ3lnd2luXFxzZXR1cCIpLCBURVhUKCJyb290ZGlyIiksICZrZXlUeXBlLCAmcm9vdFBhdGgs
ICZyb290UGF0aFNpemUpOworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwg
a2V5VHlwZSAhPSBSRUdfU1opCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgd2luZG93c1BhdGggPSB3c3RyaW5nKHJvb3RQYXRoLCByb290UGF0aFNpemUpOworCisgICAg
aW50IG9sZFBvcyA9IGlzRmlsZVByb3RvY29sID8gOCA6IDE7CisgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgaW50IG5ld1BvcyA9IGN5Z3dpblBhdGguZmluZCgnLycsIG9sZFBvcyk7CisKKyAgICAg
ICAgaWYgKG5ld1BvcyA9PSAtMSkgeworICAgICAgICAgICAgd3N0cmluZyBwYXRoQ29tcG9uZW50
ID0gY3lnd2luUGF0aC5zdWJzdHIob2xkUG9zKTsKKworICAgICAgICAgICAgaWYgKCFhcHBlbmRD
b21wb25lbnRUb1BhdGgod2luZG93c1BhdGgsIHBhdGhDb21wb25lbnQpKQorICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIWZvbGxvd1Nob3J0Y3V0cyh3aW5k
b3dzUGF0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHdzdHJpbmcgcGF0aENvbXBvbmVudCA9IGN5Z3dp
blBhdGguc3Vic3RyKG9sZFBvcywgbmV3UG9zIC0gb2xkUG9zKTsKKyAgICAgICAgaWYgKCFhcHBl
bmRDb21wb25lbnRUb1BhdGgod2luZG93c1BhdGgsIHBhdGhDb21wb25lbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghZm9sbG93U2hvcnRjdXRzKHdpbmRvd3NQ
YXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBvbGRQb3MgPSBuZXdQ
b3MgKyAxOworICAgIH0KKworICAgIGlmIChpc0ZpbGVQcm90b2NvbCkKKyAgICAgICAgd2luZG93
c1BhdGggPSBmaWxlUHJvdG9jb2wgKyB3aW5kb3dzUGF0aDsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KEpTU3RyaW5nUmVmIGpzVVJMKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAg
ICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsK
KworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzOworICAgIGlmIChGQUlM
RUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsU3RyaW5nKEFkb3B0Q0YsIEpTU3RyaW5n
Q29weUNGU3RyaW5nKDAsIGpzVVJMKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwoQWRv
cHRDRiwgQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKDAsIHVybFN0cmluZy5nZXQoKSwgMCkpOworICAg
IGlmICghdXJsKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOb3cgY29weSB0aGUgZmlsZSBz
eXN0ZW0gcGF0aCwgUE9TSVggc3R5bGUuCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRo
Q0YoQWRvcHRDRiwgQ0ZVUkxDb3B5RmlsZVN5c3RlbVBhdGgodXJsLmdldCgpLCBrQ0ZVUkxQT1NJ
WFBhdGhTdHlsZSkpOworICAgIGlmICghcGF0aENGKQorICAgICAgICByZXR1cm47CisKKyAgICB3
c3RyaW5nIHBhdGggPSBjZlN0cmluZ1JlZlRvV1N0cmluZyhwYXRoQ0YuZ2V0KCkpOworCisgICAg
d3N0cmluZyByZXN1bHRQYXRoOworICAgIGlmICghcmVzb2x2ZUN5Z3dpblBhdGgocGF0aCwgcmVz
dWx0UGF0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBwYXRoIGhhcyBiZWVuIHJl
c29sdmVkLCBub3cgY29udmVydCBpdCBiYWNrIHRvIGEgQ0ZVUkwuCisgICAgaW50IHJlc3VsdCA9
IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgcmVzdWx0UGF0aC5jX3N0cigpLCByZXN1
bHRQYXRoLnNpemUoKSArIDEsIDAsIDAsIDAsIDApOworICAgIFZlY3RvcjxjaGFyPiB1dGY4VmVj
dG9yKHJlc3VsdCk7CisgICAgcmVzdWx0ID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAw
LCByZXN1bHRQYXRoLmNfc3RyKCksIHJlc3VsdFBhdGguc2l6ZSgpICsgMSwgdXRmOFZlY3Rvci5k
YXRhKCksIHJlc3VsdCwgMCwgMCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsK
KworICAgIHVybCA9IENGVVJMQ3JlYXRlRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigwLCAo
Y29uc3QgVUludDgqKXV0ZjhWZWN0b3IuZGF0YSgpLCB1dGY4VmVjdG9yLnNpemUoKSAtIDEsIGZh
bHNlKTsKKyAgICBpZiAoIXVybCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0UGF0aCA9
IGNmU3RyaW5nUmVmVG9XU3RyaW5nKENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSkpOworCisgICAg
QlNUUiByZXN1bHRQYXRoQlNUUiA9IFN5c0FsbG9jU3RyaW5nTGVuKHJlc3VsdFBhdGguZGF0YSgp
LCByZXN1bHRQYXRoLnNpemUoKSk7CisgICAgcHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24ocmVzdWx0UGF0aEJTVFIpOworICAgIFN5c0ZyZWVTdHJpbmcocmVzdWx0UGF0aEJT
VFIpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUp
Cit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUt
PndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJW
aWV3UHJpdmF0ZT4gd2ViVmlld1ByaXZhdGUoUXVlcnksIHdlYlZpZXcpOworICAgIGlmICghd2Vi
Vmlld1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJRE9NRWxlbWVudD4g
ZG9tRWxlbWVudDsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXdQcml2YXRlLT5lbGVtZW50RnJvbUpT
KGNvbnRleHQsIGVsZW1lbnQsICZkb21FbGVtZW50KSkpCisgICAgICAgIHJldHVybjsKKworICAg
IENPTVB0cjxJRE9NSFRNTElucHV0RWxlbWVudD4gZG9tSW5wdXRFbGVtZW50OworICAgIGlmIChG
QUlMRUQoZG9tRWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lET01IVE1MSW5wdXRFbGVtZW50
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmRvbUlucHV0RWxlbWVudCkpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX2JzdHJfdCB2YWx1ZUJTVFIoSlNTdHJpbmdDb3B5QlNUUih2YWx1ZSks
IGZhbHNlKTsKKworICAgIGRvbUlucHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKHZhbHVlQlNU
Uik7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0
dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVy
bFN0cmluZyhBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBqc1VSTCkpOworICAgIDo6
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24odXJsU3RyaW5nLmdldCgpKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hl
ZXQoKQoreworICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oMCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgZmxhZykK
K3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+
d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZp
ZXdQcml2YXRlPiB2aWV3UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50
ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBIV05EIHdlYlZp
ZXdXaW5kb3c7CisgICAgaWYgKEZBSUxFRCh2aWV3UHJpdmF0ZS0+dmlld1dpbmRvdygoT0xFX0hB
TkRMRSopJndlYlZpZXdXaW5kb3cpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpTZW5kTWVz
c2FnZSh3ZWJWaWV3V2luZG93LCBmbGFnID8gV01fU0VURk9DVVMgOiBXTV9LSUxMRk9DVVMsIChX
UEFSQU0pOjpHZXREZXNrdG9wV2luZG93KCksIDApOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIENP
TVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3
ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViVmlld0VkaXRpbmc+
IHZpZXdFZGl0aW5nOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJnZp
ZXdFZGl0aW5nKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHZpZXdFZGl0aW5nLT5zZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoZmxhZyA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9v
bCBmbGFnKQoreworICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVE
KGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0
cjxJV2ViVmlld0VkaXRpbmc+IHZpZXdFZGl0aW5nOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+
UXVlcnlJbnRlcmZhY2UoJnZpZXdFZGl0aW5nKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHZp
ZXdFZGl0aW5nLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZsYWcgPyBUUlVF
IDogRkFMU0UpOworfQorCitzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgd2FpdFRvRHVtcFdh
dGNoZG9nSW50ZXJ2YWwgPSAzMC4wOworCitzdGF0aWMgdm9pZCBDQUxMQkFDSyB3YWl0VW50aWxE
b25lV2F0Y2hkb2dGaXJlZChIV05ELCBVSU5ULCBVSU5UX1BUUiwgRFdPUkQpCit7CisgICAgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VW50aWxE
b25lKQoreworICAgIG1fd2FpdFRvRHVtcCA9IHdhaXRVbnRpbERvbmU7CisgICAgaWYgKG1fd2Fp
dFRvRHVtcCAmJiAhd2FpdFRvRHVtcFdhdGNoZG9nKQorICAgICAgICB3YWl0VG9EdW1wV2F0Y2hk
b2cgPSBTZXRUaW1lcigwLCAwLCB3YWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCAqIDEwMDAsIHdh
aXRVbnRpbERvbmVXYXRjaGRvZ0ZpcmVkKTsKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVy
Ojp3aW5kb3dDb3VudCgpCit7CisgICAgcmV0dXJuIG9wZW5XaW5kb3dzKCkuc2l6ZSgpOworfQor
Citib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVs
ZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpCit7CisgICAgQ09NUHRyPElET01Eb2N1bWVudD4g
ZG9jdW1lbnQ7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+RE9NRG9jdW1lbnQoJmRvY3VtZW50KSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHdzdHJpbmcgaWRXc3RyaW5nID0ganNTdHJp
bmdSZWZUb1dTdHJpbmcoaWQpOworICAgIEJTVFIgaWRCU1RSID0gU3lzQWxsb2NTdHJpbmdMZW4o
KE9MRUNIQVIqKWlkV3N0cmluZy5jX3N0cigpLCBpZFdzdHJpbmcubGVuZ3RoKCkpOworICAgIENP
TVB0cjxJRE9NRWxlbWVudD4gZWxlbWVudDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRvY3VtZW50
LT5nZXRFbGVtZW50QnlJZChpZEJTVFIsICZlbGVtZW50KTsKKyAgICBTeXNGcmVlU3RyaW5nKGlk
QlNUUik7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1l
KTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Qk9PTCBhdXRvQ29tcGxldGVzOworICAgIGlmIChGQUlMRUQoZnJhbWVQcml2YXRlLT5lbGVtZW50
RG9lc0F1dG9Db21wbGV0ZShlbGVtZW50LmdldCgpLCAmYXV0b0NvbXBsZXRlcykpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYXV0b0NvbXBsZXRlczsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJp
bmdSZWYgdmFsdWUpCit7CisgICAgd3N0cmluZyB3TmFtZSA9IGpzU3RyaW5nUmVmVG9XU3RyaW5n
KG5hbWUpOworICAgIHdzdHJpbmcgd1ZhbHVlID0ganNTdHJpbmdSZWZUb1dTdHJpbmcodmFsdWUp
OworCisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUt
PndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJW
aWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUlu
dGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlNUUiBuYW1l
QlNUUiA9IFN5c0FsbG9jU3RyaW5nTGVuKChPTEVDSEFSKil3TmFtZS5jX3N0cigpLCB3TmFtZS5s
ZW5ndGgoKSk7CisgICAgQlNUUiB2YWx1ZUJTVFIgPSBTeXNBbGxvY1N0cmluZ0xlbigoT0xFQ0hB
Uiopd1ZhbHVlLmNfc3RyKCksIHdWYWx1ZS5sZW5ndGgoKSk7CisgICAgdmlld1ByaXZhdGUtPmV4
ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShuYW1lQlNUUiwgdmFsdWVCU1RSKTsKKworICAgIFN5c0Zy
ZWVTdHJpbmcobmFtZUJTVFIpOworICAgIFN5c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKK30KKwor
Ym9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgLyogY29u
dGV4dCAqLywgSlNTdHJpbmdSZWYgLyogdGFyZ2V0ICovLCBKU09iamVjdFJlZiAvKiBvcHRpb25z
QXJyYXkgKi8pCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpp
c0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQoreworICAgIHByaW50ZigiRVJS
T1I6IExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKCkgbm90IGltcGxlbWVu
dGVkXG4iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1Jl
ZiBvcmlnaW4pCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5n
IGFsbCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgYW4gb3JpZ2luLgorfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nIHF1b3RhKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBs
aWNhdGlvbiBjYWNoZSBxdW90YXMuCit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNh
dGlvbiBjYWNoZXMuCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
fQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNr
VXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRvIGdldCBkaXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9y
aWdpbi4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xl
YXJBbGxEYXRhYmFzZXMoKQoreworICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiBkYXRh
YmFzZU1hbmFnZXI7CisgICAgQ09NUHRyPElXZWJEYXRhYmFzZU1hbmFnZXI+IHRtcERhdGFiYXNl
TWFuYWdlcjsKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkRh
dGFiYXNlTWFuYWdlciwgMCwgSUlEX0lXZWJEYXRhYmFzZU1hbmFnZXIsICh2b2lkKiopJnRtcERh
dGFiYXNlTWFuYWdlcikpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKEZBSUxFRCh0bXBEYXRh
YmFzZU1hbmFnZXItPnNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcigmZGF0YWJhc2VNYW5hZ2VyKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFiYXNlTWFuYWdlci0+ZGVsZXRlQWxsRGF0YWJh
c2VzKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5j
ZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIENPTVB0cjxJV2Vi
Vmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkp
CisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IHByZWZlcmVu
Y2VzOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+cHJlZmVyZW5jZXMoJnByZWZlcmVuY2VzKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlPiBw
cmVmc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2VzKTsKKyAgICBpZiAoIXByZWZzUHJpdmF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQlNUUiBrZXlCU1RSID0gSlNTdHJpbmdDb3B5QlNUUihr
ZXkpOworICAgIEJTVFIgdmFsdWVCU1RSID0gSlNTdHJpbmdDb3B5QlNUUih2YWx1ZSk7CisgICAg
cHJlZnNQcml2YXRlLT5zZXRQcmVmZXJlbmNlRm9yVGVzdChrZXlCU1RSLCB2YWx1ZUJTVFIpOwor
ICAgIFN5c0ZyZWVTdHJpbmcoa2V5QlNUUik7CisgICAgU3lzRnJlZVN0cmluZyh2YWx1ZUJTVFIp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICBDT01QdHI8SVdlYkRhdGFiYXNlTWFuYWdlcj4g
ZGF0YWJhc2VNYW5hZ2VyOworICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiB0bXBEYXRh
YmFzZU1hbmFnZXI7CisKKyAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lE
X1dlYkRhdGFiYXNlTWFuYWdlciwgMCwgSUlEX0lXZWJEYXRhYmFzZU1hbmFnZXIsICh2b2lkKiop
JnRtcERhdGFiYXNlTWFuYWdlcikpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKEZBSUxFRCh0
bXBEYXRhYmFzZU1hbmFnZXItPnNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcigmZGF0YWJhc2VNYW5h
Z2VyKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFiYXNlTWFuYWdlci0+c2V0UXVvdGEo
VEVYVCgiZmlsZTovLy8iKSwgcXVvdGEpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojpnb0JhY2soKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9u
YXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMu
aHRtbAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9u
Rm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUp
Cit7CisgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVE
KFdlYktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJW
aWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQorICAgICAgICByZXR1
cm47CisKKyAgICBCU1RSIHNjaGVtZUJTVFIgPSBKU1N0cmluZ0NvcHlCU1RSKHNjaGVtZSk7Cisg
ICAgd2ViVmlldy0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3Ji
aWRkZW4sIHNjaGVtZUJTVFIpOworICAgIFN5c0ZyZWVTdHJpbmcoc2NoZW1lQlNUUik7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWdu
ZWQgbG9uZyBsb25nIHNpemUpCit7CisgICAgcHJpbnRmKCJFUlJPUjogTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUoKSBub3QgaW1wbGVtZW50ZWRcbiIpOworfQor
Citib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdS
ZWYgZWxlbWVudElkKQoreworICAgIENPTVB0cjxJRE9NRG9jdW1lbnQ+IGRvY3VtZW50OworICAg
IGlmIChGQUlMRUQoZnJhbWUtPkRPTURvY3VtZW50KCZkb2N1bWVudCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBCU1RSIGlkQlNUUiA9IEpTU3RyaW5nQ29weUJTVFIoZWxlbWVudElk
KTsKKyAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGVsZW1lbnQ7CisgICAgSFJFU1VMVCBociA9IGRv
Y3VtZW50LT5nZXRFbGVtZW50QnlJZChpZEJTVFIsICZlbGVtZW50KTsKKyAgICBTeXNGcmVlU3Ry
aW5nKGlkQlNUUik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1l
KTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
QlNUUiBuYW1lQlNUUiA9IEpTU3RyaW5nQ29weUJTVFIoYW5pbWF0aW9uTmFtZSk7CisgICAgQk9P
TCB3YXNSdW5uaW5nID0gRkFMU0U7CisgICAgaHIgPSBmcmFtZVByaXZhdGUtPnBhdXNlQW5pbWF0
aW9uKG5hbWVCU1RSLCBlbGVtZW50LmdldCgpLCB0aW1lLCAmd2FzUnVubmluZyk7CisgICAgU3lz
RnJlZVN0cmluZyhuYW1lQlNUUik7CisKKyAgICByZXR1cm4gU1VDQ0VFREVEKGhyKSAmJiB3YXNS
dW5uaW5nOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGlt
ZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreworICAgIENPTVB0cjxJRE9NRG9jdW1lbnQ+IGRv
Y3VtZW50OworICAgIGlmIChGQUlMRUQoZnJhbWUtPkRPTURvY3VtZW50KCZkb2N1bWVudCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBCU1RSIGlkQlNUUiA9IEpTU3RyaW5nQ29weUJT
VFIoZWxlbWVudElkKTsKKyAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGVsZW1lbnQ7CisgICAgSFJF
U1VMVCBociA9IGRvY3VtZW50LT5nZXRFbGVtZW50QnlJZChpZEJTVFIsICZlbGVtZW50KTsKKyAg
ICBTeXNGcmVlU3RyaW5nKGlkQlNUUik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUo
UXVlcnksIGZyYW1lKTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQlNUUiBuYW1lQlNUUiA9IEpTU3RyaW5nQ29weUJTVFIocHJvcGVydHlOYW1l
KTsKKyAgICBCT09MIHdhc1J1bm5pbmcgPSBGQUxTRTsKKyAgICBociA9IGZyYW1lUHJpdmF0ZS0+
cGF1c2VUcmFuc2l0aW9uKG5hbWVCU1RSLCBlbGVtZW50LmdldCgpLCB0aW1lLCAmd2FzUnVubmlu
Zyk7CisgICAgU3lzRnJlZVN0cmluZyhuYW1lQlNUUik7CisKKyAgICByZXR1cm4gU1VDQ0VFREVE
KGhyKSAmJiB3YXNSdW5uaW5nOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBDT01QdHI8SVdlYkZyYW1l
UHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7CisgICAgaWYgKCFmcmFtZVByaXZh
dGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgVUlOVCBudW1iZXIgPSAwOworICAgIGlmIChG
QUlMRUQoZnJhbWVQcml2YXRlLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoJm51bWJlcikpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBudW1iZXI7Cit9CisKK3N0YXRpYyBfYnN0
cl90IGJzdHJUKEpTU3RyaW5nUmVmIGpzU3RyaW5nKQoreworICAgIC8vIFRoZSBmYWxzZSBwYXJh
bWV0ZXIgdGVsbHMgdGhlIF9ic3RyX3QgY29uc3RydWN0b3IgdG8gYWRvcHQgdGhlIEJTVFIgd2Ug
cGFzcyBpdC4KKyAgICByZXR1cm4gX2JzdHJfdChKU1N0cmluZ0NvcHlCU1RSKGpzU3RyaW5nKSwg
ZmFsc2UpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3Rp
bmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJW
aWV3OworICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmll
dyksIDAsIF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZp
ZXcpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYlZpZXctPmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGJzdHJUKHNvdXJjZU9yaWdpbikuR2V0QlNUUigpLCBic3RyVChkZXN0aW5h
dGlvblByb3RvY29sKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uSG9zdCkuR2V0QlNUUigp
LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJj
ZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVz
dGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQoreworICAgIENP
TVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVh
dGVJbnN0YW5jZShfX3V1aWRvZihXZWJWaWV3KSwgMCwgX191dWlkb2Yod2ViVmlldyksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViVmlldykpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
d2ViVmlldy0+cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoYnN0clQoc291cmNlT3Jp
Z2luKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uUHJvdG9jb2wpLkdldEJTVFIoKSwgYnN0
clQoZGVzdGluYXRpb25Ib3N0KS5HZXRCU1RSKCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpT
U3RyaW5nUmVmIG9yaWVudGF0aW9uLCBKU1N0cmluZ1JlZiBwb2xpY3kpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2Ny
aXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykK
K3sKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQo
V2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmlldyksIDAsIF9fdXVpZG9mKHdlYlZp
ZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZpZXcpKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENPTVB0cjxJV2ViU2NyaXB0V29ybGQ+IHdvcmxkOworICAgIGlmIChGQUlMRUQo
V2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViU2NyaXB0V29ybGQpLCAwLCBfX3V1aWRv
Zih3b3JsZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd29ybGQpKSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHdlYlZpZXctPmFkZFVzZXJTY3JpcHRUb0dyb3VwKF9ic3RyX3QoTCJvcmcu
d2Via2l0LkR1bXBSZW5kZXJUcmVlIikuR2V0QlNUUigpLCB3b3JsZC5nZXQoKSwgYnN0clQoc291
cmNlKS5HZXRCU1RSKCksIDAsIDAsIDAsIDAsIDAsIHJ1bkF0U3RhcnQgPyBXZWJJbmplY3RBdERv
Y3VtZW50U3RhcnQgOiBXZWJJbmplY3RBdERvY3VtZW50RW5kKTsKK30KKworCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJv
b2wgYWxsRnJhbWVzKQoreworICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXc7Cisg
ICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJWaWV3KSwgMCwg
X191dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViVmlldykpKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElXZWJTY3JpcHRXb3JsZD4gd29ybGQ7Cisg
ICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3Js
ZCksIDAsIF9fdXVpZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZCkp
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ViVmlldy0+YWRkVXNlclN0eWxlU2hlZXRUb0dy
b3VwKF9ic3RyX3QoTCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIikuR2V0QlNUUigpLCB3b3Js
ZC5nZXQoKSwgYnN0clQoc291cmNlKS5HZXRCU1RSKCksIDAsIDAsIDAsIDAsIDApOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxF
RChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01Q
dHI8SVdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXct
PnByZWZlcmVuY2VzKCZwcmVmZXJlbmNlcykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01Q
dHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZT4gcHJlZnNQcml2YXRlKFF1ZXJ5LCBwcmVmZXJlbmNl
cyk7CisgICAgaWYgKCFwcmVmc1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIHByZWZz
UHJpdmF0ZS0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
Ym9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQoreworICAgIENPTVB0cjxJV2ViVmll
dz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHZpZXdQcml2YXRl
KFF1ZXJ5LCB3ZWJWaWV3KTsKKyAgICBpZiAoIXZpZXdQcml2YXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBDT01QdHI8SVdlYkluc3BlY3Rvcj4gaW5zcGVjdG9yOworICAgIGlmIChTVUNDRUVE
RUQodmlld1ByaXZhdGUtPmluc3BlY3RvcigmaW5zcGVjdG9yKSkpCisgICAgICAgIGluc3BlY3Rv
ci0+c2hvdygpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3Bl
Y3RvcigpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQo
ZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRy
PElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGUoUXVlcnksIHdlYlZpZXcpOworICAgIGlmICgh
dmlld1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViSW5zcGVjdG9y
PiBpbnNwZWN0b3I7CisgICAgaWYgKEZBSUxFRCh2aWV3UHJpdmF0ZS0+aW5zcGVjdG9yKCZpbnNw
ZWN0b3IpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdG9yLT5jbG9zZSgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcg
Y2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJW
aWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGUoUXVlcnks
IHdlYlZpZXcpOworICAgIGlmICghdmlld1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IENPTVB0cjxJV2ViSW5zcGVjdG9yPiBpbnNwZWN0b3I7CisgICAgaWYgKEZBSUxFRCh2aWV3UHJp
dmF0ZS0+aW5zcGVjdG9yKCZpbnNwZWN0b3IpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09N
UHRyPElXZWJJbnNwZWN0b3JQcml2YXRlPiBpbnNwZWN0b3JQcml2YXRlKFF1ZXJ5LCBpbnNwZWN0
b3IpOworICAgIGlmICghaW5zcGVjdG9yUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW5zcGVjdG9yUHJpdmF0ZS0+ZXZhbHVhdGVJbkZyb250ZW5kKGNhbGxJZCwgYnN0clQoc2NyaXB0
KS5HZXRCU1RSKCkpOworfQorCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIENPTVB0cjxJV2Vi
U2NyaXB0V29ybGQ+ID4gV29ybGRNYXA7CitzdGF0aWMgV29ybGRNYXAmIHdvcmxkTWFwKCkKK3sK
KyAgICBzdGF0aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29ybGRNYXA7CisgICAgcmV0dXJuIG1h
cDsKK30KKwordW5zaWduZWQgd29ybGRJREZvcldvcmxkKElXZWJTY3JpcHRXb3JsZCogd29ybGQp
Cit7CisgICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7
CisgICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZCA9PSB3b3JsZCkK
KyAgICAgICAgICAgIHJldHVybiBpdC0+Zmlyc3Q7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2Jq
ZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHNjcmlwdCkKK3sKKyAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2
YXRlKFF1ZXJ5LCBmcmFtZSk7CisgICAgaWYgKCFmcmFtZVByaXZhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEEgd29ybGRJRCBvZiAwIGFsd2F5cyBjb3JyZXNwb25kcyB0byBhIG5ldyB3
b3JsZC4gQW55IG90aGVyIHdvcmxkSUQgY29ycmVzcG9uZHMgdG8gYSB3b3JsZAorICAgIC8vIHRo
YXQgaXMgY3JlYXRlZCBvbmNlIGFuZCBjYWNoZWQgZm9yZXZlci4KKyAgICBDT01QdHI8SVdlYlNj
cmlwdFdvcmxkPiB3b3JsZDsKKyAgICBpZiAoIXdvcmxkSUQpIHsKKyAgICAgICAgaWYgKEZBSUxF
RChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJTY3JpcHRXb3JsZCksIDAsIF9fdXVp
ZG9mKHdvcmxkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZCkpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBDT01QdHI8SVdlYlNjcmlwdFdvcmxk
PiYgd29ybGRTbG90ID0gd29ybGRNYXAoKS5hZGQod29ybGRJRCwgMCkuaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgaWYgKCF3b3JsZFNsb3QgJiYgRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNl
KF9fdXVpZG9mKFdlYlNjcmlwdFdvcmxkKSwgMCwgX191dWlkb2Yod29ybGRTbG90KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZ3b3JsZFNsb3QpKSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHdvcmxkID0gd29ybGRTbG90OworICAgIH0KKworICAgIEJTVFIgcmVzdWx0OworICAg
IGlmIChGQUlMRUQoZnJhbWVQcml2YXRlLT5zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0SW5T
Y3JpcHRXb3JsZCh3b3JsZC5nZXQoKSwgZ2xvYmFsT2JqZWN0LCBic3RyVChzY3JpcHQpLkdldEJT
VFIoKSwgJnJlc3VsdCkpKQorICAgICAgICByZXR1cm47CisgICAgU3lzRnJlZVN0cmluZyhyZXN1
bHQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlu
a3MoKQoreworICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKKyAgICBpZiAoRkFJTEVE
KFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKGhpc3Rv
cnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmhpc3RvcnkpKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gc2hhcmVkSGlzdG9yeTsKKyAgICBpZiAoRkFJ
TEVEKGhpc3RvcnktPm9wdGlvbmFsU2hhcmVkSGlzdG9yeSgmc2hhcmVkSGlzdG9yeSkpIHx8ICFz
aGFyZWRIaXN0b3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYkhpc3RvcnlQ
cml2YXRlPiBzaGFyZWRIaXN0b3J5UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKHNoYXJlZEhpc3Rv
cnktPlF1ZXJ5SW50ZXJmYWNlKCZzaGFyZWRIaXN0b3J5UHJpdmF0ZSkpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzaGFyZWRIaXN0b3J5UHJpdmF0ZS0+cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7
Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdl
V2lkdGhJblBpeGVscywgZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzKQoreworICAgIENPTVB0cjxJ
V2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKKyAgICBpZiAoIWZy
YW1lUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgcGFnZU51bWJlciA9IC0x
OworICAgIGlmIChGQUlMRUQoZnJhbWVQcml2YXRlLT5udW1iZXJPZlBhZ2VzKHBhZ2VXaWR0aElu
UGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMsICZwYWdlTnVtYmVyKSkpCisgICAgICAgIHBhZ2VO
dW1iZXIgPSAtMTsKKyAgICByZXR1cm4gcGFnZU51bWJlcjsKK30KKworSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNl
VVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKQoreworCit9CisK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVB
bmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFy
Z2luTGVmdCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQoreworICAgIENPTVB0cjxJV2Vi
Vmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkp
CisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViQmFja0ZvcndhcmRMaXN0PiBiYWNr
Rm9yd2FyZExpc3Q7CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5iYWNrRm9yd2FyZExpc3QoJmJh
Y2tGb3J3YXJkTGlzdCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYkhpc3Rv
cnlJdGVtPiBpdGVtOworICAgIGlmIChGQUlMRUQoYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRl
bSgmaXRlbSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBCT09MIHN1Y2Nlc3M7CisgICAgd2Vi
Vmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShpdGVtLmdldCgpLCAmc3VjY2Vzcyk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQoreworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5n
UmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFib3J0TW9kYWwoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitsb25nIGxvbmcg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0
cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBnZXR0aW5nIGxvY2FsIHN0b3JhZ2UgZGlzayB1c2FnZSBmb3IgYW4gb3JpZ2luLgor
ICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lcklu
dGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKK3sKKyAgICBDT01QdHI8SVdlYlZp
ZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0
ZShRdWVyeSwgd2ViVmlldyk7CisgICAgaWYgKCF2aWV3UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdmlld1ByaXZhdGUtPnNldE1pbmltdW1UaW1lckludGVydmFsKG1pbmltdW1UaW1l
ckludGVydmFsKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVj
dGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCit7CisgICAgQ09NUHRyPElXZWJGcmFtZVByaXZh
dGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOworICAgIGlmICghZnJhbWVQcml2YXRlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZVByaXZhdGUtPnNldFRleHREaXJlY3Rpb24oYnN0
clQoZGlyZWN0aW9uKS5HZXRCU1RSKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZvY3VzV2ViVmlldygpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRp
dGxlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxp
dHkoY29uc3QgY2hhciopCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxl
ZChib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5n
UmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vVGVzdFJ1bm5lckJsYWNrV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lckJsYWNrV2luLmNwcAkocmV2aXNpb24gMTI1MzM1KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJCbGFja1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgi
CiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIkVkaXRpbmdEZWxlZ2F0
ZS5oIgpAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBzdGQ6OndzdHJpbmc7CiAKIHN0YXRpYyBib29s
IHJlc29sdmVDeWd3aW5QYXRoKGNvbnN0IHdzdHJpbmcmIGN5Z3dpblBhdGgsIHdzdHJpbmcmIHdp
bmRvd3NQYXRoKTsKIAotTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxl
cigpCitUZXN0UnVubmVyOjp+VGVzdFJ1bm5lcigpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3
ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTc5
LDEyICs3OSwxMiBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sCiAg
ICAgICAgIGVkaXRpbmdEZWxlZ2F0ZS0+c2V0QWNjZXB0c0VkaXRpbmcoVFJVRSk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJs
KQordm9pZCBUZXN0UnVubmVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0Zvcndh
cmRMaXN0KCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxF
RChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcncKICAgICBiYWNrRm9yd2FyZExpc3QtPmdv
VG9JdGVtKGl0ZW0uZ2V0KCkpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcoKQorYm9vbCBUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VP
bldlYlZpZXcoKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJ
TEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC0xMjUsMTkgKzEyNSwxOSBAQCBib29s
IExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5h
bWUoSlNTdHJpbmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlEZWNvZGVk
SG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IQog
ICAgIHJldHVybiAwOwogfQogCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29w
eUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQorSlNTdHJpbmdSZWYgVGVzdFJ1bm5l
cjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQhCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQordm9pZCBUZXN0UnVubmVyOjpkaXNhYmxlSW1hZ2VM
b2FkaW5nKCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxF
RChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtMTUwLDE3ICsxNTAsMTcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTAogICAgIHByZWZlcmVuY2VzLT5zZXRM
b2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoRkFMU0UpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjpk
aXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc3BsYXkoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKICAgICBkaXNwbGF5
V2ViVmlldygpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9y
eSgpCit2b2lkIFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KCkKIHsKICAgICBDT01QdHI8SVdl
Ykhpc3Rvcnk+IGhpc3Rvcnk7CiAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShD
TFNJRF9XZWJIaXN0b3J5LCAwLCBfX3V1aWRvZihoaXN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZoaXN0b3J5KSkpKQpAQCAtMTczLDEzICsxNzMsMTMgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcgogICAgIGhpc3RvcnktPnNldE9wdGlvbmFsU2hhcmVk
SGlzdG9yeShzaGFyZWRIaXN0b3J5LmdldCgpKTsKIH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpjb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAorSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0
CiB7CiAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJh
bWUpOwogICAgIGlmICghZnJhbWVQcml2YXRlKQpAQCAtMTk0LDcgKzE5NCw3IEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHIKICAgICByZXR1cm4gdGV4dFZhbHVlSlM7
CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFy
a2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVP
YmplY3QpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6bWFya2Vy
VGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmpl
Y3QpIGNvbnN0CiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyCiAgICAgcmV0dXJuIG1hcmtlclRleHQ7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgp
Cit2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB7CiAgICAgQ09NUHRy
PElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZp
ZXcpKSkKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0
Rm9yUG9saWN5CiAgICAgd2ViVmlldy0+c2V0UG9saWN5RGVsZWdhdGUocG9saWN5RGVsZWdhdGUp
OwogfQogCi1zaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQo
KQorc2l6ZV90IFRlc3RSdW5uZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQogewogICAgIENPTVB0
cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3Rh
bmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKGhpc3RvcnkpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJmhpc3RvcnkpKSkpCkBAIC0yNTMsNyArMjUzLDcgQEAgc2l6ZV90IExheW91
dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SQogICAgIHJldHVybiBjb3VudDsKIH0KIAotdW5z
aWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKK3Vu
c2lnbmVkIFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKIHsKICAgICBDT01Q
dHI8SVdlYldvcmtlcnNQcml2YXRlPiB3b3JrZXJzOwogICAgIGlmIChGQUlMRUQoV2ViS2l0Q3Jl
YXRlSW5zdGFuY2UoQ0xTSURfV2ViV29ya2Vyc1ByaXZhdGUsIDAsIF9fdXVpZG9mKHdvcmtlcnMp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndvcmtlcnMpKSkpCkBAIC0yNjQsMTMgKzI2NCwx
MyBAQCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyCiAgICAgcmV0dXJu
IGNvdW50OwogfQogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1
bm5lcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lu
IikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om5vdGlmeURvbmUoKQordm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKIHsKICAg
ICAvLyBTYW1lIGFzIG9uIG1hYy4gIFRoaXMgY2FuIGJlIHNoYXJlZC4KICAgICBpZiAobV93YWl0
VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50
KCkpCkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5
RG9uZSgpCiAgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1N0cmluZ1JlZiB1cmwpCitKU1N0cmluZ1JlZiBUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJl
c291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgd3N0
cmluZyBpbnB1dChKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIodXJsKSwgSlNTdHJpbmdHZXRMZW5n
dGgodXJsKSk7CiAKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgd3N0cmluZyBqc1N0cmluZ1Jl
ZlRvV1N0cmluZyhKU1N0CiAgICAgcmV0dXJuIGJ1ZmZlci5kYXRhKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVm
IHRhcmdldCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNT
dHJpbmdSZWYgdGFyZ2V0KQogewogICAgIENPTVB0cjxJV2ViRGF0YVNvdXJjZT4gZGF0YVNvdXJj
ZTsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT5kYXRhU291cmNlKCZkYXRhU291cmNlKSkpCkBAIC0z
MjksNyArMzI5LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTUwog
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJM
LmdldCgpLCB0YXJnZXQpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNj
ZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNj
ZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAt
MzQ3LDcgKzM0Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGkK
ICAgICBlZGl0aW5nRGVsZWdhdGUtPnNldEFjY2VwdHNFZGl0aW5nKGFjY2VwdHNFZGl0aW5nKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhi
b29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2Vw
dENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQogewogICAgIGlmIChhbHdheXNBY2Nl
cHRDb29raWVzID09IG1fYWx3YXlzQWNjZXB0Q29va2llcykKICAgICAgICAgcmV0dXJuOwpAQCAt
MzU3LDcgKzM1Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2UK
ICAgICBtX2Fsd2F5c0FjY2VwdENvb2tpZXMgPSBhbHdheXNBY2NlcHRDb29raWVzOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChi
b29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KGJvb2wgZmxhZykKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZB
SUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFUKICAgICBwcmVmc1ByaXZhdGUtPnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGZsYWcpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b2Zp
bGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1
dG9maWxsZWQpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkCiAgICAgYXV0b2ZpbGxFbGVtZW50LT5z
ZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3Np
dmUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVs
ZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7
CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtNDA4LDU1ICs0
MDgsNTUgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saQogICAgICAg
ICB3ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZSgwKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBk
b3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblBy
b3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNl
T3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Q
cm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2Ft
bWEpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5
b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzAzMzUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91Ymxl
IGFjY3VyYWN5KQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50
IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9s
b2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxv
dykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3Rz
LgogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CiB9CiAKLWludCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMoKQoraW50IFRlc3RSdW5uZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RzKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2Nh
dGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBk
b3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCit2b2lkIFRlc3RSdW5uZXI6
OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25m
aWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYg
aW5wdXRFbGVtZW50KQordm9pZCBUZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4
dFJlZiBpbnB1dEVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNo
IGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQp
CiB7CiAgICAgLy8gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzY0ODAxMDg+CiAgICAgQ09NUHRy
PElXZWJJY29uRGF0YWJhc2U+IGljb25EYXRhYmFzZTsKQEAgLTQ2OSwxMiArNDY5LDEyIEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmEKICAgICBpY29uRGF0YWJhc2Ut
PnNldEVuYWJsZWQoaWNvbkRhdGFiYXNlRW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKIHsKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93
c2luZ0VuYWJsZWQpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQcml2YXRlQnJvCiAgICAgcHJlZmVyZW5jZXMtPnNl
dFByaXZhdGVCcm93c2luZ0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53
ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0WFNTQXVkaXRvcgogICAgIHByZWZzUHJpdmF0ZS0+c2V0WFNTQXVkaXRvckVu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRGcmFt
ZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAt
NTIxLDEyICs1MjEsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0
dAogICAgIHByZWZzUHJpdmF0ZS0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGVkKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBTcGF0
aWFsTmF2aWdhdGlvbiBsYXlvdXQgdGVzdHMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBl
bmFibGVkKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVE
KGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZQogICAgIHByZWZzUHJpdmF0ZS0+c2V0QWxs
b3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJs
ZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29s
IGVuYWJsZWQpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlM
RUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTU2MCw3ICs1NjAsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBCiAgICAgcHJlZnNQcml2YXRlLT5zZXRB
bGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAg
IENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3
KCZ3ZWJWaWV3KSkpCkBAIC01NzMsMTIgKzU3MywxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQb3B1cEJsb2NrCiAgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHkoIWVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlw
Ym9hcmQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZp
ZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtNTk1LDcg
KzU5NSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHQKICAgICBw
cmVmc1ByaXZhdGUtPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoZW5hYmxlZCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVt
ZW50cyhib29sIHNob3VsZEN5Y2xlKQordm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMoYm9vbCBzaG91bGRDeWNsZSkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAt
NjA4LDEyICs2MDgsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3lj
bAogICAgIHZpZXdQcml2YXRlLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoc2hvdWxk
Q3ljbGUgPyBUUlVFIDogRkFMU0UpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2Vy
U3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2Vi
VmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC03MzMs
NyArNzMzLDcgQEAgc3RhdGljIGJvb2wgcmVzb2x2ZUN5Z3dpblBhdGgoY29uc3Qgd3N0cgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQordm9pZCBUZXN0UnVubmVyOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQogewogICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNl
clN0eWxlUwogICAgIFN5c0ZyZWVTdHJpbmcocmVzdWx0UGF0aEJTVFIpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6
OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50
LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAg
ICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtODAwLDIzICs4MDAs
MjMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVcwogICAgIGRvbUlu
cHV0RWxlbWVudC0+c2V0VmFsdWVGb3JVc2VyKHZhbHVlQlNUUik7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1v
ZGUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBq
c1VSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oSlNTdHJpbmdSZWYganNVUkwpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxT
dHJpbmcoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwganNVUkwpKTsKICAgICA6OnNl
dFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHVybFN0cmluZy5nZXQoKSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQogewog
ICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oMCk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgZmxhZykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCBmbGFnKQogewogICAgIENPTVB0cjxJV2ViVmll
dz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBA
IC04MzMsNyArODMzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNL
ZQogICAgIDo6U2VuZE1lc3NhZ2Uod2ViVmlld1dpbmRvdywgZmxhZyA/IFdNX1NFVEZPQ1VTIDog
V01fS0lMTEZPQ1VTLCAoV1BBUkFNKTo6R2V0RGVza3RvcFdpbmRvdygpLCAwKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wg
ZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wg
ZmxhZykKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChm
cmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXIKICAgICB2aWV3RWRpdGluZy0+c2V0U21hcnRJ
bnNlcnREZWxldGVFbmFibGVkKGZsYWcgPyBUUlVFIDogRkFMU0UpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wg
ZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChib29sIGZsYWcpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChG
QUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTg2MywyMiArODYzLDIyIEBAIHN0
YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCB3YWl0VG9EdW1wV2EKIAogc3RhdGljIHZvaWQgQ0FM
TEJBQ0sgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQoSFdORCwgVUlOVCwgVUlOVF9QVFIsIERX
T1JEKQogewotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJGaXJlZCgpOworICAgIGdUZXN0UnVubmVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVk
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3
YWl0VW50aWxEb25lKQordm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVu
dGlsRG9uZSkKIHsKICAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOwogICAgIGlmICht
X3dhaXRUb0R1bXAgJiYgIXdhaXRUb0R1bXBXYXRjaGRvZykKICAgICAgICAgd2FpdFRvRHVtcFdh
dGNoZG9nID0gU2V0VGltZXIoMCwgMCwgd2FpdFRvRHVtcFdhdGNoZG9nSW50ZXJ2YWwgKiAxMDAw
LCB3YWl0VW50aWxEb25lV2F0Y2hkb2dGaXJlZCk7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2luZG93Q291bnQoKQoraW50IFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KCkKIHsKICAg
ICByZXR1cm4gb3BlbldpbmRvd3MoKS5zaXplKCk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1Jl
ZiBpZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50
V2l0aElkKEpTU3RyaW5nUmVmIGlkKQogewogICAgIENPTVB0cjxJRE9NRG9jdW1lbnQ+IGRvY3Vt
ZW50OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPkRPTURvY3VtZW50KCZkb2N1bWVudCkpKQpAQCAt
OTA0LDcgKzkwNCw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXUK
ICAgICByZXR1cm4gYXV0b0NvbXBsZXRlczsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lk
IFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZh
bHVlKQogewogICAgIHdzdHJpbmcgd05hbWUgPSBqc1N0cmluZ1JlZlRvV1N0cmluZyhuYW1lKTsK
ICAgICB3c3RyaW5nIHdWYWx1ZSA9IGpzU3RyaW5nUmVmVG9XU3RyaW5nKHZhbHVlKTsKQEAgLTky
NSw1MSArOTI1LDUxIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEoK
ICAgICBTeXNGcmVlU3RyaW5nKHZhbHVlQlNUUik7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIC8qIGNvbnRleHQgKi8sIEpTU3RyaW5nUmVm
IC8qIHRhcmdldCAqLywgSlNPYmplY3RSZWYgLyogb3B0aW9uc0FycmF5ICovKQorYm9vbCBUZXN0
UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiAvKiBjb250ZXh0ICovLCBKU1N0cmluZ1Jl
ZiAvKiB0YXJnZXQgKi8sIEpTT2JqZWN0UmVmIC8qIG9wdGlvbnNBcnJheSAqLykKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2Fj
aGVNb2RlbChpbnQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogfQogCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQor
Ym9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQog
ewotICAgIHByaW50ZigiRVJST1I6IExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFi
bGVkKCkgbm90IGltcGxlbWVudGVkXG4iKTsKKyAgICBwcmludGYoIkVSUk9SOiBUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKCkgbm90IGltcGxlbWVudGVkXG4iKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25D
YWNoZXMoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVv
dGFzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2Fj
aGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFw
cGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGUg
Zm9yIGFuIG9yaWdpbi4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdW90YSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRp
b24gY2FjaGUgcXVvdGFzLgogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpv
cmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCitKU1ZhbHVl
UmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQg
aGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMuCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCi1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0
aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSkKK2xvbmcgbG9uZyBU
ZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVm
IG5hbWUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgZGlzayB1c2FnZSBieSBh
bGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewogICAgIENPTVB0cjxJV2ViRGF0YWJhc2VN
YW5hZ2VyPiBkYXRhYmFzZU1hbmFnZXI7CiAgICAgQ09NUHRyPElXZWJEYXRhYmFzZU1hbmFnZXI+
IHRtcERhdGFiYXNlTWFuYWdlcjsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFsbERhdGFiCiAgICAgZGF0YWJhc2VNYW5hZ2VyLT5kZWxldGVBbGxE
YXRhYmFzZXMoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lkIFRlc3RSdW5u
ZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVl
KQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1l
LT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlCiAgICAgU3lzRnJlZVN0cmluZyh2YWx1ZUJTVFIp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgQ09NUHRyPElXZWJEYXRhYmFzZU1hbmFn
ZXI+IGRhdGFiYXNlTWFuYWdlcjsKICAgICBDT01QdHI8SVdlYkRhdGFiYXNlTWFuYWdlcj4gdG1w
RGF0YWJhc2VNYW5hZ2VyOwpAQCAtMTAxNSwxNyArMTAxNSwxNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgZGF0YWJhc2VNYW5hZ2VyLT5zZXRRdW90YShU
RVhUKCJmaWxlOi8vLyIpLCBxdW90YSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmdvQmFjaygpCit2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7CiAgICAgLy8gRklYTUU6IGlt
cGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRz
Lmh0bWwKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhi
b29sKQordm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJy
aW5nLWxvYWRzLmh0bWwKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdS
ZWYgc2NoZW1lKQordm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCiB7CiAgICAg
Q09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKFdlYktpdENy
ZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQpAQCAtMTAzNiwxMiArMTAzNiwxMiBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxhCiAgICAgU3lzRnJlZVN0
cmluZyhzY2hlbWVCU1RSKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKIHsKLSAg
ICBwcmludGYoIkVSUk9SOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSgpIG5vdCBpbXBsZW1lbnRlZFxuIik7CisgICAgcHJpbnRmKCJFUlJPUjogVGVzdFJ1bm5l
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSgpIG5vdCBpbXBsZW1lbnRlZFxuIik7CiB9CiAKLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1Jl
ZiBlbGVtZW50SWQpCiB7CiAgICAgQ09NUHRyPElET01Eb2N1bWVudD4gZG9jdW1lbnQ7CiAgICAg
aWYgKEZBSUxFRChmcmFtZS0+RE9NRG9jdW1lbnQoJmRvY3VtZW50KSkpCkBAIC0xMDY2LDcgKzEw
NjYsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvCiAgICAgcmV0
dXJuIFNVQ0NFRURFRChocikgJiYgd2FzUnVubmluZzsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVm
IHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK2Jvb2wg
VGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5n
UmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsK
ICAgICBDT01QdHI8SURPTURvY3VtZW50PiBkb2N1bWVudDsKICAgICBpZiAoRkFJTEVEKGZyYW1l
LT5ET01Eb2N1bWVudCgmZG9jdW1lbnQpKSkKQEAgLTEwOTEsNyArMTA5MSw3IEBAIGJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGkKICAgICByZXR1cm4gU1VDQ0VFREVEKGhy
KSAmJiB3YXNSdW5uaW5nOwogfQogCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3Vuc2lnbmVkIFRlc3RSdW5uZXI6Om51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZh
dGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwogICAgIGlmICghZnJhbWVQcml2YXRlKQpA
QCAtMTExMCw3ICsxMTEwLDcgQEAgc3RhdGljIF9ic3RyX3QgYnN0clQoSlNTdHJpbmdSZWYganNT
dHJpbgogICAgIHJldHVybiBfYnN0cl90KEpTU3RyaW5nQ29weUJTVFIoanNTdHJpbmcpLCBmYWxz
ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRp
b25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGlu
YXRpb25TdWJkb21haW5zKQordm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9u
UHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0
aW9uU3ViZG9tYWlucykKIHsKICAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3Owog
ICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmlldyksIDAs
IF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZpZXcpKSkp
CkBAIC0xMTE5LDcgKzExMTksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmln
aW5BY2NlCiAgICAgd2ViVmlldy0+YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoYnN0clQo
c291cmNlT3JpZ2luKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uUHJvdG9jb2wpLkdldEJT
VFIoKSwgYnN0clQoZGVzdGluYXRpb25Ib3N0KS5HZXRCU1RSKCksIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1Jl
ZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wg
YWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdS
ZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29s
IGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQogewogICAgIENPTVB0cjxJV2ViVmlld1ByaXZh
dGU+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRv
ZihXZWJWaWV3KSwgMCwgX191dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
Pigmd2ViVmlldykpKSkKQEAgLTExMjgsMTIgKzExMjgsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVtb3ZlT3JpZ2luQQogICAgIHdlYlZpZXctPnJlbW92ZU9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGJzdHJUKHNvdXJjZU9yaWdpbikuR2V0QlNUUigpLCBic3RyVChkZXN0aW5h
dGlvblByb3RvY29sKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uSG9zdCkuR2V0QlNUUigp
LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJp
bmdSZWYgcG9saWN5KQordm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJp
bmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQo
SlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQordm9p
ZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5B
dFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKICAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3
ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2Vi
VmlldyksIDAsIF9fdXVpZG9mKHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndl
YlZpZXcpKSkpCkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRVc2VyU2NyaXB0CiB9CiAKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNl
clN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVz
dFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZy
YW1lcykKIHsKICAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3OwogICAgIGlmIChG
QUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmlldyksIDAsIF9fdXVpZG9m
KHdlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZpZXcpKSkpCkBAIC0xMTYw
LDcgKzExNjAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTCiAg
ICAgd2ViVmlldy0+YWRkVXNlclN0eWxlU2hlZXRUb0dyb3VwKF9ic3RyX3QoTCJvcmcud2Via2l0
LkR1bXBSZW5kZXJUcmVlIikuR2V0QlNUUigpLCB3b3JsZC5nZXQoKSwgYnN0clQoc291cmNlKS5H
ZXRCU1RSKCksIDAsIDAsIDAsIDAsIDApOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgQ09NUHRy
PElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZp
ZXcpKSkKQEAgLTExNzcsMTIgKzExNzcsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0RGV2ZWxvcGVyRQogICAgIHByZWZzUHJpdmF0ZS0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0
b3IoKQordm9pZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKCkKIHsKICAgICBDT01QdHI8
SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmll
dykpKQpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hv
d1dlYkluc3BlYwogICAgICAgICBpbnNwZWN0b3ItPnNob3coKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVubmVyOjpjbG9z
ZVdlYkluc3BlY3RvcigpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlm
IChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTEyMTQsNyArMTIxNCw3IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGUKICAgICBpbnNwZWN0b3It
PmNsb3NlKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJ
bnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1l
LT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC0xMjUzLDEyICsxMjUzLDEyIEBAIHVuc2lnbmVkIHdv
cmxkSURGb3JXb3JsZChJV2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmdSZWYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHNjcmlwdCkKIHsKICAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2
YXRlKFF1ZXJ5LCBmcmFtZSk7CiAgICAgaWYgKCFmcmFtZVByaXZhdGUpCkBAIC0xMjgzLDcgKzEy
ODMsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwCiAgICAgU3lz
RnJlZVN0cmluZyhyZXN1bHQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1v
dmVBbGxWaXNpdGVkTGlua3MoKQordm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxWaXNpdGVkTGlu
a3MoKQogewogICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKICAgICBpZiAoRkFJTEVE
KFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKGhpc3Rv
cnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmhpc3RvcnkpKSkpCkBAIC0xMzAwLDcgKzEz
MDAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpCiAgICAgc2hh
cmVkSGlzdG9yeVByaXZhdGUtPnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOwogfQogCi1pbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMs
IGZsb2F0IHBhZ2VIZWlnaHRJblBpeGVscykKK2ludCBUZXN0UnVubmVyOjpudW1iZXJPZlBhZ2Vz
KGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMpCiB7CiAg
ICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwog
ICAgIGlmICghZnJhbWVQcml2YXRlKQpAQCAtMTMxMiwyNCArMTMxMiwyNCBAQCBpbnQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoCiAgICAgcmV0dXJuIHBhZ2VOdW1iZXI7CiB9
CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVBy
b3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNo
YXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgogICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2Fk
QmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1
dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKIHsKIAogfQogCi1KU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxz
KGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGlu
dCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0CitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRv
cCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPigpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29U
b0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQordm9pZCBUZXN0UnVubmVyOjphcGlUZXN0R29Ub0N1
cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsK
ICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC0xMzQ3LDU2ICsx
MzQ3LDU2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3UKICAgICB3
ZWJWaWV3LT5nb1RvQmFja0ZvcndhcmRJdGVtKGl0ZW0uZ2V0KCksICZzdWNjZXNzKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQogewogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmlu
Z1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24o
SlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKIHsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit2b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9k
YWwoKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQ
TG9hZHMoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3Jh
Z2UoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVt
YmVyKQordm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KHVuc2lnbmVkIG51bWJlcikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQordm9pZCBUZXN0
UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpv
cmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKIH0KIAotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNr
VXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKK2xvbmcgbG9uZyBU
ZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3Jp
Z2luSWRlbnRpZmllcikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0
dGluZyBsb2NhbCBzdG9yYWdlIGRpc2sgdXNhZ2UgZm9yIGFuIG9yaWdpbi4KICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9y
T3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRlTG9jYWxTdG9y
YWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZh
bChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1pbmlt
dW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsKICAgICBDT01Q
dHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2Vi
VmlldykpKQpAQCAtMTQwOSw3ICsxNDA5LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TWluaW11bVRpbQogICAgIHZpZXdQcml2YXRlLT5zZXRNaW5pbXVtVGltZXJJbnRlcnZhbCht
aW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKICAgICBDT01QdHI8SVdl
YkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7CiAgICAgaWYgKCFmcmFt
ZVByaXZhdGUpCkBAIC0xNDE4LDUzICsxNDE4LDUzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFRleHREaXJlY3QKICAgICBmcmFtZVByaXZhdGUtPnNldFRleHREaXJlY3Rpb24oYnN0
clQoZGlyZWN0aW9uKS5HZXRCU1RSKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRG
aWVsZCgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlu
cHV0RmllbGQoKQordm9pZCBUZXN0UnVubmVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9jdXNXZWJWaWV3KCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFj
a2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit2
b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5n
UmVmIHRpdGxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQordm9pZCBUZXN0UnVubmVyOjpy
ZXNldFBhZ2VWaXNpYmlsaXR5KCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNo
YXIqKQordm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCit2b2lkIFRlc3RS
dW5uZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OnNlbmRX
ZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRlbnQo
SlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6
ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVUlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1VJRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxMjUzMzUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIkRyYWdnaW5nSW5mby5oIgogI2lu
Y2x1ZGUgIkV2ZW50U2VuZGVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJEUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCisjaW5jbHVkZSAi
VGVzdFJ1bm5lci5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNDcyLDcgKzQ3Miw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgVUlEZWxlZ2F0ZTo6cnUKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKICAgICBwcmludGYoIkNPTkZJUk0gTkFWSUdBVElPTjogJVNcbiIsIG1lc3NhZ2Ug
PyBtZXNzYWdlIDogTCIiKTsKLSAgICAqcmVzdWx0ID0gIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+
c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKTsKKyAgICAqcmVzdWx0
ID0gIWdUZXN0UnVubmVyLT5zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9h
ZCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC01MzcsNyArNTM3LDcgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjcgogICAgICAgICAvKiBbaW5dICovIElXZWJV
UkxSZXF1ZXN0ICpyZXF1ZXN0LAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElXZWJWaWV3
ICoqbmV3V2ViVmlldykKIHsKLSAgICBpZiAoITo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5jYW5P
cGVuV2luZG93cygpKQorICAgIGlmICghOjpnVGVzdFJ1bm5lci0+Y2FuT3BlbldpbmRvd3MoKSkK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICAqbmV3V2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdB
bmRPZmZzY3JlZW5XaW5kb3coKTsKICAgICByZXR1cm4gU19PSzsKQEAgLTU4OCw3ICs1ODgsNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmV4CiAgICAgb3JpZ2luLT5o
b3N0KCZob3N0KTsKICAgICBvcmlnaW4tPnBvcnQoJnBvcnQpOwogCi0gICAgaWYgKCFkb25lICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpCisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKICAgICAgICAg
cHJpbnRmKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1
b3RhRm9yU2VjdXJpdHlPcmlnaW46eyVTLCAlUywgJWl9IGRhdGFiYXNlOiVTXG4iLCBwcm90b2Nv
bCwgaG9zdCwgcG9ydCwgZGF0YWJhc2VJZGVudGlmaWVyKTsKIAogICAgIFN5c0ZyZWVTdHJpbmco
cHJvdG9jb2wpOwpAQCAtNjMzLDcgKzYzMyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
VUlEZWxlZ2F0ZTo6d2UKIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpz
ZXRTdGF0dXNUZXh0KElXZWJWaWV3KiwgQlNUUiB0ZXh0KQogeyAKLSAgICBpZiAoZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCisgICAgaWYgKGdUZXN0UnVubmVy
LT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgU1RB
VFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiVzXG4iLCB0ZXh0ID8gdG9VVEY4KHRleHQpLmNf
c3RyKCkgOiAiIik7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEdW1wUmVu
ZGVyVHJlZS5oIgogCi0jaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAiV29ya1F1
ZXVlSXRlbS5oIgogCkBAIC01OSw3ICs1OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
IEZJTEUqIGxvZ091dHB1dDsKIAotUmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0
VGVzdENvbnRyb2xsZXI7CitSZWZQdHI8VGVzdFJ1bm5lcj4gZ1Rlc3RSdW5uZXI7CiBzdGF0aWMg
V2ViVmlldyogd2ViVmlldzsKIHN0YXRpYyB3eFRpbWVyKiBpZGxlVGltZXI7CiAKQEAgLTk1LDcg
Kzk1LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoZXZlbnQuR2V0U3RhdGUoKSA9PSBXRUJWSUVX
X0xPQURfT05MT0FEX0hBTkRMRUQpIHsKICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVt
cCgpIHx8IG5vdGlmaWVkKSB7CisgICAgICAgICAgICBpZiAoIWdUZXN0UnVubmVyLT53YWl0VG9E
dW1wKCkgfHwgbm90aWZpZWQpIHsKICAgICAgICAgICAgICAgICBkdW1wKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTEyOCwxNCArMTI4LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIE9uUmVjZWl2ZWRUaXRsZUV2ZW50KFdlYlZpZXdSZWNlaXZlZFRpdGxlRXZlbnQmIGV2ZW50
KQogICAgIHsKLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hh
bmdlcygpICYmICFkb25lKQorICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBUaXRsZUNoYW5n
ZXMoKSAmJiAhZG9uZSkKICAgICAgICAgICAgIHd4RnByaW50ZihzdGRvdXQsICJUSVRMRSBDSEFO
R0VEOiAlU1xuIiwgZXZlbnQuR2V0VGl0bGUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgT25X
aW5kb3dPYmplY3RDbGVhcmVkRXZlbnQoV2ViVmlld1dpbmRvd09iamVjdENsZWFyZWRFdmVudCYg
ZXZlbnQpCiAgICAgewogICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAg
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChldmVudC5HZXRKU0NvbnRl
eHQoKSwgZXZlbnQuR2V0V2luZG93T2JqZWN0KCksICZleGNlcHRpb24pOworICAgICAgICBnVGVz
dFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChldmVudC5HZXRKU0NvbnRleHQoKSwgZXZlbnQuR2V0
V2luZG93T2JqZWN0KCksICZleGNlcHRpb24pOwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0x
NTUsNyArMTU1LDcgQEAgTGF5b3V0V2ViVmlld0V2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyIAog
c3RhdGljIHd4U3RyaW5nIGR1bXBGcmFtZXNBc1RleHQoV2ViRnJhbWUqIGZyYW1lKQogewogICAg
IC8vIFRPRE86IGltcGxlbWVudCB0aGlzLiBsZWF2aW5nIHRoaXMgaGVyZSBzbyB3ZSBkb24ndCBm
b3JnZXQgdGhpcyBjYXNlLgotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBDaGls
ZEZyYW1lc0FzVGV4dCgpKSB7CisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNB
c1RleHQoKSkgewogICAgIH0KICAgICAKICAgICByZXR1cm4gZnJhbWUtPkdldElubmVyVGV4dCgp
OwpAQCAtMTY2LDE1ICsxNjYsMTUgQEAgdm9pZCBkdW1wKCkKICAgICBpZiAoIWRvbmUpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9E
dW1wKCkgJiYgIW5vdGlmaWVkKQorICAgIGlmIChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpICYm
ICFub3RpZmllZCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBpZiAoZHVtcFRyZWUp
IHsKICAgICAgICAgY29uc3QgY2hhciogcmVzdWx0ID0gMDsKIAotICAgICAgICBib29sIGR1bXBB
c1RleHQgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKTsKKyAgICAgICAgYm9v
bCBkdW1wQXNUZXh0ID0gZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKTsKICAgICAgICAgd3hTdHJp
bmcgc3RyOwotICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNUZXh0KCkp
CisgICAgICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpKQogICAgICAgICAgICAgc3Ry
ID0gZHVtcEZyYW1lc0FzVGV4dCh3ZWJWaWV3LT5HZXRNYWluRnJhbWUoKSk7CiAgICAgICAgIGVs
c2UgCiAgICAgICAgICAgICBzdHIgPSB3ZWJWaWV3LT5HZXRNYWluRnJhbWUoKS0+R2V0RXh0ZXJu
YWxSZXByZXNlbnRhdGlvbigpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgZHVtcCgpCiAgICAg
ICAgIHJlc3VsdCA9IHN0ci5Ub1VURjgoKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZTsKLSAgICAgICAgICAgIGlmIChnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKSkKKyAgICAgICAgICAgIGlmIChnVGVzdFJ1bm5l
ci0+ZHVtcEFzVGV4dCgpKQogICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJXZWJGcmFt
ZTo6R2V0SW5uZXJUZXh0IjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlcnJv
ck1lc3NhZ2UgPSAiV2ViRnJhbWU6OkdldEV4dGVybmFsUmVwcmVzZW50YXRpb24iOwpAQCAtMTkx
LDcgKzE5MSw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXN1
bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEJhY2tGb3J3YXJkTGlzdCgpKSB7CisgICAgICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEJhY2tG
b3J3YXJkTGlzdCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbm90IGltcGxlbWVudGVkCiAg
ICAgICAgIH0KIApAQCAtMjA0LDkgKzIwNCw5IEBAIHZvaWQgZHVtcCgpCiAgICAgfQogCiAgICAg
aWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAotICAgICAgICAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKLSAgICAgICAgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCi0gICAgICAgICYmICFnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgeworICAgICAgICAmJiBnVGVzdFJ1
bm5lci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKQorICAgICAgICAmJiAhZ1Rlc3RSdW5uZXItPmR1
bXBET01Bc1dlYkFyY2hpdmUoKQorICAgICAgICAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBTb3VyY2VB
c1dlYkFyY2hpdmUoKSkgewogICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGR1bXBp
bmcgcGl4ZWxzCiAgICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgIH0KQEAgLTIxNSw3ICsyMTUs
NyBAQCB2b2lkIGR1bXAoKQogICAgIGZmbHVzaChzdGRvdXQpOwogICAgIGZmbHVzaChzdGRlcnIp
OwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLmNsZWFyKCk7CisgICAgZ1Rlc3RSdW5uZXIu
Y2xlYXIoKTsKIH0KIAogc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCB3eFN0cmluZyBpbnB1dExp
bmUpCkBAIC0yMzIsOCArMjMyLDggQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCB3eFN0cmlu
ZyBpbnB1dAogICAgIGlmIChodHRwID09IHN0cmluZzo6bnBvcykKICAgICAgICAgcGF0aE9yVVJM
Lmluc2VydCgwLCAiZmlsZTovLyIpOwogICAgIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9
IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBjb21tYW5kLmV4cGVjdGVk
UGl4ZWxIYXNoKTsKLSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGdUZXN0
UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBp
eGVsSGFzaCk7CisgICAgaWYgKCFnVGVzdFJ1bm5lcikgewogICAgICAgICB3eFRoZUFwcC0+RXhp
dE1haW5Mb29wKCk7CiAgICAgfQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gMTI1MzM1KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4g
T2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotCi0KLUxh
eW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkRGlzYWxs
b3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCi17Ci19
Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1l
KEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biAwOwotfQotCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRI
b3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5k
aW5nTG9hZFJlcXVlc3RzKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5n
IGZpeCBmb3IgNjcyNzQ5NQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5
KCkKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bm90aWZ5RG9uZSgpCi17Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhV29ya1F1ZXVlOjpz
aGFyZWQoKS0+Y291bnQoKSkKLSAgICAgICAgbm90aWZ5RG9uZUZpcmVkKCk7Ci0gICAgbV93YWl0
VG9EdW1wID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpw
YXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwp
Ci17Ci0gICAgLy8gRnVuY3Rpb24gaW50cm9kdWNlZCBpbiByMjg2OTAuIFRoaXMgbWF5IG5lZWQg
c3BlY2lhbC1jYXNpbmcgb24gV2luZG93cy4KLSAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJs
KTsgLy8gRG8gbm90aGluZyBvbiBVbml4LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0gICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBVUkxzIGhlcmUKLSAgICBXb3Jr
UXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0odXJsLCB0YXJnZXQpKTsKLX0KLQot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRz
RWRpdGluZykKLXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNj
ZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIChhbmQgcmVzdG9yZSB0aGUgZGVmYXVsdCB2YWx1ZSBiZWZvcmUgcnVubmlu
ZyBlYWNoIHRlc3QgaW4gRHVtcFJlbmRlclRyZWUuY3BwKS4KLX0KLQotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCwgYm9vbCkKLXsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1h
aW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhy
b3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0
eU1vZGUoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykK
LXsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZiBwYXRoKQotewotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVu
dCwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmlu
Z1JlZiBtb2RlKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKLXsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wg
d2FpdFVudGlsRG9uZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVvdXRTZWNvbmRzID0g
MTA7Ci0KLSAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOwotfQotCi1pbnQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZh
dGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9y
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmls
bGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiBlbGVtZW50LCBib29sIGlzQXV0b2ZpbGxlZCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dAotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0
ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpIAotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2Fj
aGVzKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24g
Y2FjaGUgcXVvdGFzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxp
Y2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGUgZm9yIGFu
IG9yaWdpbi4KLX0KLQotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3Jh
Z2VEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5
dGVzIGZvciBhbiBvcmlnaW4uCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcgcXVvdGEpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0
aW9uIGNhY2hlIHF1b3Rhcy4KLX0KLQotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjph
cHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGJ5
IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KLSAgICByZXR1cm4gMDsKLX0K
LQotCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBnZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVzLgotICAgIHJldHVy
biAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17ICAgIAot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Z29CYWNrKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2
aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAotfQotCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0
bWwKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShib29sLCBKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4
aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotfQotCi11bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3Vu
dCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLWJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVt
ZW50SWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJv
b2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRv
dWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KLSAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1Lgot
fQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCi0g
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4K
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3Io
aW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KLSAgICBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwotfQotCi1pbnQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMu
Ci0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2Nr
U3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwg
SlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3Bl
ZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVs
ZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91
dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5NDg1LgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
LCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVN
b2RlbChpbnQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi1ib29sIExheW91dFRl
c3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXNpemVfdCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNl
KEpTU3RyaW5nUmVmIC8qIGtleSAqLywgSlNTdHJpbmdSZWYgLyogdmFsdWUgKi8pCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRV
c2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZy
YW1lcykKLXsKLSAgICBwcmludGYoIkxheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0
IG5vdCBpbXBsZW1lbnRlZC5cbiIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
ZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQotewot
ICAgIHByaW50ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0IG5vdCBp
bXBsZW1lbnRlZC5cbiIpOwotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2Vi
SW5zcGVjdG9yKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGds
b2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotCi19Ci0KLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotCi19
Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQotewot
Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Q
cm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJp
bmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0
cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5n
UmVmIHBvbGljeSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLWludCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCwgZmxvYXQpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiAtMTsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0
YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKLXsKLQotfQotCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQotewotCi19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sKQot
ewotCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShi
b29sKQotewotfQotCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VP
bldlYlZpZXcoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAotewot
ICAgIHJldHVybiAwOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1KU1ZhbHVl
UmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZElu
Zm8oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBK
U1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCi17Ci19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFib3J0TW9kYWwoKQotewotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGlu
dCBwYWdlTnVtYmVyKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICByZXR1
cm4gMDsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0
b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCi19Ci0KLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0Fy
cmF5KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkgewotCi19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVT
dG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotSlNWYWx1
ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250
ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9y
T3JpZ2luKEpTU3RyaW5nUmVmIFVSTCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQot
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVm
IGRpcmVjdGlvbikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKLXsKLX0KLQotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19Ci0KLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvY3VzV2ViVmlldygpCi17Ci19Ci0KLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCi17Ci19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNr
KEpTU3RyaW5nUmVmIHRpdGxlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgotfQotCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5r
RGV0ZWN0aW9uRW5hYmxlZChib29sKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
LX0KLQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpT
U3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYsIEpTU3RyaW5nUmVmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0K
LQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVy
dmFsKGRvdWJsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS93eC9UZXN0UnVubmVyQmxhY2tXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvVGVzdFJ1bm5lckJsYWNrV3guY3BwCShyZXZpc2lv
biAxMjUzMzUpCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9s
bGVyV3guY3BwOjEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L1Rlc3RSdW5uZXJC
bGFja1d4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisKKyNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorI2luY2x1
ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisKKyNpbmNsdWRl
IDxzdGRpby5oPgorCisKKworTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJv
bGxlcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFj
a0ZvcndhcmRMaXN0KCkKK3sKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpc3BsYXkoKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjprZWVwV2ViSGlzdG9yeSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3sKKyAgICBpZiAobV93YWl0VG9E
dW1wICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQorICAgICAgICBub3RpZnlEb25l
RmlyZWQoKTsKKyAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKK30KKworSlNTdHJpbmdSZWYgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBGdW5jdGlvbiBpbnRyb2R1Y2VkIGluIHIy
ODY5MC4gVGhpcyBtYXkgbmVlZCBzcGVjaWFsLWNhc2luZyBvbiBXaW5kb3dzLgorICAgIHJldHVy
biBKU1N0cmluZ1JldGFpbih1cmwpOyAvLyBEbyBub3RoaW5nIG9uIFVuaXguCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5n
UmVmIHRhcmdldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZXNvbHZlIHJlbGF0aXZl
IFVSTHMgaGVyZQorICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbSh1
cmwsIHRhcmdldCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRz
RWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgKGFuZCByZXN0b3JlIHRoZSBkZWZhdWx0
IHZhbHVlIGJlZm9yZSBydW5uaW5nIGVhY2ggdGVzdCBpbiBEdW1wUmVuZGVyVHJlZS5jcHApLgor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShi
b29sLCBib29sKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBjeWNsZXMpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VE
YXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQoYm9vbCBmbGFnKQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2Rl
TWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShib29sIHdp
bmRvd0lzS2V5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZmxhZykKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VW50aWxEb25lKQoreworICAgIHN0YXRpYyBjb25zdCBp
bnQgdGltZW91dFNlY29uZHMgPSAxMDsKKworICAgIG1fd2FpdFRvRHVtcCA9IHdhaXRVbnRpbERv
bmU7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wgZW5hYmxlZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wg
ZmxhZykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIGVsZW1lbnQs
IGJvb2wgaXNBdXRvZmlsbGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBwb3B1
cEJsb2NraW5nRW5hYmxlZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkgCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJp
bmdSZWYgdmFsdWUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0
cmluZ1JlZiBqc1VSTCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
c3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiB1cmwp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBs
aWNhdGlvbiBjYWNoZSBmb3IgYW4gb3JpZ2luLgorfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmln
aW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0
aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1
b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgorfQorCitsb25nIGxvbmcgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNT
dHJpbmdSZWYgb3JpZ2luKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBn
ZXR0aW5nIGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2lu
LgorICAgIHJldHVybiAwOworfQorCisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlv
biBjYWNoZXMuCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisgCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcg
bG9uZyBxdW90YSkKK3sgICAgCisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
dG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGls
ZS1kZWZlcnJpbmctbG9hZHMuaHRtbAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVm
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRp
bWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
RGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9v
bCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3Vi
bGUgZ2FtbWEpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRp
b24gbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzAzMzUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0
aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI4MjY0LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
b2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2wgYWxsb3cpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5
b3V0IHRlc3RzLgorICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9
CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xv
Y2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQs
IGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxh
ZykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRl
c3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQo
SlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJp
bmdSZWYgLypuYW1lKi8pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBm
YWxzZTsKK30KKworc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNv
dW50KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgLyoga2V5ICovLCBKU1N0cmluZ1JlZiAv
KiB2YWx1ZSAqLykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1
bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQoreworICAgIHByaW50ZigiTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZFVzZXJTY3JpcHQgbm90IGltcGxlbWVudGVkLlxuIik7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwg
Ym9vbCBhbGxGcmFtZXMpCit7CisgICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
VXNlclN0eWxlU2hlZXQgbm90IGltcGxlbWVudGVkLlxuIik7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0
b3IoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJp
bmdSZWYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29y
bGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmlu
Z1JlZiBzY3JpcHQpCit7CisKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJs
ZUltYWdlTG9hZGluZygpCit7CisKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0
cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3Qs
IGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3Rp
bmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBv
cmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0LCBm
bG9hdCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIC0xOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJM
KEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKQoreworCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRl
bSgpCit7CisKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmln
YXRpb25FbmFibGVkKGJvb2wpCit7CisKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCit7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJl
ZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5
bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNl
c3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit7Cit9CisKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNo
YXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdl
TnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5S
aWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBK
U09iamVjdFJlZiBvcHRpb25zQXJyYXkpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFs
aXplSFRUUExvYWRzKGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGlu
dGVydmFsKSB7CisKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3Rv
cmFnZSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBu
dW1iZXIpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgVVJMKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHRE
aXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQo
KQoreworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZp
ZWxkKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9jdXNXZWJWaWV3KCkK
K3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9y
KGRvdWJsZSkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNr
dG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlz
aWJpbGl0eSgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5k
V2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50
KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L1Rlc3RSdW5uZXJCbGFj
a1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9UZXN0UnVubmVy
QmxhY2tXeC5jcHAJKHJldmlzaW9uIDEyNTMzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L1Rlc3RSdW5uZXJCbGFja1d4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCkBAIC0zOSw2MDIgKzM5LDYwMyBAQAogCiAKIAot
TGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCitUZXN0UnVubmVy
Ojp+VGVzdFJ1bm5lcigpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVh
ckJhY2tGb3J3YXJkTGlzdCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0
KCkKIHsKIH0KIAotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVk
SG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlE
ZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitKU1N0cmluZ1JlZiBUZXN0
UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjpk
aXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc3BsYXkoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9pZCBUZXN0UnVubmVyOjpr
ZWVwV2ViSGlzdG9yeSgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5
RG9uZSgpCiB7CiAgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+
Y291bnQoKSkKICAgICAgICAgbm90aWZ5RG9uZUZpcmVkKCk7CiAgICAgbV93YWl0VG9EdW1wID0g
ZmFsc2U7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2Nh
bFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCitKU1N0cmlu
Z1JlZiBUZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgLy8gRnVuY3Rpb24gaW50cm9kdWNlZCBpbiByMjg2
OTAuIFRoaXMgbWF5IG5lZWQgc3BlY2lhbC1jYXNpbmcgb24gV2luZG93cy4KICAgICByZXR1cm4g
SlNTdHJpbmdSZXRhaW4odXJsKTsgLy8gRG8gbm90aGluZyBvbiBVbml4LgogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1Jl
ZiB0YXJnZXQpCit2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpT
U3RyaW5nUmVmIHRhcmdldCkKIHsKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZXNvbHZlIHJl
bGF0aXZlIFVSTHMgaGVyZQogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2Fk
SXRlbSh1cmwsIHRhcmdldCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
Y2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQordm9pZCBUZXN0UnVubmVyOjpzZXRB
Y2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQogewogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29v
a2llcykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5
c0FjY2VwdENvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIChhbmQgcmVz
dG9yZSB0aGUgZGVmYXVsdCB2YWx1ZSBiZWZvcmUgcnVubmluZyBlYWNoIHRlc3QgaW4gRHVtcFJl
bmRlclRyZWUuY3BwKS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUoYm9vbCwgYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9s
aWN5RGVsZWdhdGUoYm9vbCwgYm9vbCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIo
Ym9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVy
KGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGN5Y2xl
cykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wg
Y3ljbGVzKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZs
YWcpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQogewogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVm
IHBhdGgpCit2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJp
bmdSZWYgcGF0aCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVG
b3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5n
UmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRW
aWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNL
ZXkoYm9vbCB3aW5kb3dJc0tleSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9v
bCB3aW5kb3dJc0tleSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCB0aW1lb3V0U2Vjb25kcyA9IDEwOwogCiAgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9u
ZTsKIH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCitpbnQgVGVz
dFJ1bm5lcjo6d2luZG93Q291bnQoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6
OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RnJhbWVGbGF0dGVuaW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vz
c0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5h
YmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVl
UmVmIGVsZW1lbnQsIGJvb2wgaXNBdXRvZmlsbGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRv
ZmlsbGVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiBlbGVtZW50LCBib29sIGlzQXV0b2ZpbGxl
ZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9j
a2luZ0VuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RS
dW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1w
bGVtZW50CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkgCitib29sIFRlc3RSdW5uZXI6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkg
CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNT
dHJpbmdSZWYgdmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVm
IG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBlcnNpc3Rl
bnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQogewogICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJz
aXN0ZW50VXNlclN0eWxlU2hlZXQoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhclBlcnNpc3RlbnRV
c2VyU3R5bGVTaGVldCgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3Ry
aW5nUmVmIHVybCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3Jp
Z2luKEpTU3RyaW5nUmVmIHVybCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBv
cnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCiB9CiAKLWxv
bmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3Jp
Z2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6
bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZp
ZXIpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1
c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgogICAgIHJldHVybiAwOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWdu
ZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBUZXN0UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hl
T3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCiB9CiAKLWxvbmcg
bG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9y
aWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRp
b25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBw
bGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCiAgICAgcmV0dXJuIDA7CiB9CiAKIAotSlNW
YWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
KEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVzLgog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERh
dGFiYXNlcygpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAgCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRE
YXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7ICAgIAogICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNr
KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCit2
b2lkIFRlc3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9h
ZHMuaHRtbAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0
aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVu
bmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3Ry
aW5nUmVmKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25n
IGxvbmcgc2l6ZSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXVuc2lnbmVkIExh
eW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAordW5z
aWduZWQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBUZXN0
UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1l
LCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVyOjpw
YXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlO
YW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91
YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92
aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9y
aWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJv
dmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1h
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91
dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMwMzM1LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgogICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBj
b2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9j
YXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4K
ICAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwogfQogCi1pbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKCkKK2ludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0cygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRp
b24gbGF5b3V0IHRlc3RzLgogICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91
YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQordm9pZCBUZXN0UnVubmVyOjph
ZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlk
ZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCit2b2lkIFRlc3RS
dW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKIHsKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlu
cHV0RWxlbWVudCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRS
ZWYgaW5wdXRFbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBp
bnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCit2b2lkIFRlc3RS
dW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK2Jvb2wgVGVzdFJ1
bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5p
bWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2Fj
aGVNb2RlbChpbnQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQor
Ym9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVf
dCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitzaXplX3QgVGVz
dFJ1bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVu
dAogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9y
UG9saWN5RGVsZWdhdGUoKQordm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUo
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIC8qIGtleSAqLywgSlNT
dHJpbmdSZWYgLyogdmFsdWUgKi8pCit2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5j
ZShKU1N0cmluZ1JlZiAvKiBrZXkgKi8sIEpTU3RyaW5nUmVmIC8qIHZhbHVlICovKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxG
cmFtZXMpCit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNl
LCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIHByaW50ZigiTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQgbm90IGltcGxlbWVudGVkLlxuIik7CisgICAg
cHJpbnRmKCJUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmlu
Z1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5
bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIHByaW50
ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0IG5vdCBpbXBsZW1lbnRl
ZC5cbiIpOworICAgIHByaW50ZigiVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQgbm90IGlt
cGxlbWVudGVkLlxuIik7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJ
bnNwZWN0b3IoKQordm9pZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKCkKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3Io
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcg
Y2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlu
a3MoKQordm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3Js
ZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKIHsKIAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmpl
Y3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxv
YWRpbmcoKQogewogCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKQordm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRl
c3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKQordm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJv
dG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucykKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlv
biwgSlNTdHJpbmdSZWYgcG9saWN5KQordm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xp
Y3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVy
T2ZQYWdlcyhmbG9hdCwgZmxvYXQpCitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQYWdlcyhmbG9h
dCwgZmxvYXQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAtMTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFz
ZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4
RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKIHsKIAogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQordm9pZCBUZXN0UnVu
bmVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQogewogCiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCkKIHsKIAog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCiB7CiB9CiAKLWJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCitib29sIFRl
c3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxh
eWVyVHJlZUFzVGV4dCgpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5l
cjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlz
dEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0
ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKIHsK
ICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZikK
K0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZv
KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZikKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNT
dHJpbmdSZWYsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjphdXRoZW50aWNhdGVTZXNz
aW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9y
dE1vZGFsKCkKIHsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250
cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51
bWJlcikgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlUHJv
cGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRv
cCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29u
c3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlU2l6ZUFuZE1hcmdp
bnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFy
Z2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoYm9vbCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQorYm9vbCBUZXN0
UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJn
ZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
ZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRU
UExvYWRzKGJvb2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVydmFs
KSB7Cit2b2lkIFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBpbnRl
cnZhbCkKK3sKIAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0
b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit2b2lkIFRlc3RSdW5u
ZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSgpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotSlNWYWx1ZVJl
ZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0
UmVmIGNvbnRleHQpCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2Fs
U3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0
ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVj
dGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCit2b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJl
Y3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQor
dm9pZCBUZXN0UnVubmVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKIHsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCit2b2lkIFRlc3RSdW5u
ZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpmb2N1c1dlYlZpZXcoKQordm9pZCBUZXN0UnVubmVyOjpmb2N1c1dlYlZpZXcoKQog
ewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3Io
ZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQog
ewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmlj
YXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVE
ZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eSgpCit2b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewog
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoYm9vbCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0
cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5n
UmVmKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYs
IEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5n
UmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJh
c2VJZGxlSW50ZXJ2YWwoZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJh
c2VJZGxlSW50ZXJ2YWwoZG91YmxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158220</attachid>
            <date>2012-08-13 22:57:48 -0700</date>
            <delta_ts>2012-08-14 00:09:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93758-20120813225716.patch</filename>
            <type>text/plain</type>
            <size>604188</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEyNTUwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY2IEBACisyMDEyLTA4LTEzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSBMYXlvdXRUZXN0Q29udHJvbGxlciB0byBUZXN0UnVubmVyIGluIER1
bXBSZW5kZXJUcmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05Mzc1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZWQgTGF5b3V0VGVzdENvbnRyb2xsZXIgdG8gVGVzdFJ1bm5lci4gRm9yIENocm9t
aXVtIHBvcnQsIGl0J3MgcmVuYW1lZCB0byBEUlRUZXN0UnVubmVyCisgICAgICAgIHNpbmNlIGl0
IGFscmVhZHkgaGFzIFRlc3RSdW5uZXIgY2xhc3Mgc2hhcmVkIGJldHdlZW4gRHVtcFJlbmRlclRy
ZWUgYW5kIGNvbnRlbnRfc2hlbGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3Bw
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1
bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rl
c3RSdW5uZXJCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EUlRUZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
UlRUZXN0UnVubmVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJl
bmRlclRyZWUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL05vdGlmaWNh
dGlvblByZXNlbnRlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuY3BwOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBlcm1pc3Npb25zLmg6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0Lmg6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Vm
bC9FZGl0aW5nQ2FsbGJhY2tzLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvVGVz
dFJ1bm5lckVmbC5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJU
cmVlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvRWRpdGluZ0NhbGxiYWNrcy5j
cHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVXaW5kb3cubW06CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvbWFjL0VkaXRpbmdEZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0hpc3RvcnlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvUGl4
ZWxEdW1wU3VwcG9ydE1hYy5tbToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5
RGVsZWdhdGUuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVsZWdhdGUu
bW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Jlc291cmNlTG9hZERlbGVnYXRlLm1t
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9UZXN0
UnVubmVyUXQuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5uZXJRdC5o
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9uUHJl
c2VudGVyLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUu
Y3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9FZGl0aW5nRGVsZWdhdGUuY3BwOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHA6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL0hpc3RvcnlEZWxlZ2F0ZS5jcHA6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2lu
L1VJRGVsZWdhdGUuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJU
cmVlV3guY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L1Rlc3RSdW5uZXJXeC5jcHA6
CisKIDIwMTItMDgtMTMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmVuYW1lIGZpbGVzIHRoYXQgZGVjbGFyZSBhbmQgZGVmaW5lIExheW91dFRlc3RDb250cm9s
bGVyIGluIER1bXBSZW5kZXJUcmVlCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLmgJKHJldmlzaW9uIDEyNTUwNykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSwxMiBAQAogc3RkOjp3c3RyaW5n
IHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChjb25zdCBzdGQ6OndzdHJpbmcmIHVybCk7CiAjZW5k
aWYKIAotY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXI7CitjbGFzcyBUZXN0UnVubmVyOwogCiBl
eHRlcm4gdm9sYXRpbGUgYm9vbCBkb25lOwogCiAvLyBGSVhNRTogVGhpcyBpcyBhIGJhZCBhYnN0
cmFjdGlvbi4gIFdlIHNob3VsZCBpbnN0ZWQgcGFzcyB0aGlzIHRvIG90aGVyIGNvbnRyb2xsZXIg
b2JqZWN0cyB3aGljaCBuZWVkIGFjY2VzcyB0byBpdC4KLWV4dGVybiBSZWZQdHI8TGF5b3V0VGVz
dENvbnRyb2xsZXI+IGdMYXlvdXRUZXN0Q29udHJvbGxlcjsKK2V4dGVybiBSZWZQdHI8VGVzdFJ1
bm5lcj4gZ1Rlc3RSdW5uZXI7CiAKIHZvaWQgZHVtcCgpOwogdm9pZCBkaXNwbGF5V2ViVmlldygp
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5jcHAJKHJldmlz
aW9uIDEyNTUwOCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksMTEgQEAgdm9pZCBkdW1wV2ViVmlld0FzUGl4
ZWxzQW5kQ29tcGFyZVdpdGhFeAogewogICAgIFJlZlB0cjxCaXRtYXBDb250ZXh0PiBjb250ZXh0
OwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc1By
aW50aW5nKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5pc1ByaW50aW5nKCkpCiAgICAgICAgIGNv
bnRleHQgPSBjcmVhdGVQYWdlZEJpdG1hcENvbnRleHQoKTsKICAgICBlbHNlCiAjZW5kaWYKLSAg
ICAgICAgY29udGV4dCA9IGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyhnTGF5b3V0VGVz
dENvbnRyb2xsZXItPnRlc3RPbnNjcmVlbigpLCBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnRlc3RS
ZXBhaW50KCksIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+dGVzdFJlcGFpbnRTd2VlcEhvcml6b250
YWxseSgpLCBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTZWxlY3Rpb25SZWN0KCkpOworICAg
ICAgICBjb250ZXh0ID0gY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KGdUZXN0UnVubmVy
LT50ZXN0T25zY3JlZW4oKSwgZ1Rlc3RSdW5uZXItPnRlc3RSZXBhaW50KCksIGdUZXN0UnVubmVy
LT50ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KCksIGdUZXN0UnVubmVyLT5kdW1wU2VsZWN0
aW9uUmVjdCgpKTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSB0
aGUgaGFzaCBvZiB0aGUgYml0bWFwIGNvbnRleHQgcGl4ZWxzCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZS5oCShyZXZpc2lvbiAxMjU1MDcpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdlVHJhY2tlckRlbGVnYXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDE1ICsyMywxNSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotY2xhc3Mg
TGF5b3V0VGVzdENvbnRyb2xsZXI7CitjbGFzcyBUZXN0UnVubmVyOwogCiBAaW50ZXJmYWNlIFN0
b3JhZ2VUcmFja2VyRGVsZWdhdGUgOiBOU09iamVjdCB7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZO
b3RpZmljYXRpb25zVG9Mb2c7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXJU
b05vdGlmeURvbmU7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlclRvTm90aWZ5RG9uZTsKIH0K
IAotLSAodm9pZClsb2dOb3RpZmljYXRpb25zOih1bnNpZ25lZCludW1iZXIgY29udHJvbGxlcjoo
TGF5b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CistICh2b2lkKWxvZ05vdGlmaWNhdGlv
bnM6KHVuc2lnbmVkKW51bWJlciBjb250cm9sbGVyOihUZXN0UnVubmVyKiljb250cm9sbGVyOwog
LSAodm9pZClvcmlnaW5Nb2RpZmllZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247Ci0t
ICh2b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6KExheW91dFRlc3RDb250cm9sbGVyKilj
b250cm9sbGVyOworLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihUZXN0UnVubmVy
Kiljb250cm9sbGVyOwogCiBAZW5kCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9TdG9yYWdl
VHJhY2tlckRlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1N0
b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0JKHJldmlzaW9uIDEyNTUwOCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1N0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDcgQEAgLSAoaWQpaW5pdAogICAgIHJldHVybiBzZWxmOwogfQogCi0tICh2b2lkKWxv
Z05vdGlmaWNhdGlvbnM6KHVuc2lnbmVkKW51bWJlciBjb250cm9sbGVyOihMYXlvdXRUZXN0Q29u
dHJvbGxlciopY29udHJvbGxlcgorLSAodm9pZClsb2dOb3RpZmljYXRpb25zOih1bnNpZ25lZClu
dW1iZXIgY29udHJvbGxlcjooVGVzdFJ1bm5lciopY29udHJvbGxlcgogewogICAgIGNvbnRyb2xs
ZXJUb05vdGlmeURvbmUgPSBjb250cm9sbGVyOwogCkBAIC03Myw3ICs3Myw3IEBAIC0gKHZvaWQp
ZGVhbGxvYwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAodm9pZClzZXRDb250cm9sbGVy
VG9Ob3RpZnlEb25lOihMYXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcgorLSAodm9pZClz
ZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihUZXN0UnVubmVyKiljb250cm9sbGVyCiB7CiAgICAg
Y29udHJvbGxlclRvTm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7CiB9CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLUxh
eW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBzdGQ6OnN0cmlu
ZyYgdGVzdFBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKQor
VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcihjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVSTCwg
Y29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKQogICAgIDogbV9kaXNhbGxvd0lu
Y3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKGZhbHNlKQogICAgICwgbV9kdW1wQXBwbGlj
YXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9kdW1wQXNBdWRpbyhm
YWxzZSkKQEAgLTEwMCwzNyArMTAwLDM3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRU
ZXN0Q29udHJvbGwKIHsKIH0KIAotUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVS
TCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKQorUGFzc1JlZlB0cjxUZXN0
UnVubmVyPiBUZXN0UnVubmVyOjpjcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JV
UkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IExheW91dFRlc3RDb250cm9sbGVyKHRlc3RQYXRoT3JVUkwsIGV4cGVjdGVk
UGl4ZWxIYXNoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXN0UnVubmVyKHRlc3RQYXRo
T3JVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKSk7CiB9CiAKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAog
c3RhdGljIEpTVmFsdWVSZWYgZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90
YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YSh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdh
dGVDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBBcHBsaWNhdGlvbkNh
Y2hlRGVsZWdhdGVDYWxsYmFja3ModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXNQREZDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGNvbnRyb2xsZXItPnNldER1bXBBc1BERih0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBBc1RleHRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7CiAKICAgICAvLyBP
cHRpb25hbCBwYXJhbWF0ZXIsIGRlc2NyaWJpbmcgd2hldGhlciBpdCdzIGFsbG93ZWQgdG8gZHVt
cCBwaXhlbCByZXN1bHRzIGluIGR1bXBBc1RleHQgbW9kZS4KQEAgLTE0MSwxMTkgKzE0MSwxMTkg
QEAgc3RhdGljIEpTVmFsdWVSZWYgZHVtcEFzVGV4dENhbGxiYWNrKEpTQwogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBkdW1wQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRE
dW1wQmFja0ZvcndhcmRMaXN0KHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcENoaWxkRnJhbWVzQXNUZXh0
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wQ2hpbGRGcmFtZXNBc1RleHQodHJ1ZSk7
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMg
SlNWYWx1ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+c2V0RHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnModHJ1ZSk7CiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBE
YXRhYmFzZUNhbGxiYWNrcyh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBET01Bc1dlYkFyY2hpdmVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBET01Bc1dlYkFyY2hpdmUodHJ1ZSk7CiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1
ZVJlZiBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVt
cEVkaXRpbmdDYWxsYmFja3ModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUp
OwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGlj
IEpTVmFsdWVSZWYgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFja0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+c2V0RHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayh0cnVlKTsKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5zZXREdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNl
dER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3ModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wUmVzb3VyY2VS
ZXNwb25zZU1JTUVUeXBlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFJlc291cmNl
UmVzcG9uc2VNSU1FVHlwZXModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wU2VsZWN0aW9uUmVjdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFNlbGVjdGlvblJlY3QodHJ1ZSk7CiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wU291cmNlQXNXZWJBcmNoaXZlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXREdW1w
U291cmNlQXNXZWJBcmNoaXZlKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgZHVtcFN0YXR1c0NhbGxiYWNrc0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFN0YXR1c0NhbGxiYWNrcyh0cnVlKTsKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1Zh
bHVlUmVmIGR1bXBUaXRsZUNoYW5nZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBU
aXRsZUNoYW5nZXModHJ1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wSWNvbkNoYW5nZXNDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAg
IGNvbnRyb2xsZXItPnNldER1bXBJY29uQ2hhbmdlcyh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBXaWxs
Q2FjaGVSZXNwb25zZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0
UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFdpbGxDYWNoZVJl
c3BvbnNlKHRydWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IH0KQEAgLTI2Myw3ICsyNjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBwYXRoVG9Mb2NhbFJlc291
cmNlQ2FsCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxvY2FsUGF0aChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBwYXRoVG9M
b2NhbFJlc291cmNlQ2FsCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUFsbFZpc2l0ZWRMaW5r
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrKHRy
dWUpOwogICAgIGNvbnRyb2xsZXItPnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpOwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTI4NCw3ICsyODQsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiByZW1vdmVBbGxWaXNpdGVkTGlua3NDCiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IHJlcGFpbnRTd2VlcEhvcml6b250YWxseUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0VGVz
dFJlcGFpbnRTd2VlcEhvcml6b250YWxseSh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0yOTQsMTQgKzI5NCwxNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBzZXRDYWxsQ2xvc2VPbldlYlZpZXdzCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0Q2FsbENsb3NlT25XZWJWaWV3cyhK
U1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgc2V0Q2Fu
T3BlbldpbmRvd3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldENhbk9wZW5XaW5kb3dzKHRy
dWUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTMx
MSw3ICszMTEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvCiAg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxl
ci0+c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEVu
Y29kZWRBdWRpb0RhdGFDYWwKICAgICBPd25BcnJheVB0cjxjaGFyPiBlbmNvZGVkQXVkaW9EYXRh
QnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CiAgICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhlbmNvZGVkQXVkaW9EYXRhLmdldCgpLCBlbmNvZGVkQXVkaW9E
YXRhQnVmZmVyLmdldCgpLCBtYXhMZW5ndGggKyAxKTsKIAotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5zZXRFbmNvZGVkQXVkaW9EYXRhKGVuY29kZWRBdWRpb0RhdGFC
dWZmZXIuZ2V0KCkpOwogICAgIGNvbnRyb2xsZXItPnNldER1bXBBc0F1ZGlvKHRydWUpOwogICAg
IApAQCAtMzM3LDE0ICszMzcsMTQgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0RW5jb2RlZEF1ZGlv
RGF0YUNhbAogCiBzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0T25zY3JlZW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNv
bnRyb2xsZXItPnNldFRlc3RPbnNjcmVlbih0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHRlc3RSZXBhaW50Q2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRUZXN0UmVwYWludCh0cnVlKTsKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0zNTgsNyArMzU4LDcgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgYWRkRGlzYWxsb3dlZFVSTENhbGxiYQogICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiB1cmwoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFkZERpc2FsbG93ZWRVUkwodXJsLmdl
dCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTM4
Myw3ICszODMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBhZGRVUkxUb1JlZGlyZWN0Q2FsbGJhCiAg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gZGVzdGluYXRpb25CdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5l
dyBjaGFyW21heExlbmd0aCArIDFdKTsKICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGRlc3Rp
bmF0aW9uLmdldCgpLCBkZXN0aW5hdGlvbkJ1ZmZlci5nZXQoKSwgbWF4TGVuZ3RoICsgMSk7CiAK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+YWRkVVJMVG9SZWRpcmVj
dChvcmlnaW5CdWZmZXIuZ2V0KCksIGRlc3RpbmF0aW9uQnVmZmVyLmdldCgpKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTM5Miw3ICszOTIsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBhZGRVUkxUb1JlZGlyZWN0Q2FsbGJhCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVu
bmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIGNvbnRyb2xsZXItPmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpKTsKIH0KQEAgLTQwMCw3
ICs0MDAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpCiBzdGF0
aWMgSlNWYWx1ZVJlZiBjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0
UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Y2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcygpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFyQXBwbGljYXRpb25DYWNo
ZUYKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3JpZ2luVVJMKEFkb3B0LCBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4ob3JpZ2luVVJMLmdldCgpKTsKICAg
ICAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC00MjgsMjEg
KzQyOCwyMSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBhcHBsaWNhdGlvbkNhY2hlRGlza1VzCiAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9yaWdpblVSTChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CiAgICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPmFwcGxpY2F0aW9uQ2FjaGVEaXNr
VXNhZ2VGb3JPcmlnaW4ob3JpZ2luVVJMLmdldCgpKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IG9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIGNvbnRyb2xs
ZXItPm9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShjb250ZXh0KTsKIH0KIAogc3RhdGljIEpT
VmFsdWVSZWYgY2xlYXJBbGxEYXRhYmFzZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVu
bmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Y2xlYXJBbGxEYXRhYmFzZXMoKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTQ1MCw3ICs0
NTAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVhckFsbERhdGFiYXNlc0NhbGxiCiAKIHN0YXRp
YyBKU1ZhbHVlUmVmIHN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgY29udHJvbGxlci0+
c3luY0xvY2FsU3RvcmFnZSgpOwogCkBAIC00NTksNyArNDU5LDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgc3luY0xvY2FsU3RvcmFnZUNhbGxiYQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBvYnNlcnZlU3Rv
cmFnZVRyYWNrZXJOb3RpZmljYXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAogICAgIGlmIChhcmd1bWVudENvdW50
IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAt
NDc1LDcgKzQ3NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG9ic2VydmVTdG9yYWdlVHJhY2tlck4K
IAogc3RhdGljIEpTVmFsdWVSZWYgZGVsZXRlQWxsTG9jYWxTdG9yYWdlQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5kZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBkZWxldGVBbGxMb2NhbFN0b3JhZ2VDCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRlbGV0ZUxv
Y2FsU3RvcmFnZUZvck9yaWdpbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTQ5OCw3
ICs0OTgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPCiAKIHN0
YXRpYyBKU1ZhbHVlUmVmIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbkNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAK
ICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKQEAgLTUxMSwxNCArNTExLDE0IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGxvY2FsU3RvcmFnZURpc2tVc2FnZUYKIAogc3RhdGljIEpTVmFsdWVSZWYgb3JpZ2luc1dpdGhM
b2NhbFN0b3JhZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBjb250cm9sbGVyLT5vcmlnaW5zV2l0aExv
Y2FsU3RvcmFnZShjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgY2xlYXJCYWNrRm9y
d2FyZExpc3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8g
SGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CiAgICAgY29udHJvbGxlci0+Y2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTUyNyw3ICs1MjcsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiBjbGVhckJhY2tGb3J3YXJkTGlzdENhCiBzdGF0aWMgSlNWYWx1ZVJlZiBjbGVh
clBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5jbGVhclBlcnNpc3RlbnRVc2VyU3R5
bGVTaGVldCgpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtNTQyLDcgKzU0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRlY29kZUhvc3ROYW1lQ2FsbGJh
Y2sKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbmFtZShBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGRlY29kZWRIb3N0TmFtZShBZG9wdCwgY29udHJvbGxlci0+Y29weURlY29k
ZWRIb3N0TmFtZShuYW1lLmdldCgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNv
bnRleHQsIGRlY29kZWRIb3N0TmFtZS5nZXQoKSk7CiB9CkBAIC01NTAsNyArNTUwLDcgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgZGVjb2RlSG9zdE5hbWVDYWxsYmFjawogc3RhdGljIEpTVmFsdWVSZWYg
ZGlzYWJsZUltYWdlTG9hZGluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKICAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uLCBuZWVkcyB3aW5kb3dzIGltcGxlbWVu
dGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmRpc2FibGVJ
bWFnZUxvYWRpbmcoKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CkBAIC01NTksNyArNTU5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZGlzYWJsZUltYWdl
TG9hZGluZ0NhbAogc3RhdGljIEpTVmFsdWVSZWYgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3Rz
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMg
aW1wbGVtZW50YXRpb24sIG5lZWRzIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3Rz
KCk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAt
NTY4LDcgKzU2OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXEK
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVu
bmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+ZGlzcGxheSgpOwogCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNTc3LDggKzU3Nyw4IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlDYWxsYmFjayhKU0NvbnQKIHN0YXRpYyBKU1ZhbHVlUmVm
IGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIC8vIExheW91
dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkgb25seSByZW5kZXJzIHRoZSBpbnZhbGlkYXRlZCBy
ZWdpb24gc28KKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgLy8gVGVzdFJ1bm5l
cjo6ZGlzcGxheSgpIG9ubHkgcmVuZGVycyB0aGUgaW52YWxpZGF0ZWQgcmVnaW9uIHNvCiAgICAg
Ly8gd2UgY2FuIGp1c3QgdXNlIHRoYXQuCiAgICAgY29udHJvbGxlci0+ZGlzcGxheSgpOwogCkBA
IC01OTQsNyArNTk0LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZW5jb2RlSG9zdE5hbWVDYWxsYmFj
awogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBuYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVu
bmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gZW5jb2RlZEhvc3ROYW1lKEFkb3B0LCBjb250cm9sbGVyLT5jb3B5RW5jb2Rl
ZEhvc3ROYW1lKG5hbWUuZ2V0KCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29u
dGV4dCwgZW5jb2RlZEhvc3ROYW1lLmdldCgpKTsKIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpTCiAgICAgICAgIHZhbHVlLmFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAKIAotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBjb250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5n
ZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC02
MzYsMTMgKzYzNiwxMyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlND
CiAgICAgSlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1
bWVudHNbMV0sIGV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0LmdldCgpLCBvcHRpb25zKSk7
CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdvQmFja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
Z29CYWNrKCk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwpAQCAtNjU0LDcgKzY1NCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdyYW50RGVza3RvcE5vdGlm
aWNhdGkKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAogICAg
IGNvbnRyb2xsZXItPmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIE5VTEwpKTsKICAgICAgICAgCkBAIC02
NzEsNyArNjcxLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgaXNDb21tYW5kRW5hYmxlZENhbGxiYQog
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBuYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEqZXhj
ZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+aXNDb21tYW5kRW5hYmxlZChuYW1lLmdl
dCgpKSk7CiB9CkBAIC02ODYsNyArNjg2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQ
cmVmZXJlbmNlQ2FsbAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZShBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+b3ZlcnJpZGVQcmVmZXJlbmNlKGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtNjk1LDcgKzY5
NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG92ZXJyaWRlUHJlZmVyZW5jZUNhbGwKIHN0YXRpYyBK
U1ZhbHVlUmVmIGtlZXBXZWJIaXN0b3J5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgY29udHJvbGxlci0+a2VlcFdlYkhpc3RvcnkoKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTcwNywxNCArNzA3LDE0IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmcKICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIAogICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50
YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXItPmNv
bXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
fQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBsYXllclRyZWVBc1RleHRDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50
YXRpb24KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3Ry
aW5nKGNvbnRleHQsIGNvbnRyb2xsZXItPmxheWVyVHJlZUFzVGV4dCgpLmdldCgpKTsKIH0KIApA
QCAtNzIyLDE1ICs3MjIsMTUgQEAgc3RhdGljIEpTVmFsdWVSZWYgbm90aWZ5RG9uZUNhbGxiYWNr
KEpTQwogewogICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCiAgICAgLy8g
TWF5IGJlIGFibGUgdG8gYmUgbWFkZSBwbGF0Zm9ybSBpbmRlcGVuZGFudCBieSB1c2luZyBzaGFy
ZWQgV29ya1F1ZXVlCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPm5v
dGlmeURvbmUoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9
CiAKIHN0YXRpYyBib29sIHBhcnNlUGFnZVBhcmFtZXRlcnMoSlNDb250ZXh0UmVmIGNvbnRleHQs
IGludCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmKiBhcmd1bWVudHMsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbiwgZmxvYXQmIHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCYgcGFnZUhlaWdo
dEluUGl4ZWxzKQogewotICAgIHBhZ2VXaWR0aEluUGl4ZWxzID0gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om1heFZpZXdXaWR0aDsKLSAgICBwYWdlSGVpZ2h0SW5QaXhlbHMgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bWF4Vmlld0hlaWdodDsKKyAgICBwYWdlV2lkdGhJblBpeGVscyA9IFRlc3RSdW5u
ZXI6Om1heFZpZXdXaWR0aDsKKyAgICBwYWdlSGVpZ2h0SW5QaXhlbHMgPSBUZXN0UnVubmVyOjpt
YXhWaWV3SGVpZ2h0OwogICAgIHN3aXRjaCAoYXJndW1lbnRDb3VudCkgewogICAgIGNhc2UgMjoK
ICAgICAgICAgcGFnZVdpZHRoSW5QaXhlbHMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CkBAIC04MjgsMTMgKzgy
OCwxMyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBudW1iZXJPZlBhZ2VzQ2FsbGJhY2soCiAgICAgaWYg
KCFwYXJzZVBhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
ZXhjZXB0aW9uLCBwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBjb250cm9s
bGVyLT5udW1iZXJPZlBhZ2VzKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMp
KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0LCBjb250cm9sbGVyLT5udW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cygpKTsKIH0KIApAQCAtODQ1LDcgKzg0NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHBhZ2VQ
cm9wZXJ0eUNhbGxiYWNrKEoKICAgICBpZiAoIXBhcnNlUGFnZVByb3BlcnR5UGFyYW1ldGVycyhj
b250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgcHJvcGVydHlOYW1l
LCBwYWdlTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBjb250cm9sbGVyLT5wYWdlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBwYWdlTnVtYmVyKS5nZXQoKSk7CiAKICAgICBkZWxldGVbXSBwcm9wZXJ0eU5hbWU7
CkBAIC04NjAsNyArODYwLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGFnZVNpemVBbmRNYXJnaW5z
SW5QaQogICAgIGlmICghcGFyc2VQYWdlTnVtYmVyU2l6ZU1hcmluZ3MoY29udGV4dCwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQs
IG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29udHJv
bGxlci0+cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMocGFnZU51bWJlciwgd2lkdGgsIGhlaWdo
dCwgbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KS5nZXQo
KSk7CiB9CiAKQEAgLTg3NCw3ICs4NzQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUJhY2tO
YXZpZ2F0aW9uQ2FsCiAgICAgZG91YmxlIGhvd0ZhckJhY2tEb3VibGUgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+cXVldWVC
YWNrTmF2aWdhdGlvbihzdGF0aWNfY2FzdDxpbnQ+KGhvd0ZhckJhY2tEb3VibGUpKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTg5MCw3ICs4OTAsNyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uCiAgICAgZG91YmxlIGhv
d0ZhckZvcndhcmREb3VibGUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+cXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGF0aWNf
Y2FzdDxpbnQ+KGhvd0ZhckZvcndhcmREb3VibGUpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTkxMyw3ICs5MTMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBxdWV1ZUxvYWRDYWxsYmFjayhKU0NvCiAgICAgfSBlbHNlCiAgICAgICAgIHRhcmdldC5hZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQo
KSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC05MzUs
NyArOTM1LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmluZ0NhbAogICAg
IH0gZWxzZQogICAgICAgICBiYXNlVVJMLmFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCIiKSk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBpZiAoYXJndW1lbnRD
b3VudCA+PSAzKSB7CiAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB1bnJlYWNoYWJs
ZVVSTDsKQEAgLTk1NCw3ICs5NTQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZVJlbG9hZENh
bGxiYWNrKEpTCiAgICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KICAgICAv
LyBNYXkgYmUgYWJsZSB0byBiZSBtYWRlIHBsYXRmb3JtIGluZGVwZW5kYW50IGJ5IHVzaW5nIHNo
YXJlZCBXb3JrUXVldWUKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0
UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVy
LT5xdWV1ZVJlbG9hZCgpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwpAQCAtOTcwLDcgKzk3MCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZGluZ1Nj
cmlwdENhbGwKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250
cm9sbGVyLT5xdWV1ZUxvYWRpbmdTY3JpcHQoc2NyaXB0LmdldCgpKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiBxdWV1ZU5vbkxvYWRpbmdTY3JpcHRDCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+cXVldWVOb25Mb2FkaW5nU2NyaXB0KHNj
cmlwdC5nZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CkBAIC05OTgsNyArOTk4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QWNjZXB0c0VkaXRpbmdD
YWxsYgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNv
bnRyb2xsZXItPnNldEFjY2VwdHNFZGl0aW5nKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBbHdheXNBY2NlcHRD
b29raWVzCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+c2V0QWx3YXlzQWNjZXB0Q29va2llcyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QXBwQ2Fj
aGVNYXhpbXVtU2l6ZQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogCiAgICAgZG91YmxlIHNpemUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBOVUxMKTsKICAgICBpZiAoIWlzbmFuKHNpemUpKQpAQCAtMTAzNyw3ICsxMDM3LDcgQEAg
c3RhdGljIEpTVmFsdWVSZWYgc2V0QXBwbGljYXRpb25DYWNoZU9yaQogICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogCiAgICAgZG91YmxlIHNpemUgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsKICAgICBpZiAoIWlzbmFuKHNp
emUpKQpAQCAtMTA1OSw3ICsxMDU5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aGVudGlj
YXRpb25QYXNzdwogICAgIGNoYXIqIHBhc3N3b3JkQnVmZmVyID0gbmV3IGNoYXJbbWF4TGVuZ3Ro
ICsgMV07CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhwYXNzd29yZC5nZXQoKSwgcGFzc3dv
cmRCdWZmZXIsIG1heExlbmd0aCArIDEpOwogICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICBjb250cm9sbGVyLT5zZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKHBhc3N3b3JkQnVmZmVy
KTsKICAgICBkZWxldGVbXSBwYXNzd29yZEJ1ZmZlcjsKIApAQCAtMTA3OSw3ICsxMDc5LDcgQEAg
c3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aGVudGljYXRpb25Vc2VybgogICAgIGNoYXIqIHVzZXJu
YW1lQnVmZmVyID0gbmV3IGNoYXJbbWF4TGVuZ3RoICsgMV07CiAgICAgSlNTdHJpbmdHZXRVVEY4
Q1N0cmluZyh1c2VybmFtZS5nZXQoKSwgdXNlcm5hbWVCdWZmZXIsIG1heExlbmd0aCArIDEpOwog
ICAgIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRBdXRoZW50
aWNhdGlvblVzZXJuYW1lKHVzZXJuYW1lQnVmZmVyKTsKICAgICBkZWxldGVbXSB1c2VybmFtZUJ1
ZmZlcjsKIApAQCAtMTA5Miw3ICsxMDkyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aG9y
QW5kVXNlclN0eWxlcwogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMTAzLDcgKzExMDMsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBzZXRBdXRvZmlsbGVkQ2FsbGJhY2soCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMiB8
fCAhYXJndW1lbnRzWzBdKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0QXV0
b2ZpbGxlZChjb250ZXh0LCBhcmd1bWVudHNbMF0sIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzFdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CkBAIC0xMTE4LDcgKzExMTgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRDYWNoZU1vZGVs
Q2FsbGJhY2soCiAgICAgaW50IGNhY2hlTW9kZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0
UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0Q2FjaGVNb2RlbChjYWNo
ZU1vZGVsKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAg
LTExMzQsNyArMTEzNCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEN1c3RvbVBvbGljeURlbGVn
YXQKICAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKQogICAgICAgICBwZXJtaXNzaXZlID0gSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEN1c3RvbVBvbGljeURlbGVnYXRlKEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSwgcGVybWlzc2l2ZSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMTQ2LDcgKzExNDYsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXREYXRhYmFzZVF1b3RhQ2FsbGJhCiAgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBkb3VibGUgcXVvdGEgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBOVUxMKTsKICAgICBpZiAoIWlzbmFuKHF1
b3RhKSkKQEAgLTExNjEsNyArMTE2MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldERlZmVyTWFp
blJlc291cmNlRGEKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICBjb250cm9sbGVyLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXREZWZlcnNMb2FkaW5nQ2FsbGJhCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RGVmZXJzTG9hZGluZyhKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTE4Myw3ICsxMTgzLDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgc2V0VXNlRGVmZXJyZWRGcmFtZUxvYQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFVzZURlZmVycmVkRnJhbWVMb2FkaW5n
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMTk1LDcgKzExOTUsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBzZXREb21haW5SZWxheGF0aW9uRm9yCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKICAgICBib29sIGZvcmJpZGRlbiA9IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gc2NoZW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1sxXSwgMCkpOwpAQCAtMTIxOSw3ICsxMjE5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9j
a0RldmljZU9yaWVudGF0aQogICAgIGRvdWJsZSBnYW1tYSA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0
TW9ja0RldmljZU9yaWVudGF0aW9uKGNhblByb3ZpZGVBbHBoYSwgYWxwaGEsIGNhblByb3ZpZGVC
ZXRhLCBiZXRhLCBjYW5Qcm92aWRlR2FtbWEsIGdhbW1hKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHNldE1vY2tHZW9sb2NhdGlvblBvc2kKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgTlVM
TCksICAvLyBsYXRpdHVkZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIE5VTEwpLCAgLy8gbG9u
Z2l0dWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgTlVMTCkpOyAgLy8gYWNjdXJhY3kKQEAg
LTEyNDcsNyArMTI0Nyw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tHZW9sb2NhdGlvbkVy
cm8KICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbWVzc2FnZShBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJl
dF9jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAg
IGNvbnRyb2xsZXItPnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvZGUsIG1lc3NhZ2UuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTI2Niw3
ICsxMjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgYWRkTW9ja1NwZWVjaElucHV0UmVzdQogICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsYW5ndWFnZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+YWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KHJlc3VsdC5nZXQoKSwgY29uZmlkZW5jZSwgbGFuZ3VhZ2Uu
Z2V0KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAt
MTI3OSw3ICsxMjc5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0TW9ja1NwZWVjaElucHV0RHVt
cAogCiAgICAgYm9vbCBkdW1wUmVjdCA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1l
bnRzWzBdKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRN
b2NrU3BlZWNoSW5wdXREdW1wUmVjdChkdW1wUmVjdCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMjkxLDcgKzEyOTEsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBzZXROZXdXaW5kb3dzQ29weUJhY2tGCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldE5ld1dpbmRvd3NDb3B5QmFj
a0ZvcndhcmRMaXN0KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xMzAzLDcgKzEz
MDMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRHZW9sb2NhdGlvblBlcm1pc3NpCiAgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRz
WzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0x
MzE1LDcgKzEzMTUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRIYW5kbGVzQXV0aGVudGljYXRp
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJv
bGxlci0+c2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwpAQCAtMTMyNiw3ICsxMzI2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0
UE9TSVhMb2NhbGVDYWxsYmFjawogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsb2NhbGUoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKICAgICBB
U1NFUlQoISpleGNlcHRpb24pOwogICAgIGNvbnRyb2xsZXItPnNldFBPU0lYTG9jYWxlKGxvY2Fs
ZS5nZXQoKSk7CkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRJY29u
RGF0YWJhc2VFbmFibGVkCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CiAgICAgY29udHJvbGxlci0+c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwpAQCAtMTM1Miw3ICsxMzUyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0TWFpbkZyYW1lSXNGaXJzdFJlcwogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIo
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldFBlcnNpc3RlbnRVc2VyU3R5bGUKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcGF0aChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24ocGF0aC5nZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CkBAIC0xMzc5LDcgKzEzNzksNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRQ
cml2YXRlQnJvd3NpbmdFbmFiCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChKU1ZhbHVl
VG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTM5MSw3ICsxMzkxLDcgQEAgc3RhdGljIEpTVmFs
dWVSZWYgc2V0SmF2YVNjcmlwdENhbkFjY2VzcwogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5
b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEphdmFTY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE0MDMsNyArMTQwMyw3
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFhTU0F1ZGl0b3JFbmFibGVkQ2EKICAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRYU1NB
dWRpdG9yRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwog
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTQxNSw3ICsx
NDE1LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0U3BhdGlhbE5hdmlnYXRpb25FbgogICAgIGlm
IChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNl
dFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpA
QCAtMTQyMyw3ICsxNDIzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0U3BhdGlhbE5hdmlnYXRp
b25FbgogCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRQcmludGluZ0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJv
bGxlci0+c2V0SXNQcmludGluZyh0cnVlKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiB9CkBAIC0xNDM1LDcgKzE0MzUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRGcmFtZUZsYXR0ZW5pbmdFbmFiCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgc2V0QWxsb3dVbml2ZXJzYWxBY2NlcwogICAgIGlmIChhcmd1bWVudENvdW50IDwg
MSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNDU5LDcg
KzE0NTksNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRUYWJLZXlDeWNs
ZXNUaHJvdWdoCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgY29udHJvbGxlci0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CkBAIC0xNDgzLDcgKzE0ODMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBzZXRVc2VEYXNoYm9hcmRDb21wYXRpCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0
eU1vZGUoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE0OTUsNyArMTQ5NSw3IEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIHNldFVzZXJTdHlsZVNoZWV0RW5hYmwKICAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRVc2VyU3R5
bGVTaGVldEVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE1MTAsNyAr
MTUxMCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFVzZXJTdHlsZVNoZWV0TG9jYXQKICAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGF0aChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbihwYXRoLmdldCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKQEAgLTE1MjUsNyArMTUyNSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IHNldFZhbHVlRm9yVXNlckNhbGxiYWMKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFs
dWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldFZhbHVlRm9yVXNlcihjb250ZXh0LCBhcmd1bWVudHNb
MF0sIHZhbHVlLmdldCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKQEAgLTE1NDAsNyArMTU0MCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFZpZXdNb2Rl
TWVkaWFGZWF0dXIKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbW9kZShBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwogICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+c2V0Vmlld01vZGVNZWRpYUZlYXR1cmUobW9kZS5nZXQoKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNTU5LDcgKzE1NTksNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRXaWxsU2VuZFJlcXVlc3RDbGVhCiAgICAgT3duQXJyYXlQdHI8
Y2hhcj4gaGVhZGVyQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAx
XSk7CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhoZWFkZXIuZ2V0KCksIGhlYWRlckJ1ZmZl
ci5nZXQoKSwgbWF4TGVuZ3RoICsgMSk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoaGVhZGVyQnVmZmVyLmdl
dCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE1
NzEsNyArMTU3MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFdpbGxTZW5kUmVxdWVzdFJldHUK
ICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5zZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwpAQCAtMTU4Myw3ICsxNTgzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0V2lsbFNl
bmRSZXF1ZXN0UmV0dQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVj
dChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogCiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTU5NSw3ICsxNTk1LDcgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgc2V0V2luZG93SXNLZXlDYWxsYmFjawogICAgIGlmIChhcmd1bWVudENv
dW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
VGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFdpbmRvd0lzS2V5
KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNjA0LDcgKzE2MDQsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBzZXRXaW5kb3dJc0tleUNhbGxiYWNrCiBzdGF0aWMgSlNWYWx1ZVJlZiB3
YWl0VW50aWxEb25lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnNldFdhaXRUb0R1bXAodHJ1ZSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xNjEzLDcgKzE2MTMsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiB3YWl0VW50aWxEb25lQ2FsbGJhY2soCiBzdGF0aWMgSlNWYWx1ZVJlZiB3
aW5kb3dDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICAv
LyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGlu
dCB3aW5kb3dzID0gY29udHJvbGxlci0+d2luZG93Q291bnQoKTsKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgd2luZG93cyk7CiB9CkBAIC0xNjI0LDcgKzE2MjQsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRQb3B1cEJsb2NraW5nRW5hYmxlCiAgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0UG9wdXBCbG9j
a2luZ0VuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE2MzYsNyArMTYz
Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFBsdWdpbnNFbmFibGVkQ2FsbGIKICAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKICAgICAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
c2V0UGx1Z2luc0VuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0p
KTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0x
NjU1LDcgKzE2NTUsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRQYWdlVmlzaWJpbGl0eUNhbGxi
CiAgICAgY2hhciogdmlzaWJpbGl0eUJ1ZmZlciA9IG5ldyBjaGFyW21heExlbmd0aCArIDFdOwog
ICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcodmlzaWJpbGl0eS5nZXQoKSwgdmlzaWJpbGl0eUJ1
ZmZlciwgbWF4TGVuZ3RoICsgMSk7CiAgICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAg
IGNvbnRyb2xsZXItPnNldFBhZ2VWaXNpYmlsaXR5KHZpc2liaWxpdHlCdWZmZXIpOwogICAgIGRl
bGV0ZVtdIHZpc2liaWxpdHlCdWZmZXI7CiAgICAgCkBAIC0xNjY0LDcgKzE2NjQsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBzZXRQYWdlVmlzaWJpbGl0eUNhbGxiCiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IHJlc2V0UGFnZVZpc2liaWxpdHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnJlc2V0UGFnZVZp
c2liaWxpdHkoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9
ICAgIApAQCAtMTY3NCw3ICsxNjc0LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0U21hcnRJbnNl
cnREZWxldGVFbgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGNvbnRyb2xsZXItPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChKU1ZhbHVlVG9Cb29s
ZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKIH0KQEAgLTE2ODQsNyArMTY4NCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IHNldEF1dG9tYXRpY0xpbmtEZXRlY3QKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSkpOwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTE2OTQsMTQgKzE2OTQsMTQg
QEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZQogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFNlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1
bWVudHNbMF0pKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9
CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHNDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHModHJ1ZSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMTcxMSwyOCAr
MTcxMSwyOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBc3luY2hyb25vdXNTcGVsbENoCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCBhcmd1bWVudHNbMF0pKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHNob3dXZWJJbnNwZWN0b3JDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGNvbnRyb2xsZXItPnNob3dXZWJJbnNwZWN0b3IoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGNsb3NlV2ViSW5z
cGVjdG9yQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5jbG9zZVdlYkluc3BlY3RvcigpOwogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFs
dWVSZWYgZXZhbHVhdGVJbldlYkluc3BlY3RvckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgZG91YmxlIGNhbGxJZCA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CiAgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0
KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKSk7CkBAIC0xNzQ0LDcgKzE3NDQsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBkb3VibGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CkBAIC0xNzU2LDcgKzE3
NTYsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0CiAKIHN0YXRp
YyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGRvdWJsZSB3b3JsZElEID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKQEAgLTE3NjgsNyArMTc2OCw3IEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXQKIAogc3RhdGljIEpTVmFs
dWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEq
ZXhjZXB0aW9uKTsKIApAQCAtMTc4OSw3ICsxNzg5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcGF1
c2VBbmltYXRpb25BdFRpbWVPbgogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBlbGVtZW50
SWQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNl
cHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgY29udHJvbGxlci0+
cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoYW5pbWF0aW9uTmFtZS5nZXQoKSwg
dGltZSwgZWxlbWVudElkLmdldCgpKSk7CiB9CiAKQEAgLTE4MDUsNyArMTgwNSw3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHBhdXNlVHJhbnNpdGlvbkF0VGltZU8KICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gZWxlbWVudElkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RS
dW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIGNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChwcm9w
ZXJ0eU5hbWUuZ2V0KCksIHRpbWUsIGVsZW1lbnRJZC5nZXQoKSkpOwogfQogCkBAIC0xODE0LDEz
ICsxODE0LDEzIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9mQWN0aXZlQW5pbWF0aW8KICAg
ICBpZiAoYXJndW1lbnRDb3VudCAhPSAwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucygpKTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgd2FpdEZvclBvbGljeURlbGVnYXRlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCiB7Ci0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPndhaXRGb3JQb2xpY3lEZWxlZ2F0
ZSgpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KQEAgLTE4
MzgsNyArMTgzOCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGkK
ICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1szXSk7CiAKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVu
bmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoc291cmNlT3JpZ2luLmdldCgpLCBkZXN0aW5hdGlvblByb3RvY29sLmdldCgpLCBk
ZXN0aW5hdGlvbkhvc3QuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0xODU2LDcgKzE4NTYs
NyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0CiAgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKICAgICBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zID0gSlNW
YWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbM10pOwogCi0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGNvbnRyb2xsZXItPnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
KHNvdXJjZU9yaWdpbi5nZXQoKSwgZGVzdGluYXRpb25Qcm90b2NvbC5nZXQoKSwgZGVzdGluYXRp
b25Ib3N0LmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMTg3MSw3ICsxODcxLDcgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgc2V0U2Nyb2xsYmFyUG9saWN5Q2FsbAogICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBwb2xpY3koQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzFdLCBleGNlcHRpb24pKTsKICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1
bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFNjcm9sbGJhclBvbGljeShv
cmllbnRhdGlvbi5nZXQoKSwgcG9saWN5LmdldCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0xODg2LDcgKzE4ODYsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBhZGRVc2VyU2NyaXB0Q2FsbGJhY2soCiAgICAgYm9vbCBydW5BdFN0YXJ0ID0gSlNWYWx1
ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOwogICAgIGJvb2wgYWxsRnJhbWVzID0g
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMl0pOwogICAgIAotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5hZGRVc2VyU2NyaXB0KHNvdXJjZS5nZXQo
KSwgcnVuQXRTdGFydCwgYWxsRnJhbWVzKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiB9CkBAIC0xOTAwLDcgKzE5MDAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBh
ZGRVc2VyU3R5bGVTaGVldENhbGxiCiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICBib29s
IGFsbEZyYW1lcyA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKICAg
IAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5hZGRVc2VyU3R5bGVT
aGVldChzb3VyY2UuZ2V0KCksIGFsbEZyYW1lcyk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMTkxMSw3ICsxOTExLDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgc2V0U2hvdWxkUGFpbnRCcm9rZW5JbQogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnNldFNob3VsZFBhaW50QnJva2VuSW1hZ2Uo
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKQEAgLTE5MjgsMTQgKzE5MjgsMTQgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgYXBpVGVzdE5ld1dpbmRvd0RhdGFMbwogICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBiYXNlVVJMKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CiAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICAg
ICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmFwaVRlc3ROZXdX
aW5kb3dEYXRhTG9hZEJhc2VVUkwodXRmOERhdGEuZ2V0KCksIGJhc2VVUkwuZ2V0KCkpOwogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFs
dWVSZWYgYXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVu
bmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5h
cGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0xOTQ2LDcgKzE5NDYsNyBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRXZWJWaWV3RWRpdGFibGVDYWxsCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAx
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBM
YXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RD
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVu
bmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0V2ViVmlld0VkaXRhYmxlKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0xOTYxLDcgKzE5NjEsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiBzZW5kV2ViSW50ZW50UmVzcG9uc2VDCiAgICAgfSBlbHNlCiAgICAgICAgIHJl
c3BvbnNlLmFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKDApKTsKIAotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5zZW5kV2ViSW50ZW50UmVzcG9uc2Uo
cmVzcG9uc2UuZ2V0KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwpAQCAtMTk3OSw3ICsxOTc5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZGVsaXZlcldlYklu
dGVudENhbGxiYQogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkYXRhKEFkb3B0LCBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CiAgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKIAotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250
cm9sbGVyLT5kZWxpdmVyV2ViSW50ZW50KGFjdGlvbi5nZXQoKSwgdHlwZS5nZXQoKSwgZGF0YS5n
ZXQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0x
OTg3LDE0ICsxOTg3LDE0IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRlbGl2ZXJXZWJJbnRlbnRDYWxs
YmEKIAogc3RhdGljIEpTVmFsdWVSZWYgYWJvcnRNb2RhbENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxl
ci0+YWJvcnRNb2RhbCgpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgbWFya2VyVGV4dEZvckxpc3RJdGVtQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29udHJvbGxl
ci0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnRleHQsIGFyZ3VtZW50c1swXSkuZ2V0KCkpOwpA
QCAtMjAxMyw3ICsyMDEzLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgYXV0aGVudGljYXRlU2Vzc2lv
bkNhbAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwYXNzd29yZChBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwogICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJv
bGxlci0+YXV0aGVudGljYXRlU2Vzc2lvbih1cmwuZ2V0KCksIHVzZXJuYW1lLmdldCgpLCBwYXNz
d29yZC5nZXQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
fQpAQCAtMjAyNCwxMyArMjAyNCwxMyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRTZXJpYWxpemVI
VFRQTG9hZHNDCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKICAgICAgICAgc2VyaWFsaXpl
ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwogCi0gICAgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhzZXJpYWxpemUpOworICAgIFRl
c3RSdW5uZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhzZXJpYWxpemUpOwogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgc2V0
U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWRDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIAogICAgIGlmIChh
cmd1bWVudENvdW50ID09IDEpCiAgICAgICAgIGNvbnRyb2xsZXItPnNldFNob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJn
dW1lbnRzWzBdKSk7CkBAIC0yMDQwLDcgKzIwNDAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRT
aG91bGRTdGF5T25QYWdlQWZ0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGFkZENocm9tZUlucHV0Rmll
bGRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwogICAgIGNvbnRyb2xsZXItPmFkZENocm9tZUlucHV0RmllbGQoKTsKICAgICAvLyB0aGUgZmly
c3QgYXJndW1lbnQgaXMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBvbmNlIHRoZSBpbnB1dCBm
aWVsZCBoYXMgYmVlbiBhZGRlZAogICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCkBAIC0yMDUw
LDcgKzIwNTAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBhZGRDaHJvbWVJbnB1dEZpZWxkQ2FsCiAK
IHN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXIt
PnJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKICAgICAvLyB0aGUgZmlyc3QgYXJndW1lbnQgaXMg
YSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBvbmNlIHRoZSBpbnB1dCBmaWVsZCBoYXMgYmVlbiBh
ZGRlZAogICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiByZW1vdmVDaHJvbWVJbnB1dEZpZWxkCiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGZvY3VzV2ViVmlld0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+Zm9jdXNXZWJWaWV3KCk7CiAgICAgLy8g
dGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUg
aW5wdXQgZmllbGQgaGFzIGJlZW4gYWRkZWQKICAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQpA
QCAtMjA3Niw3ICsyMDc2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QmFja2luZ1NjYWxlRmFj
dG9yQwogICAgIGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0QmFja2luZ1Nj
YWxlRmFjdG9yKGJhY2tpbmdTY2FsZUZhY3Rvcik7CiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZ3Vt
ZW50IGlzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgb25jZSB0aGUgYmFja2luZyBzY2FsZSBm
YWN0b3IgaGFzIGJlZW4gc2V0LgpAQCAtMjA5MywyNiArMjA5MywyNiBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBwcmVjaXNlVGltZUNhbGxiYWNrKEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEdsb2Jh
bEZsYWdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29u
dGV4dCwgY29udHJvbGxlci0+Z2xvYmFsRmxhZygpKTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYg
Z2V0V2ViSGlzdG9yeUl0ZW1Db3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xsZXItPndlYkhpc3RvcnlJdGVtQ291bnQoKSk7
CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFdvcmtlclRocmVhZENvdW50Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+
d29ya2VyVGhyZWFkQ291bnQoKSk7CiB9CiAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV0lOKQogc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxhdGZvcm1OYW1l
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpT
U3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIExh
eW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1O
YW1lKGNvbnRyb2xsZXItPnBsYXRmb3JtTmFtZSgpKTsKICAgICBpZiAoIXBsYXRmb3JtTmFtZS5n
ZXQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAt
MjEyMiwyOCArMjEyMiwyOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVDYWxs
YmFjCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFRpdGxlVGV4dERpcmVjdGlvbkNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRpdGxlRGlyZWN0aW9uKEFkb3B0
LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250cm9sbGVyLT50aXRsZVRleHREaXJl
Y3Rpb24oKS5jX3N0cigpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQs
IHRpdGxlRGlyZWN0aW9uLmdldCgpKTsKIH0KIAogc3RhdGljIGJvb2wgc2V0R2xvYmFsRmxhZ0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0R2xv
YmFsRmxhZyhKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGlnbm9yZURlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0g
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVGVz
dFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPmlnbm9yZURlc2t0b3BOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHNpbXVsYXRlRGVza3RvcE5v
dGlmaWNhdGlvbkNsaWNrQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOyAKKyAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7IAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0
aXRsZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4
Y2VwdGlvbikpOwogICAgIGNvbnRyb2xsZXItPnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNs
aWNrKHRpdGxlLmdldCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CkBAIC0yMTU3LDcgKzIxNTcsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNaW5pbXVtVGlt
ZXJJbnRlcnZhCiAgICAgZG91YmxlIG1pbmltdW0gPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBUZXN0
UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+c2V0TWluaW11bVRpbWVySW50
ZXJ2YWwobWluaW11bSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CkBAIC0yMTY3LDcgKzIxNjcsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRUZXh0RGlyZWN0
aW9uQ2FsbGJhCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewogICAgICAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gZGlyZWN0aW9uKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgICAgICBUZXN0UnVubmVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CiAgICAgICAgIGNvbnRyb2xsZXItPnNldFRleHREaXJlY3Rpb24oZGlyZWN0
aW9uLmdldCgpKTsKICAgICB9CiAKQEAgLTIxNzksNyArMjE3OSw3IEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW4KIHsKICAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAx
KSB7CiAgICAgICAgIGJvb2wgaGFzQ3VzdG9tQmVoYXZpb3IgPSBKU1ZhbHVlVG9Cb29sZWFuKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7Ci0gICAgICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgICAgIGNvbnRyb2xsZXItPnNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihoYXNDdXN0
b21CZWhhdmlvcik7CiAgICAgfQogCkBAIC0yMTk0LDIxICsyMTk0LDIxIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGUKICAgICBkb3VibGUgaW50ZXJ2YWwgPSBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxl
ci0+c2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGludGVydmFsKTsKIAogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgbGF5b3V0
VGVzdENvbnRyb2xsZXJPYmplY3RGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCitzdGF0aWMg
dm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgVGVzdFJ1bm5l
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENy
ZWF0aW9uCiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGVzdFJ1bm5lclN0cihBZG9wdCwg
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RSdW5uZXIiKSk7CiAgICAgcmVmKCk7
CkBAIC0yMjIxLDE5ICsyMjIxLDE5IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1ha2VX
aW5kb3dPYmoKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwg
dGVzdFJ1bm5lclN0ci5nZXQoKSwgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhj
ZXB0aW9uKTsKIH0KIAotSlNDbGFzc1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCitKU0NsYXNzUmVmIFRlc3RSdW5uZXI6OmdldEpTQ2xhc3MoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGlj
VmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9
IExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICBzdGF0aWMgSlNT
dGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzID0gVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCk7Cisg
ICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRlc3RSdW5uZXI6
OnN0YXRpY0Z1bmN0aW9ucygpOwogICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0Rl
ZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkxheW91dFRl
c3RDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCi0gICAgICAg
IDAsIGxheW91dFRlc3RDb250cm9sbGVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVzdFJ1bm5lciIs
IDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgICAgICAwLCB0ZXN0UnVubmVy
T2JqZWN0RmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwogCiAgICAg
cmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CiB9CiAKLUpTU3RhdGljVmFs
dWUqIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMoKQorSlNTdGF0aWNWYWx1ZSog
VGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKIHsKICAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBz
dGF0aWNWYWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZ2xvYmFsRmxhZyIsIGdldEdsb2JhbEZsYWdD
YWxsYmFjaywgc2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUg
fSwKQEAgLTIyNDgsNyArMjI0OCw3IEBAIEpTU3RhdGljVmFsdWUqIExheW91dFRlc3RDb250cm9s
bGVyOjpzdGEKICAgICByZXR1cm4gc3RhdGljVmFsdWVzOwogfQogCi1KU1N0YXRpY0Z1bmN0aW9u
KiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKK0pTU3RhdGljRnVuY3Rp
b24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7CiAgICAgc3RhdGljIEpTU3RhdGlj
RnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImFib3J0TW9kYWwiLCBh
Ym9ydE1vZGFsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTI0MjMsNDcgKzI0MjMsNDcgQEAgSlNTdGF0
aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgIHJldHVybiBzdGF0aWNGdW5j
dGlvbnM7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZEhUTUxTdHJp
bmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1Jl
ZiBiYXNlVVJMKQogewogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRN
TFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpxdWV1ZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQs
IEpTU3RyaW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQordm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRl
bnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewog
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29u
dGVudCwgYmFzZVVSTCwgdW5yZWFjaGFibGVVUkwpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFjaykKK3ZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFyQmFjaykKIHsKICAgICBXb3JrUXVl
dWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgQmFja0l0ZW0oaG93RmFyQmFjaykpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dGYXJG
b3J3YXJkKQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGludCBob3dG
YXJGb3J3YXJkKQogewogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBGb3J3YXJk
SXRlbShob3dGYXJGb3J3YXJkKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1
ZXVlTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OnF1
ZXVlTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgV29ya1F1ZXVlOjpz
aGFyZWQoKS0+cXVldWUobmV3IExvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYg
c2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdS
ZWYgc2NyaXB0KQogewogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBOb25Mb2Fk
aW5nU2NyaXB0SXRlbShzY3JpcHQpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cXVldWVSZWxvYWQoKQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCiB7CiAgICAgV29y
a1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IFJlbG9hZEl0ZW0pOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpncmFudERlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3Ry
aW5nUmVmIG9yaWdpbikKK3ZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9u
UGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgbV9kZXNrdG9wTm90aWZpY2F0
aW9uQWxsb3dlZE9yaWdpbnMucHVzaF9iYWNrKEpTU3RyaW5nUmV0YWluKG9yaWdpbikpOwogfQog
Ci1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjaGVja0Rlc2t0b3BOb3RpZmljYXRpb25QZXJt
aXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKK2Jvb2wgVGVzdFJ1bm5lcjo6Y2hlY2tEZXNrdG9w
Tm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgc3RkOjp2
ZWN0b3I8SlNTdHJpbmdSZWY+OjppdGVyYXRvciBpOwogICAgIGZvciAoaSA9IG1fZGVza3RvcE5v
dGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmJlZ2luKCk7CkBAIC0yNDc1LDEyICsyNDc1LDEyIEBA
IGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNoZWNrRGVza3RvcE4KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omlnbm9yZURlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjppZ25vcmVEZXNrdG9w
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKIHsKICAgICBtX2FyZURlc2t0b3BOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNJZ25vcmVkID0gZmFsc2U7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKQordm9pZCBU
ZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkKIHsKICAgICBjb25zdCBj
aGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRv
IGJlIGNhbGxlZFxuIjsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbWVzc2FnZSk7CkBAIC0y
NDg4LDMzICsyNDg4LDMzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBX
YXQKICAgICBub3RpZnlEb25lKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQordm9pZCBUZXN0UnVubmVy
OjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdykKIHsKICAgICBtX2lz
R2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0ID0gdHJ1ZTsKICAgICBtX2dlb2xvY2F0aW9uUGVybWlz
c2lvbiA9IGFsbG93OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQT1NJWExv
Y2FsZShKU1N0cmluZ1JlZiBsb2NhbGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxl
KEpTU3RyaW5nUmVmIGxvY2FsZSkKIHsKICAgICBjaGFyIGxvY2FsZUJ1ZlszMl07CiAgICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhsb2NhbGUsIGxvY2FsZUJ1Ziwgc2l6ZW9mKGxvY2FsZUJ1Zikp
OwogICAgIHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZUJ1Zik7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZFVSTFRvUmVkaXJlY3Qoc3RkOjpzdHJpbmcgb3JpZ2luLCBzdGQ6OnN0
cmluZyBkZXN0aW5hdGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVVJMVG9SZWRpcmVjdChzdGQ6
OnN0cmluZyBvcmlnaW4sIHN0ZDo6c3RyaW5nIGRlc3RpbmF0aW9uKQogewogICAgIG1fVVJMc1Rv
UmVkaXJlY3Rbb3JpZ2luXSA9IGRlc3RpbmF0aW9uOwogfQogCi1jb25zdCBzdGQ6OnN0cmluZyYg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlZGlyZWN0aW9uRGVzdGluYXRpb25Gb3JVUkwoc3RkOjpz
dHJpbmcgb3JpZ2luKQorY29uc3Qgc3RkOjpzdHJpbmcmIFRlc3RSdW5uZXI6OnJlZGlyZWN0aW9u
RGVzdGluYXRpb25Gb3JVUkwoc3RkOjpzdHJpbmcgb3JpZ2luKQogewogICAgIHJldHVybiBtX1VS
THNUb1JlZGlyZWN0W29yaWdpbl07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNob3VsZFBhaW50QnJva2VuSW1hZ2UoYm9vbCBzaG91bGRQYWludEJyb2tlbkltYWdlKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRTaG91bGRQYWludEJyb2tlbkltYWdlKGJvb2wgc2hvdWxkUGFpbnRC
cm9rZW5JbWFnZSkKIHsKICAgICBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UgPSBzaG91bGRQYWlu
dEJyb2tlbkltYWdlOwogfQogCi1jb25zdCB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bWF4Vmlld1dpZHRoID0gODAwOwotY29uc3QgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om1heFZpZXdIZWlnaHQgPSA2MDA7Citjb25zdCB1bnNpZ25lZCBUZXN0UnVubmVyOjptYXhWaWV3
V2lkdGggPSA4MDA7Citjb25zdCB1bnNpZ25lZCBUZXN0UnVubmVyOjptYXhWaWV3SGVpZ2h0ID0g
NjAwOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMTI1NTA4KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxMCArMzgsMTAgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAKLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8TGF5b3V0VGVzdENvbnRyb2xsZXI+IHsKK2NsYXNzIFRlc3RSdW5uZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxUZXN0UnVubmVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+IGNyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBh
dGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkUGl4ZWxIYXNoKTsKLSAgICB+TGF5
b3V0VGVzdENvbnRyb2xsZXIoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXN0UnVubmVyPiBj
cmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgflRlc3RSdW5uZXIoKTsKIAogICAgIHZvaWQgbWFr
ZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKTsKIApAQCAtMzY2LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpOwogCiBwcml2YXRlOgot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJM
LCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIFRlc3RSdW5uZXIo
Y29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBl
Y3RlZFBpeGVsSGFzaCk7CiAKICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1v
bihib29sIGFsbG93KTsKIApAQCAtNDQxLDQgKzQ0MSw0IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKIAotI2VuZGlmIC8vIExh
eW91dFRlc3RDb250cm9sbGVyX2gKKyNlbmRpZiAvLyBUZXN0UnVubmVyX2gKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCShy
ZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBS
ZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQAogCiB2b2xhdGls
ZSBib29sIHRlc3REb25lOwogCi1SZWZQdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+IGdMYXlvdXRU
ZXN0Q29udHJvbGxlcjsKK1JlZlB0cjxUZXN0UnVubmVyPiBnVGVzdFJ1bm5lcjsKIAogV2ViQ29y
ZTo6RnJhbWUqIG1haW5GcmFtZSA9IDA7CiBXZWJDb3JlOjpGcmFtZSogdG9wTG9hZGluZ0ZyYW1l
ID0gMDsKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpydW5UZXN0KGNv
bnN0IFN0cmluCiAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+c3RvcEZvclVzZXJDYW5jZWwoKTsK
ICAgICByZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZygpOwogICAgIGlmIChzaG91
bGRMb2dGcmFtZUxvYWREZWxlZ2F0ZXModXJsKSkKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOworICAgICAgICBnVGVzdFJ1bm5l
ci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKICAgICBTdHJpbmcgc3Rkb3V0Rmls
ZSA9IG1fcmVzdWx0c0RpciArICptX2N1cnJlbnRUZXN0ICsgIi5kdW1wIjsKICAgICBTdHJpbmcg
c3RkZXJyRmlsZSA9IG1fcmVzdWx0c0RpciArICptX2N1cnJlbnRUZXN0ICsgIi5zdGRlcnIiOwog
CkBAIC0yNDEsMTEgKzI0MSwxMSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpydW5SZW1haW5pbmdU
ZXN0cygpCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3Jl
VGVzdGluZygpCiB7CiAgICAgaWYgKGlzSFRUUFRlc3QobV9jdXJyZW50VGVzdC0+dXRmOCgpLmRh
dGEoKSkpCi0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9s
bGVyOjpjcmVhdGUoU3RyaW5nKGh0dHBQcmVmaXhVUkwgKyAqbV9jdXJyZW50VGVzdCkudXRmOCgp
LmRhdGEoKSwgIiIpOworICAgICAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZShT
dHJpbmcoaHR0cFByZWZpeFVSTCArICptX2N1cnJlbnRUZXN0KS51dGY4KCkuZGF0YSgpLCAiIik7
CiAgICAgZWxzZQotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlKFN0cmluZyhrU0RDTGF5b3V0VGVzdHNVUkkgKyAqbV9jdXJyZW50VGVz
dCkudXRmOCgpLmRhdGEoKSwgIiIpOworICAgICAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6
OmNyZWF0ZShTdHJpbmcoa1NEQ0xheW91dFRlc3RzVVJJICsgKm1fY3VycmVudFRlc3QpLnV0Zjgo
KS5kYXRhKCksICIiKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0SWNvbkRhdGFi
YXNlRW5hYmxlZChmYWxzZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJs
ZWQoZmFsc2UpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0OjpyZXNldEdlb2xvY2F0aW9u
TW9jayhtX3BhZ2UpOwogCkBAIC0zNjEsNyArMzYxLDcgQEAgU3RyaW5nIER1bXBSZW5kZXJUcmVl
OjpkdW1wRnJhbWVzQXNUZXh0KAogCiAgICAgcyArPSBkb2N1bWVudEVsZW1lbnQtPmlubmVyVGV4
dCgpICsgIlxuIjsKIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBDaGlsZEZy
YW1lc0FzVGV4dCgpKSB7CisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQoKSkgewogICAgICAgICBXZWJDb3JlOjpGcmFtZVRyZWUqIHRyZWUgPSBmcmFtZS0+dHJlZSgp
OwogICAgICAgICBmb3IgKFdlYkNvcmU6OkZyYW1lKiBjaGlsZCA9IHRyZWUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAg
ICAgIHMgKz0gZHVtcEZyYW1lc0FzVGV4dChjaGlsZCk7CkBAIC00ODgsMTcgKzQ4OCwxNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlOjpkdW1wKCkKICAgICBTdHJpbmcgcmVzdWx0TWltZVR5cGUgPSAi
dGV4dC9wbGFpbiI7CiAgICAgU3RyaW5nIHJlc3BvbnNlTWltZVR5cGUgPSBtYWluRnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCk7CiAKLSAgICBib29s
IGR1bXBBc1RleHQgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKSB8fCByZXNw
b25zZU1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIjsKKyAgICBib29sIGR1bXBBc1RleHQgPSBnVGVz
dFJ1bm5lci0+ZHVtcEFzVGV4dCgpIHx8IHJlc3BvbnNlTWltZVR5cGUgPT0gInRleHQvcGxhaW4i
OwogICAgIFN0cmluZyBkYXRhID0gZHVtcEFzVGV4dCA/IGR1bXBGcmFtZXNBc1RleHQobWFpbkZy
YW1lKSA6IHJlbmRlclRyZWVEdW1wKCk7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVy
LT5kdW1wQmFja0ZvcndhcmRMaXN0KCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQmFja0Zv
cndhcmRMaXN0KCkpCiAgICAgICAgIGRhdGEgKz0gZHVtcEJhY2tGb3J3YXJkTGlzdEZvcldlYlZp
ZXcoKTsKIAogICAgIFN0cmluZyByZXN1bHQgPSAiQ29udGVudC1UeXBlOiAiICsgcmVzdWx0TWlt
ZVR5cGUgKyAiXG4iICsgZGF0YTsKIAogICAgIGR1bXBUb0ZpbGUocmVzdWx0KTsKLSAgICBpZiAo
bV9kdW1wUGl4ZWxzICYmICFkdW1wQXNUZXh0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2Vu
ZXJhdGVQaXhlbFJlc3VsdHMoKSkKLSAgICAgICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBh
cmVXaXRoRXhwZWN0ZWQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5leHBlY3RlZFBpeGVsSGFzaCgp
KTsKKyAgICBpZiAobV9kdW1wUGl4ZWxzICYmICFkdW1wQXNUZXh0ICYmIGdUZXN0UnVubmVyLT5n
ZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQorICAgICAgICBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29t
cGFyZVdpdGhFeHBlY3RlZChnVGVzdFJ1bm5lci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CiAKICAg
ICBTdHJpbmcgY3Jhc2hGaWxlID0gZHVtcEZpbGUgKyAiLmNyYXNoIjsKICAgICB1bmxpbmsoY3Jh
c2hGaWxlLnV0ZjgoKS5kYXRhKCkpOwpAQCAtNTE4LDcgKzUxOCw3IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWU6OnNldFdhaXRUb0R1bXBXYXRjaGQKIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6d2FpdFRv
RHVtcFdhdGNoZG9nVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxEdW1wUmVuZGVyVHJlZT4qKQog
ewotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJl
ZCgpOworICAgIGdUZXN0UnVubmVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CiB9
CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OnByb2Nlc3NXb3JrKFdlYkNvcmU6OlRpbWVyPER1bXBS
ZW5kZXJUcmVlPiopCkBAIC01MjYsNyArNTI2LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cHJv
Y2Vzc1dvcmsoV2ViQ29yZQogICAgIGlmICh0b3BMb2FkaW5nRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYmICFnTGF5
b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSkKICAgICAg
ICAgZHVtcCgpOwogfQogCkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6
bG9jYXRpb25DaGFuZ2VGb3JGcgogCiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAgICBXb3Jr
UXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRlIGxvYWQg
ZnJlZXplcyB0aGUgcXVldWUKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9E
dW1wKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQpAQCAtNTQ5LDE2ICs1
NDksMTYgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6bG9jYXRpb25DaGFuZ2VGb3JGcgogLy8gRnJh
bWVMb2FkQ2xpZW50IGRlbGVnYXRlcy4KIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewotICAgIGlmICgh
dGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JG
cmFtZVxuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSk7CiAKLSAg
ICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYo
IkZyYW1lIHdpdGggdXNlciBnZXN0dXJlIFwiJXNcIiAtIGluIGRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWVcbiIsIFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpID8gInRydWUiIDogImZhbHNlIik7CiAKICAgICBpZiAoIXRvcExvYWRpbmdGcmFt
ZSAmJiAhdGVzdERvbmUpCiAgICAgICAgIHRvcExvYWRpbmdGcmFtZSA9IGZyYW1lOwogCi0gICAg
aWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHMoKSkgeworICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPnN0b3BQcm92
aXNpb25hbEZyYW1lTG9hZHMoKSkgewogICAgICAgICBwcmludGYoIiVzIC0gc3RvcHBpbmcgbG9h
ZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxiYWNrXG4iLCBkcnRGcmFt
ZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5zdG9wRm9yVXNlckNhbmNlbCgpOwogICAgIH0KQEAgLTU2NiwxNSArNTY2LDE1IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWU6OmRpZFN0YXJ0UHJvdmlzaW9uYWwKIAogdm9pZCBEdW1wUmVuZGVy
VHJlZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZENvbW1pdExvYWRGb3JGcmFt
ZVxuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBn
TGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFdpbmRvd0lzS2V5KHRydWUpOworICAgIGdUZXN0UnVu
bmVyLT5zZXRXaW5kb3dJc0tleSh0cnVlKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZhaWxQcm92aXNpb25hbExv
YWRXaXRoRXJyb3JcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRhKCkp
OwogCiAgICAgbG9jYXRpb25DaGFuZ2VGb3JGcmFtZShmcmFtZSk7CkBAIC01ODIsNyArNTgyLDcg
QEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTAogCiB2b2lkIER1bXBS
ZW5kZXJUcmVlOjpkaWRGYWlsTG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsK
LSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZhaWxMb2FkV2l0aEVy
cm9yXG4iLCBkcnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKS51dGY4KCkuZGF0YSgpKTsKIAogICAg
IGxvY2F0aW9uQ2hhbmdlRm9yRnJhbWUoZnJhbWUpOwpAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQg
RHVtcFJlbmRlclRyZWU6OmRpZEZhaWxMb2FkRm9yRnJhbWUKIAogdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKLSAgICBp
ZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZVxu
IiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAo
ZnJhbWUgPT0gdG9wTG9hZGluZ0ZyYW1lKQpAQCAtNjAxLDcgKzYwMSw3IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWU6OmRpZEZpbmlzaExvYWRGb3JGcmEKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZEZp
bmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKICAgICBp
ZiAoIXRlc3REb25lKSB7Ci0gICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWVcbiIsIGRydEZyYW1lRGVzY3JpcHRpb24oZnJhbWUpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVu
bG9hZEV2ZW50cyA9IGZyYW1lLT5kb21XaW5kb3coKS0+cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVu
ZXJzKCk7CkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkQ2xlYXJX
aW5kb3dPYmplYwogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKIAotICAgIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3Qs
ICZleGNlcHRpb24pOworICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFleGNlcHRpb24pOwogCiAg
ICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0
LCAmZXhjZXB0aW9uKTsKQEAgLTYzMywxMCArNjMzLDEwIEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6
OmRpZENsZWFyV2luZG93T2JqZWMKIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkUmVjZWl2ZVRp
dGxlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiB0aXRsZSwgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQog
ewotICAgIGlmICghdGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZy
YW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVRpdGxl
OiAlc1xuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEoKSwgdGl0bGUu
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVGl0
bGVDaGFuZ2VzKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkpCiAg
ICAgICAgIHByaW50ZigiVElUTEUgQ0hBTkdFRDogJXNcbiIsIHRpdGxlLnV0ZjgoKS5kYXRhKCkp
OwogfQogCkBAIC02NzUsMTMgKzY3NSwxMyBAQCBib29sIER1bXBSZW5kZXJUcmVlOjpydW5CZWZv
cmVVbmxvYWRDb25mCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OnNldFN0YXR1c1RleHQoY29uc3Qg
U3RyaW5nJiBzdGF0dXMpCiB7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFN0
YXR1c0NhbGxiYWNrcygpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFN0YXR1c0NhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3Rh
dHVzVGV4dDolc1xuIiwgc3RhdHVzLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIER1bXBSZW5k
ZXJUcmVlOjpleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmICghdGVzdERvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3RE
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKICAgICAgICAgcHJp
bnRmKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3Rh
Rm9yU2VjdXJpdHlPcmlnaW46eyVzLCAlcywgJWl9IGRhdGFiYXNlOiVzXG4iLCBvcmlnaW4tPnBy
b3RvY29sKCkudXRmOCgpLmRhdGEoKSwgb3JpZ2luLT5ob3N0KCkudXRmOCgpLmRhdGEoKSwgb3Jp
Z2luLT5wb3J0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAKICAgICBXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRRdW90YShtYWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCksIDUgKiAxMDI0ICogMTAyNCk7CkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZTo6ZXhjZWVkZWREYXRhYmFzZVF1bwogCiBib29sIER1bXBSZW5kZXJUcmVl
OjphbGxvd3NPcGVuaW5nV2luZG93KCkKIHsKLSAgICByZXR1cm4gZ0xheW91dFRlc3RDb250cm9s
bGVyLT5jYW5PcGVuV2luZG93cygpOworICAgIHJldHVybiBnVGVzdFJ1bm5lci0+Y2FuT3Blbldp
bmRvd3MoKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6d2luZG93Q3JlYXRlZChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2UqIHBhZ2UpCkBAIC03MDAsMjUgKzcwMCwyNSBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlOjp3aW5kb3dDcmVhdGVkKEJsYWNrCiAvLyBFZGl0b3JDbGllbnQgZGVsZWdh
dGVzLgogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkQmVnaW5FZGl0aW5nKCkKIHsKLSAgICBpZiAo
IXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVk
aXRpbmc6JXNcbiIsICJXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uIik7CiB9CiAK
IHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZEVuZEVkaXRpbmcoKQogewotICAgIGlmICghdGVzdERv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAg
IGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6JXNc
biIsICJXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNhdGlvbiIpOwogfQogCiB2b2lkIER1bXBS
ZW5kZXJUcmVlOjpkaWRDaGFuZ2UoKQogewotICAgIGlmICghdGVzdERvbmUgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghdGVzdERvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50Zigi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTolc1xuIiwgIldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24iKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZGlkQ2hhbmdlU2Vs
ZWN0aW9uKCkKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246JXNcbiIsICJXZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uTm90aWZpY2F0aW9uIik7CiB9CiAKQEAgLTczMCwyOCArNzMwLDI4IEBAIGJvb2wgRHVt
cFJlbmRlclRyZWU6OmZpbmRTdHJpbmcoY29uc3QgU3QKIAogYm9vbCBEdW1wUmVuZGVyVHJlZTo6
c2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZShXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdp
bkVkaXRpbmdJbkRPTVJhbmdlOiVzXG4iLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKS51dGY4
KCkuZGF0YSgpKTsKICAgICByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsKIH0KIAogYm9vbCBEdW1w
UmVuZGVyVHJlZTo6c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIHJh
bmdlKQogewotICAgIGlmICghdGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTog
c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIGRydFJhbmdlRGVzY3JpcHRpb24ocmFu
Z2UpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBtX2FjY2VwdHNFZGl0aW5nOwogfQogCiBi
b29sIER1bXBSZW5kZXJUcmVlOjpzaG91bGREZWxldGVET01SYW5nZShXZWJDb3JlOjpSYW5nZSog
cmFuZ2UpCiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGREZWxldGVET01SYW5nZTolc1xuIiwgZHJ0UmFuZ2VEZXNjcmlwdGlvbihyYW5nZSku
dXRmOCgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIG1fYWNjZXB0c0VkaXRpbmc7CiB9CiAKIGJvb2wg
RHVtcFJlbmRlclRyZWU6OnNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2VUb0RPTVJhbmdlQWZm
aW5pdHlTdGlsbFNlbGVjdGluZyhXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpS
YW5nZSogdG9SYW5nZSwgaW50IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAg
IGlmICghdGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTolcyB0b0RPTVJhbmdlOiVzIGFmZmluaXR5OiVzIHN0aWxsU2VsZWN0
aW5nOiVzXG4iLCBkcnRSYW5nZURlc2NyaXB0aW9uKGZyb21SYW5nZSkudXRmOCgpLmRhdGEoKSwg
ZHJ0UmFuZ2VEZXNjcmlwdGlvbih0b1JhbmdlKS51dGY4KCkuZGF0YSgpLCBkcnRBZmZpbml0eURl
c2NyaXB0aW9uKHN0YXRpY19jYXN0PFdlYkNvcmU6OkVBZmZpbml0eT4oYWZmaW5pdHkpKS51dGY4
KCkuZGF0YSgpLCBzdGlsbFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxTRSIpOwogICAgIHJldHVy
biBtX2FjY2VwdHNFZGl0aW5nOwogfQpAQCAtNzcyLDE0ICs3NzIsMTQgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGluc2VydEFjdGlvblN0cmluZyhXZQogCiBib29sIER1bXBSZW5kZXJUcmVlOjpzaG91
bGRJbnNlcnROb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUsIFdlYkNvcmU6OlJhbmdlKiByYW5nZSwg
aW50IGFjdGlvbikKIHsKLSAgICBpZiAoIXRlc3REb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEluc2VydE5vZGU6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rp
b246JXNcbiIsIGRydER1bXBQYXRoKG5vZGUpLnV0ZjgoKS5kYXRhKCksIGRydFJhbmdlRGVzY3Jp
cHRpb24ocmFuZ2UpLnV0ZjgoKS5kYXRhKCksIGluc2VydEFjdGlvblN0cmluZygoV2ViQ29yZTo6
RWRpdG9ySW5zZXJ0QWN0aW9uKWFjdGlvbikpOwogICAgIHJldHVybiBtX2FjY2VwdHNFZGl0aW5n
OwogfQogCiBib29sIER1bXBSZW5kZXJUcmVlOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBpbnQgYWN0aW9uKQogewotICAgIGlmICgh
dGVzdERvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygp
KQorICAgIGlmICghdGVzdERvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDol
cyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlvbjolc1xuIiwgdGV4dC51dGY4KCkuZGF0
YSgpLCBkcnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKS51dGY4KCkuZGF0YSgpLCBpbnNlcnRBY3Rp
b25TdHJpbmcoKFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbilhY3Rpb24pKTsKICAgICByZXR1
cm4gbV9hY2NlcHRzRWRpdGluZzsKIH0KQEAgLTgxNiwzNiArODE2LDM2IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWU6OmRpZERlY2lkZVBvbGljeUZvck4KICAgICBwcmludGYoIlBvbGljeSBkZWxlZ2F0
ZTogYXR0ZW1wdCB0byBsb2FkICVzIHdpdGggbmF2aWdhdGlvbiB0eXBlICclcydcbiIsIHJlcXVl
c3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdHlwZURlc2NyaXB0aW9uKTsKICAgICAv
LyBGSVhNRTogZG8gb3JpZ2luYXRpbmcgcGFydC4KIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+bm90aWZ5RG9uZSgpOworICAgIGdUZXN0UnVubmVyLT5ub3RpZnlEb25lKCk7CiB9CiAKIHZv
aWQgRHVtcFJlbmRlclRyZWU6OmRpZERpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCgp
CiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBVc2Vy
R2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBnVGVz
dFJ1bm5lci0+ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAg
cHJpbnRmKCJGcmFtZSB3aXRoIHVzZXIgZ2VzdHVyZSBcIiVzXCIgLSBpbiB3aWxsUGVyZm9ybUNs
aWVudFJlZGlyZWN0XG4iLCBXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVl
OjpkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7
Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3REb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRIYW5kbGVPbmxvYWRF
dmVudHNGb3JGcmFtZVxuIiwgZHJ0RnJhbWVEZXNjcmlwdGlvbihmcmFtZSkudXRmOCgpLmRhdGEo
KSk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmRpZFJlY2VpdmVSZXNwb25zZUZvckZyYW1l
KFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCiB7Ci0gICAgaWYgKCF0ZXN0RG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCisgICAgaWYgKCF0ZXN0RG9uZSAmJiBn
VGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkKICAgICAgICAgcHJp
bnRmKCIlcyBoYXMgTUlNRSB0eXBlICVzXG4iLCByZXNwb25zZS51cmwoKS5sYXN0UGF0aENvbXBv
bmVudCgpLnV0ZjgoKS5kYXRhKCksIHJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpLmRhdGEoKSk7
CiB9CiAKIGJvb2wgRHVtcFJlbmRlclRyZWU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogewotICAgIGlmICghZ0xheW91
dFRlc3RDb250cm9sbGVyLT5oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKCkpIHsKKyAg
ICBpZiAoIWdUZXN0UnVubmVyLT5oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKCkpIHsK
ICAgICAgICAgY3JlZGVudGlhbCA9IFdlYkNvcmU6OkNyZWRlbnRpYWwoKTsKICAgICAgICAgcHJp
bnRmKCIlcyAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtIFNpbXVsYXRpbmcg
Y2FuY2VsbGVkIGF1dGhlbnRpY2F0aW9uXG4iLCBkcnRDcmVkZW50aWFsRGVzY3JpcHRpb24oY3Jl
ZGVudGlhbCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgY29uc3QgY2hhciogdXNlciA9IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+YXV0aGVudGljYXRp
b25Vc2VybmFtZSgpLmNfc3RyKCk7Ci0gICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmF1dGhlbnRpY2F0aW9uUGFzc3dvcmQoKS5jX3N0cigpOworICAgIGNv
bnN0IGNoYXIqIHVzZXIgPSBnVGVzdFJ1bm5lci0+YXV0aGVudGljYXRpb25Vc2VybmFtZSgpLmNf
c3RyKCk7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSBnVGVzdFJ1bm5lci0+YXV0aGVudGlj
YXRpb25QYXNzd29yZCgpLmNfc3RyKCk7CiAgICAgY3JlZGVudGlhbCA9IFdlYkNvcmU6OkNyZWRl
bnRpYWwodXNlciwgcGFzc3dvcmQsIFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNl
c3Npb24pOwogICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgLSBSZXNwb25kaW5nIHdpdGggJXM6JXNcbiIsIGRydENyZWRlbnRpYWxEZXNjcmlwdGlvbihj
cmVkZW50aWFsKS51dGY4KCkuZGF0YSgpLCB1c2VyLCBwYXNzd29yZCk7CiAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1Rlc3RSdW5uZXJCbGFj
a0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L1Rlc3RSdW5uZXJCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvYmxhY2tiZXJyeS9UZXN0UnVubmVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDUzICs1NSw1MyBAQAogdXNpbmcgV2ViQ29yZTo6dG9FbGVtZW50OwogdXNp
bmcgV2ViQ29yZTo6dG9KUzsKIAotTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29u
dHJvbGxlcigpCitUZXN0UnVubmVyOjp+VGVzdFJ1bm5lcigpCiB7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKQordm9pZCBU
ZXN0UnVubmVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKIHsKICAgICBVTlVT
RURfUEFSQU0odXJsKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
QWxsRGF0YWJhc2VzKCkKIHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsRGF0YWJhc2VzKCk7CiAjZW5kaWYKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQordm9p
ZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7CiAgICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+Y2xlYXJC
YWNrRm9yd2FyZExpc3QodHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJQZXJz
aXN0ZW50VXNlclN0eWxlU2hlZXQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUpT
U3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3Ry
aW5nUmVmIG5hbWUpCitKU1N0cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RGVjb2RlZEhvc3ROYW1l
KEpTU3RyaW5nUmVmIG5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG5hbWUpOwogICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91dFRlc3RD
b250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitKU1N0cmlu
Z1JlZiBUZXN0UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKG5hbWUpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xv
YWRSZXF1ZXN0cygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0
cygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGlzcGxheSgpCit2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXkoKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIFN0cmluZyBqc1N0cmlu
Z1JlZlRvV2ViQ29yZVN0cmluZwogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0ckFyci5n
ZXQoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3Ry
aW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpleGVjQ29t
bWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBpZiAoIW1h
aW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEoKICAgICBtYWluRnJhbWUtPmVkaXRvcigpLT5j
b21tYW5kKG5hbWVTdHIpLmV4ZWN1dGUodmFsdWVTdHIpOwogfQogCi1ib29sIExheW91dFRlc3RD
b250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCitib29sIFRlc3RS
dW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICBpZiAoIW1h
aW5GcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM1LDEyICsxMzUsMTIgQEAgYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYgogICAgIHJldHVybiBtYWluRnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWVTdHIpLmlzRW5hYmxlZCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCit2b2lkIFRlc3RSdW5uZXI6Omtl
ZXBXZWJIaXN0b3J5KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9u
ZSgpCiB7CiAgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAoIXRvcExvYWRpbmdGcmFtZSB8fCBCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+bG9hZEZp
bmlzaGVkKCkpICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQogICAgICAgICBkdW1w
KCk7CkBAIC0xNDksMTIgKzE0OSwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3Rp
ZnlEb25lKCkKICAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7CiB9CiAKLUpTU3RyaW5nUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiwgSlNT
dHJpbmdSZWYgdXJsKQorSlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJj
ZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmIHVybCkKIHsKICAgICByZXR1cm4gSlNTdHJpbmdS
ZXRhaW4odXJsKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpT
U3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQordm9pZCBUZXN0UnVubmVyOjpxdWV1
ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCiB7CiAgICAgc2l6ZV90
IHVybEFyclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUodXJsKTsKICAg
ICBPd25BcnJheVB0cjxjaGFyPiB1cmxBcnIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW3VybEFy
clNpemVdKTsKQEAgLTE2Nyw1NSArMTY3LDU1IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnF1ZXVlTG9hZChKU1MKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0
ZW0oYWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQordm9pZCBUZXN0
UnVubmVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQogewogICAgIEJs
YWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5zZXRB
Y2NlcHRzRWRpdGluZyhhY2NlcHRzRWRpdGluZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdW90YSkKIHsKICAgICBVTlVTRURfUEFSQU0ocXVvdGEpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkKGJvb2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZChib29sIGVuYWJsZSkKIHsKICAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldENhY2hlTW9kZWwoaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0
RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9s
aWN5RGVsZWdhdGUoYm9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQogewogICAgIFVO
VVNFRF9QQVJBTShzZXREZWxlZ2F0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHBlcm1pc3NpdmUpOwog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNs
ZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihPcGFxdWVKU1N0cmluZyopCit2b2lkIFRlc3RS
dW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihPcGFxdWVKU1N0cmluZyopCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNh
dGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1s
b25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9y
aWdpbihKU1N0cmluZ1JlZikKK2xvbmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VEaXNr
VXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYg
Y29udGV4dCkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNh
Y2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8g
Z2V0IG9yaWdpbnMgdGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBs
b25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWdu
ZWQgbG9uZyBsb25nIHF1b3RhKQogewogICAgIGlmICghbWFpbkZyYW1lKQogICAgICAgICByZXR1
cm47CkBAIC0yMjMsNTcgKzIyMyw1NyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRE
YXRhYmFzZVF1CiAgICAgV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVv
dGEobWFpbkZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBxdW90YSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZv
cmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKQogewogICAgIFdlYkNvcmU6OlNjaGVtZVJlZ2lz
dHJ5OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwg
anNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoc2NoZW1lKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFi
bGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRh
dGFiYXNlRW5hYmxlZCkKIHsKICAgICBVTlVTRURfUEFSQU0oaWNvbkRhdGFiYXNlRW5hYmxlZCk7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6
OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQogewogICAgIFVOVVNFRF9Q
QVJBTShmbGFnKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1Jl
ZiBwYXRoKQordm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihKU1N0cmluZ1JlZiBwYXRoKQogewogICAgIFVOVVNFRF9QQVJBTShwYXRoKTsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1
cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxv
Y2tpbmdFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRKYXZh
U2NyaXB0T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCFmbGFnKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAg
IFVOVVNFRF9QQVJBTShmbGFnKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChmbGFnKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29s
IGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQoYm9vbCBmbGFnKQogewogICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6
OmN1cnJlbnRJbnN0YW5jZSgpLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZs
YWcpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0
ZUVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRTbWFydEluc2VydERlbGV0
ZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlD
eWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBjeWNsZXMpCit2b2lkIFRlc3RSdW5uZXI6OnNldFRh
YktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGN5Y2xlcykKIHsKICAgICBpZiAoIW1haW5G
cmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgxLDUxICsyODEsNTEgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbAogICAgIG1haW5GcmFtZS0+cGFnZSgpLT5zZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY3ljbGVzKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZs
YWcpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGZsYWcpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChi
b29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29s
IGZsYWcpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGZsYWcpOwogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oSlNTdHJpbmdSZWYgcGF0aCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRM
b2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQogewogICAgIFN0cmluZyBwYXRoU3RyID0ganNTdHJp
bmdSZWZUb1dlYkNvcmVTdHJpbmcocGF0aCk7CiAgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1w
UmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0VXNl
clN0eWxlU2hlZXRMb2NhdGlvbihwYXRoU3RyLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQordm9pZCBUZXN0UnVu
bmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQogewogICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7
CiAgICAgd2FpdEZvclBvbGljeSA9IHRydWU7CiB9CiAKLXNpemVfdCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitzaXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9y
eUl0ZW1Db3VudCgpCiB7CiAgICAgU2hhcmVkQXJyYXk8QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlOjpCYWNrRm9yd2FyZEVudHJ5PiBiYWNrRm9yd2FyZExpc3Q7CiAgICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+Z2V0QmFj
a0ZvcndhcmRMaXN0KGJhY2tGb3J3YXJkTGlzdCk7CiAgICAgcmV0dXJuIGJhY2tGb3J3YXJkTGlz
dC5sZW5ndGgoKTsKIH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgp
CitpbnQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkKK2Jvb2wgVGVz
dFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5n
UmVmIGlkKQogewogICAgIFVOVVNFRF9QQVJBTShpZCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50
IHBhZ2VOdW1iZXIpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6
cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNv
bnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5TmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHBhZ2VOdW1iZXIpOwpAQCAtMzMzLDcgKzMzMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHIKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRUb0R1bXApCit2b2lkIFRlc3RSdW5uZXI6
OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VG9EdW1wKQogewogICAgIC8vIENoYW5nZSBmcm9tIDMw
cyB0byAzNXMgYmVjYXVzZSBzb21lIHRlc3QgY2FzZXMgaW4gbXVsdGlwYXJ0IG5lZWQgMzAgc2Vj
b25kcywKICAgICAvLyByZWZlciB0byBodHRwL3Rlc3RzL211bHRpcGFydC9yZXNvdXJjZXMvbXVs
dGlwYXJ0LXdhaXQtYmVmb3JlLWJvdW5kYXJ5LnBocCBwbGVhc2UuCkBAIC0zNDMsMTMgKzM0Mywx
MyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wCiAgICAgICAgIEJs
YWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5jZSgpLT5zZXRX
YWl0VG9EdW1wV2F0Y2hkb2coa1dhaXRUb0R1bXBXYXRjaGRvZ0ludGVydmFsKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKIHsKICAg
ICBtX3dpbmRvd0lzS2V5ID0gd2luZG93SXNLZXk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5n
UmVmIGVsZW1lbnRJZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3Ry
aW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICBpZiAoIW1haW5GcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
dXNlQW5pbWF0aW8KICAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRp
b25BdFRpbWUobm9kZS0+cmVuZGVyZXIoKSwgbmFtZS5nZXQoKSwgdGltZSk7CiB9CiAKLWJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVt
ZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCiB7CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTM5Nyw3ICszOTcsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5z
aXRpCiAgICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZShub2RlLT5yZW5kZXJlcigpLCBuYW1lLmdldCgpLCB0aW1lKTsKIH0KIAotdW5zaWduZWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit1bnNp
Z25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAg
IGlmICghbWFpbkZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDksNyArNDA5LDcg
QEAgdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQQogICAgIHJldHVybiBh
bmltYXRpb25Db250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMobWFpbkZyYW1lLT5k
b2N1bWVudCgpKTsKIH0KIAotdW5zaWduZWQgaW50IExheW91dFRlc3RDb250cm9sbGVyOjp3b3Jr
ZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBpbnQgVGVzdFJ1bm5lcjo6d29ya2VyVGhy
ZWFkQ291bnQoKSBjb25zdAogewogI2lmIEVOQUJMRV9XT1JLRVJTCiAgICAgcmV0dXJuIFdlYkNv
cmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkQ291bnQoKTsKQEAgLTQxOCwxNyArNDE4LDE3
IEBAIHVuc2lnbmVkIGludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2UKICNlbmRpZgogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQordm9p
ZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRp
bmcoKQordm9pZCBUZXN0UnVubmVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKIHsKICAgICBCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgp
LT5zZXR0aW5ncygpLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoZmFsc2UpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYg
a2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWlu
RnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0Niw0MSArNDQ2LDQxIEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICAgICAgbWFpbkZyYW1lLT5wYWdlKCkt
PnNldHRpbmdzKCktPnNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCh2YWx1ZVN0ciA9PSAidHJ1
ZSIgfHwgdmFsdWVTdHIgPT0gIjEiKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVz
KQogewogICAgIFVOVVNFRF9QQVJBTShhbHdheXNBY2NlcHRDb29raWVzKTsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLCBs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNz
YWdlKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwg
SlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKICAgICBTdHJpbmcgbWVzc2FnZVN0ciA9IGpzU3RyaW5n
UmVmVG9XZWJDb3JlU3RyaW5nKG1lc3NhZ2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6
c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJl
ZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKSwgY29kZSwgbWVzc2FnZVN0cik7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVu
bmVyOjpzaG93V2ViSW5zcGVjdG9yKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCit2b2lkIFRlc3RS
dW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcg
Y2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBVTlVT
RURfUEFSQU0oY2FsbElkKTsKICAgICBVTlVTRURfUEFSQU0oc2NyaXB0KTsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0
UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAg
IFVOVVNFRF9QQVJBTSh3b3JsZElEKTsKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
QEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNj
cmlwCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmpl
Y3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0
UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFVOVVNFRF9QQVJB
TSh3b3JsZElEKTsKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKQEAgLTQ5Niw3ICs0
OTYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNj
cmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMp
Cit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29s
IHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQogewogICAgIFVOVVNFRF9QQVJBTShzb3VyY2Up
OwogICAgIFVOVVNFRF9QQVJBTShydW5BdFN0YXJ0KTsKQEAgLTUwNCw1NSArNTA0LDU1IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiwgYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNT
dHJpbmdSZWYsIGJvb2wpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJ
blBpeGVscyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIGNvbnN0CitKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMo
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSBjb25zdAogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZQYWdlcyhmbG9hdCwgZmxvYXQpCitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQYWdl
cyhmbG9hdCwgZmxvYXQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gLTE7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0
cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNjcm9sbGJhclBvbGlj
eShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCit2
b2lkIFRlc3RSdW5uZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNl
c3Npb24oSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYg
cGFzc3dvcmQpCit2b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdS
ZWYgdXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYgcGFzc3dvcmQpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2Fs
bFNob3VsZENsb3NlT25XZWJWaWV3KCkKK2Jvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3Nl
T25XZWJWaWV3KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZChib29sIGVuYWJsZSkKIHsKICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVl
OjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRGcmFtZUZsYXR0ZW5p
bmdFbmFibGVkKGVuYWJsZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGlu
YXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVz
dGluYXRpb25TdWJkb21haW5zKQordm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0
aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3Rp
bmF0aW9uU3ViZG9tYWlucykKIHsKICAgICBXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoKldlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tU3RyaW5nKGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKHNvdXJjZU9yaWdpbikpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1N0cmluZ1Jl
ZlRvV2ViQ29yZVN0cmluZyhkZXN0aW5hdGlvblByb3RvY29sKSwKQEAgLTU2MCw3ICs1NjAsNyBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2NlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBk
ZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYg
ZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFs
bG93RGVzdGluYXRpb25TdWJkb21haW5zKQogewogICAgIFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21TdHJpbmcoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcoc291cmNlT3Jp
Z2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzU3RyaW5nUmVmVG9XZWJDb3JlU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLApAQCAt
NTY4LDcgKzU2OCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkEK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0
UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQogewog
ICAgIGlmICghbWFpbkZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC01NzYsNyArNTc2LDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQQogICAgIG1haW5GcmFtZS0+
cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxl
ZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNj
ZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQogewogICAgIGlmICghbWFp
bkZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC01ODQsMzMgKzU4NCwzMyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlCiAgICAgbWFpbkZyYW1lLT5wYWdlKCktPnNl
dHRpbmdzKCktPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZWQpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRC
YXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKQordm9pZCBU
ZXN0UnVubmVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0
ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3
YXJkSXRlbSgpCit2b2lkIFRlc3RSdW5uZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJk
SXRlbSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCit2b2lk
IFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKQog
ewogICAgIEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6OmN1cnJlbnRJbnN0YW5j
ZSgpLT5wYWdlKCktPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoZmxhZyk7CiB9CiAK
LUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK0pTVmFs
dWVSZWYgVGVzdFJ1bm5lcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewogICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250ZXh0
LCB2YWx1ZSk7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBU
ZXN0UnVubmVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
VGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6RWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudCh0b0pTKHRvSlMoY29udGV4dCksIG5vZGVPYmplY3QpKTsKICAgICBp
ZiAoIWVsZW1lbnQpCkBAIC02MjAsMTAyICs2MjAsMTAyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBMYXlvdXRUZXN0Q29udHIKICAgICByZXR1cm4gbWFya2VyVGV4dDsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit2
b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMo
KQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBs
aWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBo
YSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBj
YW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0Rl
dmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wg
Y2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91Ymxl
IGdhbW1hKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRv
dWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZp
ZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sIGFsbG93KQordm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9v
bCBhbGxvdykKIHsKICAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwog
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbihC
bGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFn
ZSgpLCBhbGxvdyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2Rl
TWVkaWFGZWF0dXJlKGNvbnN0IEpTU3RyaW5nUmVmIG1vZGUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFZpZXdNb2RlTWVkaWFGZWF0dXJlKGNvbnN0IEpTU3RyaW5nUmVmIG1vZGUpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFs
aXplSFRUUExvYWRzKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fk
cyhib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaWYgbmVlZGVkIGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NTguCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50
ZXJ2YWwoZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChk
b3VibGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQordm9pZCBUZXN0UnVubmVy
Ojpnb0JhY2soKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9u
YXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29s
KQordm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCiB7CiAgICAgLy8gRklY
TUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5n
LWxvYWRzLmh0bWwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1KU1ZhbHVlUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29u
dGV4dCkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlND
b250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQpCit2b2lk
IFRlc3RSdW5uZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3luY0xvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9v
bCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVP
YmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxs
ZWQpCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwogICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0
KSk7CkBAIC03MjgsMTIgKzcyOCwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
dXRvZmlsbGVkCiAgICAgaW5wdXRFbGVtZW50LT5zZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOwog
fQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKCkKK2ludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVl
U3VwcG9ydDo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2Uo
KSk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5
KQorYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0
cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKIHsKICAgICBXZWJDb3Jl
OjpGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKIApAQCAtNzc0LDEyICs3NzQsMTIgQEAgYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKUwogICAgICAgICAhKG9wdGlvbnMgJiBX
ZWJDb3JlOjpCYWNrd2FyZHMpLCAhKG9wdGlvbnMgJiBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUp
LCB0cnVlIC8qIHdyYXAgKi8sIHRydWUgLyogaGlnaGxpZ2h0QWxsTWF0Y2hlcyAqLyk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihK
U1N0cmluZ1JlZiBVUkwpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbihKU1N0cmluZ1JlZiBVUkwpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVS
ZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGNvbnRleHQpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSB0
b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0KSk7CkBAIC03OTIsNTcgKzc5Miw1NyBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzCiAgICAgaW5wdXRFbGVtZW50
LT5zZXRWYWx1ZUZvclVzZXIoanNTdHJpbmdSZWZUb1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKIH0K
IAotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1Vz
YWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKK2xvbmcgbG9uZyBUZXN0UnVubmVyOjph
cHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGJ5
IGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCit2b2lk
IFRlc3RSdW5uZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQogewogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmZvY3VzV2ViVmlldygpCit2b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldygpCiB7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3Vi
bGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCiB7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0
KGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KGJvb2wp
CiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlm
aWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQordm9pZCBUZXN0UnVubmVyOjpzaW11bGF0
ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKIHsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCit2b2lkIFRlc3RS
dW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNo
YXIqKQordm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNw
b25zZShKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2VuZFdlYkludGVudFJlc3BvbnNl
KEpTU3RyaW5nUmVmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVm
LCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmlu
Z1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVu
bmVyLmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRFJUVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9CiB9OwogCi1MYXlvdXRUZXN0Q29u
dHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoVGVzdFNoZWxsKiBzaGVsbCkKK0RSVFRlc3RS
dW5uZXI6OkRSVFRlc3RSdW5uZXIoVGVzdFNoZWxsKiBzaGVsbCkKICAgICA6IG1fc2hlbGwoc2hl
bGwpCiAgICAgLCBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyhmYWxzZSkKICAgICAsIG1fZGVmZXJN
YWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSkKQEAgLTEwNywxNzggKzEwNywxNzggQEAgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbAogICAgIC8vIEluaXRpYWxpemUgdGhl
IG1hcCB0aGF0IGFzc29jaWF0ZXMgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIHdpdGggdGhlIG5hbWVz
CiAgICAgLy8gdGhleSB3aWxsIHVzZSB3aGVuIGNhbGxlZCBieSBKYXZhU2NyaXB0LiBUaGUgYWN0
dWFsIGJpbmRpbmcgb2YgdGhvc2UKICAgICAvLyBuYW1lcyB0byB0aGVpciBtZXRob2RzIHdpbGwg
YmUgZG9uZSBieSBjYWxsaW5nIGJpbmRUb0phdmFTY3JpcHQoKSAoZGVmaW5lZAotICAgIC8vIGJ5
IENwcEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8gTGF5b3V0VGVzdENvbnRyb2xsZXIpLgotICAg
IGJpbmRNZXRob2QoImFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWciLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcpOworICAgIC8vIGJ5IENwcEJvdW5kQ2xh
c3MsIHRoZSBwYXJlbnQgdG8gRFJUVGVzdFJ1bm5lcikuCisgICAgYmluZE1ldGhvZCgiYWRkRmls
ZVRvUGFzdGVib2FyZE9uRHJhZyIsICZEUlRUZXN0UnVubmVyOjphZGRGaWxlVG9QYXN0ZWJvYXJk
T25EcmFnKTsKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIGJpbmRNZXRob2QoImFkZE1v
Y2tTcGVlY2hJbnB1dFJlc3VsdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVj
dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QpOwor
ICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCIsICZEUlRUZXN0UnVubmVy
OjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQpOworICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVl
Y2hJbnB1dER1bXBSZWN0IiwgJkRSVFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBS
ZWN0KTsKICNlbmRpZgogI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0gICAgYmluZE1ldGhv
ZCgiYWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0IiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjphZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOwotICAgIGJpbmRNZXRob2QoInNldE1v
Y2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
U3BlZWNoUmVjb2duaXRpb25FcnJvcik7Ci0gICAgYmluZE1ldGhvZCgid2FzTW9ja1NwZWVjaFJl
Y29nbml0aW9uQWJvcnRlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FzTW9ja1NwZWVjaFJl
Y29nbml0aW9uQWJvcnRlZCk7CisgICAgYmluZE1ldGhvZCgiYWRkTW9ja1NwZWVjaFJlY29nbml0
aW9uUmVzdWx0IiwgJkRSVFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dCk7CisgICAgYmluZE1ldGhvZCgic2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IpOworICAgIGJpbmRNZXRo
b2QoIndhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQiLCAmRFJUVGVzdFJ1bm5lcjo6d2Fz
TW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCk7CiAjZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJh
ZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwotICAgIGJpbmRNZXRob2QoImFkZFVzZXJTY3Jp
cHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOwotICAgIGJpbmRNZXRo
b2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5
bGVTaGVldCk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBbGxEYXRhYmFzZXMiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTsKLSAgICBiaW5kTWV0aG9kKCJjbG9zZVdl
Ykluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOwor
ICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJkRSVFRlc3RS
dW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKKyAgICBiaW5kTWV0aG9kKCJh
ZGRVc2VyU2NyaXB0IiwgJkRSVFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQpOworICAgIGJpbmRN
ZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkRSVFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0KTsKKyAgICBiaW5kTWV0aG9kKCJjbGVhckFsbERhdGFiYXNlcyIsICZEUlRUZXN0UnVubmVy
OjpjbGVhckFsbERhdGFiYXNlcyk7CisgICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3Ii
LCAmRFJUVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOwogI2lmIEVOQUJMRShQT0lOVEVS
X0xPQ0spCi0gICAgYmluZE1ldGhvZCgiZGlkTG9zZVBvaW50ZXJMb2NrIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpkaWRMb3NlUG9pbnRlckxvY2spOworICAgIGJpbmRNZXRob2QoImRpZExvc2VQ
b2ludGVyTG9jayIsICZEUlRUZXN0UnVubmVyOjpkaWRMb3NlUG9pbnRlckxvY2spOwogI2VuZGlm
Ci0gICAgYmluZE1ldGhvZCgiZGlzYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUpOwotICAgIGJpbmRNZXRob2QoImRpc2FibGVJ
bWFnZUxvYWRpbmciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcp
OwotICAgIGJpbmRNZXRob2QoImRpc3BsYXkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3Bs
YXkpOwotICAgIGJpbmRNZXRob2QoImRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbiIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKTsKLSAgICBiaW5kTWV0aG9k
KCJkdW1wQXNUZXh0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNUZXh0KTsKLSAgICBi
aW5kTWV0aG9kKCJkdW1wQmFja0ZvcndhcmRMaXN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpk
dW1wQmFja0ZvcndhcmRMaXN0KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDaGlsZEZyYW1lc0FzVGV4dCk7Ci0gICAg
YmluZE1ldGhvZCgiZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKTsKLSAgICBiaW5kTWV0aG9k
KCJkdW1wRGF0YWJhc2VDYWxsYmFja3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBEYXRh
YmFzZUNhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0
aG9kKCJkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wUHJvZ3Jlc3NGaW5pc2hl
ZENhbGxiYWNrIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENh
bGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxi
YWNrcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRD
YWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwotICAgIGJp
bmRNZXRob2QoImR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyk7Ci0gICAgYmluZE1ldGhvZCgi
ZHVtcFNlbGVjdGlvblJlY3QiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBTZWxlY3Rpb25S
ZWN0KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wU3RhdHVzQ2FsbGJhY2tzIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpkdW1wV2luZG93U3RhdHVzQ2hhbmdlcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVt
cFRpdGxlQ2hhbmdlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFRpdGxlQ2hhbmdlcyk7
Ci0gICAgYmluZE1ldGhvZCgiZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKTsKLSAgICBiaW5k
TWV0aG9kKCJkdW1wQ3JlYXRlVmlldyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENyZWF0
ZVZpZXcpOwotICAgIGJpbmRNZXRob2QoImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVu
dFdpdGhJZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVG
b3JFbGVtZW50V2l0aElkKTsKLSAgICBiaW5kTWV0aG9kKCJlbmFibGVBdXRvUmVzaXplTW9kZSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUpOwotICAgIGJpbmRN
ZXRob2QoImV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2
YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwotICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCk7Ci0gICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGRBbmRSZXR1cm5WYWx1ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoImV4ZWNDb21tYW5kIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk7Ci0gICAgYmluZE1ldGhvZCgiZm9yY2VS
ZWRTZWxlY3Rpb25Db2xvcnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvcmNlUmVkU2VsZWN0
aW9uQ29sb3JzKTsKKyAgICBiaW5kTWV0aG9kKCJkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmRFJU
VGVzdFJ1bm5lcjo6ZGlzYWJsZUF1dG9SZXNpemVNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJkaXNh
YmxlSW1hZ2VMb2FkaW5nIiwgJkRSVFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcpOwor
ICAgIGJpbmRNZXRob2QoImRpc3BsYXkiLCAmRFJUVGVzdFJ1bm5lcjo6ZGlzcGxheSk7CisgICAg
YmluZE1ldGhvZCgiZGlzcGxheUludmFsaWRhdGVkUmVnaW9uIiwgJkRSVFRlc3RSdW5uZXI6OmRp
c3BsYXlJbnZhbGlkYXRlZFJlZ2lvbik7CisgICAgYmluZE1ldGhvZCgiZHVtcEFzVGV4dCIsICZE
UlRUZXN0UnVubmVyOjpkdW1wQXNUZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wQmFja0Zvcndh
cmRMaXN0IiwgJkRSVFRlc3RSdW5uZXI6OmR1bXBCYWNrRm9yd2FyZExpc3QpOworICAgIGJpbmRN
ZXRob2QoImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsICZEUlRUZXN0UnVubmVyOjpkdW1wQ2hpbGRG
cmFtZXNBc1RleHQpOworICAgIGJpbmRNZXRob2QoImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRp
b25zIiwgJkRSVFRlc3RSdW5uZXI6OmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKTsKKyAg
ICBiaW5kTWV0aG9kKCJkdW1wRGF0YWJhc2VDYWxsYmFja3MiLCAmRFJUVGVzdFJ1bm5lcjo6ZHVt
cERhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wRWRpdGluZ0NhbGxiYWNr
cyIsICZEUlRUZXN0UnVubmVyOjpkdW1wRWRpdGluZ0NhbGxiYWNrcyk7CisgICAgYmluZE1ldGhv
ZCgiZHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsICZEUlRUZXN0UnVubmVyOjpkdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNr
IiwgJkRSVFRlc3RSdW5uZXI6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2spOworICAgIGJp
bmRNZXRob2QoImR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzIiwgJkRSVFRlc3RS
dW5uZXI6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKTsKKyAgICBiaW5kTWV0
aG9kKCJkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzIiwgJkRSVFRlc3RSdW5uZXI6OmR1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MpOworICAgIGJpbmRNZXRob2QoImR1bXBSZXNvdXJjZVJlc3BvbnNl
TUlNRVR5cGVzIiwgJkRSVFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wU2VsZWN0aW9uUmVjdCIsICZEUlRUZXN0UnVubmVyOjpk
dW1wU2VsZWN0aW9uUmVjdCk7CisgICAgYmluZE1ldGhvZCgiZHVtcFN0YXR1c0NhbGxiYWNrcyIs
ICZEUlRUZXN0UnVubmVyOjpkdW1wV2luZG93U3RhdHVzQ2hhbmdlcyk7CisgICAgYmluZE1ldGhv
ZCgiZHVtcFRpdGxlQ2hhbmdlcyIsICZEUlRUZXN0UnVubmVyOjpkdW1wVGl0bGVDaGFuZ2VzKTsK
KyAgICBiaW5kTWV0aG9kKCJkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyIsICZEUlRUZXN0
UnVubmVyOjpkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyk7CisgICAgYmluZE1ldGhvZCgi
ZHVtcENyZWF0ZVZpZXciLCAmRFJUVGVzdFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcpOworICAgIGJp
bmRNZXRob2QoImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsICZEUlRU
ZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQpOworICAg
IGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkRSVFRlc3RSdW5uZXI6OmVuYWJs
ZUF1dG9SZXNpemVNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZUluV2ViSW5zcGVjdG9y
IiwgJkRSVFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOworICAgIGJpbmRNZXRo
b2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJkRSVFRlc3RSdW5uZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJkRSVFRlc3RSdW5uZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOworICAgIGJpbmRNZXRob2QoInNl
dElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiIsICZEUlRUZXN0UnVubmVyOjpzZXRJc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4pOworICAgIGJpbmRNZXRob2QoImV4ZWNDb21tYW5kIiwgJkRS
VFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKTsKKyAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVj
dGlvbkNvbG9ycyIsICZEUlRUZXN0UnVubmVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyk7CiAj
aWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgYmluZE1ldGhvZCgiZ3JhbnREZXNrdG9wTm90
aWZpY2F0aW9uUGVybWlzc2lvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z3JhbnREZXNrdG9w
Tm90aWZpY2F0aW9uUGVybWlzc2lvbik7CisgICAgYmluZE1ldGhvZCgiZ3JhbnREZXNrdG9wTm90
aWZpY2F0aW9uUGVybWlzc2lvbiIsICZEUlRUZXN0UnVubmVyOjpncmFudERlc2t0b3BOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKTsKICNlbmRpZgotICAgIGJpbmRNZXRob2QoImZpbmRTdHJpbmciLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOwotICAgIGJpbmRNZXRob2QoImlzQ29t
bWFuZEVuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQpOwot
ICAgIGJpbmRNZXRob2QoImhhc0N1c3RvbVBhZ2VTaXplU3R5bGUiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUpOwotICAgIGJpbmRNZXRob2QoImxheWVyVHJl
ZUFzVGV4dCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KTsKLSAgICBi
aW5kTWV0aG9kKCJsb3NlQ29tcG9zaXRvckNvbnRleHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
Omxvc2VDb21wb3NpdG9yQ29udGV4dCk7Ci0gICAgYmluZE1ldGhvZCgibWFya2VyVGV4dEZvckxp
c3RJdGVtIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOwot
ICAgIGJpbmRNZXRob2QoIm5vdGlmeURvbmUiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlm
eURvbmUpOwotICAgIGJpbmRNZXRob2QoIm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKTsKLSAgICBiaW5kTWV0
aG9kKCJudW1iZXJPZlBhZ2VzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2Vz
KTsKLSAgICBiaW5kTWV0aG9kKCJudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKLSAgICBiaW5kTWV0aG9kKCJvYmpDSWRlbnRpdHlJc0Vx
dWFsIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpvYmpDSWRlbnRpdHlJc0VxdWFsKTsKLSAgICBi
aW5kTWV0aG9kKCJvdmVycmlkZVByZWZlcmVuY2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92
ZXJyaWRlUHJlZmVyZW5jZSk7Ci0gICAgYmluZE1ldGhvZCgicGFnZVByb3BlcnR5IiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkpOwotICAgIGJpbmRNZXRob2QoInBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1h
cmdpbnNJblBpeGVscyk7Ci0gICAgYmluZE1ldGhvZCgicGF0aFRvTG9jYWxSZXNvdXJjZSIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJjZSk7Ci0gICAgYmluZE1ldGhv
ZCgicGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKTsKLSAgICBiaW5kTWV0
aG9kKCJwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7Ci0gICAgYmlu
ZE1ldGhvZCgicXVldWVCYWNrTmF2aWdhdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVl
dWVCYWNrTmF2aWdhdGlvbik7Ci0gICAgYmluZE1ldGhvZCgicXVldWVGb3J3YXJkTmF2aWdhdGlv
biIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbik7Ci0gICAg
YmluZE1ldGhvZCgicXVldWVMb2FkaW5nU2NyaXB0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpx
dWV1ZUxvYWRpbmdTY3JpcHQpOwotICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWRIVE1M
U3RyaW5nIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKTsKLSAg
ICBiaW5kTWV0aG9kKCJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk7Ci0gICAgYmluZE1ldGhvZCgicXVldWVSZWxvYWQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlUmVsb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwotICAgIGJpbmRNZXRob2QoInJlcGFp
bnRTd2VlcEhvcml6b250YWxseSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVwYWludFN3ZWVw
SG9yaXpvbnRhbGx5KTsKLSAgICBiaW5kTWV0aG9kKCJyZXNldFBhZ2VWaXNpYmlsaXR5IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRBY2NlcHRzRWRpdGluZyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0Vk
aXRpbmcpOwotICAgIGJpbmRNZXRob2QoInNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVu
dCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOwotICAg
IGJpbmRNZXRob2QoInNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50IiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgYmlu
ZE1ldGhvZCgic2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMiLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRBbHdheXNBY2NlcHRDb29raWVzIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbHdheXNBY2NlcHRDb29raWVzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldEF1dG9maWxsZWQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQpOwotICAgIGJpbmRNZXRob2QoInNldENhbk9w
ZW5XaW5kb3dzIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYW5PcGVuV2luZG93cyk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUp
OwotICAgIGJpbmRNZXRob2QoInNldEN1c3RvbVBvbGljeURlbGVnYXRlIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0
RGF0YWJhc2VRdW90YSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSk7
Ci0gICAgYmluZE1ldGhvZCgic2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCk7Ci0gICAgYmluZE1l
dGhvZCgic2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSk7
Ci0gICAgYmluZE1ldGhvZCgic2V0QXVkaW9EYXRhIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBdWRpb0RhdGEpOwotICAgIGJpbmRNZXRob2QoInNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRJY29uRGF0YWJhc2VFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRl
cnZhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwpOwot
ICAgIGJpbmRNZXRob2QoInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRN
b2NrR2VvbG9jYXRpb25FcnJvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xv
Y2F0aW9uRXJyb3IpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik7Ci0g
ICAgYmluZE1ldGhvZCgic2V0UGFnZVZpc2liaWxpdHkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBhZ2VWaXNpYmlsaXR5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zRW5hYmxlZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQpOworICAgIGJpbmRNZXRo
b2QoImZpbmRTdHJpbmciLCAmRFJUVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyk7CisgICAgYmluZE1l
dGhvZCgiaXNDb21tYW5kRW5hYmxlZCIsICZEUlRUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVk
KTsKKyAgICBiaW5kTWV0aG9kKCJoYXNDdXN0b21QYWdlU2l6ZVN0eWxlIiwgJkRSVFRlc3RSdW5u
ZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUpOworICAgIGJpbmRNZXRob2QoImxheWVyVHJlZUFz
VGV4dCIsICZEUlRUZXN0UnVubmVyOjpsYXllclRyZWVBc1RleHQpOworICAgIGJpbmRNZXRob2Qo
Imxvc2VDb21wb3NpdG9yQ29udGV4dCIsICZEUlRUZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNv
bnRleHQpOworICAgIGJpbmRNZXRob2QoIm1hcmtlclRleHRGb3JMaXN0SXRlbSIsICZEUlRUZXN0
UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOworICAgIGJpbmRNZXRob2QoIm5vdGlmeURv
bmUiLCAmRFJUVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSk7CisgICAgYmluZE1ldGhvZCgibnVtYmVy
T2ZBY3RpdmVBbmltYXRpb25zIiwgJkRSVFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucyk7CisgICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQYWdlcyIsICZEUlRUZXN0UnVubmVyOjpu
dW1iZXJPZlBhZ2VzKTsKKyAgICBiaW5kTWV0aG9kKCJudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0cyIsICZEUlRUZXN0UnVubmVyOjogbnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOworICAgIGJpbmRNZXRob2QoIm9iakNJZGVudGl0
eUlzRXF1YWwiLCAmRFJUVGVzdFJ1bm5lcjo6b2JqQ0lkZW50aXR5SXNFcXVhbCk7CisgICAgYmlu
ZE1ldGhvZCgib3ZlcnJpZGVQcmVmZXJlbmNlIiwgJkRSVFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJl
ZmVyZW5jZSk7CisgICAgYmluZE1ldGhvZCgicGFnZVByb3BlcnR5IiwgJkRSVFRlc3RSdW5uZXI6
OnBhZ2VQcm9wZXJ0eSk7CisgICAgYmluZE1ldGhvZCgicGFnZVNpemVBbmRNYXJnaW5zSW5QaXhl
bHMiLCAmRFJUVGVzdFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMpOworICAgIGJp
bmRNZXRob2QoInBhdGhUb0xvY2FsUmVzb3VyY2UiLCAmRFJUVGVzdFJ1bm5lcjo6cGF0aFRvTG9j
YWxSZXNvdXJjZSk7CisgICAgYmluZE1ldGhvZCgicGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQiLCAmRFJUVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQpOworICAgIGJpbmRNZXRob2QoInBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZCIsICZEUlRUZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRo
SWQpOworICAgIGJpbmRNZXRob2QoInF1ZXVlQmFja05hdmlnYXRpb24iLCAmRFJUVGVzdFJ1bm5l
cjo6cXVldWVCYWNrTmF2aWdhdGlvbik7CisgICAgYmluZE1ldGhvZCgicXVldWVGb3J3YXJkTmF2
aWdhdGlvbiIsICZEUlRUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKTsKKyAgICBi
aW5kTWV0aG9kKCJxdWV1ZUxvYWRpbmdTY3JpcHQiLCAmRFJUVGVzdFJ1bm5lcjo6cXVldWVMb2Fk
aW5nU2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWQiLCAmRFJUVGVzdFJ1bm5lcjo6
cXVldWVMb2FkKTsKKyAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWRIVE1MU3RyaW5nIiwgJkRSVFRl
c3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOworICAgIGJpbmRNZXRob2QoInF1ZXVlTm9u
TG9hZGluZ1NjcmlwdCIsICZEUlRUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQpOwor
ICAgIGJpbmRNZXRob2QoInF1ZXVlUmVsb2FkIiwgJkRSVFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2Fk
KTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZE
UlRUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CisgICAgYmlu
ZE1ldGhvZCgicmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5IiwgJkRSVFRlc3RSdW5uZXI6OnJlcGFp
bnRTd2VlcEhvcml6b250YWxseSk7CisgICAgYmluZE1ldGhvZCgicmVzZXRQYWdlVmlzaWJpbGl0
eSIsICZEUlRUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRBY2NlcHRzRWRpdGluZyIsICZEUlRUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRpdGluZyk7
CisgICAgYmluZE1ldGhvZCgic2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQpOworICAgIGJpbmRN
ZXRob2QoInNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyIsICZEUlRUZXN0UnVubmVyOjpz
ZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOworICAgIGJpbmRNZXRob2QoInNldEFsbG93
UnVubmluZ09mSW5zZWN1cmVDb250ZW50IiwgJkRSVFRlc3RSdW5uZXI6OnNldEFsbG93UnVubmlu
Z09mSW5zZWN1cmVDb250ZW50KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd1VuaXZlcnNhbEFj
Y2Vzc0Zyb21GaWxlVVJMcyIsICZEUlRUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMcyk7CisgICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIs
ICZEUlRUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0QXV0b2ZpbGxlZCIs
ICZEUlRUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRDYW5P
cGVuV2luZG93cyIsICZEUlRUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk7CisgICAgYmlu
ZE1ldGhvZCgic2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlIiwgJkRSVFRlc3RS
dW5uZXI6OnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSk7CisgICAgYmluZE1l
dGhvZCgic2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUpOworICAgIGJpbmRNZXRob2QoInNldERhdGFiYXNlUXVvdGEiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSk7CisgICAgYmluZE1ldGhvZCgic2V0RGVmZXJN
YWluUmVzb3VyY2VEYXRhTG9hZCIsICZEUlRUZXN0UnVubmVyOjpzZXREZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lIiwgJkRSVFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRk
ZW5Gb3JVUkxTY2hlbWUpOworICAgIGJpbmRNZXRob2QoInNldEF1ZGlvRGF0YSIsICZEUlRUZXN0
UnVubmVyOjpzZXRBdWRpb0RhdGEpOworICAgIGJpbmRNZXRob2QoInNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbiIsICZEUlRUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOworICAg
IGJpbmRNZXRob2QoInNldEljb25EYXRhYmFzZUVuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0
SWNvbkRhdGFiYXNlRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0SmF2YVNjcmlwdENhbkFj
Y2Vzc0NsaXBib2FyZCIsICZEUlRUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIsICZEUlRU
ZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CisgICAgYmluZE1ldGhvZCgic2V0
TW9ja0RldmljZU9yaWVudGF0aW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmll
bnRhdGlvbik7CisgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IpOworICAgIGJpbmRNZXRob2QoInNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRQYWdlVmlzaWJpbGl0eSIsICZEUlRU
ZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7CisgICAgYmluZE1ldGhvZCgic2V0UGx1Z2lu
c0VuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQpOwogI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCi0gICAgYmluZE1ldGhvZCgic2V0UG9pbnRlckxvY2tXaWxsRmFpbEFz
eW5jaHJvbm91c2x5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVyTG9ja1dpbGxG
YWlsQXN5bmNocm9ub3VzbHkpOwotICAgIGJpbmRNZXRob2QoInNldFBvaW50ZXJMb2NrV2lsbEZh
aWxTeW5jaHJvbm91c2x5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb2ludGVyTG9ja1dp
bGxGYWlsU3luY2hyb25vdXNseSk7CisgICAgYmluZE1ldGhvZCgic2V0UG9pbnRlckxvY2tXaWxs
RmFpbEFzeW5jaHJvbm91c2x5IiwgJkRSVFRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbEZh
aWxBc3luY2hyb25vdXNseSk7CisgICAgYmluZE1ldGhvZCgic2V0UG9pbnRlckxvY2tXaWxsRmFp
bFN5bmNocm9ub3VzbHkiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbFN5
bmNocm9ub3VzbHkpOwogI2VuZGlmCi0gICAgYmluZE1ldGhvZCgic2V0UG9wdXBCbG9ja2luZ0Vu
YWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKTsK
LSAgICBiaW5kTWV0aG9kKCJzZXRQT1NJWExvY2FsZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UE9TSVhMb2NhbGUpOwotICAgIGJpbmRNZXRob2QoInNldFByaW50aW5nIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQcmludGluZyk7Ci0gICAgYmluZE1ldGhvZCgic2V0U2Nyb2xsYmFy
UG9saWN5IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3kpOwotICAg
IGJpbmRNZXRob2QoInNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOwotICAg
IGJpbmRNZXRob2QoInNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk7Ci0gICAgYmluZE1ldGhvZCgic2V0
QmFja2luZ1NjYWxlRmFjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2Nh
bGVGYWN0b3IpOwotICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7Ci0gICAgYmluZE1ldGhvZCgic2V0VXNl
clN0eWxlU2hlZXRFbmFibGVkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24i
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOwotICAg
IGJpbmRNZXRob2QoInNldFZhbHVlRm9yVXNlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VmFsdWVGb3JVc2VyKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhl
YWRlciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFk
ZXIpOwotICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCk7Ci0gICAg
YmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJl
Y3QpOwotICAgIGJpbmRNZXRob2QoInNldFdpbmRvd0lzS2V5IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXaW5kb3dJc0tleSk7Ci0gICAgYmluZE1ldGhvZCgic2V0WFNTQXVkaXRvckVuYWJs
ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwotICAg
IGJpbmRNZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNo
b3dXZWJJbnNwZWN0b3IpOworICAgIGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdFbmFibGVk
IiwgJkRSVFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0
aG9kKCJzZXRQT1NJWExvY2FsZSIsICZEUlRUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZSk7Cisg
ICAgYmluZE1ldGhvZCgic2V0UHJpbnRpbmciLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UHJpbnRpbmcp
OworICAgIGJpbmRNZXRob2QoInNldFNjcm9sbGJhclBvbGljeSIsICZEUlRUZXN0UnVubmVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3kpOworICAgIGJpbmRNZXRob2QoInNldFNlbGVjdFRyYWlsaW5nV2hp
dGVzcGFjZUVuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmci
LCAmRFJUVGVzdFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcpOworICAgIGJpbmRN
ZXRob2QoInNldEJhY2tpbmdTY2FsZUZhY3RvciIsICZEUlRUZXN0UnVubmVyOjpzZXRCYWNraW5n
U2NhbGVGYWN0b3IpOworICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZCIsICZEUlRUZXN0UnVubmVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOworICAgIGJp
bmRNZXRob2QoInNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMiLCAmRFJUVGVzdFJ1bm5lcjo6
c2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyk7CisgICAgYmluZE1ldGhvZCgic2V0VGFiS2V5
Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgJkRSVFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyk7CisgICAgYmluZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRFbmFibGVk
IiwgJkRSVFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk7CisgICAgYmluZE1l
dGhvZCgic2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIsICZEUlRUZXN0UnVubmVyOjpzZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRWYWx1ZUZvclVzZXIiLCAm
RFJUVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRXaWxs
U2VuZFJlcXVlc3RDbGVhckhlYWRlciIsICZEUlRUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVl
c3RDbGVhckhlYWRlcik7CisgICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGwiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwpOwor
ICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCIs
ICZEUlRUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Qp
OworICAgIGJpbmRNZXRob2QoInNldFdpbmRvd0lzS2V5IiwgJkRSVFRlc3RSdW5uZXI6OnNldFdp
bmRvd0lzS2V5KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRYU1NBdWRpdG9yRW5hYmxlZCIsICZEUlRU
ZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgic2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNw
ZWN0b3IiLCAmRFJUVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcik7CiAjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCi0gICAgYmluZE1ldGhvZCgic2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9u
Q2xpY2siLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlv
bkNsaWNrKTsKKyAgICBiaW5kTWV0aG9kKCJzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGlj
ayIsICZEUlRUZXN0UnVubmVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayk7CiAj
ZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWludCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6dGVzdFJlcGFpbnQpOwotICAgIGJpbmRNZXRob2QoIndh
aXRGb3JQb2xpY3lEZWxlZ2F0ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGlj
eURlbGVnYXRlKTsKLSAgICBiaW5kTWV0aG9kKCJ3YWl0VW50aWxEb25lIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjp3YWl0VW50aWxEb25lKTsKLSAgICBiaW5kTWV0aG9kKCJ3aW5kb3dDb3VudCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQpOwotICAgIGJpbmRNZXRob2QoInNl
dFRleHREaXJlY3Rpb24iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24p
OwotICAgIGJpbmRNZXRob2QoInNldEltYWdlc0FsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEltYWdlc0FsbG93ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFNjcmlwdHNBbGxvd2Vk
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JpcHRzQWxsb3dlZCk7Ci0gICAgYmluZE1l
dGhvZCgic2V0U3RvcmFnZUFsbG93ZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3Jh
Z2VBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zQWxsb3dlZCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0FsbG93ZWQpOworICAgIGJpbmRNZXRob2QoInN0YXJ0
U3BlZWNoSW5wdXQiLCAmRFJUVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dCk7CisgICAgYmlu
ZE1ldGhvZCgidGVzdFJlcGFpbnQiLCAmRFJUVGVzdFJ1bm5lcjo6dGVzdFJlcGFpbnQpOworICAg
IGJpbmRNZXRob2QoIndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSIsICZEUlRUZXN0UnVubmVyOjp3YWl0
Rm9yUG9saWN5RGVsZWdhdGUpOworICAgIGJpbmRNZXRob2QoIndhaXRVbnRpbERvbmUiLCAmRFJU
VGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSk7CisgICAgYmluZE1ldGhvZCgid2luZG93Q291bnQi
LCAmRFJUVGVzdFJ1bm5lcjo6d2luZG93Q291bnQpOworICAgIGJpbmRNZXRob2QoInNldFRleHRE
aXJlY3Rpb24iLCAmRFJUVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbik7CisgICAgYmluZE1l
dGhvZCgic2V0SW1hZ2VzQWxsb3dlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRJbWFnZXNBbGxvd2Vk
KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRTY3JpcHRzQWxsb3dlZCIsICZEUlRUZXN0UnVubmVyOjpz
ZXRTY3JpcHRzQWxsb3dlZCk7CisgICAgYmluZE1ldGhvZCgic2V0U3RvcmFnZUFsbG93ZWQiLCAm
RFJUVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZUFsbG93ZWQpOworICAgIGJpbmRNZXRob2QoInNldFBs
dWdpbnNBbGxvd2VkIiwgJkRSVFRlc3RSdW5uZXI6OnNldFBsdWdpbnNBbGxvd2VkKTsKIAogICAg
IC8vIFRoZSBmb2xsb3dpbmcgYXJlIHN0dWJzLgotICAgIGJpbmRNZXRob2QoImFib3J0TW9kYWwi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwpOwotICAgIGJpbmRNZXRob2QoImFj
Y2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWNjZXNz
U3RvcmVkV2ViU2NyaXB0T2JqZWN0KTsKLSAgICBiaW5kTWV0aG9kKCJhZGREaXNhbGxvd2VkVVJM
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKTsKLSAgICBiaW5kTWV0
aG9kKCJhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKTsKLSAgICBiaW5kTWV0
aG9kKCJjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXciLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldyk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNh
Y2hlcyk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4pOwot
ICAgIGJpbmRNZXRob2QoImNsZWFyQmFja0ZvcndhcmRMaXN0IiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEFzV2ViQXJj
aGl2ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzV2ViQXJjaGl2ZSk7Ci0gICAgYmlu
ZE1ldGhvZCgia2VlcFdlYkhpc3RvcnkiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJI
aXN0b3J5KTsKLSAgICBiaW5kTWV0aG9kKCJvYmpDQ2xhc3NOYW1lT2YiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om9iakNDbGFzc05hbWVPZik7Ci0gICAgYmluZE1ldGhvZCgic2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEpOwotICAgIGJpbmRNZXRob2QoInNldENhbGxDbG9zZU9uV2ViVmll
d3MiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbGxDbG9zZU9uV2ViVmlld3MpOwotICAg
IGJpbmRNZXRob2QoInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIpOwotICAgIGJpbmRNZXRob2Qo
InNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldFVzZURhc2hib2FyZENv
bXBhdGliaWxpdHlNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRD
b21wYXRpYmlsaXR5TW9kZSk7Ci0gICAgYmluZE1ldGhvZCgic3RvcmVXZWJTY3JpcHRPYmplY3Qi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0b3JlV2ViU2NyaXB0T2JqZWN0KTsKLSAgICBiaW5k
TWV0aG9kKCJkZWxldGVBbGxMb2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZSk7Ci0gICAgYmluZE1ldGhvZCgibG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNh
Z2VGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSk7Ci0gICAgYmlu
ZE1ldGhvZCgiZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoIm9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9i
c2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOwotICAgIGJpbmRNZXRob2QoInN5bmNM
b2NhbFN0b3JhZ2UiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOwot
ICAgIGJpbmRNZXRob2QoInNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5s
b2FkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZCk7Ci0gICAgYmluZE1ldGhvZCgiZW5hYmxlRml4ZWRMYXlvdXRNb2Rl
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVGaXhlZExheW91dE1vZGUpOwotICAgIGJp
bmRNZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
Rml4ZWRMYXlvdXRTaXplKTsKLSAgICBiaW5kTWV0aG9kKCJzZWxlY3Rpb25Bc01hcmt1cCIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2VsZWN0aW9uQXNNYXJrdXApOwotICAgIGJpbmRNZXRob2Qo
InNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXh0U3Vy
cm91bmRpbmdOb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjp0ZXh0U3Vycm91bmRpbmdOb2Rl
KTsKKyAgICBiaW5kTWV0aG9kKCJhYm9ydE1vZGFsIiwgJkRSVFRlc3RSdW5uZXI6OmFib3J0TW9k
YWwpOworICAgIGJpbmRNZXRob2QoImFjY2Vzc1N0b3JlZFdlYlNjcmlwdE9iamVjdCIsICZEUlRU
ZXN0UnVubmVyOjphY2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QpOworICAgIGJpbmRNZXRob2Qo
ImFkZERpc2FsbG93ZWRVUkwiLCAmRFJUVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTCk7Cisg
ICAgYmluZE1ldGhvZCgiYXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbiIsICZEUlRU
ZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKTsKKyAgICBiaW5k
TWV0aG9kKCJjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXciLCAmRFJUVGVzdFJ1bm5lcjo6Y2FsbFNo
b3VsZENsb3NlT25XZWJWaWV3KTsKKyAgICBiaW5kTWV0aG9kKCJjbGVhckFsbEFwcGxpY2F0aW9u
Q2FjaGVzIiwgJkRSVFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMpOworICAg
IGJpbmRNZXRob2QoImNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbiIsICZEUlRUZXN0UnVu
bmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoImNs
ZWFyQmFja0ZvcndhcmRMaXN0IiwgJkRSVFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0
KTsKKyAgICBiaW5kTWV0aG9kKCJkdW1wQXNXZWJBcmNoaXZlIiwgJkRSVFRlc3RSdW5uZXI6OmR1
bXBBc1dlYkFyY2hpdmUpOworICAgIGJpbmRNZXRob2QoImtlZXBXZWJIaXN0b3J5IiwgJkRSVFRl
c3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KTsKKyAgICBiaW5kTWV0aG9kKCJvYmpDQ2xhc3NOYW1l
T2YiLCAmRFJUVGVzdFJ1bm5lcjo6b2JqQ0NsYXNzTmFtZU9mKTsKKyAgICBiaW5kTWV0aG9kKCJz
ZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRDYWxsQ2xvc2VPbldl
YlZpZXdzIiwgJkRSVFRlc3RSdW5uZXI6OnNldENhbGxDbG9zZU9uV2ViVmlld3MpOworICAgIGJp
bmRNZXRob2QoInNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIiLCAmRFJUVGVzdFJ1bm5lcjo6
c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik7CisgICAgYmluZE1ldGhvZCgic2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSIs
ICZEUlRUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSk7CisgICAg
YmluZE1ldGhvZCgic3RvcmVXZWJTY3JpcHRPYmplY3QiLCAmRFJUVGVzdFJ1bm5lcjo6c3RvcmVX
ZWJTY3JpcHRPYmplY3QpOworICAgIGJpbmRNZXRob2QoImRlbGV0ZUFsbExvY2FsU3RvcmFnZSIs
ICZEUlRUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOworICAgIGJpbmRNZXRob2Qo
ImxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbiIsICZEUlRUZXN0UnVubmVyOjpsb2NhbFN0
b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4pOworICAgIGJpbmRNZXRob2QoIm9yaWdpbnNXaXRoTG9j
YWxTdG9yYWdlIiwgJkRSVFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKTsKKyAg
ICBiaW5kTWV0aG9kKCJkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4iLCAmRFJUVGVzdFJ1bm5l
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKTsKKyAgICBiaW5kTWV0aG9kKCJvYnNlcnZl
U3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zIiwgJkRSVFRlc3RSdW5uZXI6Om9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOworICAgIGJpbmRNZXRob2QoInN5bmNMb2NhbFN0b3Jh
Z2UiLCAmRFJUVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk7CisgICAgYmluZE1ldGhvZCgi
c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQiLCAmRFJUVGVzdFJ1
bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQpOworICAg
IGJpbmRNZXRob2QoImVuYWJsZUZpeGVkTGF5b3V0TW9kZSIsICZEUlRUZXN0UnVubmVyOjplbmFi
bGVGaXhlZExheW91dE1vZGUpOworICAgIGJpbmRNZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIs
ICZEUlRUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUpOworICAgIGJpbmRNZXRob2QoInNl
bGVjdGlvbkFzTWFya3VwIiwgJkRSVFRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFya3VwKTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IiLCAmRFJUVGVzdFJ1
bm5lcjo6c2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKTsKKyAgICBiaW5kTWV0aG9kKCJ0
ZXh0U3Vycm91bmRpbmdOb2RlIiwgJkRSVFRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUp
OwogCiAgICAgLy8gVGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3du
IG1ldGhvZCBpcyBpbnZva2VkLgotICAgIGJpbmRGYWxsYmFja01ldGhvZCgmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmZhbGxiYWNrTWV0aG9kKTsKKyAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkRSVFRl
c3RSdW5uZXI6OmZhbGxiYWNrTWV0aG9kKTsKIAogICAgIC8vIFNoYXJlZCBwcm9wZXJ0aWVzLgog
ICAgIC8vIGdsb2JhbEZsYWcgaXMgdXNlZCBieSBhIG51bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4K
QEAgLTI4OSwyMSArMjg5LDIxIEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29u
dHJvbGwKICAgICBiaW5kUHJvcGVydHkoInRpdGxlVGV4dERpcmVjdGlvbiIsICZtX3RpdGxlVGV4
dERpcmVjdGlvbik7CiAgICAgYmluZFByb3BlcnR5KCJwbGF0Zm9ybU5hbWUiLCAmbV9wbGF0Zm9y
bU5hbWUpOwogICAgIGJpbmRQcm9wZXJ0eSgiaW50ZXJjZXB0UG9zdE1lc3NhZ2UiLCAmbV9pbnRl
cmNlcHRQb3N0TWVzc2FnZSk7Ci0gICAgYmluZFByb3BlcnR5KCJ3b3JrZXJUaHJlYWRDb3VudCIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQpOwotICAgIGJpbmRNZXRo
b2QoInNlbmRXZWJJbnRlbnRSZXNwb25zZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdl
YkludGVudFJlc3BvbnNlKTsKLSAgICBiaW5kTWV0aG9kKCJkZWxpdmVyV2ViSW50ZW50IiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KTsKKyAgICBiaW5kUHJvcGVydHko
IndvcmtlclRocmVhZENvdW50IiwgJkRSVFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KTsK
KyAgICBiaW5kTWV0aG9kKCJzZW5kV2ViSW50ZW50UmVzcG9uc2UiLCAmRFJUVGVzdFJ1bm5lcjo6
c2VuZFdlYkludGVudFJlc3BvbnNlKTsKKyAgICBiaW5kTWV0aG9kKCJkZWxpdmVyV2ViSW50ZW50
IiwgJkRSVFRlc3RSdW5uZXI6OmRlbGl2ZXJXZWJJbnRlbnQpOwogfQogCi1MYXlvdXRUZXN0Q29u
dHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKK0RSVFRlc3RSdW5uZXI6On5EUlRUZXN0
UnVubmVyKCkKIHsKIH0KIAotTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6fldvcmtR
dWV1ZSgpCitEUlRUZXN0UnVubmVyOjpXb3JrUXVldWU6On5Xb3JrUXVldWUoKQogewogICAgIHJl
c2V0KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6cHJvY2Vz
c1dvcmtTb29uKCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjpwcm9jZXNzV29ya1Nv
b24oKQogewogICAgIGlmIChtX2NvbnRyb2xsZXItPm1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnRv
cExvYWRpbmdGcmFtZSgpKQogICAgICAgICByZXR1cm47CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjpwcgogICAgICAgICBtX2NvbnRyb2xs
ZXItPm1fc2hlbGwtPnRlc3RGaW5pc2hlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpXb3JrUXVldWU6OnByb2Nlc3NXb3JrKCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6V29ya1F1
ZXVlOjpwcm9jZXNzV29yaygpCiB7CiAgICAgVGVzdFNoZWxsKiBzaGVsbCA9IG1fY29udHJvbGxl
ci0+bV9zaGVsbDsKICAgICAvLyBRdWl0IGRvaW5nIHdvcmsgb25jZSBhIGxvYWQgaXMgaW4gcHJv
Z3Jlc3MuCkBAIC0zMzAsMTQgKzMzMCwxNCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpX
b3JrUXVldWU6OnByCiAgICAgICAgIHNoZWxsLT50ZXN0RmluaXNoZWQoKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjpyZXNldCgpCit2b2lkIERSVFRlc3RSdW5u
ZXI6OldvcmtRdWV1ZTo6cmVzZXQoKQogewogICAgIG1fZnJvemVuID0gZmFsc2U7CiAgICAgd2hp
bGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkKICAgICAgICAgZGVsZXRlIG1fcXVldWUudGFrZUZpcnN0
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtRdWV1ZTo6YWRkV29yayhX
b3JrSXRlbSogd29yaykKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjphZGRXb3JrKFdv
cmtJdGVtKiB3b3JrKQogewogICAgIGlmIChtX2Zyb3plbikgewogICAgICAgICBkZWxldGUgd29y
azsKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVl
dWU6OmFkCiAgICAgbV9xdWV1ZS5hcHBlbmQod29yayk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmR1bXBBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1f
ZHVtcEFzVGV4dCA9IHRydWU7CiAgICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0cyA9IGZhbHNlOwpA
QCAtMzU4LDk4ICszNTgsOTggQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4
dChjbwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wRGF0YWJhc2VDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpkdW1wRGF0YWJhc2VDYWxsYmFja3Mo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIERv
IG5vdGhpbmc7IHdlIGRvbid0IHVzZSB0aGlzIGZsYWcgYW55d2hlcmUgZm9yIG5vdwogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRWRp
dGluZ0NhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit2b2lkIERSVFRlc3RSdW5uZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBFZGl0aW5nQ2FsbGJh
Y2tzID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcEJhY2tGb3J3YXJkTGlzdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmR1bXBCYWNrRm9yd2FyZExp
c3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1f
ZHVtcEJhY2tGb3J3YXJkTGlzdCA9IHRydWU7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVy
OjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
UHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
bV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51
bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFVzZXJHZXN0dXJlSW5G
cmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxi
YWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
bV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyA9IHRydWU7CiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQordm9pZCBEUlRUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5u
ZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5
cGVzID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpkdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyA9IHRydWU7
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9kdW1wQ2hp
bGRGcmFtZXNBc1RleHQgPSB0cnVlOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wV2luZG93U3RhdHVzQ2hhbmdlcyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmR1
bXBXaW5kb3dTdGF0dXNDaGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzID0gdHJ1ZTsKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFRp
dGxlQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2
b2lkIERSVFRlc3RSdW5uZXI6OmR1bXBUaXRsZUNoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9IHRydWU7
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZHVtcFBlcm1pc3Npb25DbGll
bnRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQog
ewogICAgIG1fZHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MgPSB0cnVlOwogICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ3JlYXRl
Vmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERS
VFRlc3RSdW5uZXI6OmR1bXBDcmVhdGVWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBDcmVhdGVWaWV3ID0gdHJ1ZTsKICAgICByZXN1
bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0
c0VkaXRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAgICAgICBtX2Fj
Y2VwdHNFZGl0aW5nID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKICAgICByZXN1bHQt
PnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9u
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRl
c3RSdW5uZXI6OndhaXRVbnRpbERvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIGlmICghd2Via2l0X3N1cHBvcnQ6OkJlaW5nRGVidWdnZWQoKSkK
ICAgICAgICAgcG9zdERlbGF5ZWRUYXNrKG5ldyBOb3RpZnlEb25lVGltZWRPdXRUYXNrKHRoaXMp
LCBtX3NoZWxsLT5sYXlvdXRUZXN0VGltZW91dCgpKTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VW50aWxEb25lCiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpu
b3RpZnlEb25lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICAvLyBUZXN0IGRpZG4ndCB0aW1lb3V0LiBLaWxsIHRoZSB0aW1lb3V0IHRpbWVyLgogICAg
IG1fdGFza0xpc3QucmV2b2tlQWxsKCk7CkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZShjbwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1Rp
bWVvdXQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGlt
ZW91dCkKIHsKICAgICBpZiAobV93YWl0VW50aWxEb25lICYmICFtX3NoZWxsLT53ZWJWaWV3SG9z
dCgpLT50b3BMb2FkaW5nRnJhbWUoKSAmJiBtX3dvcmtRdWV1ZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgaWYgKGlzVGltZW91dCkKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjb21wbGV0ZU5vdGlmCiAgICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7CiB9CiAK
LWNsYXNzIFdvcmtJdGVtQmFja0ZvcndhcmQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OldvcmtJdGVtIHsKK2NsYXNzIFdvcmtJdGVtQmFja0ZvcndhcmQgOiBwdWJsaWMgRFJUVGVzdFJ1
bm5lcjo6V29ya0l0ZW0gewogcHVibGljOgogICAgIFdvcmtJdGVtQmFja0ZvcndhcmQoaW50IGRp
c3RhbmNlKSA6IG1fZGlzdGFuY2UoZGlzdGFuY2UpIHsgfQogICAgIGJvb2wgcnVuKFRlc3RTaGVs
bCogc2hlbGwpCkBAIC00OTAsMjEgKzQ5MCwyMSBAQCBwcml2YXRlOgogICAgIGludCBtX2Rpc3Rh
bmNlOwogfTsKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlv
bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
dm9pZCBEUlRUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQogICAgICAgICBtX3dvcmtR
dWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUJhY2tGb3J3YXJkKC1hcmd1bWVudHNbMF0udG9JbnQz
MigpKSk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6cXVldWVGb3J3
YXJkTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSkKICAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1C
YWNrRm9yd2FyZChhcmd1bWVudHNbMF0udG9JbnQzMigpKSk7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiB9CiAKLWNsYXNzIFdvcmtJdGVtUmVsb2FkIDogcHVibGljIExheW91dFRlc3RDb250cm9s
bGVyOjpXb3JrSXRlbSB7CitjbGFzcyBXb3JrSXRlbVJlbG9hZCA6IHB1YmxpYyBEUlRUZXN0UnVu
bmVyOjpXb3JrSXRlbSB7CiBwdWJsaWM6CiAgICAgYm9vbCBydW4oVGVzdFNoZWxsKiBzaGVsbCkK
ICAgICB7CkBAIC01MTMsMTMgKzUxMywxMyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVSZWxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV93b3JrUXVl
dWUuYWRkV29yayhuZXcgV29ya0l0ZW1SZWxvYWQpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwog
fQogCi1jbGFzcyBXb3JrSXRlbUxvYWRpbmdTY3JpcHQgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OldvcmtJdGVtIHsKK2NsYXNzIFdvcmtJdGVtTG9hZGluZ1NjcmlwdCA6IHB1YmxpYyBE
UlRUZXN0UnVubmVyOjpXb3JrSXRlbSB7CiBwdWJsaWM6CiAgICAgV29ya0l0ZW1Mb2FkaW5nU2Ny
aXB0KGNvbnN0IHN0cmluZyYgc2NyaXB0KSA6IG1fc2NyaXB0KHNjcmlwdCkgeyB9CiAgICAgYm9v
bCBydW4oVGVzdFNoZWxsKiBzaGVsbCkKQEAgLTUzMiw3ICs1MzIsNyBAQCBwcml2YXRlOgogICAg
IHN0cmluZyBtX3NjcmlwdDsKIH07CiAKLWNsYXNzIFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdCA6
IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0ZW0geworY2xhc3MgV29ya0l0ZW1O
b25Mb2FkaW5nU2NyaXB0IDogcHVibGljIERSVFRlc3RSdW5uZXI6OldvcmtJdGVtIHsKIHB1Ymxp
YzoKICAgICBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQoY29uc3Qgc3RyaW5nJiBzY3JpcHQpIDog
bV9zY3JpcHQoc2NyaXB0KSB7IH0KICAgICBib29sIHJ1bihUZXN0U2hlbGwqIHNoZWxsKQpAQCAt
NTQ1LDIxICs1NDUsMjEgQEAgcHJpdmF0ZToKICAgICBzdHJpbmcgbV9zY3JpcHQ7CiB9OwogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYm
IGFyZ3VtZW50c1swXS5pc1N0cmluZygpKQogICAgICAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5l
dyBXb3JrSXRlbUxvYWRpbmdTY3JpcHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkK
ICAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Ob25Mb2FkaW5nU2NyaXB0
KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LWNsYXNzIFdvcmtJdGVtTG9hZCA6IHB1YmxpYyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya0l0
ZW0geworY2xhc3MgV29ya0l0ZW1Mb2FkIDogcHVibGljIERSVFRlc3RSdW5uZXI6OldvcmtJdGVt
IHsKIHB1YmxpYzoKICAgICBXb3JrSXRlbUxvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdl
YlN0cmluZyYgdGFyZ2V0KQogICAgICAgICA6IG1fdXJsKHVybCkKQEAgLTU3NSw3ICs1NzUsNyBA
QCBwcml2YXRlOgogICAgIFdlYlN0cmluZyBtX3RhcmdldDsKIH07CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnF1ZXVlTG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpxdWV1ZUxvYWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBXZWJVUkw6OnJlc29sdmUoKSBhbmQgYXZvaWQgR1VS
TC4KQEAgLTU5MSw3ICs1OTEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxv
YWQoY29uCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLWNsYXNzIFdvcmtJdGVtTG9hZEhU
TUxTdHJpbmcgOiBwdWJsaWMgTGF5b3V0VGVzdENvbnRyb2xsZXI6OldvcmtJdGVtICB7CitjbGFz
cyBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nIDogcHVibGljIERSVFRlc3RSdW5uZXI6OldvcmtJdGVt
ICB7CiBwdWJsaWM6CiAgICAgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OnN0cmlu
ZyYgaHRtbCwgY29uc3QgV2ViVVJMJiBiYXNlVVJMKQogICAgICAgICA6IG1faHRtbChodG1sKQpA
QCAtNjEzLDcgKzYxMyw3IEBAIHByaXZhdGU6CiAgICAgV2ViVVJMIG1fdW5yZWFjaGFibGVVUkw7
CiB9OwogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IERSVFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKICAgICAgICAgc3RyaW5nIGh0
bWwgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKQEAgLTYyOCw3ICs2MjgsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWRIVE1MCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNJZGVudGl0eUlzRXF1YWwoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RFJUVGVzdFJ1bm5lcjo6b2JqQ0lkZW50aXR5SXNFcXVhbChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgMikgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyB0byByZXR1
cm4gYW4gZXJyb3IuCkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b2JqQ0lkZW50aXR5SQogICAgIHJlc3VsdC0+c2V0KGFyZ3VtZW50c1swXS5pc0VxdWFsKGFy
Z3VtZW50c1sxXSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCgpCit2
b2lkIERSVFRlc3RSdW5uZXI6OnJlc2V0KCkKIHsKICAgICBpZiAobV9zaGVsbCkgewogICAgICAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFpvb21MZXZlbChmYWxzZSwgMCk7CkBAIC03MDcsNyAr
NzA3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQoKQogI2VuZGlmCiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCit2b2lkIERS
VFRlc3RSdW5uZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCiB7CiAgICAgbV93ZWJIaXN0b3J5SXRl
bUNvdW50LnNldChtX3NoZWxsLT5uYXZpZ2F0aW9uRW50cnlDb3VudCgpKTsKIApAQCAtNzE4LDcy
ICs3MTgsNzIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYXRpb25DaGFuZwogICAg
ICAgICBtX3dvcmtRdWV1ZS5wcm9jZXNzV29ya1Nvb24oKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cG9saWN5RGVsZWdhdGVEb25lKCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6cG9s
aWN5RGVsZWdhdGVEb25lKCkKIHsKICAgICBBU1NFUlQobV93YWl0VW50aWxEb25lKTsKICAgICBt
X3NoZWxsLT50ZXN0RmluaXNoZWQoKTsKICAgICBtX3dhaXRVbnRpbERvbmUgPSBmYWxzZTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpz
ZXRDYW5PcGVuV2luZG93cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgbV9jYW5PcGVuV2luZG93cyA9IHRydWU7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
IHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgp
KQogICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVt
ZW50cyhhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OndpbmRv
d0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAg
ICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+KG1fc2hlbGwtPndpbmRvd0NvdW50KCkpKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldENsb3NlUmVtYWluaW5nV2luZG93c1do
ZW5Db21wbGV0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpCiAgICAgICAgIG1fY2xvc2VSZW1haW5pbmdXaW5kb3dzID0gYXJndW1lbnRzWzBd
LnZhbHVlLmJvb2xWYWx1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVy
OjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwKQog
ICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0QWxsQ29va2llcyhjcHBWYXJpYW50VG9C
b29sKGFyZ3VtZW50c1swXSkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEUlRUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAg
ICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0QXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pKTsKICAgICByZXN1
bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYklu
c3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IERSVFRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fc2hlbGwtPnNob3dEZXZUb29scygpOwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9z
ZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+Y2xv
c2VEZXZUb29scygpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRXaW5kb3dJ
c0tleShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29s
KCkpCiAgICAgICAgIG1fc2hlbGwtPnNldEZvY3VzKG1fc2hlbGwtPndlYlZpZXcoKSwgYXJndW1l
bnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRU
ZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIG1fc2hlbGwtPnBy
ZWZlcmVuY2VzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhcmd1bWVudHNbMF0udmFsdWUu
Ym9vbFZhbHVlID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uIDogV2ViVVJMKCk7CkBAIC03OTIs
NyArNzkyLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlUwogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkpIHsKICAgICAgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gd2Via2l0X3N1
cHBvcnQ6OkxvY2FsRmlsZVRvRGF0YVVSTCgKQEAgLTgwMyw3ICs4MDMsNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit2b2lkIERSVFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewogICAg
ICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA9
IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CkBAIC04MTIsNyArODEyLDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVQogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0
UnVubmVyOjpleGVjQ29tbWFuZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQpAQCAtODI5LDcg
KzgyOSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKGMKICAgICBt
X3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlQ29tbWFuZChXZWJTdHJp
bmc6OmZyb21VVEY4KGNvbW1hbmQpLCBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlKSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1
bm5lcjo6aXNDb21tYW5kRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpA
QCAtODQxLDcgKzg0MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVu
YWIKICAgICByZXN1bHQtPnNldChydik7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tp
bmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c0Jvb2woKSkgewogICAgICAgICBib29sIGJsb2NrUG9wdXBzID0gYXJndW1lbnRzWzBdLnRvQm9v
bGVhbigpOwpAQCAtODUxLDc4ICs4NTEsNzggQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UG9wdXBCbG9jawogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldEltYWdl
c0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQogICAgICAgICBtX3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRJbWFnZXNBbGxv
d2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcmlwdHNBbGxvd2VkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRl
c3RSdW5uZXI6OnNldFNjcmlwdHNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lv
bnMoKS0+c2V0U2NyaXB0c0FsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3Rv
cmFnZUFsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZUFsbG93ZWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAgICAgICBt
X3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRTdG9yYWdlQWxsb3dlZChhcmd1bWVudHNbMF0u
dG9Cb29sZWFuKCkpOwogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRQbHVnaW5zQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRQbHVn
aW5zQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpCiAgICAgICAgIG1fc2hlbGwtPndlYlBlcm1pc3Npb25zKCktPnNldFBsdWdpbnNB
bGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGli
aWxpdHlNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3Zv
aWQgRFJUVGVzdFJ1bm5lcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIFdlIGhhdmUg
bm8gbmVlZCB0byBzdXBwb3J0IERhc2hib2FyZCBDb21wYXRpYmlsaXR5IE1vZGUgKG1hYy1vbmx5
KQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNh
Y2hlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4K
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNh
Y2hlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxp
Y2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90
YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRl
c3RSdW5uZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KICAgICByZXN1bHQtPnNldE51bGwo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlv
bkNhY2hlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RFJUVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRvIHN1cHBvcnQgZ2V0dGluZyBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMu
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNh
Y2hlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBk
aXNrIHVzYWdlIGJ5IGFsbCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgYW4gb3JpZ2luLgogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3Jv
bGxiYXJQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQor
dm9pZCBEUlRUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCiAg
ICAgLy8gQ3VycmVudGx5IG9ubHkgaGFzIGEgbm9uLW51bGwgaW1wbGVtZW50YXRpb24gb24gUVQu
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c0Jvb2woKSkgewogICAgICAgICBib29sIGVuYWJsZSA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29s
VmFsdWU7CkBAIC05MzQsMTQgKzkzNCwxNCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDdXN0b21Qb2xpCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+d2FpdEZvclBvbGljeURlbGVnYXRlKCk7CiAgICAg
bV93YWl0VW50aWxEb25lID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKICAgICAgICAg
c3RyaW5nIGhlYWRlciA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwpAQCAtOTUxLDIxICs5NTEs
MjEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNlbmRSZQogICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hv
c3QoKS0+c2V0QmxvY2tSZWRpcmVjdHMoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldFdpbGxTZW5k
UmVxdWVzdFJldHVybnNOdWxsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0UmVx
dWVzdFJldHVybk51bGwoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2Fs
UmVzb3VyY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpKQpAQCAtMTAwMywzMyArMTAwMywzMyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlCiAgICAgcmVzdWx0LT5zZXQod2Via2l0X3N1cHBvcnQ6
OlJld3JpdGVMYXlvdXRUZXN0c1VSTCh1cmwpLnNwZWMoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZEZpbGVUb1Bhc3RlYm9hcmRPbkRyYWcoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjphZGRGaWxlVG9Q
YXN0ZWJvYXJkT25EcmFnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBtX3Nob3VsZEFkZEZpbGVUb1Bhc3Rl
Ym9hcmQgPSB0cnVlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9wUHJv
dmlzaW9uYWxGcmFtZUxvYWRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CiAgICAgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzID0gdHJ1ZTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2
b2lkIERSVFRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAgIG1f
c2hlbGwtPndlYlZpZXdIb3N0KCktPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChhcmd1bWVu
dHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
dm9pZCBEUlRUZXN0UnVubmVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKICAg
ICAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKICAgICByZXN1bHQtPnNldE51
bGwoKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCitib29sIERSVFRlc3RSdW5uZXI6OnBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQogewogICAg
IFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7CiAg
ICAgaWYgKCF3ZWJGcmFtZSkKQEAgLTEwNDUsNyArMTA0NSw3IEBAIGJvb2wgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhdXNlQW5pbWF0aW8KICAgICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VBbmlt
YXRpb25BdFRpbWUoZWxlbWVudCwgYW5pbWF0aW9uTmFtZSwgdGltZSk7CiB9CiAKLWJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChj
b25zdCBXZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgZWxlbWVudElkKQorYm9vbCBEUlRUZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1l
LCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKIHsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUg
PSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwogICAgIGlmICghd2ViRnJhbWUpCkBA
IC0xMDYxLDcgKzEwNjEsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5z
aXRpCiAgICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50
LCBwcm9wZXJ0eU5hbWUsIHRpbWUpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBl
bGVtZW50SWQpCitib29sIERSVFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9y
RWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKIHsKICAgICBXZWJGcmFt
ZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwogICAgIGlmICgh
d2ViRnJhbWUpCkBAIC0xMDc1LDcgKzEwNzUsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVy
OjplbGVtZW50RG9lc0F1CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRvQ29tcGxldGUoKTsK
IH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
KQoraW50IERSVFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpCiB7CiAgICAg
V2ViRnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKICAg
ICBpZiAoIXdlYkZyYW1lKQpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgaW50IExheW91dFRlc3RDb250
cm9sbGVyOjpudW1iZXJPZkFjdGl2ZQogICAgIHJldHVybiBjb250cm9sbGVyLT5udW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VB
bmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6cGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldChmYWxzZSk7CiAgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpICYmIGFy
Z3VtZW50c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKSB7CkBAIC0x
MDk5LDcgKzEwOTksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlv
CiAgICAgfQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwogICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNb
MV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkgewpAQCAtMTExMCw3ICsx
MTEwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aQogICAgIH0K
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVG
b3JFbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
Rm9yRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3Vt
ZW50c1swXS5pc1N0cmluZygpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKQEAgLTEx
MjAsNyArMTEyMCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXUK
ICAgICByZXN1bHQtPnNldChlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQo
ZWxlbWVudElkKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuYWJsZUF1dG9S
ZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgIT0gNCkgewogICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CkBA
IC0xMTM4LDcgKzExMzgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRv
UmVzCiAgICAgcmVzdWx0LT5zZXQodHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRpc2FibGVBdXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpkaXNhYmxlQXV0b1Jl
c2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPTIpIHsKICAgICAgICAgcmVzdWx0
LT5zZXQoZmFsc2UpOwpAQCAtMTE1NCwzMSArMTE1NCwzMSBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNhYmxlQXV0b1JlCiAgICAgcmVzdWx0LT5zZXQodHJ1ZSk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6Om51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1
bm5lcjo6ZGlzYWJsZUltYWdlTG9hZGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+cHJlZmVyZW5jZXMoKS0+bG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5ID0gZmFsc2U7CiAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwog
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRJY29uRGF0YWJhc2VFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgLy8gV2UgZG9u
J3QgdXNlIHRoZSBXZWJLaXQgaWNvbiBkYXRhYmFzZS4KICAgICByZXN1bHQtPnNldE51bGwoKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVz
dFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3
KCktPmRpc3BhdGNoQmVmb3JlVW5sb2FkRXZlbnQoKSk7CiB9CiAKICNpZiBFTkFCTEUoTk9USUZJ
Q0FUSU9OUykKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE5vdGlmaWNh
dGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Z3JhbnREZXNrdG9wTm90aWZpY2F0aW9u
UGVybWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1sw
XS5pc1N0cmluZygpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKQEAgLTExOTAsNyAr
MTE5MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE4KICAgICBy
ZXN1bHQtPnNldCh0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxh
dGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNr
dG9wTm90aWZpY2F0aW9uQ2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewogICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CkBA
IC0xMjA1LDE0ICsxMjA1LDE0IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRl
RGVza3QKIH0KICNlbmRpZgogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldERvbWFp
blJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmlu
ZygpKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSwgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNl
dERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAx
KQogICAgICAgICBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSBjcHBWYXJpYW50VG9Cb29s
KGFyZ3VtZW50c1swXSk7CkBAIC0xMjIyLDIzICsxMjIyLDIzIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldERlZmVyTWFpblIKIC8vIFVuaW1wbGVtZW50ZWQgc3R1YnMKIC8vCiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBBc1dlYkFyY2hpdmUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5l
cjo6ZHVtcEFzV2ViQXJjaGl2ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRl
c3RSdW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51
bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFNlbGVjdGlvblJlY3Qo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3Zv
aWQgRFJUVGVzdFJ1bm5lcjo6ZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX2R1bXBTZWxlY3Rpb25S
ZWN0ID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGxheShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpkaXNwbGF5KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgV2ViVmll
d0hvc3QqIGhvc3QgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpOwogICAgIGNvbnN0IFdlYktpdDo6
V2ViU2l6ZSYgc2l6ZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+c2l6ZSgpOwpAQCAtMTI0OSw3ICsx
MjQ5LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheShjb25zdAogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5
SW52YWxpZGF0ZWRSZWdpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZGlzcGxheUludmFsaWRhdGVkUmVn
aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgV2ViVmlld0hvc3QqIGhvc3QgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpOwogICAg
IGhvc3QtPnBhaW50SW52YWxpZGF0ZWRSZWdpb24oKTsKQEAgLTEyNTcsNTkgKzEyNTcsNTkgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheUludmFsaQogICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp0ZXN0UmVwYWludChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5u
ZXI6OnRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICBtX3Rlc3RSZXBhaW50ID0gdHJ1ZTsKICAgICByZXN1bHQtPnNldE51bGwoKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVz
dFJ1bm5lcjo6cmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX3N3ZWVwSG9yaXpvbnRhbGx5ID0gdHJ1ZTsK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJCYWNrRm9yd2FyZExpc3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExp
c3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
IHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6a2VlcFdlYkhpc3RvcnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsICBDcHBW
YXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCAgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdG9y
ZVdlYlNjcmlwdE9iamVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzdG9yZVdlYlNjcmlwdE9iamVjdChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
Y2Nlc3NTdG9yZWRXZWJTY3JpcHRPYmplY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6YWNjZXNzU3RvcmVk
V2ViU2NyaXB0T2JqZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om9iakNDbGFzc05hbWVPZihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpvYmpDQ2xh
c3NOYW1lT2YoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjphZGREaXNhbGxvd2Vk
VVJMKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldENhbGxDbG9zZU9uV2ViVmlld3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0Q2FsbENsb3Nl
T25XZWJWaWV3cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNl
dFByaXZhdGVCcm93c2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEUlRUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewogICAgICAg
ICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5qYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkID0g
YXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHQKICAgICByZXN1bHQtPnNldE51bGwo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3Zv
aWQgRFJUVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CiAgICAgICAgIG1fc2hlbGwt
PnByZWZlcmVuY2VzKCktPlhTU0F1ZGl0b3JFbmFibGVkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJv
b2xWYWx1ZTsKQEAgLTEzMjcsNyArMTMyNyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFhTU0F1ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
dm9pZCBEUlRUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIFdlYlZlY3Rvcjx2ODo6TG9j
YWw8djg6OlZhbHVlPiA+IHZhbHVlczsKQEAgLTEzNTcsNyArMTM1Nyw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXAKICAgICB9CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5u
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJp
bmcoKSkgewogICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMV0pKTsKQEAgLTEzNjgsNyArMTM2OCw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXAKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2
b2lkIERSVFRlc3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwogCkBAIC0xMzgwLDcgKzEzODAsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRJc29sYXRlZFdvCiAgICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVGcm9tU3RyaW5nKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkgewogICAgICAgICBtX3NoZWxsLT5wcmVmZXJlbmNlcygpLT5hbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMcyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7CkBAIC0xMzg5LDcg
KzEzODksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlCiAgICAg
cmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
bG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldEFsbG93RGlz
cGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFy
Z3VtZW50c1swXS5pc0Jvb2woKSkKICAgICAgICAgbV9zaGVsbC0+d2ViUGVybWlzc2lvbnMoKS0+
c2V0RGlzcGxheWluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVh
bigpKTsKQEAgLTEzOTcsNyArMTM5Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFsbG93RGlzcGwKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5u
ZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKICAgICAgICAgbV9zaGVsbC0+cHJl
ZmVyZW5jZXMoKS0+YWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzID0gYXJndW1lbnRzWzBdLnZh
bHVlLmJvb2xWYWx1ZTsKQEAgLTE0MDYsNyArMTQwNiw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFsbG93RmlsZUEKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQg
RFJUVGVzdFJ1bm5lcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQogICAgICAgICBt
X3NoZWxsLT53ZWJQZXJtaXNzaW9ucygpLT5zZXRSdW5uaW5nSW5zZWN1cmVDb250ZW50QWxsb3dl
ZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKQEAgLTE0MTYsNyArMTQxNiw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93UnVubmkKIAogLy8gTmVlZCB0aGVzZSBj
b252ZXJzaW9ucyBiZWNhdXNlIHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGZvciBib29sZWFucwog
Ly8gbWF5IHZhcnkgLSBmb3IgZXhhbXBsZSwgb24gbWFjICIxIiBhbmQgIjAiIGFyZSB1c2VkIGZv
ciBib29sZWFuLgotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvQm9vbChj
b25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKK2Jvb2wgRFJUVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRv
Qm9vbChjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNCb29sKCkp
CiAgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oKTsKQEAgLTE0MzMsNyArMTQzMyw3IEBA
IGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNwcFZhcmlhbnRUb0IKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWludDMyX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNwcFZhcmlhbnRUb0ludDMy
KGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQoraW50MzJfdCBEUlRUZXN0UnVubmVyOjpjcHBWYXJp
YW50VG9JbnQzMihjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNO
dW1iZXIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoKTsKQEAgLTE0NDksNyArMTQ0
OSw3IEBAIGludDMyX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNwcFZhcmlhbnQKICAgICByZXR1
cm4gMDsKIH0KIAotV2ViU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCitXZWJTdHJpbmcgRFJUVGVzdFJ1bm5l
cjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQogewogICAg
IGlmICghdmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52
YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgc3RyaW5nIHZhbHVlLiIpOwpAQCAt
MTQ1OCw3ICsxNDU4LDcgQEAgV2ViU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpjcHBWYXJp
YQogICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlLnRvU3RyaW5nKCkpOwogfQog
Ci1WZWN0b3I8V2ViU3RyaW5nPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3BwVmFyaWFudFRvV2Vi
U3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCitWZWN0b3I8V2ViU3RyaW5nPiBE
UlRUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheShjb25zdCBDcHBWYXJpYW50
JiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgbG9nRXJy
b3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHByZWZlcmVuY2UuIEV4cGVjdGVkIG9iamVj
dCB2YWx1ZS4iKTsKQEAgLTE0ODgsNyArMTQ4OCw3IEBAIHN0YXRpYyB2b2lkIHNldEZvbnRNYXAo
V2ViUHJlZmVyZW5jZXM6OlMKICAgICB9CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8
ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKQEAgLTE1OTEsMTMgKzE1OTEsMTMgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZQogICAgIG1fc2hlbGwtPmFwcGx5UHJl
ZmVyZW5jZXMoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmFsbGJhY2tNZXRo
b2QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRU
ZXN0UnVubmVyOjpmYWxsYmFja01ldGhvZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7Ci0gICAgcHJpbnRmKCJDT05TT0xFIE1FU1NBR0U6IEphdmFTY3JpcHQg
RVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBMYXlvdXRUZXN0Q29udHJvbGxlclxuIik7
CisgICAgcHJpbnRmKCJDT05TT0xFIE1FU1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVua25vd24g
bWV0aG9kIGNhbGxlZCBvbiBEUlRUZXN0UnVubmVyXG4iKTsKICAgICByZXN1bHQtPnNldE51bGwo
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIApAQCAtMTYxNiw3ICsxNjE2LDcgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZQogICAgICAgICBhcmd1bWVudHNbM10udG9C
b29sZWFuKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogCkBAIC0xNjM1LDIwICsxNjM1
LDIwIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkEKICAgICAgICAg
YXJndW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICB3ZWJraXRfc3VwcG9ydDo6Q2xlYXJBbGxEYXRh
YmFzZXMoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90
YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
dm9pZCBEUlRUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiAgICAgaWYgKChhcmd1bWVudHMuc2l6ZSgpID49IDEpICYmIGFyZ3VtZW50c1swXS5pc051
bWJlcigpKQogICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0RGF0YWJhc2VRdW90YShhcmd1bWVu
dHNbMF0udG9JbnQzMigpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UE9T
SVhMb2NhbGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNl
dE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxICYmIGFyZ3VtZW50c1swXS5p
c1N0cmluZygpKQpAQCAtMTcxNSwxMyArMTcxNSwxMyBAQCBzdGF0aWMgYm9vbCBwYXJzZVBhZ2VO
dW1iZXJTaXplTWFyZ2lucyhjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldFByaW50aW5nKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgc2V0SXNQcmludGluZyh0cnVlKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJU
VGVzdFJ1bm5lcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldCgi
Iik7CiAgICAgaW50IHBhZ2VOdW1iZXIgPSAwOwpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYQogICAgIHJlc3VsdC0+c2V0KHJlc3Vs
dFN0cmluZy5zdHIoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0N1c3Rv
bVBhZ2VTaXplU3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKICAgICBpbnQgcGFnZUluZGV4ID0gMDsKQEAgLTE3NTgs
NyArMTc1OCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0N1c3RvbVBhZ2UKICAg
ICByZXN1bHQtPnNldChmcmFtZS0+aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShwYWdlSW5kZXgpKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RS
dW5uZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0KCIiKTsKICAgICBpbnQgcGFnZU51
bWJlciA9IDA7CkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlUHJvcGVydHkoCiAgICAgZnJhbWUtPnByaW50RW5kKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQ
YWdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGludCBwYWdlV2lkdGhJblBpeGVscyA9
IDA7CkBAIC0xNzkyLDcgKzE3OTIsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1i
ZXJPZlBhZ2VzCiAgICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZQYWdlcyk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgVmVjdG9yPFdlYlZpZXdI
b3N0Kj4gd2luZG93TGlzdCA9IG1fc2hlbGwtPndpbmRvd0xpc3QoKTsKQEAgLTE4MDIsMTQgKzE4
MDIsMTQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaQogICAgIHJl
c3VsdC0+c2V0KG51bWJlck9mUmVxdWVzdHMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpsb2dFcnJvclRvQ29uc29sZShjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKK3ZvaWQgRFJU
VGVzdFJ1bm5lcjo6bG9nRXJyb3JUb0NvbnNvbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCiB7
CiAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGlkQWRkTWVzc2FnZVRvQ29uc29sZSgKICAg
ICAgICAgV2ViQ29uc29sZU1lc3NhZ2UoV2ViQ29uc29sZU1lc3NhZ2U6OkxldmVsRXJyb3IsIFdl
YlN0cmluZzo6ZnJvbVVURjgodGV4dCkpLAogICAgICAgICBXZWJTdHJpbmcoKSwgMCk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJU
VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVy
KCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQpAQCAtMTgxNywxMyArMTgxNywxMyBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbV9zaGVsbC0+ZHJ0
RGV2VG9vbHNBZ2VudCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGFyZ3VtZW50c1swXS50b0lu
dDMyKCksIGFyZ3VtZW50c1sxXS50b1N0cmluZygpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6Zm9yY2VS
ZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBtX3NoZWxsLT53
ZWJWaWV3KCktPnNldFNlbGVjdGlvbkNvbG9ycygweGZmZWUwMDAwLCAweGZmMDBlZTAwLCAweGZm
MDAwMDAwLCAweGZmYzBjMGMwKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5z
ZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0u
aXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMl0uaXNC
b29sKCkpCkBAIC0xODM0LDcgKzE4MzQsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
ZGRVc2VyU2NyaXB0CiAgICAgICAgIGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6
OlVzZXJDb250ZW50SW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVj
dEluVG9wRnJhbWVPbmx5KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNl
clN0eWxlU2hlZXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1
bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCkBAIC0xODQ3LDcgKzE4
NDcsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTCiAgICAgICAg
IFdlYlZpZXc6OlVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVz
dFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCA2IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkg
fHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkgfHwg
IWFyZ3VtZW50c1szXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbNF0uaXNCb29sKCkgfHwgIWFy
Z3VtZW50c1s1XS5pc051bWJlcigpKQpAQCAtMTg3MCw3ICsxODcwLDcgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZQogCiAvLyBGSVhNRTogRm9yIGdyZWF0ZXIgdGVz
dCBmbGV4aWJpbGl0eSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2V0IGVhY2ggcGFnZSdzIGdlb2xv
Y2F0aW9uIG1vY2sgaW5kaXZpZHVhbGx5LgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyMzY4Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8
ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCkBAIC0xODgwLDcgKzE4ODAsNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvCiAgICAgICAgIHdpbmRvd0xpc3RbaV0tPmdl
b2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQZXJtaXNzaW9uKGFyZ3VtZW50c1swXS50b0Jvb2xl
YW4oKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFh
cmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFy
Z3VtZW50c1syXS5pc051bWJlcigpKQpAQCAtMTg5MCw3ICsxODkwLDcgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvYwogICAgICAgICB3aW5kb3dMaXN0W2ldLT5nZW9s
b2NhdGlvbkNsaWVudE1vY2soKS0+c2V0UG9zaXRpb24oYXJndW1lbnRzWzBdLnRvRG91YmxlKCks
IGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpLCBhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERS
VFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCkBAIC0xOTAwLDEzICsxOTAwLDEzIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICAgICAgd2luZG93
TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldEVycm9yKGFyZ3VtZW50c1swXS50
b0ludDMyKCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjphYm9y
dE1vZGFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BF
RUNIKQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2
b2lkIERSVFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0u
aXNTdHJpbmcoKSkKQEAgLTE5MTYsNyArMTkxNiw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2gKICAgICAgICAgY29udHJvbGxlci0+YWRkTW9ja1JlY29nbml0aW9u
UmVzdWx0KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBhcmd1bWVudHNbMV0u
dG9Eb3VibGUoKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSkpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBE
UlRUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKQpAQCAtMTkyOCw3ICsxOTI4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja1NwZWVjaAogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lk
IERSVFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRz
WzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQpAQCAtMTkzOCw3ICsx
OTM4LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaAogICAgICAg
ICByZWNvZ25pemVyLT5hZGRNb2NrUmVzdWx0KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVu
dHNbMF0pLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6
OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8
fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCkBAIC0xOTQ4LDcgKzE5NDgsNyBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoCiAgICAgICAgIHJlY29nbml6ZXItPnNl
dEVycm9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMV0pKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FzTW9ja1NwZWVj
aFJlY29nbml0aW9uQWJvcnRlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJl
c3VsdC0+c2V0KGZhbHNlKTsKICAgICBpZiAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29n
bml6ZXIgPSBtX3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5tb2NrU3BlZWNoUmVjb2duaXplcigpKQpA
QCAtMTk1Niw3ICsxOTU2LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FzTW9ja1Nw
ZWVjaAogfQogI2VuZGlmCiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNo
SW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEpCkBAIC0xOTc2LDEyICsxOTc2
LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW4KICAgICBpbnB1
dC0+c3RhcnRTcGVlY2hJbnB1dCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjps
YXllclRyZWVBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmxheWVyVHJlZUFzVGV4dChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldCht
X3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5sYXllclRyZWVBc1RleHQobV9zaG93RGVi
dWdMYXllclRyZWUpLnV0ZjgoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxv
c2VDb21wb3NpdG9yQ29udGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlh
bnQqKQordm9pZCBEUlRUZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KikKIHsKICAgICBpbnQgbnVtVGltZXM7CiAg
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKQEAgLTE5OTEs
NyArMTk5MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxvc2VDb21wb3NpdG8KICAg
ICBtX3NoZWxsLT53ZWJWaWV3KCktPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVz
dFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKICAgICBp
ZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3NbMF0udmFsdWUub2JqZWN0VmFsdWUsICZl
bGVtZW50KSkKQEAgLTIwMDAsNyArMjAwMCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om1hcmtlclRleHRGb3IKICAgICAgICAgcmVzdWx0LT5zZXQoZWxlbWVudC5kb2N1bWVudCgpLmZy
YW1lKCktPm1hcmtlclRleHRGb3JMaXN0SXRlbShlbGVtZW50KS51dGY4KCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OmZpbmRT
dHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0
cmluZygpKQogICAgICAgICByZXR1cm47CkBAIC0yMDI4LDcgKzIwMjgsNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvCiAgICAgcmVzdWx0LT5zZXQoZmluZFJlc3Vs
dCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVy
dmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit2b2lkIERSVFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSkKQEAgLTIwMzYsNyArMjAzNiw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldE1pbmltdW1UaW0KICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCkt
PnNldE1pbmltdW1UaW1lckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVy
OjpzZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpKQpAQCAtMjA1Myw3ICsyMDUz
LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZAogICAgIGlucHV0
LT5zZXRBdXRvZmlsbGVkKGFyZ3VtZW50c1sxXS52YWx1ZS5ib29sVmFsdWUpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6
c2V0VmFsdWVGb3JVc2VyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gMikKQEAgLTIwNzAsMzcgKzIwNzAsMzcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VmFsdWVGb3JVcwogICAgIGlucHV0LT5zZXRWYWx1ZShjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwgdHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCopCit2b2lkIERSVFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3Rv
cmFnZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCopCiB7CiAg
ICAgLy8gTm90IEltcGxlbWVudGVkCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxv
Y2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCopCit2b2lkIERSVFRlc3RSdW5uZXI6OmxvY2FsU3RvcmFnZURpc2tV
c2FnZUZvck9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCopCiB7CiAgICAgLy8gTm90IEltcGxlbWVudGVkCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KikKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqKQog
ewogICAgIC8vIE5vdCBJbXBsZW1lbnRlZAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqKQordm9pZCBEUlRUZXN0UnVubmVyOjpkZWxldGVMb2NhbFN0b3Jh
Z2VGb3JPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
KQogewogICAgIC8vIE5vdCBJbXBsZW1lbnRlZAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKQordm9pZCBEUlRUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQog
ewogICAgIC8vIE5vdCBJbXBsZW1lbnRlZAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzeW5jTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQor
dm9pZCBEUlRUZXN0UnVubmVyOjpzeW5jTG9jYWxTdG9yYWdlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKQogewogICAgIC8vIE5vdCBJbXBsZW1lbnRlZAogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9y
ZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGlu
Z0JlZm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEgJiYgYXJndW1lbnRz
WzBdLmlzQm9vbCgpKQogICAgICAgICBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVm
b3JlVW5sb2FkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwpAQCAtMjEwOCw3ICsyMTA4LDcg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2hvdWxkU3RheQogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVGaXhlZExh
eW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMSB8fCAhYXJndW1l
bnRzWzBdLmlzQm9vbCgpKQpAQCAtMjExNyw3ICsyMTE3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZW5hYmxlRml4ZWRMYQogICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+ZW5hYmxlRml4
ZWRMYXlvdXRNb2RlKGVuYWJsZUZpeGVkTGF5b3V0KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6OnNldEZpeGVkTGF5
b3V0U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgIDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1i
ZXIoKSkKQEAgLTIxMjcsMTcgKzIxMjcsMTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0Rml4ZWRMYXlvdQogICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0Rml4ZWRMYXlvdXRTaXpl
KFdlYlNpemUod2lkdGgsIGhlaWdodCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlv
bkFzTWFya3VwKCkudXRmOCgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29y
a2VyVGhyZWFkQ291bnQoQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjp3
b3JrZXJUaHJlYWRDb3VudChDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQo
c3RhdGljX2Nhc3Q8aW50PihXZWJXb3JrZXJJbmZvOjpkZWRpY2F0ZWRXb3JrZXJDb3VudCgpKSk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9p
ZCBEUlRUZXN0UnVubmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICB2ODo6SGFuZGxlU2Nv
cGUgc2NvcGU7CiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjdHggPSBtX3NoZWxsLT53ZWJW
aWV3KCktPm1haW5GcmFtZSgpLT5tYWluV29ybGRTY3JpcHRDb250ZXh0KCk7CkBAIC0yMTU5LDcg
KzIxNTksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50CiAgICAg
cmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2
ZXJXZWJJbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZGVsaXZlcldlYkludGVudChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgIDMpCiAgICAgICAgIHJldHVybjsKQEAgLTIxODAsNyArMjE4MCw3
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJbnQKICAgICBtX3NoZWxs
LT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5kZWxpdmVySW50ZW50KGludGVudCwgMCwgbV9pbnRl
bnRDbGllbnQuZ2V0KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0
U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRUZXh0U3VicGl4ZWxQb3Np
dGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQogewogI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRST0lEKQogICAgIC8vIFNpbmNlIEZvbnRD
b25maWcgZG9lc24ndCBwcm92aWRlIGEgdmFyaWFibGUgdG8gY29udHJvbCBzdWJwaXhlbCBwb3Np
dGlvbmluZywgd2UnbGwgZmFsbCBiYWNrCkBAIC0yMTkxLDEwICsyMTkxLDEwIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHRTdWJwaXgKICAgICByZXN1bHQtPnNldE51bGwoKTsK
IH0KIAotY2xhc3MgSW52b2tlQ2FsbGJhY2tUYXNrIDogcHVibGljIE1ldGhvZFRhc2s8TGF5b3V0
VGVzdENvbnRyb2xsZXI+IHsKK2NsYXNzIEludm9rZUNhbGxiYWNrVGFzayA6IHB1YmxpYyBNZXRo
b2RUYXNrPERSVFRlc3RSdW5uZXI+IHsKIHB1YmxpYzoKLSAgICBJbnZva2VDYWxsYmFja1Rhc2so
TGF5b3V0VGVzdENvbnRyb2xsZXIqIG9iamVjdCwgUGFzc093bkFycmF5UHRyPENwcFZhcmlhbnQ+
IGNhbGxiYWNrQXJndW1lbnRzLCB1aW50MzJfdCBudW1iZXJPZkFyZ3VtZW50cykKLSAgICAgICAg
OiBNZXRob2RUYXNrPExheW91dFRlc3RDb250cm9sbGVyPihvYmplY3QpCisgICAgSW52b2tlQ2Fs
bGJhY2tUYXNrKERSVFRlc3RSdW5uZXIqIG9iamVjdCwgUGFzc093bkFycmF5UHRyPENwcFZhcmlh
bnQ+IGNhbGxiYWNrQXJndW1lbnRzLCB1aW50MzJfdCBudW1iZXJPZkFyZ3VtZW50cykKKyAgICAg
ICAgOiBNZXRob2RUYXNrPERSVFRlc3RSdW5uZXI+KG9iamVjdCkKICAgICAgICAgLCBtX2NhbGxi
YWNrQXJndW1lbnRzKGNhbGxiYWNrQXJndW1lbnRzKQogICAgICAgICAsIG1fbnVtYmVyT2ZBcmd1
bWVudHMobnVtYmVyT2ZBcmd1bWVudHMpCiAgICAgewpAQCAtMjIxMSw3ICsyMjExLDcgQEAgcHJp
dmF0ZToKICAgICB1aW50MzJfdCBtX251bWJlck9mQXJndW1lbnRzOwogfTsKIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RSdW5uZXI6
OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAh
YXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMjI1LDcgKzIyMjUsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRCYWNraW5nU2NhCiAgICAgcG9zdFRhc2sobmV3IEludm9rZUNhbGxiYWNrVGFzayh0
aGlzLCBjYWxsYmFja0FyZ3VtZW50cy5yZWxlYXNlKCksIDEpKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UGx1
Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzQm9vbCgpKSB7CiAgICAgICAgIG1fc2hlbGwtPnByZWZlcmVuY2VzKCktPnBsdWdpbnNFbmFi
bGVkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwpAQCAtMjIzNCwxMiArMjIzNCwxMiBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hCiAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxp
dHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgRFJUVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxl
LCB0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxp
dHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKICAgICAgICAgc3RyaW5n
IG5ld1Zpc2liaWxpdHkgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKQEAgLTIyNTQsMTIgKzIy
NTQsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaQogICAgIH0K
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlv
bkVuYWJsZWQoYm9vbCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQoYm9vbCkKIHsKICAgICAvLyBOb3QgSW1wbGVtZW50ZWQKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpz
ZXRUZXh0RGlyZWN0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCkBAIC0yMjgwLDcgKzIy
ODAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0CiAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1ZGlvRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRB
dWRpb0RhdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIApAQCAtMjI5Nyw3ICsyMjk3LDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXVkaW9EYXRhKAogICAgIHNldFNob3VsZER1
bXBBc0F1ZGlvKHRydWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXND
dXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0SGFzQ3VzdG9tRnVs
bFNjcmVlbkJlaGF2aW9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPCAgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQpAQCAtMjMwNiwyNiArMjMw
NiwyNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRIYXNDdXN0b21GCiB9CiAKICNp
ZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlkTG9z
ZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3ZvaWQgRFJUVGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX3NoZWxsLT53ZWJWaWV3SG9zdCgp
LT5kaWRMb3NlUG9pbnRlckxvY2soKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91
c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3ZvaWQgRFJU
VGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jaHJvbm91c2x5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX3NoZWxsLT53ZWJW
aWV3SG9zdCgpLT5zZXRQb2ludGVyTG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkoKTsKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9p
bnRlckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQordm9pZCBEUlRUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxG
YWlsU3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+c2V0UG9pbnRlckxvY2tXaWxsRmFp
bFN5bmNocm9ub3VzbHkoKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KICNlbmRpZgogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit2b2lkIERSVFRlc3RS
dW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA8IDQgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpIHx8ICFh
cmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkgfHwgIWFy
Z3VtZW50c1szXS5pc051bWJlcigpKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRFJUVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVFRlc3RSdW5uZXIuaAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4
ICszMCw4IEBACiAgKi8KIAogLyoKLSAgTGF5b3V0VGVzdENvbnRyb2xsZXIgY2xhc3M6Ci0gIEJv
dW5kIHRvIGEgSmF2YVNjcmlwdCB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgb2JqZWN0IHVz
aW5nIHRoZQorICBEUlRUZXN0UnVubmVyIGNsYXNzOgorICBCb3VuZCB0byBhIEphdmFTY3JpcHQg
d2luZG93LnRlc3RSdW5uZXIgb2JqZWN0IHVzaW5nIHRoZQogICBDcHBCb3VuZENsYXNzOjpiaW5k
VG9KYXZhc2NyaXB0KCksIHRoaXMgYWxsb3dzIGxheW91dCB0ZXN0cyB0aGF0IGFyZSBydW4gaW4K
ICAgdGhlIHRlc3Rfc2hlbGwgKG9yLCBpbiBwcmluY2lwbGUsIGFueSB3ZWIgcGFnZSBsb2FkZWQg
aW50byBhIGNsaWVudCBhcHAgYnVpbHQKICAgd2l0aCB0aGlzIGNsYXNzKSB0byBjb250cm9sIHZh
cmlvdXMgYXNwZWN0cyBvZiBob3cgdGhlIHRlc3RzIGFyZSBydW4gYW5kIHdoYXQKQEAgLTQ1LDEz
ICs0NSwxMyBAQAogCiBjbGFzcyBUZXN0U2hlbGw7CiAKLWNsYXNzIExheW91dFRlc3RDb250cm9s
bGVyIDogcHVibGljIFRlc3RSdW5uZXIgeworY2xhc3MgRFJUVGVzdFJ1bm5lciA6IHB1YmxpYyBU
ZXN0UnVubmVyIHsKIHB1YmxpYzoKICAgICAvLyBCdWlsZHMgdGhlIHByb3BlcnR5IGFuZCBtZXRo
b2QgbGlzdHMgbmVlZGVkIHRvIGJpbmQgdGhpcyBjbGFzcyB0byBhIEpTCiAgICAgLy8gb2JqZWN0
LgotICAgIExheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCopOworICAgIERSVFRlc3RSdW5u
ZXIoVGVzdFNoZWxsKik7CiAKLSAgICB+TGF5b3V0VGVzdENvbnRyb2xsZXIoKTsKKyAgICB+RFJU
VGVzdFJ1bm5lcigpOwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRl
bGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgcGFnZXMgYXMKICAgICAvLyBwbGFpbiB0ZXh0LCBy
YXRoZXIgdGhhbiBhcyBhIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlbmRlcmVyJ3Mgc3Rh
dGUuCkBAIC0zNDUsNyArMzQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZv
aWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwogCi0gICAgLy8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJpdHkgd2l0aCBv
YmplY3QgbW9kZWwgZXhwb3NlZCBieSBnbG9iYWwgTGF5b3V0VGVzdENvbnRyb2xsZXIuCisgICAg
Ly8gRW1wdHkgc3R1YiBtZXRob2QgdG8ga2VlcCBwYXJpdHkgd2l0aCBvYmplY3QgbW9kZWwgZXhw
b3NlZCBieSBnbG9iYWwgRFJUVGVzdFJ1bm5lci4KICAgICB2b2lkIGFib3J0TW9kYWwoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgLy8gU3BlZWNoIGlucHV0IHJl
bGF0ZWQgZnVuY3Rpb25zLgpAQCAtNTI4LDcgKzUyOCw3IEBAIHByaXZhdGU6CiAgICAgLy8gcXVl
dWVTY3JpcHQuCiAgICAgY2xhc3MgV29ya1F1ZXVlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFdv
cmtRdWV1ZShMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlcikgOiBtX2Zyb3plbihmYWxz
ZSksIG1fY29udHJvbGxlcihjb250cm9sbGVyKSB7IH0KKyAgICAgICAgV29ya1F1ZXVlKERSVFRl
c3RSdW5uZXIqIGNvbnRyb2xsZXIpIDogbV9mcm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29u
dHJvbGxlcikgeyB9CiAgICAgICAgIHZpcnR1YWwgfldvcmtRdWV1ZSgpOwogICAgICAgICB2b2lk
IHByb2Nlc3NXb3JrU29vbigpOwogCkBAIC01NTIsNyArNTUyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgVGFza0xpc3QgbV90YXNrTGlzdDsKICAgICAgICAgRGVxdWU8V29ya0l0ZW0qPiBtX3F1ZXVl
OwogICAgICAgICBib29sIG1fZnJvemVuOwotICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciog
bV9jb250cm9sbGVyOworICAgICAgICBEUlRUZXN0UnVubmVyKiBtX2NvbnRyb2xsZXI7CiAgICAg
fTsKIAogICAgIC8vIFN1cHBvcnQgZm9yIG92ZXJyaWRlUHJlZmVyZW5jZS4KQEAgLTU2Myw5ICs1
NjMsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBsb2dFcnJvclRvQ29uc29sZShjb25zdCBzdGQ6
OnN0cmluZyYpOwogICAgIHZvaWQgY29tcGxldGVOb3RpZnlEb25lKGJvb2wgaXNUaW1lb3V0KTsK
LSAgICBjbGFzcyBOb3RpZnlEb25lVGltZWRPdXRUYXNrOiBwdWJsaWMgTWV0aG9kVGFzazxMYXlv
dXRUZXN0Q29udHJvbGxlcj4geworICAgIGNsYXNzIE5vdGlmeURvbmVUaW1lZE91dFRhc2s6IHB1
YmxpYyBNZXRob2RUYXNrPERSVFRlc3RSdW5uZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE5v
dGlmeURvbmVUaW1lZE91dFRhc2soTGF5b3V0VGVzdENvbnRyb2xsZXIqIG9iamVjdCk6IE1ldGhv
ZFRhc2s8TGF5b3V0VGVzdENvbnRyb2xsZXI+KG9iamVjdCkgeyB9CisgICAgICAgIE5vdGlmeURv
bmVUaW1lZE91dFRhc2soRFJUVGVzdFJ1bm5lciogb2JqZWN0KTogTWV0aG9kVGFzazxEUlRUZXN0
UnVubmVyPihvYmplY3QpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsg
bV9vYmplY3QtPmNvbXBsZXRlTm90aWZ5RG9uZSh0cnVlKTsgfQogICAgIH07CiAKQEAgLTU3OCw3
ICs1NzgsNyBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgZm9yIHRlc3QgdGltZW91dHMuCiAgICAg
VGFza0xpc3QgbV90YXNrTGlzdDsKIAotICAgIC8vIE5vbi1vd25pbmcgcG9pbnRlci4gVGhlIExh
eW91dFRlc3RDb250cm9sbGVyIGlzIG93bmVkIGJ5IHRoZSBob3N0LgorICAgIC8vIE5vbi1vd25p
bmcgcG9pbnRlci4gVGhlIERSVFRlc3RSdW5uZXIgaXMgb3duZWQgYnkgdGhlIGhvc3QuCiAgICAg
VGVzdFNoZWxsKiBtX3NoZWxsOwogCiAgICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2ls
bCBwcm9kdWNlIGEgcGxhaW4gdGV4dCBkdW1wIHJhdGhlciB0aGFuIGEKQEAgLTcxNyw0ICs3MTcs
NCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3I7CiB9
OwogCi0jZW5kaWYgLy8gTGF5b3V0VGVzdENvbnRyb2xsZXJfaAorI2VuZGlmIC8vIERSVFRlc3RS
dW5uZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRy
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBS
ZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTI1NTA3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUy
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuY2Fs
bEpTR0MoKTsKICAgICAgICAgc2hlbGwuY2FsbEpTR0MoKTsKIAotICAgICAgICAvLyBXaGVuIHdl
IGZpbmlzaCB0aGUgbGFzdCB0ZXN0LCBjbGVhbnVwIHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlci4K
KyAgICAgICAgLy8gV2hlbiB3ZSBmaW5pc2ggdGhlIGxhc3QgdGVzdCwgY2xlYW51cCB0aGUgRFJU
VGVzdFJ1bm5lci4KICAgICAgICAgLy8gSXQgbWF5IGhhdmUgcmVmZXJlbmNlcyB0byBub3QteWV0
LWNsZWFuZWQgdXAgd2luZG93cy4gQnkgY2xlYW5pbmcgdXAKICAgICAgICAgLy8gaGVyZSB3ZSBo
ZWxwIHB1cmlmeSByZXBvcnRzLgogICAgICAgICBzaGVsbC5yZXNldFRlc3RDb250cm9sbGVyKCk7
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmljYXRpb25QcmVzZW50
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Ob3RpZmlj
YXRpb25QcmVzZW50ZXIuaAkocmV2aXNpb24gMTI1NTA3KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDEwICs0NiwxMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgTm90aWZpY2F0aW9uUHJlc2VudGVy
KFRlc3RTaGVsbCopIHsgfQogICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlcigpOwog
Ci0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlciB0byBzaW11bGF0ZSBh
IHVzZXIgZ3JhbnRpbmcgcGVybWlzc2lvbi4KKyAgICAvLyBDYWxsZWQgYnkgdGhlIERSVFRlc3RS
dW5uZXIgdG8gc2ltdWxhdGUgYSB1c2VyIGdyYW50aW5nIHBlcm1pc3Npb24uCiAgICAgdm9pZCBn
cmFudFBlcm1pc3Npb24oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG9yaWdpbik7CiAKLSAgICAv
LyBDYWxsZWQgYnkgdGhlIExheW91dFRlc3RDb250cm9sbGVyIHRvIHNpbXVsYXRlIGEgdXNlciBj
bGlja2luZyBvbiBhIG5vdGlmaWNhdGlvbi4KKyAgICAvLyBDYWxsZWQgYnkgdGhlIERSVFRlc3RS
dW5uZXIgdG8gc2ltdWxhdGUgYSB1c2VyIGNsaWNraW5nIG9uIGEgbm90aWZpY2F0aW9uLgogICAg
IGJvb2wgc2ltdWxhdGVDbGljayhjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbm90aWZpY2F0aW9u
SWRlbnRpZmllcik7CiAKICAgICAvLyBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlciBp
bnRlcmZhY2UKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgVGVz
dFNoZWxsOjppbml0aWFsaXplKCkKIHsKICAgICBtX3dlYlBlcm1pc3Npb25zID0gYWRvcHRQdHIo
bmV3IFdlYlBlcm1pc3Npb25zKHRoaXMpKTsKICAgICBtX3Rlc3RJbnRlcmZhY2VzID0gYWRvcHRQ
dHIobmV3IFRlc3RJbnRlcmZhY2VzKCkpOwotICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIgPSBh
ZG9wdFB0cihuZXcgTGF5b3V0VGVzdENvbnRyb2xsZXIodGhpcykpOworICAgIG1fdGVzdFJ1bm5l
ciA9IGFkb3B0UHRyKG5ldyBEUlRUZXN0UnVubmVyKHRoaXMpKTsKICNpZiBFTkFCTEUoTk9USUZJ
Q0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQogICAgIG1fbm90aWZpY2F0
aW9uUHJlc2VudGVyID0gYWRvcHRQdHIobmV3IE5vdGlmaWNhdGlvblByZXNlbnRlcih0aGlzKSk7
CiAjZW5kaWYKQEAgLTI0MCwxMSArMjQwLDExIEBAIHZvaWQgVGVzdFNoZWxsOjpydW5GaWxlVGVz
dChjb25zdCBUZXN0UGEKICAgICBtX3BhcmFtcyA9IHBhcmFtczsKICAgICBzdHJpbmcgdGVzdFVy
bCA9IG1fcGFyYW1zLnRlc3RVcmwuc3BlYygpOwogCi0gICAgbV9sYXlvdXRUZXN0Q29udHJvbGxl
ci0+c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoc2hvdWxkRHVtcFBpeGVscyk7CisgICAg
bV90ZXN0UnVubmVyLT5zZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhzaG91bGREdW1wUGl4
ZWxzKTsKIAogICAgIGlmICh0ZXN0VXJsLmZpbmQoImxvYWRpbmcvIikgIT0gc3RyaW5nOjpucG9z
CiAgICAgICAgIHx8IHRlc3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQot
ICAgICAgICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKHRydWUpOworICAgICAgICBtX3Rlc3RSdW5uZXItPnNldFNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3ModHJ1ZSk7CiAKICAgICBpZiAodGVzdFVybC5maW5kKCJjb21wb3NpdGluZy8i
KSAhPSBzdHJpbmc6Om5wb3MgfHwgdGVzdFVybC5maW5kKCJjb21wb3NpdGluZ1xcIikgIT0gc3Ry
aW5nOjpucG9zKSB7CiAgICAgICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZp
ZGVvRW5hYmxlZCA9IHRydWU7CkBAIC0yNTYsOCArMjU2LDggQEAgdm9pZCBUZXN0U2hlbGw6OnJ1
bkZpbGVUZXN0KGNvbnN0IFRlc3RQYQogCiAgICAgaWYgKHRlc3RVcmwuZmluZCgiL2R1bXBBc1Rl
eHQvIikgIT0gc3RyaW5nOjpucG9zCiAgICAgICAgIHx8IHRlc3RVcmwuZmluZCgiXFxkdW1wQXNU
ZXh0XFwiKSAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxl
ci0+c2V0U2hvdWxkRHVtcEFzVGV4dCh0cnVlKTsKLSAgICAgICAgbV9sYXlvdXRUZXN0Q29udHJv
bGxlci0+c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoZmFsc2UpOworICAgICAgICBtX3Rl
c3RSdW5uZXItPnNldFNob3VsZER1bXBBc1RleHQodHJ1ZSk7CisgICAgICAgIG1fdGVzdFJ1bm5l
ci0+c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoZmFsc2UpOwogICAgIH0KIAogICAgIGlm
ICh0ZXN0VXJsLmZpbmQoIi9pbnNwZWN0b3IvIikgIT0gc3RyaW5nOjpucG9zCkBAIC0yNjUsNyAr
MjY1LDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQYQogICAgICAg
ICBzaG93RGV2VG9vbHMoKTsKIAogICAgIGlmIChtX3BhcmFtcy5kZWJ1Z0xheWVyVHJlZSkKLSAg
ICAgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0U2hvd0RlYnVnTGF5ZXJUcmVlKHRydWUp
OworICAgICAgICBtX3Rlc3RSdW5uZXItPnNldFNob3dEZWJ1Z0xheWVyVHJlZSh0cnVlKTsKIAog
ICAgIGlmIChtX2R1bXBXaGVuRmluaXNoZWQpCiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXN0
SGVhZGVyKHRlc3RVcmwuY19zdHIoKSk7CkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBUZXN0U2hl
bGw6OnJlc2V0VGVzdENvbnRyb2xsZXIoKQogICAgIHJlc2V0V2ViU2V0dGluZ3MoKndlYlZpZXco
KSk7CiAgICAgbV93ZWJQZXJtaXNzaW9ucy0+cmVzZXQoKTsKICAgICBtX3Rlc3RJbnRlcmZhY2Vz
LT5yZXNldEFsbCgpOwotICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnJlc2V0KCk7CisgICAg
bV90ZXN0UnVubmVyLT5yZXNldCgpOwogICAgIG1fd2ViVmlld0hvc3QtPnJlc2V0KCk7CiAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKICAg
ICBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+cmVzZXQoKTsKQEAgLTU1NSwxNCArNTU1LDE0IEBA
IHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKICAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3dlYlZpZXct
Pm1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBib29s
IHNob3VsZER1bXBBc1RleHQgPSBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGREdW1wQXNU
ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGREdW1wQXNBdWRpbyA9IG1fbGF5b3V0VGVzdENvbnRyb2xs
ZXItPnNob3VsZER1bXBBc0F1ZGlvKCk7Ci0gICAgYm9vbCBzaG91bGRHZW5lcmF0ZVBpeGVsUmVz
dWx0cyA9IG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRz
KCk7Ci0gICAgYm9vbCBzaG91bGREdW1wQXNQcmludGVkID0gbV9sYXlvdXRUZXN0Q29udHJvbGxl
ci0+aXNQcmludGluZygpOworICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCA9IG1fdGVzdFJ1bm5l
ci0+c2hvdWxkRHVtcEFzVGV4dCgpOworICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8gPSBtX3Rl
c3RSdW5uZXItPnNob3VsZER1bXBBc0F1ZGlvKCk7CisgICAgYm9vbCBzaG91bGRHZW5lcmF0ZVBp
eGVsUmVzdWx0cyA9IG1fdGVzdFJ1bm5lci0+c2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoKTsK
KyAgICBib29sIHNob3VsZER1bXBBc1ByaW50ZWQgPSBtX3Rlc3RSdW5uZXItPmlzUHJpbnRpbmco
KTsKICAgICBib29sIGR1bXBlZEFueXRoaW5nID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkRHVt
cEFzQXVkaW8pIHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcmIHdl
YkFycmF5QnVmZmVyVmlldyA9IG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPmF1ZGlvRGF0YSgpOwor
ICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyYgd2ViQXJyYXlCdWZmZXJW
aWV3ID0gbV90ZXN0UnVubmVyLT5hdWRpb0RhdGEoKTsKICAgICAgICAgbV9wcmludGVyLmhhbmRs
ZUF1ZGlvKHdlYkFycmF5QnVmZmVyVmlldy5iYXNlQWRkcmVzcygpLCB3ZWJBcnJheUJ1ZmZlclZp
ZXcuYnl0ZUxlbmd0aCgpKTsKICAgICAgICAgbV9wcmludGVyLmhhbmRsZUF1ZGlvRm9vdGVyKCk7
CiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXN0Rm9vdGVyKHRydWUpOwpAQCAtNTg2LDcgKzU4
Niw3IEBAIHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBpZiAoc2hvdWxkRHVtcEFzVGV4dCkgewotICAgICAgICAgICAgYm9vbCByZWN1cnNp
dmUgPSBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGREdW1wQ2hpbGRGcmFtZXNBc1RleHQo
KTsKKyAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlID0gbV90ZXN0UnVubmVyLT5zaG91bGREdW1w
Q2hpbGRGcmFtZXNBc1RleHQoKTsKICAgICAgICAgICAgIHN0cmluZyBkYXRhVXRmOCA9IHNob3Vs
ZER1bXBBc1ByaW50ZWQgPyBkdW1wRnJhbWVzQXNQcmludGVkVGV4dChmcmFtZSwgcmVjdXJzaXZl
KSA6IGR1bXBGcmFtZXNBc1RleHQoZnJhbWUsIHJlY3Vyc2l2ZSk7CiAgICAgICAgICAgICBpZiAo
ZndyaXRlKGRhdGFVdGY4LmNfc3RyKCksIDEsIGRhdGFVdGY4LnNpemUoKSwgc3Rkb3V0KSAhPSBk
YXRhVXRmOC5zaXplKCkpCiAgICAgICAgICAgICAgICAgRkFUQUwoIlNob3J0IHdyaXRlIHRvIHN0
ZG91dCwgZGlzayBmdWxsP1xuIik7CkBAIC01OTcsMTAgKzU5NywxMCBAQCB2b2lkIFRlc3RTaGVs
bDo6ZHVtcCgpCiAgICAgICAgICAgICBpZiAobV9wYXJhbXMuZGVidWdSZW5kZXJUcmVlKQogICAg
ICAgICAgICAgICAgIHJlbmRlclRleHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0
RGVidWc7CiAgICAgICAgICAgICBwcmludGYoIiVzIiwgZnJhbWUtPnJlbmRlclRyZWVBc1RleHQo
cmVuZGVyVGV4dEJlaGF2aW9yKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJvb2wgcmVj
dXJzaXZlID0gbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2hvdWxkRHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnMoKTsKKyAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlID0gbV90ZXN0UnVubmVy
LT5zaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpOwogICAgICAgICAgICAgZHVt
cEZyYW1lU2Nyb2xsUG9zaXRpb24oZnJhbWUsIHJlY3Vyc2l2ZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3Qo
KSkKKyAgICAgICAgaWYgKG1fdGVzdFJ1bm5lci0+c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgp
KQogICAgICAgICAgICAgcHJpbnRmKCIlcyIsIGR1bXBBbGxCYWNrRm9yd2FyZExpc3RzKCkuY19z
dHIoKSk7CiAgICAgfQogICAgIGlmIChkdW1wZWRBbnl0aGluZyAmJiBtX3BhcmFtcy5wcmludFNl
cGFyYXRvcnMpCkBAIC02MTIsMTggKzYxMiwxOCBAQCB2b2lkIFRlc3RTaGVsbDo6ZHVtcCgpCiAg
ICAgICAgIC8vIHN0ZG91dC4KICAgICAgICAgZHVtcGVkQW55dGhpbmcgPSB0cnVlOwogICAgICAg
ICBtX3dlYlZpZXctPmxheW91dCgpOwotICAgICAgICBpZiAobV9sYXlvdXRUZXN0Q29udHJvbGxl
ci0+dGVzdFJlcGFpbnQoKSkgeworICAgICAgICBpZiAobV90ZXN0UnVubmVyLT50ZXN0UmVwYWlu
dCgpKSB7CiAgICAgICAgICAgICBXZWJTaXplIHZpZXdTaXplID0gbV93ZWJWaWV3LT5zaXplKCk7
CiAgICAgICAgICAgICBpbnQgd2lkdGggPSB2aWV3U2l6ZS53aWR0aDsKICAgICAgICAgICAgIGlu
dCBoZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQ7Ci0gICAgICAgICAgICBpZiAobV9sYXlvdXRUZXN0
Q29udHJvbGxlci0+c3dlZXBIb3Jpem9udGFsbHkoKSkgeworICAgICAgICAgICAgaWYgKG1fdGVz
dFJ1bm5lci0+c3dlZXBIb3Jpem9udGFsbHkoKSkgewogICAgICAgICAgICAgICAgIGZvciAoV2Vi
UmVjdCBjb2x1bW4oMCwgMCwgMSwgaGVpZ2h0KTsgY29sdW1uLnggPCB3aWR0aDsgY29sdW1uLngr
KykKICAgICAgICAgICAgICAgICAgICAgbV93ZWJWaWV3SG9zdC0+cGFpbnRSZWN0KGNvbHVtbik7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZvciAoV2ViUmVjdCBsaW5l
KDAsIDAsIHdpZHRoLCAxKTsgbGluZS55IDwgaGVpZ2h0OyBsaW5lLnkrKykKICAgICAgICAgICAg
ICAgICAgICAgbV93ZWJWaWV3SG9zdC0+cGFpbnRSZWN0KGxpbmUpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPmlzUHJpbnRpbmcoKSkK
KyAgICAgICAgfSBlbHNlIGlmIChtX3Rlc3RSdW5uZXItPmlzUHJpbnRpbmcoKSkKICAgICAgICAg
ICAgIG1fd2ViVmlld0hvc3QtPnBhaW50UGFnZXNXaXRoQm91bmRhcmllcygpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3dlYlZpZXdIb3N0LT5wYWludEludmFsaWRhdGVkUmVnaW9uKCk7
CkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAgICAgICAvLyBT
ZWUgaWYgd2UgbmVlZCB0byBkcmF3IHRoZSBzZWxlY3Rpb24gYm91bmRzIHJlY3QuIFNlbGVjdGlv
biBib3VuZHMKICAgICAgICAgLy8gcmVjdCBpcyB0aGUgcmVjdCBlbmNsb3NpbmcgdGhlIChwb3Nz
aWJseSB0cmFuc2Zvcm1lZCkgc2VsZWN0aW9uLgogICAgICAgICAvLyBUaGUgcmVjdCBzaG91bGQg
YmUgZHJhd24gYWZ0ZXIgZXZlcnl0aGluZyBpcyBsYWlkIG91dCBhbmQgcGFpbnRlZC4KLSAgICAg
ICAgaWYgKG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3VsZER1bXBTZWxlY3Rpb25SZWN0KCkp
IHsKKyAgICAgICAgaWYgKG1fdGVzdFJ1bm5lci0+c2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSkg
ewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gcmVjdCAtIGRyYXcgYSBy
ZWQgMXB4IGJvcmRlciBlbmNsb3NpbmcgcmVjdAogICAgICAgICAgICAgV2ViUmVjdCB3ciA9IGZy
YW1lLT5zZWxlY3Rpb25Cb3VuZHNSZWN0KCk7CiAgICAgICAgICAgICBpZiAoIXdyLmlzRW1wdHko
KSkgewpAQCAtNzI1LDggKzcyNSw4IEBAIHZvaWQgVGVzdFNoZWxsOjpiaW5kSlNPYmplY3RzVG9X
aW5kb3coV2UKIHsKICAgICBXZWJUZXN0aW5nU3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0
KGZyYW1lKTsKICAgICBtX3Rlc3RJbnRlcmZhY2VzLT5iaW5kVG8oZnJhbWUpOwotICAgIG1fbGF5
b3V0VGVzdENvbnRyb2xsZXItPmJpbmRUb0phdmFzY3JpcHQoZnJhbWUsIFdlYlN0cmluZzo6ZnJv
bVVURjgoImxheW91dFRlc3RDb250cm9sbGVyIikpOwotICAgIG1fbGF5b3V0VGVzdENvbnRyb2xs
ZXItPmJpbmRUb0phdmFzY3JpcHQoZnJhbWUsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRlc3RSdW5u
ZXIiKSk7CisgICAgbV90ZXN0UnVubmVyLT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJp
bmc6OmZyb21VVEY4KCJ0ZXN0UnVubmVyIikpOworICAgIG1fdGVzdFJ1bm5lci0+YmluZFRvSmF2
YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidGVzdFJ1bm5lciIpKTsKIH0KIAog
V2ViVmlld0hvc3QqIFRlc3RTaGVsbDo6Y3JlYXRlTmV3V2luZG93KGNvbnN0IFdlYktpdDo6V2Vi
VVJMJiB1cmwpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIFdl
YktpdDo6V2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQogICAg
IC8vIFJldHVybnMgdGhlIGhvc3QgZm9yIHRoZSBtYWluIFdlYlZpZXcuCiAgICAgV2ViVmlld0hv
c3QqIHdlYlZpZXdIb3N0KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3SG9zdC5nZXQoKTsgfQot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBsYXlvdXRUZXN0Q29udHJvbGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICBEUlRUZXN0UnVubmVy
KiB0ZXN0UnVubmVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXN0UnVubmVyLmdldCgpOyB9CiAgICAg
RXZlbnRTZW5kZXIqIGV2ZW50U2VuZGVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXN0SW50ZXJmYWNl
cy0+ZXZlbnRTZW5kZXIoKTsgfQogICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdEludGVyZmFjZXMtPmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCk7IH0KICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKQEAgLTEx
MywxNSArMTEzLDE1IEBAIHB1YmxpYzoKICAgICBpbnQgbmF2aWdhdGlvbkVudHJ5Q291bnQoKSBj
b25zdDsKIAogICAgIHZvaWQgc2V0Rm9jdXMoV2ViS2l0OjpXZWJXaWRnZXQqLCBib29sIGVuYWJs
ZSk7Ci0gICAgYm9vbCBzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1
cm4gKG1fdGVzdElzUHJlcGFyaW5nIHx8IG1fdGVzdElzUGVuZGluZykgJiYgbGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpOyB9Ci0gICAgYm9vbCBz
aG91bGREdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IChtX3Rlc3RJc1ByZXBhcmluZyB8fCBtX3Rlc3RJc1BlbmRpbmcpICYmIGxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCk7IH0K
LSAgICBib29sIHNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCAgeyByZXR1
cm4gKG1fdGVzdElzUHJlcGFyaW5nIHx8IG1fdGVzdElzUGVuZGluZykgJiYgbGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOyB9Ci0gICAgYm9v
bCBzaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpIGNvbnN0ICB7IHJldHVybiAo
bV90ZXN0SXNQcmVwYXJpbmcgfHwgbV90ZXN0SXNQZW5kaW5nKSAmJiBsYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpOyB9CisgICAgYm9v
bCBzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gKG1fdGVzdElz
UHJlcGFyaW5nIHx8IG1fdGVzdElzUGVuZGluZykgJiYgdGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCk7IH0KKyAgICBib29sIHNob3VsZER1bXBVc2VyR2VzdHVyZUlu
RnJhbWVMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gKG1fdGVzdElzUHJlcGFyaW5nIHx8
IG1fdGVzdElzUGVuZGluZykgJiYgdGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVXNlckdlc3R1cmVJ
bkZyYW1lTG9hZENhbGxiYWNrcygpOyB9CisgICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkgY29uc3QgIHsgcmV0dXJuIChtX3Rlc3RJc1ByZXBhcmluZyB8fCBtX3Rlc3RJ
c1BlbmRpbmcpICYmIHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cygpOyB9CisgICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpIGNv
bnN0ICB7IHJldHVybiAobV90ZXN0SXNQcmVwYXJpbmcgfHwgbV90ZXN0SXNQZW5kaW5nKSAmJiB0
ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCk7IH0KICAg
ICB2b2lkIHNldElzTG9hZGluZyhib29sIGZsYWcpIHsgbV9pc0xvYWRpbmcgPSBmbGFnOyB9CiAK
LSAgICAvLyBDYWxsZWQgYnkgdGhlIExheW91dFRlc3RDb250cm9sbGVyIHRvIHNpZ25hbCB0ZXN0
IGNvbXBsZXRpb24uCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBEUlRUZXN0UnVubmVyIHRvIHNpZ25h
bCB0ZXN0IGNvbXBsZXRpb24uCiAgICAgdm9pZCB0ZXN0RmluaXNoZWQoKTsKLSAgICAvLyBDYWxs
ZWQgYnkgTGF5b3V0VGVzdENvbnRyb2xsZXIgd2hlbiBhIHRlc3QgaGl0cyB0aGUgdGltZW91dCwg
YnV0IGRvZXMgbm90CisgICAgLy8gQ2FsbGVkIGJ5IERSVFRlc3RSdW5uZXIgd2hlbiBhIHRlc3Qg
aGl0cyB0aGUgdGltZW91dCwgYnV0IGRvZXMgbm90CiAgICAgLy8gY2F1c2UgYSBoYW5nLiBXZSBj
YW4gYXZvaWQga2lsbGluZyBUZXN0U2hlbGwgaW4gdGhpcyBjYXNlIGFuZCBzdGlsbCBkdW1wCiAg
ICAgLy8gdGhlIHRlc3QgcmVzdWx0cy4KICAgICB2b2lkIHRlc3RUaW1lZE91dCgpOwpAQCAtMjEx
LDcgKzIxMSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPERSVERldlRvb2xzQWdlbnQ+IG1fZHJ0
RGV2VG9vbHNBZ2VudDsKICAgICBPd25QdHI8RFJURGV2VG9vbHNDbGllbnQ+IG1fZHJ0RGV2VG9v
bHNDbGllbnQ7CiAgICAgT3duUHRyPFRlc3RJbnRlcmZhY2VzPiBtX3Rlc3RJbnRlcmZhY2VzOwot
ICAgIE93blB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gbV9sYXlvdXRUZXN0Q29udHJvbGxlcjsK
KyAgICBPd25QdHI8RFJUVGVzdFJ1bm5lcj4gbV90ZXN0UnVubmVyOwogI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAgT3duUHRyPE5v
dGlmaWNhdGlvblByZXNlbnRlcj4gbV9ub3RpZmljYXRpb25QcmVzZW50ZXI7CiAjZW5kaWYKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBlcm1pc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5j
cHAJKHJldmlzaW9uIDEyNTUwOCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlBlcm1pc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBXZWJQZXJt
aXNzaW9uczo6fldlYlBlcm1pc3Npb25zKCkKIGJvb2wgV2ViUGVybWlzc2lvbnM6OmFsbG93SW1h
Z2UoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgZW5hYmxlZFBlclNldHRpbmdzLCBjb25zdCBXZWJL
aXQ6OldlYlVSTCYgaW1hZ2VVUkwpCiB7CiAgICAgYm9vbCBhbGxvd2VkID0gZW5hYmxlZFBlclNl
dHRpbmdzICYmIG1faW1hZ2VzQWxsb3dlZDsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+c2hvdWxkRHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MoKSkKKyAgICBpZiAodGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcygpKQogICAgICAgICBm
cHJpbnRmKHN0ZG91dCwgIlBFUk1JU1NJT04gQ0xJRU5UOiBhbGxvd0ltYWdlKCVzKTogJXNcbiIs
IG1fc2hlbGwtPm5vcm1hbGl6ZUxheW91dFRlc3RVUkwoaW1hZ2VVUkwuc3BlYygpKS5jX3N0cigp
LCBhbGxvd2VkID8gInRydWUiIDogImZhbHNlIik7CiAgICAgcmV0dXJuIGFsbG93ZWQ7CiB9CkBA
IC01Nyw3ICs1Nyw3IEBAIGJvb2wgV2ViUGVybWlzc2lvbnM6OmFsbG93SW1hZ2UoV2ViS2l0OjoK
IGJvb2wgV2ViUGVybWlzc2lvbnM6OmFsbG93U2NyaXB0RnJvbVNvdXJjZShXZWJLaXQ6OldlYkZy
YW1lKiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3MsIGNvbnN0IFdlYktpdDo6V2ViVVJMJiBzY3Jp
cHRVUkwpCiB7CiAgICAgYm9vbCBhbGxvd2VkID0gZW5hYmxlZFBlclNldHRpbmdzICYmIG1fc2Ny
aXB0c0FsbG93ZWQ7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBQ
ZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKCkpCisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFBlcm1pc3Npb25DbGllbnRDYWxsYmFja3MoKSkKICAgICAgICAgZnByaW50ZihzdGRvdXQs
ICJQRVJNSVNTSU9OIENMSUVOVDogYWxsb3dTY3JpcHRGcm9tU291cmNlKCVzKTogJXNcbiIsIG1f
c2hlbGwtPm5vcm1hbGl6ZUxheW91dFRlc3RVUkwoc2NyaXB0VVJMLnNwZWMoKSkuY19zdHIoKSwg
YWxsb3dlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgIHJldHVybiBhbGxvd2VkOwogfQpAQCAt
MTI2LDcgKzEyNiw3IEBAIHZvaWQgV2ViUGVybWlzc2lvbnM6OnJlc2V0KCkKIAogLy8gUHJpdmF0
ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1MYXlvdXRUZXN0Q29udHJvbGxlciogV2ViUGVybWlzc2lvbnM6Omxh
eW91dFRlc3RDb250cm9sbGVyKCkgY29uc3QKK0RSVFRlc3RSdW5uZXIqIFdlYlBlcm1pc3Npb25z
Ojp0ZXN0UnVubmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zaGVsbC0+bGF5b3V0VGVzdENv
bnRyb2xsZXIoKTsKKyAgICByZXR1cm4gbV9zaGVsbC0+dGVzdFJ1bm5lcigpOwogfQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5oCShyZXZp
c2lvbiAxMjU1MDcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQZXJtaXNz
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlICJXZWJQ
ZXJtaXNzaW9uQ2xpZW50LmgiCiAKLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworY2xhc3Mg
RFJUVGVzdFJ1bm5lcjsKIGNsYXNzIFRlc3RTaGVsbDsKIAogY2xhc3MgV2ViUGVybWlzc2lvbnMg
OiBwdWJsaWMgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50IHsKQEAgLTYzLDcgKzYzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKIAogcHJpdmF0ZToKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogbGF5b3V0VGVzdENvbnRyb2xsZXIoKSBjb25zdDsKKyAgICBEUlRUZXN0UnVubmVy
KiB0ZXN0UnVubmVyKCkgY29uc3Q7CiAKICAgICAvLyBOb24tb3duaW5nIHBvaW50ZXIuIFRoZSBX
ZWJQZXJtaXNzaW9ucyBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGlzIFRlc3RTaGVsbCBpbnN0YW5j
ZS4KICAgICBUZXN0U2hlbGwqIG1fc2hlbGw7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1MSw5ICsyNTEsOSBAQCBzdGF0aWMgc3RyaW5nIHRleHRBZmZpbml0eURlc2NyaXB0aW9uKFdl
CiAKIFdlYlZpZXcqIFdlYlZpZXdIb3N0OjpjcmVhdGVWaWV3KFdlYkZyYW1lKiwgY29uc3QgV2Vi
VVJMUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViV2luZG93RmVhdHVyZXMmLCBjb25zdCBXZWJT
dHJpbmcmLCBXZWJOYXZpZ2F0aW9uUG9saWN5KQogewotICAgIGlmICghbGF5b3V0VGVzdENvbnRy
b2xsZXIoKS0+Y2FuT3BlbldpbmRvd3MoKSkKKyAgICBpZiAoIXRlc3RSdW5uZXIoKS0+Y2FuT3Bl
bldpbmRvd3MoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZER1bXBDcmVhdGVWaWV3KCkpCisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcENyZWF0ZVZpZXcoKSkKICAgICAgICAgZnByaW50ZihzdGRvdXQsICJjcmVhdGVWaWV3
KCVzKVxuIiwgVVJMRGVzY3JpcHRpb24ocmVxdWVzdC51cmwoKSkuY19zdHIoKSk7CiAgICAgcmV0
dXJuIG1fc2hlbGwtPmNyZWF0ZU5ld1dpbmRvdyhXZWJVUkwoKSktPndlYlZpZXcoKTsKIH0KQEAg
LTMxOSw3ICszMTksNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpkaWRTdGFydExvYWRpbmcoKQogCiB2
b2lkIFdlYlZpZXdIb3N0OjpkaWRTdG9wTG9hZGluZygpCiB7Ci0gICAgaWYgKGxheW91dFRlc3RD
b250cm9sbGVyKCktPnNob3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSkKKyAgICBp
ZiAodGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCiAg
ICAgICAgIGZwdXRzKCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvblxuIiwgc3Rkb3V0
KTsKICAgICBtX3NoZWxsLT5zZXRJc0xvYWRpbmcoZmFsc2UpOwogfQpAQCAtMzI5LDUwICszMjks
NTAgQEAgdm9pZCBXZWJWaWV3SG9zdDo6ZGlkU3RvcExvYWRpbmcoKQogCiBib29sIFdlYlZpZXdI
b3N0OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgV2ViUmFuZ2UmIHJhbmdlKQogewotICAgIGlm
IChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
CisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewog
ICAgICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01S
YW5nZToiLCBzdGRvdXQpOwogICAgICAgICBwcmludFJhbmdlRGVzY3JpcHRpb24ocmFuZ2UpOwog
ICAgICAgICBmcHV0cygiXG4iLCBzdGRvdXQpOwogICAgIH0KLSAgICByZXR1cm4gbGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKKyAgICByZXR1cm4gdGVzdFJ1bm5lcigp
LT5hY2NlcHRzRWRpdGluZygpOwogfQogCiBib29sIFdlYlZpZXdIb3N0OjpzaG91bGRFbmRFZGl0
aW5nKGNvbnN0IFdlYlJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICh0ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgZnB1dHMoIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHN0ZG91dCk7CiAgICAg
ICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihyYW5nZSk7CiAgICAgICAgIGZwdXRzKCJcbiIsIHN0
ZG91dCk7CiAgICAgfQotICAgIHJldHVybiBsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5hY2NlcHRz
RWRpdGluZygpOworICAgIHJldHVybiB0ZXN0UnVubmVyKCktPmFjY2VwdHNFZGl0aW5nKCk7CiB9
CiAKIGJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZEluc2VydE5vZGUoY29uc3QgV2ViTm9kZSYgbm9k
ZSwgY29uc3QgV2ViUmFuZ2UmIHJhbmdlLCBXZWJFZGl0aW5nQWN0aW9uIGFjdGlvbikKIHsKLSAg
ICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkgeworICAgIGlmICh0ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgZnB1dHMoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6Iiwg
c3Rkb3V0KTsKICAgICAgICAgcHJpbnROb2RlRGVzY3JpcHRpb24obm9kZSwgMCk7CiAgICAgICAg
IGZwdXRzKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iiwgc3Rkb3V0KTsKICAgICAgICAgcHJpbnRSYW5n
ZURlc2NyaXB0aW9uKHJhbmdlKTsKICAgICAgICAgcHJpbnRmKCIgZ2l2ZW5BY3Rpb246JXNcbiIs
IGVkaXRpbmdBY3Rpb25EZXNjcmlwdGlvbihhY3Rpb24pLmNfc3RyKCkpOwogICAgIH0KLSAgICBy
ZXR1cm4gbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKKyAgICByZXR1
cm4gdGVzdFJ1bm5lcigpLT5hY2NlcHRzRWRpdGluZygpOwogfQogCiBib29sIFdlYlZpZXdIb3N0
OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdlYlN0cmluZyYgdGV4dCwgY29uc3QgV2ViUmFuZ2Um
IHJhbmdlLCBXZWJFZGl0aW5nQWN0aW9uIGFjdGlvbikKIHsKLSAgICBpZiAobGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICh0ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRm
KCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiVzIHJlcGxhY2luZ0RPTVJhbmdl
OiIsIHRleHQudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihy
YW5nZSk7CiAgICAgICAgIHByaW50ZigiIGdpdmVuQWN0aW9uOiVzXG4iLCBlZGl0aW5nQWN0aW9u
RGVzY3JpcHRpb24oYWN0aW9uKS5jX3N0cigpKTsKICAgICB9Ci0gICAgcmV0dXJuIGxheW91dFRl
c3RDb250cm9sbGVyKCktPmFjY2VwdHNFZGl0aW5nKCk7CisgICAgcmV0dXJuIHRlc3RSdW5uZXIo
KS0+YWNjZXB0c0VkaXRpbmcoKTsKIH0KIAogYm9vbCBXZWJWaWV3SG9zdDo6c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZSgKICAgICBjb25zdCBXZWJSYW5nZSYgZnJvbVJhbmdlLCBjb25zdCBXZWJS
YW5nZSYgdG9SYW5nZSwgV2ViVGV4dEFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0
aW5nKQogewotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgewogICAgICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZToiLCBzdGRvdXQpOwogICAgICAgICBwcmludFJhbmdlRGVzY3Jp
cHRpb24oZnJvbVJhbmdlKTsKICAgICAgICAgZnB1dHMoIiB0b0RPTVJhbmdlOiIsIHN0ZG91dCk7
CkBAIC0zODEsMjcgKzM4MSwyNyBAQCBib29sIFdlYlZpZXdIb3N0OjpzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhCiAgICAgICAgICAgICAgICB0ZXh0QWZmaW5pdHlEZXNjcmlwdGlvbihhZmZpbml0eSku
Y19zdHIoKSwKICAgICAgICAgICAgICAgIChzdGlsbFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxT
RSIpKTsKICAgICB9Ci0gICAgcmV0dXJuIGxheW91dFRlc3RDb250cm9sbGVyKCktPmFjY2VwdHNF
ZGl0aW5nKCk7CisgICAgcmV0dXJuIHRlc3RSdW5uZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKIH0K
IAogYm9vbCBXZWJWaWV3SG9zdDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2ViUmFuZ2UmIHJh
bmdlKQogewotICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgewogICAgICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVs
ZXRlRE9NUmFuZ2U6Iiwgc3Rkb3V0KTsKICAgICAgICAgcHJpbnRSYW5nZURlc2NyaXB0aW9uKHJh
bmdlKTsKICAgICAgICAgZnB1dHMoIlxuIiwgc3Rkb3V0KTsKICAgICB9Ci0gICAgcmV0dXJuIGxh
eW91dFRlc3RDb250cm9sbGVyKCktPmFjY2VwdHNFZGl0aW5nKCk7CisgICAgcmV0dXJuIHRlc3RS
dW5uZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKIH0KIAogYm9vbCBXZWJWaWV3SG9zdDo6c2hvdWxk
QXBwbHlTdHlsZShjb25zdCBXZWJTdHJpbmcmIHN0eWxlLCBjb25zdCBXZWJSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpIHsKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlT
dHlsZTolcyB0b0VsZW1lbnRzSW5ET01SYW5nZToiLCBzdHlsZS51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgcHJpbnRSYW5nZURlc2NyaXB0aW9uKHJhbmdlKTsKICAgICAgICAgZnB1dHMoIlxuIiwg
c3Rkb3V0KTsKICAgICB9Ci0gICAgcmV0dXJuIGxheW91dFRlc3RDb250cm9sbGVyKCktPmFjY2Vw
dHNFZGl0aW5nKCk7CisgICAgcmV0dXJuIHRlc3RSdW5uZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsK
IH0KIAogYm9vbCBXZWJWaWV3SG9zdDo6aXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAt
NDE2LDI4ICs0MTYsMjggQEAgYm9vbCBXZWJWaWV3SG9zdDo6aXNTZWxlY3RUcmFpbGluZ1doaXRl
cwogCiB2b2lkIFdlYlZpZXdIb3N0OjpkaWRCZWdpbkVkaXRpbmcoKQogewotICAgIGlmICghbGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBp
ZiAoIXRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGZwdXRzKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0
aW5nOldlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb25cbiIsIHN0ZG91dCk7CiB9CiAK
IHZvaWQgV2ViVmlld0hvc3Q6OmRpZENoYW5nZVNlbGVjdGlvbihib29sIGlzRW1wdHlTZWxlY3Rp
b24pCiB7Ci0gICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCisgICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKICAgICAgICAgZnB1dHMoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvblxuIiwgc3Rk
b3V0KTsKICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBjbGlwYm9hcmQgd2l0aCB0aGUgc2VsZWN0
ZWQgdGV4dCBpbiBEUlQuCiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZENoYW5nZUNvbnRlbnRz
KCkKIHsKLSAgICBpZiAoIWxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCF0ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uXG4iLCBzdGRvdXQp
OwogfQogCiB2b2lkIFdlYlZpZXdIb3N0OjpkaWRFbmRFZGl0aW5nKCkKIHsKLSAgICBpZiAoIWxh
eW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAg
aWYgKCF0ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBmcHV0cygiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRp
bmc6V2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb25cbiIsIHN0ZG91dCk7CiB9CkBAIC01
NjEsNyArNTYxLDcgQEAgYm9vbCBXZWJWaWV3SG9zdDo6cnVuTW9kYWxQcm9tcHREaWFsb2coVwog
Ym9vbCBXZWJWaWV3SG9zdDo6cnVuTW9kYWxCZWZvcmVVbmxvYWREaWFsb2coV2ViRnJhbWUqLCBj
b25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcHJpbnRmKCJDT05GSVJNIE5BVklHQVRJ
T046ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiAhbGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQo
KTsKKyAgICByZXR1cm4gIXRlc3RSdW5uZXIoKS0+c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxp
bmdCZWZvcmVVbmxvYWQoKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6c2hvd0NvbnRleHRNZW51
KFdlYkZyYW1lKiwgY29uc3QgV2ViQ29udGV4dE1lbnVEYXRhJiBjb250ZXh0TWVudURhdGEpCkBA
IC01ODEsNyArNTgxLDcgQEAgV2ViQ29udGV4dE1lbnVEYXRhKiBXZWJWaWV3SG9zdDo6bGFzdENv
bgogCiB2b2lkIFdlYlZpZXdIb3N0OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYlN0cmluZyYgdGV4
dCkKIHsKLSAgICBpZiAoIWxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBTdGF0dXND
YWxsYmFja3MoKSkKKyAgICBpZiAoIXRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxi
YWNrcygpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gV2hlbiBydW5uaW5nIHRlc3RzLCB3cml0
ZSB0byBzdGRvdXQuCiAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNl
dFN0YXR1c1RleHQ6JXNcbiIsIHRleHQudXRmOCgpLmRhdGEoKSk7CkBAIC01OTAsNyArNTkwLDcg
QEAgdm9pZCBXZWJWaWV3SG9zdDo6c2V0U3RhdHVzVGV4dChjb25zdCBXZQogdm9pZCBXZWJWaWV3
SG9zdDo6c3RhcnREcmFnZ2luZyhXZWJGcmFtZSosIGNvbnN0IFdlYkRyYWdEYXRhJiBkYXRhLCBX
ZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaywgY29uc3QgV2ViSW1hZ2UmLCBjb25zdCBXZWJQb2lu
dCYpCiB7CiAgICAgV2ViRHJhZ0RhdGEgbXV0YWJsZURyYWdEYXRhID0gZGF0YTsKLSAgICBpZiAo
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCgpKSB7Cisg
ICAgaWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCgpKSB7CiAgICAg
ICAgIC8vIEFkZCBhIGZpbGUgY2FsbGVkIERSVEZha2VGaWxlIHRvIHRoZSBkcmFnJmRyb3AgY2xp
cGJvYXJkLgogICAgICAgICBhZGREUlRGYWtlRmlsZVRvRGF0YU9iamVjdCgmbXV0YWJsZURyYWdE
YXRhKTsKICAgICB9CkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBXZWJOYXZpZ2F0aW9uUG9saWN5IFdl
YlZpZXdIb3N0OjpkZWNpZGVQCiAgICAgICAgIHJlc3VsdCA9IFdlYktpdDo6V2ViTmF2aWdhdGlv
blBvbGljeUlnbm9yZTsKIAogICAgIGlmIChtX3BvbGljeURlbGVnYXRlU2hvdWxkTm90aWZ5RG9u
ZSkKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+cG9saWN5RGVsZWdhdGVEb25lKCk7
CisgICAgICAgIHRlc3RSdW5uZXIoKS0+cG9saWN5RGVsZWdhdGVEb25lKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTExMyw3ICsxMTEzLDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6ZGlk
Q2FuY2VsQ2xpZW50UmVkaXJlYwogdm9pZCBXZWJWaWV3SG9zdDo6ZGlkQ3JlYXRlRGF0YVNvdXJj
ZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqIGRzKQogewogICAgIGRzLT5zZXRFeHRyYURhdGEo
bV9wZW5kaW5nRXh0cmFEYXRhLmxlYWtQdHIoKSk7Ci0gICAgaWYgKCFsYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkpCisgICAgaWYgKCF0ZXN0UnVubmVy
KCktPmRlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoKSkKICAgICAgICAgZHMtPnNldERlZmVyTWFp
blJlc291cmNlRGF0YUxvYWQoZmFsc2UpOwogfQogCkBAIC0xMTMwLDcgKzExMzAsNyBAQCB2b2lk
IFdlYlZpZXdIb3N0OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hCiAgICAgaWYgKCFtX3RvcExvYWRp
bmdGcmFtZSkKICAgICAgICAgbV90b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKIAotICAgIGlmIChs
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsKKyAg
ICBpZiAodGVzdFJ1bm5lcigpLT5zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsKICAgICAg
ICAgcHJpbnRGcmFtZURlc2NyaXB0aW9uKGZyYW1lKTsKICAgICAgICAgZnB1dHMoIiAtIHN0b3Bw
aW5nIGxvYWQgaW4gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFja1xuIiwg
c3Rkb3V0KTsKICAgICAgICAgZnJhbWUtPnN0b3BMb2FkaW5nKCk7CkBAIC0xMTgzLDExICsxMTgz
LDExIEBAIHZvaWQgV2ViVmlld0hvc3Q6OmRpZFJlY2VpdmVUaXRsZShXZWJGcmEKICAgICAgICAg
cHJpbnRmKCIgLSBkaWRSZWNlaXZlVGl0bGU6ICVzXG4iLCB0aXRsZTguZGF0YSgpKTsKICAgICB9
CiAKLSAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdl
cygpKQorICAgIGlmICh0ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkKICAg
ICAgICAgcHJpbnRmKCJUSVRMRSBDSEFOR0VEOiAlc1xuIiwgdGl0bGU4LmRhdGEoKSk7CiAKICAg
ICBzZXRQYWdlVGl0bGUodGl0bGUpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyKCktPnNldFRp
dGxlVGV4dERpcmVjdGlvbihkaXJlY3Rpb24pOworICAgIHRlc3RSdW5uZXIoKS0+c2V0VGl0bGVU
ZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OmRpZEZpbmlz
aERvY3VtZW50TG9hZChXZWJGcmFtZSogZnJhbWUpCkBAIC0xMjgxLDcgKzEyODEsNyBAQCB2b2lk
IFdlYlZpZXdIb3N0Ojp3aWxsU2VuZFJlcXVlc3QoV2ViRnJhCiAgICAgc3RyaW5nIHJlcXVlc3RV
UkwgPSB1cmwucG9zc2libHlfaW52YWxpZF9zcGVjKCk7CiAKICAgICBHVVJMIG1haW5Eb2N1bWVu
dFVSTCA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKTsKLSAgICBpZiAobGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAg
aWYgKHRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAg
ICAgICAgIHByaW50UmVzb3VyY2VEZXNjcmlwdGlvbihpZGVudGlmaWVyKTsKICAgICAgICAgcHJp
bnRmKCIgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgJXMsIG1haW4gZG9jdW1l
bnQgVVJMICVzLCIKICAgICAgICAgICAgICAgICIgaHR0cCBtZXRob2QgJXM+IHJlZGlyZWN0UmVz
cG9uc2UgIiwKQEAgLTEzODcsNyArMTM4Nyw3IEBAIHZvaWQgV2ViVmlld0hvc3Q6Om9wZW5GaWxl
U3lzdGVtKFdlYkZyYW0KIAogYm9vbCBXZWJWaWV3SG9zdDo6d2lsbENoZWNrQW5kRGlzcGF0Y2hN
ZXNzYWdlRXZlbnQoV2ViRnJhbWUqIHNvdXJjZSwgV2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBX
ZWJET01NZXNzYWdlRXZlbnQgZXZlbnQpCiB7Ci0gICAgaWYgKG1fc2hlbGwtPmxheW91dFRlc3RD
b250cm9sbGVyKCktPnNob3VsZEludGVyY2VwdFBvc3RNZXNzYWdlKCkpIHsKKyAgICBpZiAobV9z
aGVsbC0+dGVzdFJ1bm5lcigpLT5zaG91bGRJbnRlcmNlcHRQb3N0TWVzc2FnZSgpKSB7CiAgICAg
ICAgIGZwdXRzKCJpbnRlcmNlcHRlZCBwb3N0TWVzc2FnZVxuIiwgc3Rkb3V0KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTYzOCw5ICsxNjM4LDkgQEAgYm9vbCBXZWJWaWV3SG9z
dDo6bmF2aWdhdGUoY29uc3QgVGVzdE5hdgogCiAvLyBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxh
eW91dFRlc3RDb250cm9sbGVyKiBXZWJWaWV3SG9zdDo6bGF5b3V0VGVzdENvbnRyb2xsZXIoKSBj
b25zdAorRFJUVGVzdFJ1bm5lciogV2ViVmlld0hvc3Q6OnRlc3RSdW5uZXIoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3NoZWxsLT5sYXlvdXRUZXN0Q29udHJvbGxlcigpOworICAgIHJldHVybiBt
X3NoZWxsLT50ZXN0UnVubmVyKCk7CiB9CiAKIHZvaWQgV2ViVmlld0hvc3Q6OnVwZGF0ZUFkZHJl
c3NCYXIoV2ViVmlldyogd2ViVmlldykKQEAgLTE2NjAsNyArMTY2MCw3IEBAIHZvaWQgV2ViVmll
d0hvc3Q6OmxvY2F0aW9uQ2hhbmdlRG9uZShXZWIKICAgICBpZiAoZnJhbWUgIT0gbV90b3BMb2Fk
aW5nRnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3RvcExvYWRpbmdGcmFtZSA9IDA7Ci0g
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+bG9jYXRpb25DaGFuZ2VEb25lKCk7CisgICAgdGVz
dFJ1bm5lcigpLT5sb2NhdGlvbkNoYW5nZURvbmUoKTsKIH0KIAogdm9pZCBXZWJWaWV3SG9zdDo6
dXBkYXRlRm9yQ29tbWl0dGVkTG9hZChXZWJGcmFtZSogZnJhbWUsIGJvb2wgaXNOZXdOYXZpZ2F0
aW9uKQpAQCAtMTc4MCw3ICsxNzgwLDcgQEAgdm9pZCBXZWJWaWV3SG9zdDo6c2V0QWRkcmVzc0Jh
clVSTChjb25zdAogCiB2b2lkIFdlYlZpZXdIb3N0OjplbnRlckZ1bGxTY3JlZW5Ob3coKQogewot
ICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZp
b3IoKSkKKyAgICBpZiAodGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3Io
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgd2ViVmlldygpLT53aWxsRW50ZXJGdWxsU2NyZWVu
KCk7CkBAIC0xNzg5LDcgKzE3ODksNyBAQCB2b2lkIFdlYlZpZXdIb3N0OjplbnRlckZ1bGxTY3Jl
ZW5Ob3coKQogCiB2b2lkIFdlYlZpZXdIb3N0OjpleGl0RnVsbFNjcmVlbk5vdygpCiB7Ci0gICAg
aWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigp
KQorICAgIGlmICh0ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKQog
ICAgICAgICByZXR1cm47CiAKICAgICB3ZWJWaWV3KCktPndpbGxFeGl0RnVsbFNjcmVlbigpOwpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCShyZXZp
c2lvbiAxMjU1MDcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9z
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1jbGFzcyBMYXlvdXRUZXN0
Q29udHJvbGxlcjsKK2NsYXNzIERSVFRlc3RSdW5uZXI7CiBjbGFzcyBNb2NrV2ViU3BlZWNoSW5w
dXRDb250cm9sbGVyOwogY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI7CiBjbGFzcyBTa0Nh
bnZhczsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBjbGFzcyBXZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJL
aXQ6OldlYlZpCiAgICAgdm9pZCBmaW5pc2hMYXN0VGV4dENoZWNrKCk7CiAgICAgdmlydHVhbCB2
b2lkIGZpbGxTcGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB3
b3JkLCBWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykgT1ZFUlJJREU7CiAK
LSAgICAvLyBHZW9sb2NhdGlvbiBjbGllbnQgbW9ja3MgZm9yIExheW91dFRlc3RDb250cm9sbGVy
CisgICAgLy8gR2VvbG9jYXRpb24gY2xpZW50IG1vY2tzIGZvciBEUlRUZXN0UnVubmVyCiAgICAg
V2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIGdlb2xvY2F0aW9uQ2xpZW50TW9jaygp
OwogCiAgICAgLy8gUGVuZGluZyB0YXNrIGxpc3QsIE5vdGUgdGFodCB0aGUgbWV0aG9kIGlzIHJl
ZmVycmVkIGZyb20gTWV0aG9kVGFzayBjbGFzcy4KQEAgLTMwMiw3ICszMDIsNyBAQCBwcml2YXRl
OgogICAgICAgICBDYWxsYmFja01ldGhvZFR5cGUgbV9jYWxsYmFjazsKICAgICB9OwogCi0gICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGxheW91dFRlc3RDb250cm9sbGVyKCkgY29uc3Q7CisgICAg
RFJUVGVzdFJ1bm5lciogdGVzdFJ1bm5lcigpIGNvbnN0OwogCiAgICAgLy8gQ2FsbGVkIHRoZSB0
aXRsZSBvZiB0aGUgcGFnZSBjaGFuZ2VzLgogICAgIC8vIENhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0
aGUgdGl0bGUgb2YgdGhlIHdpbmRvdy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9E
dW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQCBFY29yZV9UaW1lciogd2FpdFRvRHVtcFdhdGNoZG9nID0gMDsKIGV4dGVybiBFd2tfSGlz
dG9yeV9JdGVtKiBwcmV2VGVzdEJGSXRlbTsKIAogLy8gRnJvbSB0aGUgdG9wLWxldmVsIER1bXBS
ZW5kZXJUcmVlLmgKLVJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250
cm9sbGVyOworUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogdm9sYXRpbGUgYm9vbCBk
b25lID0gZmFsc2U7CiAKIHN0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKQEAg
LTg1LDcgKzg1LDcgQEAgc3RhdGljIFN0cmluZyBkdW1wRnJhbWVzQXNUZXh0KEV2YXNfT2JqZQog
ICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CiAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoZnJhbWVD
b250ZW50cyk7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFt
ZXNBc1RleHQoKSkgeworICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0
KCkpIHsKICAgICAgICAgRWluYV9MaXN0KiBjaGlsZHJlbiA9IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6ZnJhbWVDaGlsZHJlbihmcmFtZSk7CiAgICAgICAgIHZvaWQqIGl0ZXJhdG9yOwogCkBA
IC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oRXZh
cwogICAgICAgICBwcmludGYoIiVzIiwgcmVzdWx0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgfQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcENoaWxkRnJhbWVT
Y3JvbGxQb3NpdGlvbnMoKSkgeworICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVT
Y3JvbGxQb3NpdGlvbnMoKSkgewogICAgICAgICBFaW5hX0xpc3QqIGNoaWxkcmVuID0gRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpmcmFtZUNoaWxkcmVuKGZyYW1lKTsKICAgICAgICAgdm9pZCog
aXRlcmF0b3I7CiAKQEAgLTIxNSwyOSArMjE1LDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ds
b2JhbEhpc3RvcnlUZXN0KGMKICAgICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9n
bG9iYWxoaXN0b3J5LyIpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJv
bGxlcihjb25zdCBTdHJpbmcmIHRlc3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRQaXhlbEhh
c2gpCitzdGF0aWMgdm9pZCBjcmVhdGVUZXN0UnVubmVyKGNvbnN0IFN0cmluZyYgdGVzdFVSTCwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKIHsKLSAgICBnTGF5b3V0VGVzdENvbnRy
b2xsZXIgPQotICAgICAgICBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHN0ZDo6c3RyaW5n
KHRlc3RVUkwudXRmOCgpLmRhdGEoKSksCisgICAgZ1Rlc3RSdW5uZXIgPQorICAgICAgICBUZXN0
UnVubmVyOjpjcmVhdGUoc3RkOjpzdHJpbmcodGVzdFVSTC51dGY4KCkuZGF0YSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyhleHBlY3RlZFBpeGVs
SGFzaC51dGY4KCkuZGF0YSgpKSk7CiAKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogICAgIGRv
bmUgPSBmYWxzZTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0SWNvbkRhdGFiYXNl
RW5hYmxlZChmYWxzZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQo
ZmFsc2UpOwogCiAgICAgaWYgKHNob3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyh0ZXN0VVJMKSkK
LSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KHRydWUpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0
cnVlKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCh0cnVlKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0
cnVlKTsKICAgICBpZiAoc2hvdWxkT3BlbldlYkluc3BlY3Rvcih0ZXN0VVJMKSkKLSAgICAgICAg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zaG93V2ViSW5zcGVjdG9yKCk7CisgICAgICAgIGdUZXN0
UnVubmVyLT5zaG93V2ViSW5zcGVjdG9yKCk7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PnNldER1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoaXNHbG9iYWxIaXN0b3J5VGVzdCh0ZXN0
VVJMKSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3Mo
aXNHbG9iYWxIaXN0b3J5VGVzdCh0ZXN0VVJMKSk7CiAKICAgICBpZiAoc2hvdWxkRHVtcEFzVGV4
dCh0ZXN0VVJMKSkgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBBc1Rl
eHQodHJ1ZSk7Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhl
bFJlc3VsdHMoZmFsc2UpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVl
KTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsK
ICAgICB9CiB9CiAKQEAgLTI2OCwxNCArMjY4LDE0IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3QgY2hhciogaW5wdXRMaW4KICAgICBjb25zdCBTdHJpbmcgdGVzdFVSTCA9IGdldEZpbmFsVGVz
dFVSTCh0ZXN0UGF0aE9yVVJMKTsKIAogICAgIGJyb3dzZXItPnJlc2V0RGVmYXVsdHNUb0NvbnNp
c3RlbnRWYWx1ZXMoKTsKLSAgICBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcih0ZXN0VVJMLCBl
eHBlY3RlZFBpeGVsSGFzaCk7CisgICAgY3JlYXRlVGVzdFJ1bm5lcih0ZXN0VVJMLCBleHBlY3Rl
ZFBpeGVsSGFzaCk7CiAKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5jbGVhcigpOwogICAgIFdv
cmtRdWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbihmYWxzZSk7CiAKICAgICBjb25zdCBib29sIGlz
U1ZHVzNDVGVzdCA9IHRlc3RVUkwuY29udGFpbnMoInN2Zy9XM0MtU1ZHLTEuMSIpOwotICAgIGNv
bnN0IGludCB3aWR0aCA9IGlzU1ZHVzNDVGVzdCA/IDQ4MCA6IExheW91dFRlc3RDb250cm9sbGVy
OjptYXhWaWV3V2lkdGg7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IGlzU1ZHVzNDVGVzdCA/IDM2
MCA6IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0OworICAgIGNvbnN0IGludCB3
aWR0aCA9IGlzU1ZHVzNDVGVzdCA/IDQ4MCA6IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAg
ICBjb25zdCBpbnQgaGVpZ2h0ID0gaXNTVkdXM0NUZXN0ID8gMzYwIDogVGVzdFJ1bm5lcjo6bWF4
Vmlld0hlaWdodDsKICAgICBldmFzX29iamVjdF9yZXNpemUoYnJvd3Nlci0+bWFpblZpZXcoKSwg
d2lkdGgsIGhlaWdodCk7CiAKICAgICBpZiAocHJldlRlc3RCRkl0ZW0pCkBAIC0yODgsOCArMjg4
LDggQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbgogCiAgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNsb3Nl
V2ViSW5zcGVjdG9yKCk7Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREZXZlbG9wZXJF
eHRyYXNFbmFibGVkKGZhbHNlKTsKKyAgICBnVGVzdFJ1bm5lci0+Y2xvc2VXZWJJbnNwZWN0b3Io
KTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7CiAK
ICAgICBicm93c2VyLT5jbGVhckV4dHJhVmlld3MoKTsKIApAQCAtMjk4LDcgKzI5OCw3IEBAIHN0
YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW4KIAogICAgIGV3a192aWV3X3Vy
aV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgImFib3V0OmJsYW5rIik7CiAKLSAgICBnTGF5b3V0
VGVzdENvbnRyb2xsZXIuY2xlYXIoKTsKKyAgICBnVGVzdFJ1bm5lci5jbGVhcigpOwogICAgIHNl
bmRQaXhlbFJlc3VsdHNFT0YoKTsKIH0KIApAQCAtMzIwLDE1ICszMjAsMTUgQEAgc3RhdGljIHZv
aWQgYWRqdXN0T3V0cHV0VHlwZUJ5TWltZVR5cGUoYwogewogICAgIGNvbnN0IFN0cmluZyByZXNw
b25zZU1pbWVUeXBlKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVzcG9uc2VNaW1lVHlwZShm
cmFtZSkpOwogICAgIGlmIChyZXNwb25zZU1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIikgewotICAg
ICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAg
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMoZmFsc2UpOwor
ICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgZ1Rlc3RS
dW5uZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKICAgICB9CiB9CiAKIHN0YXRp
YyB2b2lkIGR1bXBGcmFtZUNvbnRlbnRzQXNUZXh0KEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKICAg
ICBTdHJpbmcgcmVzdWx0OwotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1Rl
eHQoKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSkKICAgICAgICAgcmVzdWx0
ID0gZHVtcEZyYW1lc0FzVGV4dChmcmFtZSk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJlbmRlclRyZWVEdW1wKGZyYW1lKTsKQEAgLTMzOCwx
NyArMzM4LDE3IEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZUNvbnRlbnRzQXNUZXh0KEV2YXMKIAog
c3RhdGljIGJvb2wgc2hvdWxkRHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oKQogewotICAgIHJldHVy
biAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNUZXh0KCkgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKTsKKyAgICByZXR1cm4gIWdUZXN0UnVubmVyLT5kdW1w
QXNUZXh0KCkgJiYgIWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdUZXN0
UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3Vs
ZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1cm4gZHVtcFBp
eGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhl
bFJlc3VsdHMoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZl
KCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOwor
ICAgIHJldHVybiBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZ1Rlc3RSdW5uZXItPmdlbmVy
YXRlUGl4ZWxSZXN1bHRzKCkgJiYgIWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkg
JiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCk7CiB9CiAKIHN0YXRpYyBi
b29sIHNob3VsZER1bXBCYWNrRm9yd2FyZExpc3QoKQogewotICAgIHJldHVybiBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKTsKKyAgICByZXR1cm4gZ1Rlc3RSdW5u
ZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKTsKIH0KIAogc3RhdGljIGJvb2wgaW5pdEVmbCgpCkBA
IC00MTIsNyArNDEyLDcgQEAgdm9pZCBkdW1wKCkKICAgICB9CiAKICAgICBpZiAoc2hvdWxkRHVt
cFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoKSkKLSAgICAgICAgZHVtcFdlYlZpZXdBc1Bp
eGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5leHBlY3Rl
ZFBpeGVsSGFzaCgpKTsKKyAgICAgICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRo
RXhwZWN0ZWQoZ1Rlc3RSdW5uZXItPmV4cGVjdGVkUGl4ZWxIYXNoKCkpOwogCiAgICAgZG9uZSA9
IHRydWU7CiAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAkocmV2aXNpb24gMTI1
NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIEV2YXNfT2JqZWN0KiBEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6Y3JlYXQKICAgICBFdmFzX09iamVjdCogbWFpbkZyYW1lID0gZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9nZXQoaW5zcGVjdG9yVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKG1haW5GcmFtZSwgImxvYWQsZmluaXNoZWQiLCBvbkluc3BlY3RvckZyYW1l
TG9hZEZpbmlzaGVkLCAwKTsKIAotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShpbnNwZWN0b3JWaWV3
LCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoLCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bWF4Vmlld0hlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGluc3BlY3RvclZpZXcs
IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodCk7CiAg
ICAgZXZhc19vYmplY3Rfc2hvdyhpbnNwZWN0b3JWaWV3KTsKICAgICBldmFzX29iamVjdF9mb2N1
c19zZXQoaW5zcGVjdG9yVmlldywgdHJ1ZSk7CiAKQEAgLTQxOCwxMiArNDE4LDEyIEBAIHZvaWQg
RHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2luZG93T2JqZWMKIHsKICAgICBFd2tfV2luZG93X09i
amVjdF9DbGVhcmVkX0V2ZW50KiBvYmplY3RDbGVhcmVkSW5mbyA9IHN0YXRpY19jYXN0PEV3a19X
aW5kb3dfT2JqZWN0X0NsZWFyZWRfRXZlbnQqPihldmVudEluZm8pOwogICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKLSAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyKTsKKyAgICBB
U1NFUlQoZ1Rlc3RSdW5uZXIpOwogCiAgICAgR0NDb250cm9sbGVyKiBnY0NvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPih1c2VyRGF0YSk7CiAgICAgQVNTRVJUKGdjQ29udHJv
bGxlcik7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qob2Jq
ZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5kb3dPYmplY3Qs
ICZleGNlcHRpb24pOworICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KG9iamVjdENs
ZWFyZWRJbmZvLT5jb250ZXh0LCBvYmplY3RDbGVhcmVkSW5mby0+d2luZG93T2JqZWN0LCAmZXhj
ZXB0aW9uKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAKICAgICBnY0NvbnRyb2xsZXItPm1h
a2VXaW5kb3dPYmplY3Qob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJ
bmZvLT53aW5kb3dPYmplY3QsICZleGNlcHRpb24pOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQg
RHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uTG9hZFN0YXJ0ZWQKIAogRWluYV9Cb29sIER1bXBSZW5k
ZXJUcmVlQ2hyb21lOjpwcm9jZXNzV29yayh2b2lkKikKIHsKLSAgICBpZiAoV29ya1F1ZXVlOjpz
aGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9E
dW1wKCkpCisgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nlc3NXb3JrKCkgJiYgIWdU
ZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIGR1bXAoKTsKIAogICAgIHJldHVybiBF
Q09SRV9DQUxMQkFDS19DQU5DRUw7CkBAIC00NjcsNyArNDY3LDcgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZUNocm9tZTo6dG9wTG9hZGluZ0ZyYQogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAKICAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7Ci0gICAgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+d2FpdFRv
RHVtcCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+
Y291bnQoKSkKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjp0
b3BMb2FkaW5nRnJhCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uU3RhdHVzYmFyVGV4
dFNldCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgaWYgKCFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkKKyAgICBpZiAoIWdU
ZXN0UnVubmVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNvbnN0IGNoYXIqIHN0YXR1c2JhclRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZXZl
bnRJbmZvKTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpv
blN0YXR1c2JhclRlCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVJY29uQ2hh
bmdlZCh2b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSWNvbkNoYW5nZXMoKSkgeworICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEljb25DaGFuZ2VzKCkpIHsKICAgICAgICAgY29uc3Qg
U3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJh
bWVOYW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRDaGFuZ2VJY29uc1xuIiwg
ZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTQ5NywxOSArNDk3LDE5IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVUaXRsZUMKIHsKICAgICBjb25zdCBFd2tf
VGV4dF9XaXRoX0RpcmVjdGlvbiogdGl0bGVUZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRXdrX1Rl
eHRfV2l0aF9EaXJlY3Rpb24qPihldmVudEluZm8pOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAg
Y29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxl
RFJURnJhbWVOYW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlVGl0
bGU6ICVzXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgKHRpdGxlVGV4dCAmJiB0aXRsZVRl
eHQtPnN0cmluZykgPyB0aXRsZVRleHQtPnN0cmluZyA6ICIiKTsKICAgICB9CiAKLSAgICBpZiAo
IWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkpCisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkpCiAgICAgICAgIHBy
aW50ZigiVElUTEUgQ0hBTkdFRDogJXNcbiIsICh0aXRsZVRleHQgJiYgdGl0bGVUZXh0LT5zdHJp
bmcpID8gdGl0bGVUZXh0LT5zdHJpbmcgOiAiIik7CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiV2ViVmlldyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwg
XCIlc1wiIHRvIFwiJXNcIi5cbiIsIGV3a19mcmFtZV91cmlfZ2V0KGZyYW1lKQogICAgICAgICAg
ICAgICAgLCAodGl0bGVUZXh0ICYmIHRpdGxlVGV4dC0+c3RyaW5nKSA/IHRpdGxlVGV4dC0+c3Ry
aW5nIDogIiIpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRUaXRsZVRleHREaXJl
Y3Rpb24odGl0bGVUZXh0LT5kaXJlY3Rpb24gPT0gRVdLX1RFWFRfRElSRUNUSU9OX0xFRlRfVE9f
UklHSFQgPyAibHRyIiA6ICJydGwiKTsKKyAgICBnVGVzdFJ1bm5lci0+c2V0VGl0bGVUZXh0RGly
ZWN0aW9uKHRpdGxlVGV4dC0+ZGlyZWN0aW9uID09IEVXS19URVhUX0RJUkVDVElPTl9MRUZUX1RP
X1JJR0hUID8gImx0ciIgOiAicnRsIik7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6
Om9uRG9jdW1lbnRMb2FkRmluaXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJ
bmZvKQpAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRG9j
dW1lbnRMb2EKICAgICBjb25zdCBFdmFzX09iamVjdCogZnJhbWUgPSBzdGF0aWNfY2FzdDxFdmFz
X09iamVjdCo+KGV2ZW50SW5mbyk7CiAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAKLSAgICBp
ZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZVxu
IiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIGVsc2UgaWYgKCFkb25lKSB7CiAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cyA9IER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6cGVuZGluZ1VubG9hZEV2ZW50Q291bnQoZnJhbWUpOwpAQCAtNTMwLDE5
ICs1MzAsMTkgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaWxsU2VuZFJlcQogewog
ICAgIEV3a19GcmFtZV9SZXNvdXJjZV9NZXNzYWdlcyogbWVzc2FnZXMgPSBzdGF0aWNfY2FzdDxF
d2tfRnJhbWVfUmVzb3VyY2VfTWVzc2FnZXMqPihldmVudEluZm8pOwogCi0gICAgaWYgKCFkb25l
ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQor
ICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygp
KQogICAgICAgICBwcmludGYoIiVzIC0gd2lsbFNlbmRSZXF1ZXN0ICVzIHJlZGlyZWN0UmVzcG9u
c2UgJXNcbiIsCiAgICAgICAgICAgICAgICBtX2R1bXBBc3NpZ25lZFVybHMuY29udGFpbnMobWVz
c2FnZXMtPnJlcXVlc3QtPmlkZW50aWZpZXIpID8gbV9kdW1wQXNzaWduZWRVcmxzLmdldChtZXNz
YWdlcy0+cmVxdWVzdC0+aWRlbnRpZmllcikuZGF0YSgpIDogIjx1bmtub3duPiIsCiAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChtZXNzYWdlcy0+cmVxdWVz
dCkuZGF0YSgpLAogICAgICAgICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQobWVzc2FnZXMtPnJlZGlyZWN0X3Jlc3BvbnNlKS5kYXRhKCkpOwogCi0gICAgaWYgKCFkb25l
ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkg
ewotICAgICAgICAvLyBBcyByZXF1ZXN0ZWQgYnkgdGhlIExheW91dFRlc3RDb250cm9sbGVyLCBk
b24ndCBwZXJmb3JtIHRoZSByZXF1ZXN0LgorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkgeworICAgICAgICAvLyBBcyByZXF1ZXN0ZWQg
YnkgdGhlIFRlc3RSdW5uZXIsIGRvbid0IHBlcmZvcm0gdGhlIHJlcXVlc3QuCiAgICAgICAgIG1l
c3NhZ2VzLT5yZXF1ZXN0LT51cmwgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGxPblJlZGlyZWN0KCkgJiYgbWVzc2FnZXMtPnJlZGlyZWN0X3Jlc3BvbnNlKSB7CisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QoKSAmJiBtZXNzYWdlcy0+cmVkaXJlY3RfcmVzcG9uc2UpIHsKICAgICAgICAgcHJpbnRm
KCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIG1lc3NhZ2Vz
LT5yZXF1ZXN0LT51cmwgPSAwOwogICAgICAgICByZXR1cm47CkBAIC01NjAsNyArNTYwLDcgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaWxsU2VuZFJlcQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RpbmF0aW9uID0gZ0xheW91dFRl
c3RDb250cm9sbGVyLT5yZWRpcmVjdGlvbkRlc3RpbmF0aW9uRm9yVVJMKHVybC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24gPSBnVGVz
dFJ1bm5lci0+cmVkaXJlY3Rpb25EZXN0aW5hdGlvbkZvclVSTCh1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgaWYgKGRlc3RpbmF0aW9uLmxlbmd0aCgpKQogICAgICAgICBtZXNzYWdl
cy0+cmVxdWVzdC0+dXJsID0gc3RyZHVwKGRlc3RpbmF0aW9uLmNfc3RyKCkpOwogfQpAQCAtNTY5
LDcgKzU2OSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld09ubG8KIHsK
ICAgICBjb25zdCBFdmFzX09iamVjdCogZnJhbWUgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+
KGV2ZW50SW5mbyk7CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVO
YW1lKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUp
KTsKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lXG4i
LCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpAQCAtNTc3LDEzICs1NzcsMTMgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3T25sbwogCiB2b2lkIER1bXBSZW5k
ZXJUcmVlQ2hyb21lOjpvbkluc2VjdXJlQ29udGVudFJ1bih2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiZGlkUnVuSW5zZWN1cmVDb250ZW50
XG4iKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25JbnNlY3VyZUNvbnRlbnRE
aXNwbGF5ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAg
ICBwcmludGYoImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCkBAIC02MDgsNyAr
NjA4LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUNyZWF0ZQogCiB2b2lk
IER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSh2b2lkKiwg
RXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgaWYgKGRvbmUgfHwgIWdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQorICAgIGlm
IChkb25lIHx8ICFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZXZlbnRJbmZvKTsKQEAgLTYzMSw3ICs2MzEs
NyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdOYXZpCiAKIHZvaWQgRHVt
cFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnZlclJlZGlyZWN0KHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBpZiAoZG9uZSB8fCAhZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCisgICAgaWYgKGRvbmUg
fHwgIWdUZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEFTU0VSVChldmVudEluZm8pOwpAQCAtNjQxLDcgKzY0MSw3IEBAIHZv
aWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2ViVmlld1NlcnYKIAogdm9pZCBEdW1wUmVuZGVy
VHJlZUNocm9tZTo6b25XZWJWaWV3Q2xpZW50UmVkaXJlY3Qodm9pZCosIEV2YXNfT2JqZWN0Kiwg
dm9pZCogZXZlbnRJbmZvKQogewotICAgIGlmIChkb25lIHx8ICFnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICBpZiAoZG9uZSB8fCAhZ1Rl
c3RSdW5uZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQVNTRVJUKGV2ZW50SW5mbyk7CkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBEdW1w
UmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3Q2xpZQogCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hy
b21lOjpvbldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRMaW5rcyh2b2lkKiwgRXZhc19PYmplY3QqIGV3
a1ZpZXcsIHZvaWQqKQogewotICAgIGlmIChkb25lIHx8ICFnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICBpZiAoZG9uZSB8fCAhZ1Rlc3RS
dW5uZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgcHJpbnRmKCJBc2tlZCB0byBwb3B1bGF0ZSB2aXNpdGVkIGxpbmtzIGZvciBXZWJWaWV3
IFwiJXNcIlxuIiwgZXdrX3ZpZXdfdXJpX2dldChld2tWaWV3KSk7CkBAIC02NzgsNyArNjc4LDcg
QEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25JbnNwZWN0b3JGcgogCiB2b2lkIER1bXBS
ZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzaW9uYWxMb2FkKHZvaWQqLCBFdmFzX09iamVj
dCogZnJhbWUsIHZvaWQqKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyBm
cmFtZU5hbWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZShm
cmFtZSkpOwogICAgICAgICBwcmludGYoIiVzIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JG
cmFtZVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTY4Niw3ICs2ODYs
NyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzCiAgICAgaWYgKCF0
b3BMb2FkaW5nRnJhbWUgJiYgIWRvbmUpCiAgICAgICAgIHRvcExvYWRpbmdGcmFtZSA9IGZyYW1l
OwogICAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zdG9wUHJvdmlz
aW9uYWxGcmFtZUxvYWRzKCkpIHsgCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5zdG9w
UHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsgCiAgICAgICAgIGNvbnN0IFN0cmluZyBmcmFtZU5h
bWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZShmcmFtZSkp
OwogICAgICAgICBwcmludGYoIiVzIC0gc3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lIGNhbGxiYWNrXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgIGV3a19mcmFtZV9zdG9wKGZyYW1lKTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzCiB7CiAgICAgbV9wcm92aXNpb25hbExv
YWRGYWlsZWRGcmFtZSA9IGZyYW1lOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3QgU3Ry
aW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVO
YW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
V2l0aEVycm9yXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpAQCAtNzA1LDcg
KzcwNSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVQcm92aXMKIAogdm9p
ZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUxvYWRDb21taXR0ZWQodm9pZCosIEV2YXNf
T2JqZWN0KiBmcmFtZSwgdm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3QgU3Ry
aW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVO
YW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVc
biIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CkBAIC03MjEsMTAgKzcyMSwxMCBA
QCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lTG9hZEZpCiAgICAgaWYgKGVycm9y
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCisgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCiAgICAgICAgIHByaW50
ZigicG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb25cbiIpOwogCi0gICAgaWYgKCFkb25l
ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Cisg
ICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsK
ICAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRG
aW5pc2hMb2FkRm9yRnJhbWVcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9CkBA
IC03MzgsNyArNzM4LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUxvYWRF
cgogICAgIC8vIEluIGNhc2Ugb2YgcHJvdmlzaW9uYWwgbG9hZCBlcnJvciwgd2UgcmVjZWl2ZSBi
b3RoICJsb2FkLGVycm9yIiBhbmQgImxvYWQscHJvdmlzaW9uYWwsZmFpbGVkIgogICAgIC8vIHNp
Z25hbHMuIG1fcHJvdmlzaW9uYWxMb2FkRmFpbGVkRnJhbWUgaXMgdXNlZCB0byBhdm9pZCBwcmlu
dGluZyB0d2ljZSB0aGUgbG9hZCBlcnJvcjogaW4KICAgICAvLyBvbkZyYW1lUHJvdmlzaW9uYWxM
b2FkRmFpbGVkKCkgYW5kIG9uRnJhbWVMb2FkRXJyb3IoKS4KLSAgICBpZiAoIWRvbmUgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgJiYgZnJhbWUgIT0g
bV9wcm92aXNpb25hbExvYWRGYWlsZWRGcmFtZSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpICYmIGZyYW1lICE9IG1fcHJvdmlzaW9uYWxM
b2FkRmFpbGVkRnJhbWUpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAgICAgICAg
IHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZFdpdGhFcnJvclxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5k
YXRhKCkpOwogICAgIH0KQEAgLTc1Miw3ICs3NTIsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hy
b21lOjpvbkZyYW1lTG9hZEVyCiAKIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVS
ZWRpcmVjdENhbmNlbGxlZCh2b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lkKikKIHsKLSAg
ICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxs
YmFja3MoKSkgewogICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKICAgICAgICAgcHJpbnRm
KCIlcyAtIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWVcbiIsIGZyYW1lTmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICB9CkBAIC03NjAsNyArNzYwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZUNocm9tZTo6b25GcmFtZVJlZGlyZQogCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZy
YW1lUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQodm9pZCosIEV2YXNfT2JqZWN0KiBmcmFtZSwg
dm9pZCopCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZy
YW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7CiAg
ICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bExvYWRGb3JGcmFtZVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KQEAgLTc3
MCw3ICs3NzAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUmVkaXJlCiB7
CiAgICAgY29uc3QgY2hhciogdXJsID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGV2ZW50SW5m
byk7CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKICAgICAg
ICAgcHJpbnRmKCIlcyAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogJXMgXG4iLCBm
cmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpLmRh
dGEoKSk7CiAgICAgfQpAQCAtNzc4LDcgKzc3OCw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJv
bWU6Om9uRnJhbWVSZWRpcmUKIAogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25EaWREZXRl
Y3RYU1Modm9pZCosIEV2YXNfT2JqZWN0KiB2aWV3LCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHByaW50ZigiZGlkRGV0ZWN0WFNTXG4iKTsKIH0KIApAQCAtNzg2LDE0ICs3ODYsMTQgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25SZXNwb25zZVJlYwogewogICAgIEV3a19GcmFt
ZV9SZXNvdXJjZV9SZXNwb25zZSogcmVzcG9uc2UgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfUmVz
b3VyY2VfUmVzcG9uc2UqPihldmVudEluZm8pOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAg
ICAgQ1N0cmluZyByZXNwb25zZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHJlc3BvbnNlKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlUmVzcG9u
c2UgJXNcbiIsCiAgICAgICAgICAgICAgICBtX2R1bXBBc3NpZ25lZFVybHMuY29udGFpbnMocmVz
cG9uc2UtPmlkZW50aWZpZXIpID8gbV9kdW1wQXNzaWduZWRVcmxzLmdldChyZXNwb25zZS0+aWRl
bnRpZmllcikuZGF0YSgpIDogIjx1bmtub3duPiIsCiAgICAgICAgICAgICAgICByZXNwb25zZURl
c2NyaXB0aW9uLmRhdGEoKSk7CiAgICAgfQogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkgeworICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkgewog
ICAgICAgICBwcmludGYoIiVzIGhhcyBNSU1FIHR5cGUgJXNcbiIsCiAgICAgICAgICAgICAgICBL
VVJMKFBhcnNlZFVSTFN0cmluZywgcmVzcG9uc2UtPnVybCkubGFzdFBhdGhDb21wb25lbnQoKS51
dGY4KCkuZGF0YSgpLAogICAgICAgICAgICAgICAgcmVzcG9uc2UtPm1pbWVfdHlwZSk7CkBAIC04
MDQsNyArODA0LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25SZXNvdXJjZUxvYQog
ewogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9ICpzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nKj4oZXZlbnRJbmZvKTsKIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RS
dW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAt
IGRpZEZpbmlzaExvYWRpbmdcbiIsCiAgICAgICAgICAgICAgICAobV9kdW1wQXNzaWduZWRVcmxz
LmNvbnRhaW5zKGlkZW50aWZpZXIpID8gbV9kdW1wQXNzaWduZWRVcmxzLnRha2UoaWRlbnRpZmll
cikuZGF0YSgpIDogIjx1bmtub3duPiIpKTsKIH0KQEAgLTgxMyw3ICs4MTMsNyBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlQ2hyb21lOjpvblJlc291cmNlTG9hCiB7CiAgICAgRXdrX0ZyYW1lX0xvYWRf
RXJyb3IqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX0xvYWRfRXJyb3IqPihldmVudElu
Zm8pOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmFpbExvYWRp
bmdXaXRoRXJyb3I6ICVzXG4iLAogICAgICAgICAgICAgICAgKG1fZHVtcEFzc2lnbmVkVXJscy5j
b250YWlucyhlcnJvci0+cmVzb3VyY2VfaWRlbnRpZmllcikgPyBtX2R1bXBBc3NpZ25lZFVybHMu
dGFrZShlcnJvci0+cmVzb3VyY2VfaWRlbnRpZmllcikuZGF0YSgpIDogIjx1bmtub3duPiIpLAog
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IpLmRh
dGEoKSk7CkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25O
ZXdSZXNvdXJjZQogewogICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0ID0g
c3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqPihldmVudEluZm8pOwogCi0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENh
bGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcygpKQogICAgICAgICBtX2R1bXBBc3NpZ25lZFVybHMuYWRkKHJlcXVlc3QtPmlk
ZW50aWZpZXIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC0+dXJsKSk7CiB9CiAK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcu
Y3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMg
RWluYV9Cb29sIG9uSmF2YVNjcmlwdFByb21wdChFd2tfCiAKIHN0YXRpYyBFdmFzX09iamVjdCog
b25XaW5kb3dDcmVhdGUoRXdrX1ZpZXdfU21hcnRfRGF0YSosIEVpbmFfQm9vbCwgY29uc3QgRXdr
X1dpbmRvd19GZWF0dXJlcyopCiB7Ci0gICAgcmV0dXJuIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
Y2FuT3BlbldpbmRvd3MoKSA/IGJyb3dzZXItPmNyZWF0ZU5ld1dpbmRvdygpIDogMDsKKyAgICBy
ZXR1cm4gZ1Rlc3RSdW5uZXItPmNhbk9wZW5XaW5kb3dzKCkgPyBicm93c2VyLT5jcmVhdGVOZXdX
aW5kb3coKSA6IDA7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgb25XaW5kb3dDbG9zZURlbGF5ZWQo
dm9pZCogZGF0YSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgdm9pZCBvbldpbmRvd0Nsb3Nl
KEV3a19WaWV3X1NtYXJ0CiAKIHN0YXRpYyB1aW50NjRfdCBvbkV4Y2VlZGVkRGF0YWJhc2VRdW90
YShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29u
c3QgY2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBjdXJyZW50U2l6ZSwgdWludDY0X3QgZXhw
ZWN0ZWRTaXplKQogewotICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRGF0YWJh
c2VDYWxsYmFja3MoKSkKKyAgICBpZiAoIWdUZXN0UnVubmVyLT5kdW1wRGF0YWJhc2VDYWxsYmFj
a3MoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmln
aW4gPSBld2tfZnJhbWVfc2VjdXJpdHlfb3JpZ2luX2dldChmcmFtZSk7CkBAIC0xMjksNyArMTI5
LDcgQEAgc3RhdGljIHVpbnQ2NF90IG9uRXhjZWVkZWREYXRhYmFzZVF1b3RhKAogCiBzdGF0aWMg
aW50NjRfdCBvbkV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZVF1b3RhKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqLCBFd2tfU2VjdXJpdHlfT3JpZ2luICpvcmlnaW4sIGludDY0X3QgZGVmYXVsdE9yaWdpblF1
b3RhLCBpbnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQpCiB7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpKSB7CisgICAg
aWYgKGdUZXN0UnVubmVyLT5kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIG51bWJlcnMgZnJvbSAzMDAwMCAtIDM5OTk5IHdp
bGwgb3V0cHV0IGFzIDMwMDAwLgogICAgICAgICAvLyBSb3VuZGluZyB1cCBvciBkb3duIGRvZXMg
bm90IHJlYWxseSBtYXR0ZXIgZm9yIHRoZXNlIHRlc3RzLiBJdCdzCiAgICAgICAgIC8vIHN1ZmZp
Y2llbnQgdG8ganVzdCBnZXQgYSByYW5nZSBvZiAxMDAwMCB0byBkZXRlcm1pbmUgaWYgd2Ugd2Vy
ZQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyBpbnQ2NF90IG9uRXhjZWVkZWRBcHBsaWNhdGlv
bkNhY2gKICAgICAgICAgICAgICAgIHRydW5jYXRlZFNwYWNlTmVlZGVkKTsKICAgICB9CiAKLSAg
ICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRp
b25DYWNoZVF1b3RhKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kaXNhbGxvd0luY3JlYXNlRm9y
QXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJu
IGRlZmF1bHRPcmlnaW5RdW90YTsKQEAgLTE4Nyw4ICsxODcsOCBAQCBzdGF0aWMgRWluYV9Cb29s
IG9uTmF2aWdhdGlvblBvbGljeURlY2lzCiAgICAgcHJpbnRmKCJQb2xpY3kgZGVsZWdhdGU6IGF0
dGVtcHQgdG8gbG9hZCAlcyB3aXRoIG5hdmlnYXRpb24gdHlwZSAnJXMnXG4iLCB1cmxTdWl0YWJs
ZUZvclRlc3RSZXN1bHQocmVxdWVzdC0+dXJsKS51dGY4KCkuZGF0YSgpLAogICAgICAgICAgICBu
YXZpZ2F0aW9uVHlwZVRvU3RyaW5nKG5hdmlnYXRpb25UeXBlKSk7CiAKLSAgICBpZiAoZ0xheW91
dFRlc3RDb250cm9sbGVyKQotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPm5vdGlmeURv
bmUoKTsKKyAgICBpZiAoZ1Rlc3RSdW5uZXIpCisgICAgICAgIGdUZXN0UnVubmVyLT5ub3RpZnlE
b25lKCk7CiAKICAgICByZXR1cm4gcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlOwogfQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0VkaXRpbmdDYWxsYmFja3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9FZGl0aW5nQ2FsbGJhY2tzLmNwcAkocmV2aXNp
b24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0VkaXRpbmdDYWxsYmFja3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBz
ZWxlY3Rpb25BZmZpbml0eVN0cmkKIAogdm9pZCBzaG91bGRCZWdpbkVkaXRpbmcodm9pZCosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2UqPihldmVudEluZm8p
OwogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0lu
RE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5nZShyYW5nZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpA
QCAtOTUsNyArOTUsNyBAQCB2b2lkIHNob3VsZEJlZ2luRWRpdGluZyh2b2lkKiwgRXZhc19PYmpl
CiAKIHZvaWQgc2hvdWxkRW5kRWRpdGluZyh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVu
dEluZm8pCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBXZWJDb3JlOjpSYW5nZSogcmFuZ2UgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpSYW5nZSo+KGV2ZW50SW5mbyk7CiAgICAgICAgIHByaW50ZigiRURJ
VElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5n
ZShyYW5nZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQg
c2hvdWxkRW5kRWRpdGluZyh2b2lkKiwgRXZhc19PYmplY3QKIAogdm9pZCBzaG91bGRJbnNlcnRO
b2RlKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBpZiAoIWRv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Cisg
ICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAg
ICAgICAgIEV3a19TaG91bGRfSW5zZXJ0X05vZGVfRXZlbnQqIHNob3VsZEluc2VydE5vZGVFdmVu
dCA9IHN0YXRpY19jYXN0PEV3a19TaG91bGRfSW5zZXJ0X05vZGVfRXZlbnQqPihldmVudEluZm8p
OwogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6JXMg
cmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rpb246JXNcbiIsCiAgICAgICAgICAgICAgICBk
dW1wUGF0aChzaG91bGRJbnNlcnROb2RlRXZlbnQtPm5vZGUpLnV0ZjgoKS5kYXRhKCksIGR1bXBS
YW5nZShzaG91bGRJbnNlcnROb2RlRXZlbnQtPnJhbmdlKS51dGY4KCkuZGF0YSgpLApAQCAtMTEz
LDcgKzExMyw3IEBAIHZvaWQgc2hvdWxkSW5zZXJ0Tm9kZSh2b2lkKiwgRXZhc19PYmplY3QKIAog
dm9pZCBzaG91bGRJbnNlcnRUZXh0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5m
bykKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEV3a19TaG91bGRfSW5zZXJ0X1RleHRfRXZlbnQqIHNo
b3VsZEluc2VydFRleHRFdmVudCA9IHN0YXRpY19jYXN0PEV3a19TaG91bGRfSW5zZXJ0X1RleHRf
RXZlbnQqPihldmVudEluZm8pOwogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEluc2VydFRleHQ6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rpb246JXNcbiIs
CiAgICAgICAgICAgICAgICAgc2hvdWxkSW5zZXJ0VGV4dEV2ZW50LT50ZXh0LCBkdW1wUmFuZ2Uo
c2hvdWxkSW5zZXJ0VGV4dEV2ZW50LT5yYW5nZSkudXRmOCgpLmRhdGEoKSwgaW5zZXJ0QWN0aW9u
U3RyaW5nKHNob3VsZEluc2VydFRleHRFdmVudC0+YWN0aW9uKSk7CkBAIC0xMjIsNyArMTIyLDcg
QEAgdm9pZCBzaG91bGRJbnNlcnRUZXh0KHZvaWQqLCBFdmFzX09iamVjdAogCiB2b2lkIHNob3Vs
ZERlbGV0ZVJhbmdlKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAg
ICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKSB7CiAgICAgICAgIFdlYkNvcmU6OlJhbmdlKiByYW5nZSA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlJhbmdlKj4oZXZlbnRJbmZvKTsKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGREZWxldGVET01SYW5nZTolc1xuIiwgZHVtcFJhbmdlKHJhbmdlKS51dGY4KCkuZGF0
YSgpKTsKICAgICB9CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBzaG91bGREZWxldGVSYW5nZSh2
b2lkKiwgRXZhc19PYmplYwogCiB2b2lkIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgRXdr
X1Nob3VsZF9DaGFuZ2VfU2VsZWN0ZWRfUmFuZ2VfRXZlbnQqIHNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2VFdmVudCA9IHN0YXRpY19jYXN0PEV3a19TaG91bGRfQ2hhbmdlX1NlbGVjdGVkX1Jhbmdl
X0V2ZW50Kj4oZXZlbnRJbmZvKTsKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiVzIHRvRE9NUmFuZ2U6JXMgYWZmaW5pdHk6JXMg
c3RpbGxTZWxlY3Rpbmc6JXNcbiIsCiAgICAgICAgICAgICAgICBkdW1wUmFuZ2Uoc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZUV2ZW50LT5mcm9tUmFuZ2UpLnV0ZjgoKS5kYXRhKCksIGR1bXBSYW5n
ZShzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlRXZlbnQtPnRvUmFuZ2UpLnV0ZjgoKS5kYXRhKCks
CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKHZvaWQq
LCBFdgogCiB2b2lkIHNob3VsZEFwcGx5U3R5bGUodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCog
ZXZlbnRJbmZvKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgRXdrX1Nob3VsZF9BcHBseV9TdHlsZV9F
dmVudCogc2hvdWxkQXBwbHlTdHlsZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXdrX1Nob3VsZF9BcHBs
eV9TdHlsZV9FdmVudCo+KGV2ZW50SW5mbyk7CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxF
R0FURTogc2hvdWxkQXBwbHlTdHlsZTolcyB0b0VsZW1lbnRzSW5ET01SYW5nZTolc1xuIiwKICAg
ICAgICAgICAgICAgICBzaG91bGRBcHBseVN0eWxlRXZlbnQtPnN0eWxlLT5hc1RleHQoKS51dGY4
KCkuZGF0YSgpLCBkdW1wUmFuZ2Uoc2hvdWxkQXBwbHlTdHlsZUV2ZW50LT5yYW5nZSkudXRmOCgp
LmRhdGEoKSk7CkBAIC0xNDksMjUgKzE0OSwyNSBAQCB2b2lkIHNob3VsZEFwcGx5U3R5bGUodm9p
ZCosIEV2YXNfT2JqZWN0CiAKIHZvaWQgZWRpdGluZ0JlZ2FuKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRp
dGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvblxuIik7
CiB9CiAKIHZvaWQgdXNlckNoYW5nZWRDb250ZW50cyh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lk
KikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb25cbiIpOwogfQogCiB2b2lkIGVkaXRp
bmdFbmRlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUgJiYg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJp
bnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzpXZWJWaWV3RGlkRW5k
RWRpdGluZ05vdGlmaWNhdGlvblxuIik7CiB9CiAKIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVz
dFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb25Ob3RpZmljYXRpb25cbiIpOwogfQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvVGVzdFJ1bm5lckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE2ICs2
MiwxNiBAQCBlbnVtIHsKICAgICBXZWJDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIgPSAyCiB9
OwogCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKK1Rlc3RS
dW5uZXI6On5UZXN0UnVubmVyKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxs
b3dlZFVSTChKU1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCit2b2lkIFRlc3RS
dW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKIHsKICAgICBFd2tfSGlzdG9yeSogaGlzdG9y
eSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwogICAgIGlmICgh
aGlzdG9yeSkKQEAgLTg0LDUxICs4NCw1MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhckJhY2tGb3J3CiAgICAgZXdrX2hpc3RvcnlfaXRlbV9mcmVlKGl0ZW0pOwogfQogCi1KU1N0
cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmlu
Z1JlZikKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJp
bmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJp
bmdSZWYpCitKU1N0cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3Ry
aW5nUmVmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit2
b2lkIFRlc3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7CiAgICAgZGlzcGxheVdlYlZpZXcoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9pZCBUZXN0UnVu
bmVyOjprZWVwV2ViSGlzdG9yeSgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotSlNW
YWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQorSlNWYWx1ZVJl
ZiBUZXN0UnVubmVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnRleHQs
IHZhbHVlKTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRl
c3RSdW5uZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoraW50IFRl
c3RSdW5uZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0
KQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXMo
YnJvd3Nlci0+bWFpbkZyYW1lKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7CiB9CiAKLUpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CitKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RyaW5nIHByb3Bl
cnR5ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYWdlUHJvcGVydHkoYnJvd3Nlci0+bWFp
bkZyYW1lKCksIHByb3BlcnR5TmFtZSwgcGFnZU51bWJlcik7CiAgICAgaWYgKHByb3BlcnR5Lmlz
RW1wdHkoKSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5
b3V0VGVzdENvbnRyCiAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7CiB9CiAKLUpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRv
cCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29u
c3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlU2l6ZUFuZE1hcmdp
bnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFy
Z2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0
KSBjb25zdAogewogICAgIFN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnMgPSBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGJyb3dzZXItPm1haW5GcmFt
ZSgpLCBwYWdlTnVtYmVyLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBt
YXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpOwogCkBAIC0xNDksNyArMTQ5LDcgQEAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cgogICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
IH0KIAotc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkK
K3NpemVfdCBUZXN0UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIHsKICAgICBjb25zdCBF
d2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5W
aWV3KCkpOwogICAgIGlmICghaGlzdG9yeSkKQEAgLTE1OCwxMiArMTU4LDEyIEBAIHNpemVfdCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUkKICAgICByZXR1cm4gZXdrX2hpc3Rvcnlf
YmFja19saXN0X2xlbmd0aChoaXN0b3J5KSArIGV3a19oaXN0b3J5X2ZvcndhcmRfbGlzdF9sZW5n
dGgoaGlzdG9yeSk7CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJU
aHJlYWRDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3Vu
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6d29ya2Vy
VGhyZWFkQ291bnQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9u
ZSgpCit2b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIGlmIChtX3dhaXRUb0R1
bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkK
ICAgICAgICAgZHVtcCgpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om5vdGlmeURvbmUoKQogICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKIH0KIAotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6
OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVy
bCkKIHsKICAgICBTdHJpbmcgcmVxdWVzdGVkVXJsKHVybC0+Y2hhcmFjdGVycygpLCB1cmwtPmxl
bmd0aCgpKTsKICAgICBTdHJpbmcgcmVzb3VyY2VSb290OwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEpT
U3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG8KICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZnVsbFBhdGhUb1VybC51dGY4KCkuZGF0YSgpKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwg
SlNTdHJpbmdSZWYgdGFyZ2V0KQordm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdS
ZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCiB7CiAgICAgV2ViQ29yZTo6S1VSTCBiYXNlVVJM
KFdlYkNvcmU6OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChicm93
c2VyLT5tYWluRnJhbWUoKSkpKTsKICAgICBXZWJDb3JlOjpLVVJMIGFic29sdXRlVVJMKGJhc2VV
UkwsIFdURjo6U3RyaW5nKHVybC0+dXN0cmluZygpLmltcGwoKSkpOwpAQCAtMjA4LDM1ICsyMDgs
MzUgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTUwogICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJMLmdldCgpLCB0
YXJnZXQpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0c0VkaXRp
bmcoYm9vbCBhY2NlcHRzRWRpdGluZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRp
bmcoYm9vbCBhY2NlcHRzRWRpdGluZykKIHsKICAgICBld2tfdmlld19lZGl0YWJsZV9zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgYWNjZXB0c0VkaXRpbmcpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2ll
cykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0Fj
Y2VwdENvb2tpZXMpCiB7CiAgICAgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChhbHdheXNBY2NlcHRD
b29raWVzID8gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUyA6IEVXS19DT09LSUVfSkFSX0FD
Q0VQVF9ORVZFUik7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBv
bGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQordm9pZCBUZXN0UnVu
bmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2
ZSkKIHsKICAgICBwb2xpY3lEZWxlZ2F0ZUVuYWJsZWQgPSBlbmFibGVkOwogICAgIHBvbGljeURl
bGVnYXRlUGVybWlzc2l2ZSA9IHBlcm1pc3NpdmU7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQ
b2xpY3lEZWxlZ2F0ZSgpCiB7CiAgICAgc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUodHJ1ZSwgZmFs
c2UpOwogICAgIHdhaXRGb3JQb2xpY3kgPSB0cnVlOwogICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0
cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNjcm9sbGJhclBvbGlj
eShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJp
bmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0
cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlu
cykKIHsKICAgICBXZWJDb3JlOjpLVVJMIGt1cmw7CiAgICAga3VybC5zZXRQcm90b2NvbChTdHJp
bmcocHJvdG9jb2wtPmNoYXJhY3RlcnMoKSwgcHJvdG9jb2wtPmxlbmd0aCgpKSk7CkBAIC0yNDUs
NyArMjQ1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZQogICAg
IGV3a19zZWN1cml0eV9wb2xpY3lfd2hpdGVsaXN0X29yaWdpbl9hZGQoc291cmNlT3JpZ2luLT51
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwga3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpbmNs
dWRlU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJp
bmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMp
Cit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3Ry
aW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhv
c3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCiB7CiAgICAgV2ViQ29yZTo6S1VSTCBrdXJsOwog
ICAgIGt1cmwuc2V0UHJvdG9jb2woU3RyaW5nKHByb3RvY29sLT5jaGFyYWN0ZXJzKCksIHByb3Rv
Y29sLT5sZW5ndGgoKSkpOwpAQCAtMjU0LDE3ICsyNTQsMTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVtb3ZlT3JpZ2luQQogICAgIGV3a19zZWN1cml0eV9wb2xpY3lfd2hpdGVsaXN0
X29yaWdpbl9kZWwoc291cmNlT3JpZ2luLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwga3VybC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpbmNsdWRlU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRh
YktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRUYWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmls
aXR5TW9kZShib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmls
aXR5TW9kZShib29sKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0yNzIsMTMgKzI3
MiwxMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hCiBzdGF0aWMg
Q1N0cmluZyBnVXNlclN0eWxlU2hlZXQ7CiBzdGF0aWMgYm9vbCBnVXNlclN0eWxlU2hlZXRFbmFi
bGVkID0gdHJ1ZTsKIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hl
ZXRFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRF
bmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBnVXNlclN0eWxlU2hlZXRFbmFibGVkID0gZmxhZzsK
ICAgICBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoYnJvd3Nlci0+bWFpblZp
ZXcoKSwgZmxhZyA/IGdVc2VyU3R5bGVTaGVldC5kYXRhKCkgOiAwKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBw
YXRoKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmIHBhdGgpCiB7CiAgICAgZ1VzZXJTdHlsZVNoZWV0ID0gcGF0aC0+dXN0cmluZygpLnV0Zjgo
KTsKIApAQCAtMjg2LDEyICsyODYsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VXNlclN0eWxlUwogICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQogewogICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6c2V0VmFsdWVGb3JVc2VyKGNvbnRleHQsIG5vZGVPYmplY3QsIFdURjo6U3Ry
aW5nKHZhbHVlLT51c3RyaW5nKCkuaW1wbCgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit2b2lkIFRl
c3RSdW5uZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmIG1vZGUpCiB7CiAg
ICAgRXZhc19PYmplY3QqIHZpZXcgPSBicm93c2VyLT5tYWluVmlldygpOwogICAgIGlmICghdmll
dykKQEAgLTMwOSwxMiArMzA5LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZp
ZXdNb2RlTWUKICAgICAgICAgZXdrX3ZpZXdfbW9kZV9zZXQodmlldywgRVdLX1ZJRVdfTU9ERV9N
SU5JTUlaRUQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tl
eShib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tleShib29sKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwg
ZmxhZyk7CiB9CkBAIC0zMjIsMTEgKzMyMiwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTbWFydEluc2VyCiBzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVk
KHZvaWQqKQogewogICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IDA7Ci0gICAgZ0xheW91dFRlc3RD
b250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgZ1Rlc3RSdW5u
ZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKICAgICByZXR1cm4gRUNPUkVfQ0FM
TEJBQ0tfQ0FOQ0VMOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9E
dW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFRvRHVtcChi
b29sIHdhaXRVbnRpbERvbmUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lb3V0U2Vj
b25kcyA9IDMwOwogCkBAIC0zMzUsMTE2ICszMzUsMTE2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFdhaXRUb0R1bXAKICAgICAgICAgd2FpdFRvRHVtcFdhdGNoZG9nID0gZWNvcmVf
dGltZXJfYWRkKHRpbWVvdXRTZWNvbmRzLCB3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCwgMCk7CiB9
CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoraW50IFRlc3RSdW5u
ZXI6OndpbmRvd0NvdW50KCkKIHsKICAgICByZXR1cm4gYnJvd3Nlci0+ZXh0cmFWaWV3cygpLnNp
emUoKSArIDE7IC8vICsgMSBmb3IgdGhlIG1haW4gdmlldy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRl
c3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIGV3
a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwg
ZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZykKIHsKICAgICBld2tfdmlld19zZXR0aW5nX3Nj
cmlwdHNfY2FuX2FjY2Vzc19jbGlwYm9hcmRfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChi
b29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxh
ZykKIHsKICAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV94c3NfYXVkaXRvcl9zZXQoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRG
cmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCBmbGFnKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGJvb2wgZmxhZykKIHsKICAgICBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlv
bl9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCit2b2lk
IFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0
eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QsIGJvb2wgYXV0b2ZpbGxlZCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnNldEF1dG9maWxsZWQoY29udGV4dCwgbm9kZU9iamVjdCwgYXV0b2ZpbGxlZCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQor
dm9pZCBUZXN0UnVubmVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKIHsKICAgICBld2tfdmlld19z
ZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVJTkFfRkFM
U0UpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50
YXRpb24oYm9vbCwgZG91YmxlLCBib29sLCBkb3VibGUsIGJvb2wsIGRvdWJsZSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91
YmxlLCBib29sLCBkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNl
T3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzMzUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlLCBkb3VibGUsIGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJv
cihpbnQsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25F
cnJvcihpbnQsIEpTU3RyaW5nUmVmKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdl
b2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFs
bG93KQordm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxv
dykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVz
dHMuCiAgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKIH0KIAotaW50
IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpCitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xv
Y2F0aW9uIGxheW91dCB0ZXN0cy4KICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiwgZG91Ymxl
LCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0
KEpTU3RyaW5nUmVmLCBkb3VibGUsIEpTU3RyaW5nUmVmKQogewogICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXRE
dW1wUmVjdChib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVj
dChib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlv
dXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zOTQ4NS4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCit2
b2lkIFRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVu
dCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRl
c3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzk0ODUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGV3a19zZXR0
aW5nc19pY29uX2RhdGFiYXNlX3BhdGhfc2V0KDApOwogCkBAIC00NjcsMzQgKzQ2NywzNCBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhCiAgICAgICAgIGV3a19zZXR0
aW5nc19pY29uX2RhdGFiYXNlX3BhdGhfc2V0KGRhdGFiYXNlUGF0aC51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChicm93c2VyLT5tYWluVmll
dygpLCBmbGFnKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9j
a2luZ0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5n
RW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9v
cGVuX3dpbmRvd3Nfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksICFmbGFnKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgZXdrX3ZpZXdf
c2V0dGluZ19lbmFibGVfcGx1Z2luc19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7CiB9
CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9y
RWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERv
ZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlkKQogewogICAgIGNv
bnN0IFN0cmluZyBlbGVtZW50SWQoaWQtPnVzdHJpbmcoKS5pbXBsKCkpOwogICAgIGNvbnN0IEV2
YXNfT2JqZWN0KiBtYWluRnJhbWUgPSBicm93c2VyLT5tYWluRnJhbWUoKTsKICAgICByZXR1cm4g
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1l
bnRXaXRoSWQobWFpbkZyYW1lLCBlbGVtZW50SWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdS
ZWYgdmFsdWUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpleGVjdXRlQ29yZUNv
bW1hbmRCeU5hbWUoYnJvd3Nlci0+bWFpblZpZXcoKSwgbmFtZS0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIHZhbHVlLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKLWJvb2wgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5n
UmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQorYm9vbCBUZXN0UnVubmVyOjpm
aW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2Jq
ZWN0UmVmIG9wdGlvbnNBcnJheSkKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVu
Z3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVu
Z3RoIikpOwogICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKQEAg
LTUyOCwxMiArNTI4LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmco
SlMKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGJyb3dz
ZXItPm1haW5WaWV3KCksIFdURjo6U3RyaW5nKHRhcmdldC0+dXN0cmluZygpLmltcGwoKSksIG9w
dGlvbnMpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVk
KEpTU3RyaW5nUmVmIG5hbWUpCitib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNT
dHJpbmdSZWYgbmFtZSkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpp
c0NvbW1hbmRFbmFibGVkKGJyb3dzZXItPm1haW5WaWV3KCksIG5hbWUtPnVzdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2Rl
bChpbnQgY2FjaGVNb2RlbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2Fj
aGVNb2RlbCkKIHsKICAgICB1bnNpZ25lZCBpbnQgY2FjaGVUb3RhbENhcGFjaXR5OwogICAgIHVu
c2lnbmVkIGludCBjYWNoZU1pbkRlYWRDYXBhY2l0eTsKQEAgLTU3NCwxMjQgKzU3NCwxMjQgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbAogICAgIGV3a19zZXR0aW5n
c19wYWdlX2NhY2hlX2NhcGFjaXR5X3NldChwYWdlQ2FjaGVDYXBhY2l0eSk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgp
Cit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVh
ckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNh
dGlvbkNhY2hlcygpCiB7CiAgICAgZXdrX3NldHRpbmdzX2FwcGxpY2F0aW9uX2NhY2hlX2NsZWFy
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7
CiAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gZXdrX2ZyYW1lX3NlY3VyaXR5X29y
aWdpbl9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwogICAgIGV3a19zZWN1cml0eV9vcmlnaW5f
YXBwbGljYXRpb25fY2FjaGVfcXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOwogICAgIGV3a19zZWN1
cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqIHVybCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9wYXF1ZUpTU3Ry
aW5nKiB1cmwpCiB7CiAgICAgRXdrX1NlY3VyaXR5X09yaWdpbiogb3JpZ2luID0gZXdrX3NlY3Vy
aXR5X29yaWdpbl9uZXdfZnJvbV9zdHJpbmcodXJsLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgZXdrX3NlY3VyaXR5X29yaWdpbl9hcHBsaWNhdGlvbl9jYWNoZV9jbGVhcihvcmlnaW4p
OwogICAgIGV3a19zZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOwogfQogCi1sb25nIGxvbmcg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0
cmluZ1JlZikKK2xvbmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JP
cmlnaW4oSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0
IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRSZWYgY29udGV4dCkK
K0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29u
dGV4dFJlZiBjb250ZXh0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdp
bnMgdGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotbG9uZyBs
b25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3Jp
Z2luKEpTU3RyaW5nUmVmKQorbG9uZyBsb25nIFRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVE
aXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxE
YXRhYmFzZXMoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAg
ZXdrX3dlYl9kYXRhYmFzZV9yZW1vdmVfYWxsKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBU
ZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKIHsK
ICAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfZnJhbWVfc2VjdXJpdHlfb3Jp
Z2luX2dldChicm93c2VyLT5tYWluRnJhbWUoKSk7CiAgICAgZXdrX3NlY3VyaXR5X29yaWdpbl93
ZWJfZGF0YWJhc2VfcXVvdGFfc2V0KG9yaWdpbiwgcXVvdGEpOwogICAgIGV3a19zZWN1cml0eV9v
cmlnaW5fZnJlZShvcmlnaW4pOwogfQogCi1KU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVy
OjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK0pTVmFsdWVS
ZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVu
bmVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0
b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6b2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVs
YXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYg
c2NoZW1lKQordm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9y
VVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCiB7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGZvcmJpZGRlbiwgV1RGOjpTdHJpbmcoc2NoZW1lLT51c3RyaW5nKCkuaW1wbCgpKSk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjaygpCit2b2lkIFRlc3RSdW5u
ZXI6OmdvQmFjaygpCiB7CiAgICAgZXdrX2ZyYW1lX2JhY2soYnJvd3Nlci0+bWFpbkZyYW1lKCkp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wg
ZGVmZXJzKQordm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQog
ewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0RGVmZXJzTG9hZGluZyhicm93c2Vy
LT5tYWluVmlldygpLCBkZWZlcnMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQordm9pZCBUZXN0
UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQog
ewogICAgIGV3a19zZXR0aW5nc19hcHBsaWNhdGlvbl9jYWNoZV9tYXhfcXVvdGFfc2V0KHNpemUp
OwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9u
RWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNT
dHJpbmdSZWYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGlt
ZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwg
SlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OnBhdXNlQW5pbWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25OYW1l
LT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgdGltZSk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNp
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJs
ZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRv
dWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VUcmFuc2l0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBw
cm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmco
KS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKIH0KIAotdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVy
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChicm93c2VyLT5tYWluRnJh
bWUoKSk7CiB9CkBAIC03MDYsNyArNzA2LDcgQEAgc3RhdGljIGlubGluZSBpbnQgdG9JbnQoSlNT
dHJpbmdSZWYgdmFsdQogICAgIHJldHVybiBhdG9pKHZhbHVlLT51c3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5j
ZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpv
dmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsK
ICAgICBpZiAoZXF1YWxzKGtleSwgIldlYktpdEphdmFTY3JpcHRFbmFibGVkIikpCiAgICAgICAg
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCks
IHRvQm9vbCh2YWx1ZSkpOwpAQCAtNzM1LDU2ICs3MzUsNTYgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3ZlcnJpZGVQcmVmZQogICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRX
ZWJBdWRpb0VuYWJsZWQiKSkKICAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ193ZWJfYXVkaW9fc2V0
KGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwogICAgIGVsc2UKLSAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNl
IHRyaWVkIHRvIG92ZXJyaWRlIHVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgdmFsdWUtPnVz
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJUZXN0UnVu
bmVyOjpvdmVycmlkZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUgdW5rbm93biBwcmVmZXJl
bmNlICclcycuXG4iLCB2YWx1ZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwg
Ym9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNl
clNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFt
ZXMpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjphZGRVc2VyU2NyaXB0KGJyb3dz
ZXItPm1haW5WaWV3KCksIFN0cmluZyhzb3VyY2UtPnVzdHJpbmcoKS5pbXBsKCkpLCBydW5BdFN0
YXJ0LCBhbGxGcmFtZXMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2Vy
U3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0
UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJh
bWVzKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWRkVXNlclN0eWxlU2hlZXQo
YnJvd3Nlci0+bWFpblZpZXcoKSwgV1RGOjpTdHJpbmcoc291cmNlLT51c3RyaW5nKCkuaW1wbCgp
KSwgYWxsRnJhbWVzKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxv
cGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGVuYWJsZWQp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQordm9pZCBUZXN0UnVu
bmVyOjpzaG93V2ViSW5zcGVjdG9yKCkKIHsKICAgICBld2tfdmlld193ZWJfaW5zcGVjdG9yX3No
b3coYnJvd3Nlci0+bWFpblZpZXcoKSk7CiAgICAgYnJvd3Nlci0+d2FpdEluc3BlY3RvckxvYWRG
aW5pc2hlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3Bl
Y3RvcigpCit2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAgICBld2tf
dmlld193ZWJfaW5zcGVjdG9yX2Nsb3NlKGJyb3dzZXItPm1haW5WaWV3KCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElk
LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYnJvd3Nlci0+bWFpblZpZXco
KSwgY2FsbElkLCBTdHJpbmcoc2NyaXB0LT51c3RyaW5nKCkuaW1wbCgpKSk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25l
ZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGJyb3dzZXItPm1haW5GcmFtZSgpLCB3b3JsZElELCBnbG9iYWxPYmpl
Y3QsIFN0cmluZyhzY3JpcHQtPnVzdHJpbmcoKS5pbXBsKCkpKTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIHsKICAgICBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3
a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwogICAgIGlmICghaGlzdG9y
eSkKQEAgLTc5MywyNyArNzkzLDI3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92
ZUFsbFZpc2kKICAgICBld2tfaGlzdG9yeV9jbGVhcihoaXN0b3J5KTsKIH0KIAotYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK2Jvb2wgVGVzdFJ1
bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoYnJvd3Nlci0+bWFpbkZy
YW1lKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93
RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1bm5l
cjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiwgSlNTdHJpbmdS
ZWYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFi
bGUoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCiB7CiAg
ICAgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChicm93c2VyLT5tYWluRnJhbWUoKSwgRUlOQV9UUlVF
KTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpt
YXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9k
ZU9iamVjdCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCkgY29uc3QKIHsKICAgICBTdHJpbmcgbWFya2VyVGV4dENoYXIgPSBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb250ZXh0LCBub2RlT2JqZWN0KTsK
ICAgICBpZiAobWFya2VyVGV4dENoYXIuaXNFbXB0eSgpKQpAQCAtODIzLDI3ICs4MjMsMjcgQEAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cgogICAgIHJldHVybiBtYXJr
ZXJUZXh0OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNz
aW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5u
ZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmlu
Z1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphYm9ydE1vZGFsKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCgpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
U2VyaWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRT
ZXJpYWxpemVIVFRQTG9hZHMoYm9vbCBzZXJpYWxpemUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmlt
dW1UaW1lckludGVydmFsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZh
bChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgZXdrX3ZpZXdfc2V0dGluZ19t
aW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChicm93c2VyLT5tYWluVmlldygpLCBtaW5pbXVtVGlt
ZXJJbnRlcnZhbCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJl
Y3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGly
ZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKICAgICBFd2tfVGV4dF9EaXJlY3Rpb24g
ZXdrRGlyZWN0aW9uOwogICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGRpcmVj
dGlvbiwgImF1dG8iKSkKQEAgLTg1Myw0MyArODUzLDQzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFRleHREaXJlY3QKICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGRpcmVjdGlvbiwgImx0ciIpKQogICAgICAgICBld2tEaXJlY3Rpb24gPSBFV0tfVEVY
VF9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVDsKICAgICBlbHNlIHsKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbiBjYWxsZWQgd2l0
aCB1bmtub3duIGRpcmVjdGlvbjogJyVzJy5cbiIsIGRpcmVjdGlvbi0+dXN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RSdW5uZXI6OnNldFRleHRE
aXJlY3Rpb24gY2FsbGVkIHdpdGggdW5rbm93biBkaXJlY3Rpb246ICclcycuXG4iLCBkaXJlY3Rp
b24tPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGV3a192aWV3X3RleHRfZGlyZWN0aW9uX3NldChicm93c2VyLT5tYWluVmlldygpLCBld2tE
aXJlY3Rpb24pOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1
dEZpZWxkKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3Zl
Q2hyb21lSW5wdXRGaWVsZCgpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUNocm9tZUlucHV0Rmll
bGQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZvY3VzV2ViVmlldygpCit2b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldygpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2lu
Z1NjYWxlRmFjdG9yKGRvdWJsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhK
U1N0cmluZ1JlZiB0aXRsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZp
Y2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQordm9pZCBUZXN0UnVubmVyOjpyZXNldFBh
Z2VWaXNpYmlsaXR5KCkKIHsKICAgICBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChicm93
c2VyLT5tYWluVmlldygpLCBFV0tfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1ZJU0lCTEUsIHRydWUp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25z
dCBjaGFyKiB2aXNpYmlsaXR5KQordm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShj
b25zdCBjaGFyKiB2aXNpYmlsaXR5KQogewogICAgIFN0cmluZyBuZXdWaXNpYmlsaXR5KHZpc2li
aWxpdHkpOwogICAgIGlmIChuZXdWaXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKQEAgLTkwMiwxMiAr
OTAyLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBhZ2VWaXNpYmkKICAgICAg
ICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdL
X1BBR0VfVklTSUJJTElUWV9TVEFURV9QUkVWSUVXLCBmYWxzZSk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCit2
b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmIHJlc3BvbnNlKQordm9pZCBUZXN0UnVu
bmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYgcmVzcG9uc2UpCiB7CiAgICAg
RXdrX0ludGVudF9SZXF1ZXN0KiByZXF1ZXN0ID0gYnJvd3Nlci0+Y3VycmVudEludGVudFJlcXVl
c3QoKTsKICAgICBpZiAoIXJlcXVlc3QpCkBAIC05MTYsMTIgKzkxNiwxMiBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZW5kV2ViSW50ZW50CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmIGFjdGlv
biwgSlNTdHJpbmdSZWYgdHlwZSwgSlNTdHJpbmdSZWYgZGF0YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiBhY3Rpb24sIEpTU3RyaW5nUmVmIHR5cGUsIEpT
U3RyaW5nUmVmIGRhdGEpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpkZWxpdmVy
V2ViSW50ZW50KGJyb3dzZXItPm1haW5GcmFtZSgpLCBhY3Rpb24sIHR5cGUsIGRhdGEpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2
YWwoZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2
YWwoZG91YmxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAJKHJldmlzaW9uIDEyNTUwOCkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiBzdGF0aWMgaW50
IHVzZVRpbWVvdXRXYXRjaGRvZyA9IDE7CiAKIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBheENv
bnRyb2xsZXIgPSAwOwotUmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0VGVzdENv
bnRyb2xsZXI7CitSZWZQdHI8VGVzdFJ1bm5lcj4gZ1Rlc3RSdW5uZXI7CiBzdGF0aWMgR0NDb250
cm9sbGVyKiBnY0NvbnRyb2xsZXIgPSAwOwogc3RhdGljIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7
CiBzdGF0aWMgR3RrV2lkZ2V0KiB3aW5kb3c7CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBkdW1w
RnJhbWVTY3JvbGxQb3NpdGlvbihXZWJLaXRXZWJGcgogICAgICAgICBwcmludGYoInNjcm9sbGVk
IHRvICVsZCwlbGRcbiIsIHgsIHkpOwogICAgIH0KIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkpIHsKKyAgICBpZiAoZ1Rlc3RS
dW5uZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkpIHsKICAgICAgICAgR1NMaXN0
KiBjaGlsZHJlbiA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0RnJhbWVDaGlsZHJlbihm
cmFtZSk7CiAgICAgICAgIGZvciAoR1NMaXN0KiBjaGlsZCA9IGNoaWxkcmVuOyBjaGlsZDsgY2hp
bGQgPSBnX3NsaXN0X25leHQoY2hpbGQpKQogICAgICAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9z
aXRpb24oc3RhdGljX2Nhc3Q8V2ViS2l0V2ViRnJhbWUqPihjaGlsZC0+ZGF0YSkpOwpAQCAtMjky
LDcgKzI5Miw3IEBAIHN0YXRpYyBnY2hhciogZHVtcEZyYW1lc0FzVGV4dChXZWJLaXRXZWIKICAg
ICAgICAgcmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJcbi0tLS0tLS0tXG5GcmFtZTogJyVzJ1xu
LS0tLS0tLS1cbiVzXG4iLCBmcmFtZU5hbWUsIGlubmVyVGV4dC5kYXRhKCkpOwogICAgIH0KIAot
ICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpKSB7
CisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgewogICAgICAg
ICBHU0xpc3QqIGNoaWxkcmVuID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGcmFtZUNo
aWxkcmVuKGZyYW1lKTsKICAgICAgICAgZm9yIChHU0xpc3QqIGNoaWxkID0gY2hpbGRyZW47IGNo
aWxkOyBjaGlsZCA9IGdfc2xpc3RfbmV4dChjaGlsZCkpIHsKICAgICAgICAgICAgIEdPd25QdHI8
Z2NoYXI+IGNoaWxkRGF0YShkdW1wRnJhbWVzQXNUZXh0KHN0YXRpY19jYXN0PFdlYktpdFdlYkZy
YW1lKj4oY2hpbGQtPmRhdGEpKSk7CkBAIC01NzQsMTIgKzU3NCwxMiBAQCB2b2lkIGR1bXAoKQog
ICAgICAgICBnY2hhciogcmVzcG9uc2VNaW1lVHlwZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3Jl
c3BvbnNlX21pbWVfdHlwZShtYWluRnJhbWUpOwogCiAgICAgICAgIGlmIChnX3N0cl9lcXVhbChy
ZXNwb25zZU1pbWVUeXBlLCAidGV4dC9wbGFpbiIpKSB7Ci0gICAgICAgICAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAgICAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKKyAgICAgICAgICAg
IGdUZXN0UnVubmVyLT5zZXREdW1wQXNUZXh0KHRydWUpOworICAgICAgICAgICAgZ1Rlc3RSdW5u
ZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBn
X2ZyZWUocmVzcG9uc2VNaW1lVHlwZSk7CiAKLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEFzVGV4dCgpKQorICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQo
KSkKICAgICAgICAgICAgIHJlc3VsdCA9IGR1bXBGcmFtZXNBc1RleHQobWFpbkZyYW1lKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBXaWRnZXQgcmVzaXppbmcgaXMgZG9uZSBhc3lu
Y2hyb25vdXNseSBpbiBHVEsrLiBXZSBwdW1wIHRoZSBtYWluCkBAIC01OTYsMTEgKzU5NiwxMSBA
QCB2b2lkIGR1bXAoKQogCiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2U7Ci0gICAgICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wQXNUZXh0KCkpCisgICAgICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc1Rl
eHQoKSkKICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW2RvY3VtZW50RWxlbWVudCBp
bm5lclRleHRdIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcERPTUFzV2ViQXJjaGl2ZSgpKQorICAgICAgICAgICAgZWxzZSBpZiAoZ1Rlc3RSdW5uZXIt
PmR1bXBET01Bc1dlYkFyY2hpdmUoKSkKICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAi
W1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIHdlYkFyY2hpdmVdIjsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQorICAg
ICAgICAgICAgZWxzZSBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkK
ICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0g
d2ViQXJjaGl2ZV0iOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVycm9yTWVz
c2FnZSA9ICJbbWFpbkZyYW1lIHJlbmRlclRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb25dIjsK
QEAgLTYwOCwxMCArNjA4LDEwIEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBwcmludGYoIiVzIiwgcmVzdWx0KTsKICAgICAgICAgICAgIGdfZnJlZShyZXN1bHQp
OwotICAgICAgICAgICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKSAm
JiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQorICAgICAgICAgICAg
aWYgKCFnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpICYmICFnVGVzdFJ1bm5lci0+ZHVtcERPTUFz
V2ViQXJjaGl2ZSgpICYmICFnVGVzdFJ1bm5lci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQog
ICAgICAgICAgICAgICAgIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKG1haW5GcmFtZSk7CiAKLSAg
ICAgICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBCYWNrRm9yd2FyZExpc3Qo
KSkKKyAgICAgICAgICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEJhY2tGb3J3YXJkTGlzdCgpKQog
ICAgICAgICAgICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3RGb3JBbGxXZWJWaWV3cygpOwogICAg
ICAgICB9CiAKQEAgLTYyNCwxMSArNjI0LDExIEBAIHZvaWQgZHVtcCgpCiAgICAgfQogCiAgICAg
aWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAotICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKLSAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCi0gICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgeworICAgICAmJiBnVGVzdFJ1bm5lci0+Z2VuZXJh
dGVQaXhlbFJlc3VsdHMoKQorICAgICAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBET01Bc1dlYkFyY2hp
dmUoKQorICAgICAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgewog
ICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmZvcmNlV2ViVmlld1BhaW50KHdlYlZp
ZXcpOwotICAgICAgICBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmV4cGVjdGVkUGl4ZWxIYXNoKCkpOworICAgICAgICBkdW1w
V2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChnVGVzdFJ1bm5lci0+ZXhwZWN0
ZWRQaXhlbEhhc2goKSk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IGNhbGwgZGlzcGxheVdlYlZp
ZXcgaGVyZSB3aGVuIHdlIHN1cHBvcnQgLS1wYWludApAQCAtNzA2LDIyICs3MDYsMjIgQEAgc3Rh
dGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiAgICAgcmVzZXREZWZhdWx0
c1RvQ29uc2lzdGVudFZhbHVlcygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxI
YXNoKTsKKyAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21t
YW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogICAgIGRv
bmUgPSBmYWxzZTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0SWNvbkRhdGFiYXNl
RW5hYmxlZChmYWxzZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQo
ZmFsc2UpOwogCiAgICAgaWYgKHNob3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyh0ZXN0VVJMKSkK
LSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KHRydWUpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0
cnVlKTsKIAogICAgIGlmIChzaG91bGRFbmFibGVEZXZlbG9wZXJFeHRyYXModGVzdFVSTCkpIHsK
LSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVk
KHRydWUpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0
cnVlKTsKICAgICAgICAgaWYgKHNob3VsZE9wZW5XZWJJbnNwZWN0b3IodGVzdFVSTCkpCi0gICAg
ICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3dXZWJJbnNwZWN0b3IoKTsKKyAgICAg
ICAgICAgIGdUZXN0UnVubmVyLT5zaG93V2ViSW5zcGVjdG9yKCk7CiAgICAgICAgIGlmIChzaG91
bGREdW1wQXNUZXh0KHRlc3RVUkwpKSB7Ci0gICAgICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPnNldEdlbmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKKyAgICAgICAgICAgIGdUZXN0UnVu
bmVyLT5zZXREdW1wQXNUZXh0KHRydWUpOworICAgICAgICAgICAgZ1Rlc3RSdW5uZXItPnNldEdl
bmVyYXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzMxLDgg
KzczMSw4IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICBi
b29sIGlzU1ZHVzNDVGVzdCA9ICh0ZXN0VVJMLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIpICE9IHN0
cmluZzo6bnBvcyk7CiAgICAgR3RrQWxsb2NhdGlvbiBzaXplOwogICAgIHNpemUueCA9IHNpemUu
eSA9IDA7Ci0gICAgc2l6ZS53aWR0aCA9IGlzU1ZHVzNDVGVzdCA/IDQ4MCA6IExheW91dFRlc3RD
b250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgc2l6ZS5oZWlnaHQgPSBpc1NWR1czQ1Rlc3Qg
PyAzNjAgOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodDsKKyAgICBzaXplLndp
ZHRoID0gaXNTVkdXM0NUZXN0ID8gNDgwIDogVGVzdFJ1bm5lcjo6bWF4Vmlld1dpZHRoOworICAg
IHNpemUuaGVpZ2h0ID0gaXNTVkdXM0NUZXN0ID8gMzYwIDogVGVzdFJ1bm5lcjo6bWF4Vmlld0hl
aWdodDsKICAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHNpemUud2lk
dGgsIHNpemUuaGVpZ2h0KTsKICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoY29udGFpbmVy
LCAmc2l6ZSk7CiAKQEAgLTc1MywxMiArNzUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIC8vIElmIGRldmVsb3BlciBleHRyYXMgZW5hYmxlZCBX
ZWIgSW5zcGVjdG9yIG1heSBoYXZlIGJlZW4gb3BlbiBieSB0aGUgdGVzdC4KICAgICBpZiAoc2hv
dWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHRlc3RVUkwpKSB7Ci0gICAgICAgIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+Y2xvc2VXZWJJbnNwZWN0b3IoKTsKLSAgICAgICAgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgZ1Rlc3RS
dW5uZXItPmNsb3NlV2ViSW5zcGVjdG9yKCk7CisgICAgICAgIGdUZXN0UnVubmVyLT5zZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBBbHNvIGNoZWNrIGlm
IHdlIHN0aWxsIGhhdmUgb3BlbmVkIHdlYlZpZXdzIGFuZCBmcmVlIHRoZW0uCi0gICAgaWYgKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkg
fHwgd2ViVmlld0xpc3QpIHsKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmNsb3NlUmVtYWluaW5nV2lu
ZG93c1doZW5Db21wbGV0ZSgpIHx8IHdlYlZpZXdMaXN0KSB7CiAgICAgICAgIHdoaWxlICh3ZWJW
aWV3TGlzdCkgewogICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoV0VCS0lUX1dFQl9WSUVXKHdl
YlZpZXdMaXN0LT5kYXRhKSk7CiAgICAgICAgICAgICB3ZWJWaWV3TGlzdCA9IGdfc2xpc3RfbmV4
dCh3ZWJWaWV3TGlzdCk7CkBAIC03NzIsNyArNzcyLDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChj
b25zdCBzdHJpbmcmIGlucHV0TAogICAgIC8vIEEgYmxhbmsgbG9hZCBzZWVtcyB0byBiZSBuZWNl
c3NhcnkgdG8gcmVzZXQgc3RhdGUgYWZ0ZXIgY2VydGFpbiB0ZXN0cy4KICAgICB3ZWJraXRfd2Vi
X3ZpZXdfb3Blbih3ZWJWaWV3LCAiYWJvdXQ6YmxhbmsiKTsKIAotICAgIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci5jbGVhcigpOworICAgIGdUZXN0UnVubmVyLmNsZWFyKCk7CiAKICAgICAvLyB0ZXJt
aW5hdGUgdGhlIChwb3NzaWJseSBlbXB0eSkgcGl4ZWxzIGJsb2NrIGFmdGVyIGFsbCB0aGUgc3Rh
dGUgcmVzZXQKICAgICBzZW5kUGl4ZWxSZXN1bHRzRU9GKCk7CkBAIC03ODksNyArNzg5LDcgQEAg
dm9pZCB3ZWJWaWV3TG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyogdgogc3RhdGljIGdib29sZWFu
IHByb2Nlc3NXb3JrKHZvaWQqIGRhdGEpCiB7CiAgICAgLy8gaWYgd2UgZmluaXNoIGFsbCB0aGUg
Y29tbWFuZHMsIHdlJ3JlIHJlYWR5IHRvIGR1bXAgc3RhdGUKLSAgICBpZiAoV29ya1F1ZXVlOjpz
aGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9E
dW1wKCkpCisgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nlc3NXb3JrKCkgJiYgIWdU
ZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIGR1bXAoKTsKIAogICAgIHJldHVybiBG
QUxTRTsKQEAgLTgyNyw3ICs4MjcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3TG9hZEZpbmlzaGVk
KFdlYktpdFdlCiAgICAgLy8gc28gd2UgY2FuIHVzZSBpdCBoZXJlIGluIHRoZSBEUlQgdG8gcHJv
dmlkZSB0aGUgY29ycmVjdCBkdW1wLgogICAgIGlmIChmcmFtZSAhPSB0b3BMb2FkaW5nRnJhbWUp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wUHJvZ3Jl
c3NGaW5pc2hlZENhbGxiYWNrKCkpCiAgICAgICAgIHByaW50ZigicG9zdFByb2dyZXNzRmluaXNo
ZWROb3RpZmljYXRpb25cbiIpOwogfQogCkBAIC04MzgsNyArODM4LDcgQEAgc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdMb2FkRXJyb3IoV2ViS2l0VwogCiBzdGF0aWMgdm9pZCB3ZWJWaWV3RG9jdW1l
bnRMb2FkRmluaXNoZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1l
LCB2b2lkKikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBjaGFyKiBmcmFtZU5hbWUgPSBnZXRG
cmFtZU5hbWVTdWl0YWJsZUZvclRlc3RSZXN1bHQodmlldywgZnJhbWUpOwogICAgICAgICBwcmlu
dGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIsIGZyYW1lTmFtZSk7CiAg
ICAgICAgIGdfZnJlZShmcmFtZU5hbWUpOwpAQCAtODU0LDcgKzg1NCw3IEBAIHN0YXRpYyB2b2lk
IHdlYlZpZXdEb2N1bWVudExvYWRGaW5pc2hlZCgKIAogc3RhdGljIHZvaWQgd2ViVmlld09ubG9h
ZEV2ZW50KFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgdm9pZCop
CiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgY2hhciogZnJhbWVOYW1lID0gZ2V0RnJhbWVOYW1l
U3VpdGFibGVGb3JUZXN0UmVzdWx0KHZpZXcsIGZyYW1lKTsKICAgICAgICAgcHJpbnRmKCIlcyAt
IGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lXG4iLCBmcmFtZU5hbWUpOwogICAgICAgICBn
X2ZyZWUoZnJhbWVOYW1lKTsKQEAgLTg3MSw5ICs4NzEsOSBAQCBzdGF0aWMgdm9pZCBhZGRDb250
cm9sbGVyVG9XaW5kb3coSlNDb250CiBzdGF0aWMgdm9pZCB3ZWJWaWV3V2luZG93T2JqZWN0Q2xl
YXJlZChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIGdwb2ludGVyIGRh
dGEpCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEFTU0VSVChnTGF5b3V0
VGVzdENvbnRyb2xsZXIpOworICAgIEFTU0VSVChnVGVzdFJ1bm5lcik7CiAKLSAgICBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKKyAgICBnVGVzdFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3
aW5kb3dPYmplY3QsICZleGNlcHRpb24pOwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKIAogICAg
IGdjQ29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZl
eGNlcHRpb24pOwpAQCAtOTQwLDcgKzk0MCw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3U2Ny
aXB0Q29uZmlybShXZWIKIAogc3RhdGljIHZvaWQgd2ViVmlld1RpdGxlQ2hhbmdlZChXZWJLaXRX
ZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiB0aXRsZSwg
Z3BvaW50ZXIgZGF0YSkKIHsKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVGl0
bGVDaGFuZ2VzKCkgJiYgIWRvbmUpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFu
Z2VzKCkgJiYgIWRvbmUpCiAgICAgICAgIHByaW50ZigiVElUTEUgQ0hBTkdFRDogJXNcbiIsIHRp
dGxlID8gdGl0bGUgOiAiIik7CiB9CiAKQEAgLTk1MCw3ICs5NTAsNyBAQCBzdGF0aWMgYm9vbCB3
ZWJWaWV3TmF2aWdhdGlvblBvbGljeURlY2lzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBwb2xpY3lE
ZWNpc2lvbikKIHsKICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgaGFuZGxlciBpZiB3ZSdyZSBub3Qg
d2FpdGluZyBmb3IgcG9saWN5LAotICAgIC8vIGkuZS4sIExheW91dFRlc3RDb250cm9sbGVyOjp3
YWl0Rm9yUG9saWN5RGVsZWdhdGUKKyAgICAvLyBpLmUuLCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9s
aWN5RGVsZWdhdGUKICAgICBpZiAoIXdhaXRGb3JQb2xpY3kpCiAgICAgICAgIHJldHVybiBGQUxT
RTsKIApAQCAtOTg1LDcgKzk4NSw3IEBAIHN0YXRpYyBib29sIHdlYlZpZXdOYXZpZ2F0aW9uUG9s
aWN5RGVjaXMKICAgICBnX2ZyZWUodHlwZURlc2NyaXB0aW9uKTsKIAogICAgIHdlYmtpdF93ZWJf
cG9saWN5X2RlY2lzaW9uX2lnbm9yZShwb2xpY3lEZWNpc2lvbik7Ci0gICAgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5ub3RpZnlEb25lKCk7CisgICAgZ1Rlc3RSdW5uZXItPm5vdGlmeURvbmUoKTsK
IAogICAgIHJldHVybiBUUlVFOwogfQpAQCAtOTk0LDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lkIHdl
YlZpZXdTdGF0dXNCYXJUZXh0Q2hhbmdlZCgKIHsKICAgICAvLyBBcmUgd2UgZG9pbmcgYW55dGhp
bmcgd3Jvbmc/IE9uZSB0ZXN0IHRoYXQgZG9lcyBub3QgY2FsbAogICAgIC8vIGR1bXBTdGF0dXND
YWxsYmFja3MgZ2V0cyB0cnVlIGhlcmUKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
dW1wU3RhdHVzQ2FsbGJhY2tzKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wU3RhdHVzQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBz
ZXRTdGF0dXNUZXh0OiVzXG4iLCBtZXNzYWdlKTsKIH0KIApAQCAtMTAxNSw3ICsxMDE1LDcgQEAg
c3RhdGljIHZvaWQgZGF0YWJhc2VRdW90YUV4Y2VlZGVkKFdlYktpdAogICAgIEFTU0VSVChkYXRh
YmFzZSk7CiAKICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3dlYl9k
YXRhYmFzZV9nZXRfc2VjdXJpdHlfb3JpZ2luKGRhdGFiYXNlKTsKLSAgICBpZiAoZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgeworICAgIGlmIChnVGVzdFJ1
bm5lci0+ZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgcHJpbnRmKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46eyVzLCAlcywgJWl9IGRhdGFiYXNlOiVzXG4iLAogICAgICAgICAgICAgd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wob3JpZ2luKSwKICAgICAgICAgICAgIHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSwKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHN0
YXRpYyB2b2lkIGRhdGFiYXNlUXVvdGFFeGNlZWRlZChXZWJLaXQKIHN0YXRpYyBib29sCiBnZW9s
b2NhdGlvblBvbGljeURlY2lzaW9uUmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRXZWJG
cmFtZSosIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQogewotICAg
IGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgp
KQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpCiAg
ICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW9s
b2NhdGlvblBlcm1pc3Npb24oKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmdlb2xvY2F0aW9uUGVy
bWlzc2lvbigpKQogICAgICAgICB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2FsbG93KGRlY2lz
aW9uKTsKICAgICBlbHNlCiAgICAgICAgIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVueShk
ZWNpc2lvbik7CkBAIC0xMDcwLDcgKzEwNzAsNyBAQCBzdGF0aWMgdm9pZCB0b3BMb2FkaW5nRnJh
bWVMb2FkRmluaXNoZWQoCiB7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAgICBXb3JrUXVl
dWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRlIGxvYWQgZnJl
ZXplcyB0aGUgcXVldWUgZm9yIHRoZSByZXN0IG9mIHRoaXMgdGVzdAotICAgIGlmIChnTGF5b3V0
VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPndhaXRU
b0R1bXAoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCkt
PmNvdW50KCkpCkBAIC0xMDgzLDcgKzEwODMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJGcmFtZUxvYWRT
dGF0dXNOb3RpZmllZChXCiB7CiAgICAgV2ViS2l0TG9hZFN0YXR1cyBsb2FkU3RhdHVzID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfbG9hZF9zdGF0dXMoZnJhbWUpOwogCi0gICAgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKGdUZXN0
UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgR093blB0cjxjaGFy
PiBmcmFtZU5hbWUoZ2V0RnJhbWVOYW1lU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KGZyYW1lKSwgZnJhbWUpKTsKIAogICAgICAgICBzd2l0Y2ggKGxv
YWRTdGF0dXMpIHsKQEAgLTEyNDksMTMgKzEyNDksMTMgQEAgc3RhdGljIHZvaWQgd2lsbFNlbmRS
ZXF1ZXN0Q2FsbGJhY2soV2ViSwogewogCiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKSB7Ci0gICAgICAgIC8vIEFz
IHJlcXVlc3RlZCBieSB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXIsIGRvbid0IHBlcmZvcm0gdGhl
IHJlcXVlc3QuCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbCgpKSB7CisgICAgICAgIC8vIEFzIHJlcXVlc3RlZCBieSB0aGUgVGVzdFJ1bm5l
ciwgZG9uJ3QgcGVyZm9ybSB0aGUgcmVxdWVzdC4KICAgICAgICAgd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9zZXRfdXJpKHJlcXVlc3QsICJhYm91dDpibGFuayIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gd2lsbFNlbmRSZXF1
ZXN0ICVzIHJlZGlyZWN0UmVzcG9uc2UgJXNcbiIsCiAgICAgICAgICAgICAgICBjb252ZXJ0TmV0
d29ya1JlcXVlc3RUb1VSTFBhdGgocmVxdWVzdCkuZGF0YSgpLAogICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCkuZGF0YSgpLApAQCAtMTI3OSw3
ICsxMjc5LDcgQEAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0Q2FsbGJhY2soV2ViSwogICAg
ICAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CiAKICAgICBpZiAoc291cE1lc3NhZ2UpIHsKLSAgICAg
ICAgY29uc3Qgc2V0PHN0cmluZz4mIGNsZWFySGVhZGVycyA9IGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+d2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKCk7CisgICAgICAgIGNvbnN0IHNldDxzdHJp
bmc+JiBjbGVhckhlYWRlcnMgPSBnVGVzdFJ1bm5lci0+d2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFk
ZXJzKCk7CiAgICAgICAgIGZvciAoc2V0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGhlYWRlciA9
IGNsZWFySGVhZGVycy5iZWdpbigpOyBoZWFkZXIgIT0gY2xlYXJIZWFkZXJzLmVuZCgpOyArK2hl
YWRlcikKICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92ZShzb3VwTWVzc2Fn
ZS0+cmVxdWVzdF9oZWFkZXJzLCBoZWFkZXItPmNfc3RyKCkpOwogICAgIH0KQEAgLTEyODgsNyAr
MTI4OCw3IEBAIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKFdlYksKIAogc3Rh
dGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dFdlYkZyYW1lKiwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlLCBXZWJLaXROZXR3b3Jr
UmVzcG9uc2UqIHJlc3BvbnNlKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBn
VGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIENTdHJp
bmcgcmVzcG9uc2VEZXNjcmlwdGlvbihkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChy
ZXNwb25zZSkpOwogICAgICAgICBDU3RyaW5nIHBhdGgoY29udmVydFdlYlJlc291cmNlVG9VUkxQ
YXRoKHdlYlJlc291cmNlKSk7CiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlUmVzcG9u
c2UgJXNcbiIsIHBhdGguZGF0YSgpLCByZXNwb25zZURlc2NyaXB0aW9uLmRhdGEoKSk7CkBAIC0x
MzAwLDEzICsxMzAwLDEzIEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJLaXRX
ZWIKIAogc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJj
ZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hMb2Fk
aW5nXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3ZWJWaWV3LCB3ZWJGcmFt
ZSwgd2ViUmVzb3VyY2UpLmRhdGEoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2FkaW5n
V2l0aEVycm9yKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFt
ZSwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlLCBHRXJyb3IqIHdlYkVycm9yKQogewot
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNl
TG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIENTdHJpbmcgd2ViRXJyb3JTdHJpbmcoZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQod2ViRXJyb3IsIHdlYlJlc291cmNlKSk7CiAgICAg
ICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogJXNcbiIsIGRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdlYlZpZXcsIHdlYkZyYW1lLCB3ZWJSZXNvdXJjZSku
ZGF0YSgpLAogICAgICAgICAgICAgICAgd2ViRXJyb3JTdHJpbmcuZGF0YSgpKTsKQEAgLTEzMTUs
NyArMTMxNSw3IEBAIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yKFdlYksKIAog
c3RhdGljIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFdlYktpdFdlYkZyYW1lKiwgV2ViS2l0
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBjaGFyKiB1cmwpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBw
cmludGYoImRpZFJ1bkluc2VjdXJlQ29udGVudFxuIik7CiB9CiAKQEAgLTEzODYsMTEgKzEzODYs
MTEgQEAgc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZVdlYlZpZXcoKQogCiBzdGF0aWMgV2Vi
S2l0V2ViVmlldyogd2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJG
cmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNhbk9wZW5X
aW5kb3dzKCkpCisgICAgaWYgKCFnVGVzdFJ1bm5lci0+Y2FuT3BlbldpbmRvd3MoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3YWl0VW50aWxEb25lIGhhcyBi
ZWVuIGNhbGxlZC4KLSAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1w
KCkpOworICAgIEFTU0VSVChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKTsKIAogICAgIFdlYktp
dFdlYlZpZXcqIG5ld1dlYlZpZXcgPSBjcmVhdGVXZWJWaWV3KCk7CiAgICAgZ19vYmplY3RfcmVm
X3NpbmsoR19PQkpFQ1QobmV3V2ViVmlldykpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0VkaXRpbmdDYWxsYmFja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0VkaXRpbmdDYWxsYmFja3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSwyMSArOTksMjEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGlvbkFmZmluaXR5U3Ry
aQogCiBnYm9vbGVhbiBzaG91bGRCZWdpbkVkaXRpbmcoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0RE9NUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0
UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5nZShy
YW5nZSkuZGF0YSgpKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAogZ2Jvb2xlYW4gc2hvdWxkRW5k
RWRpdGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRET01SYW5nZSogcmFuZ2UpCiB7
Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGlu
Z0luRE9NUmFuZ2U6JXNcbiIsIGR1bXBSYW5nZShyYW5nZSkuZGF0YSgpKTsKICAgICByZXR1cm4g
VFJVRTsKIH0KIAogZ2Jvb2xlYW4gc2hvdWxkSW5zZXJ0Tm9kZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRET01Ob2RlKiBub2RlLCBXZWJLaXRET01SYW5nZSogcmFuZ2UsIFdlYktpdElu
c2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBwcmludGYoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5B
Y3Rpb246JXNcbiIsCiAgICAgICAgICAgICAgICBkdW1wTm9kZVBhdGgobm9kZSkuZGF0YSgpLCBk
dW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3RyaW5nKGFjdGlvbikpOwogICAg
IH0KQEAgLTEyMiw3ICsxMjIsNyBAQCBnYm9vbGVhbiBzaG91bGRJbnNlcnROb2RlKFdlYktpdFdl
YlZpZXcqCiAKIGdib29sZWFuIHNob3VsZEluc2VydFRleHQoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgY29uc3QgZ2NoYXIqIHRleHQsIFdlYktpdERPTVJhbmdlKiByYW5nZSwgV2ViS2l0SW5zZXJ0
QWN0aW9uIGFjdGlvbikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVy
LT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxF
R0FURTogc2hvdWxkSW5zZXJ0VGV4dDolcyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlv
bjolc1xuIiwKICAgICAgICAgICAgICAgIHRleHQsIGR1bXBSYW5nZShyYW5nZSkuZGF0YSgpLCBp
bnNlcnRBY3Rpb25TdHJpbmcoYWN0aW9uKSk7CiAgICAgfQpAQCAtMTMxLDcgKzEzMSw3IEBAIGdi
b29sZWFuIHNob3VsZEluc2VydFRleHQoV2ViS2l0V2ViVmlldyoKIAogZ2Jvb2xlYW4gc2hvdWxk
RGVsZXRlUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RE9NUmFuZ2UqIHJhbmdl
KQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0
ZURPTVJhbmdlOiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFRS
VUU7CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgZ2Jvb2xlYW4gc2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZUZvckVsZQogCiBnYm9vbGVhbiBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdERPTVJhbmdlKiBmcm9tUmFuZ2UsIFdlYktpdERPTVJhbmdl
KiB0b1JhbmdlLCBXZWJLaXRTZWxlY3Rpb25BZmZpbml0eSBhZmZpbml0eSwgZ2Jvb2xlYW4gc3Rp
bGxTZWxlY3RpbmcpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6JXMgdG9ET01SYW5nZTolcyBhZmZpbml0
eTolcyBzdGlsbFNlbGVjdGluZzolc1xuIiwKICAgICAgICAgICAgICAgIGR1bXBSYW5nZShmcm9t
UmFuZ2UpLmRhdGEoKSwgZHVtcFJhbmdlKHRvUmFuZ2UpLmRhdGEoKSwgc2VsZWN0aW9uQWZmaW5p
dHlTdHJpbmcoYWZmaW5pdHkpLAogICAgICAgICAgICAgICAgc3RpbGxTZWxlY3RpbmcgPyAiVFJV
RSIgOiAiRkFMU0UiKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBnYm9vbGVhbiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdlYktpCiAKIGdib29sZWFuIHNob3VsZEFwcGx5U3R5bGUoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFdlYktp
dERPTVJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0
eWxlVGV4dCh3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfY3NzX3RleHQoc3R5
bGUpKTsKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRBcHBseVN0eWxl
OiVzIHRvRWxlbWVudHNJbkRPTVJhbmdlOiVzXG4iLAogICAgICAgICAgICAgICAgc3R5bGVUZXh0
LmdldCgpLCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSk7CkBAIC0xNjQsMjUgKzE2NCwyNSBAQCBn
Ym9vbGVhbiBzaG91bGRBcHBseVN0eWxlKFdlYktpdFdlYlZpZXcqCiAKIHZvaWQgZWRpdGluZ0Jl
Z2FuKFdlYktpdFdlYlZpZXcqKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlm
aWNhdGlvblxuIik7CiB9CiAKIHZvaWQgdXNlckNoYW5nZWRDb250ZW50cyhXZWJLaXRXZWJWaWV3
KikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb25cbiIpOwogfQogCiB2b2lkIGVkaXRp
bmdFbmRlZChXZWJLaXRXZWJWaWV3KikKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVz
dFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzpXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlm
aWNhdGlvblxuIik7CiB9CiAKIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChXZWJLaXRXZWJWaWV3KikK
IHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb25cbiIpOwog
fQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCShy
ZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE3ICs1MywxNyBAQCBleHRlcm4gIkMiIHsKIHZv
aWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0V2ViSW5zcGVjdG9y
KiBpbnNwZWN0b3IsIGxvbmcgY2FsbElkLCBjb25zdCBnY2hhciogc2NyaXB0KTsKIH0KIAotTGF5
b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCitUZXN0UnVubmVyOjp+
VGVzdFJ1bm5lcigpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJh
Y2tGb3J3YXJkTGlzdCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkK
IHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKICAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwpAQCAtODAsNjMg
KzgwLDYzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcncKICAgICBn
X29iamVjdF91bnJlZihpdGVtKTsKIH0KIAotSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRl
c3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitK
U1N0cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5h
bWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQordm9p
ZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkK
IHsKICAgICBkaXNwbGF5V2ViVmlldygpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjprZWVwV2ViSGlzdG9yeSgpCit2b2lkIFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KCkKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6Y29tcHV0ZWRT
dHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlKQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVk
U3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhjb250ZXh0LCB2YWx1ZSk7CiB9CiAKLUpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkg
Y29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpsYXllclRyZWVBc1Rl
eHQoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
IikpOwogICAgIHJldHVybiBzdHJpbmc7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCitpbnQgVGVz
dFJ1bm5lcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQp
CiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQYWdlc0Zv
ckZyYW1lKG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKIH0KIAotSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3Qg
Y2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gcHJvcGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYWdlUHJvcGVydHkobWFpbkZyYW1lLCBwcm9wZXJ0eU5h
bWUsIHBhZ2VOdW1iZXIpLmRhdGEoKSkpOwogICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlOwogfQog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1h
cmdpbkxlZnQpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFn
ZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBp
bnQgbWFyZ2luTGVmdCkgY29uc3QKIHsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJv
cGVydHlWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhtYWluRnJhbWUsIHBh
Z2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJv
dHRvbSwgbWFyZ2luTGVmdCkuZGF0YSgpKSk7CiAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7CiB9
CiAKLXNpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitz
aXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiB7CiAgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7
CiAgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKQEAgLTE1MCwxOCArMTUwLDE4IEBAIHNpemVf
dCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUkKICAgICAgICAgICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKGxpc3QpOwogfQogCi11bnNp
Z25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAordW5z
aWduZWQgVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAogewogICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OndvcmtlclRocmVhZENvdW50KCk7CiB9CiAKLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1l
KCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwbGF0Zm9ybU5h
bWUoKSBjb25zdAogewogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUo
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJndGsiKSk7CiAgICAgcmV0dXJu
IHBsYXRmb3JtTmFtZTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9u
ZSgpCit2b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIGlmIChtX3dhaXRUb0R1
bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkK
ICAgICAgICAgZHVtcCgpOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om5vdGlmeURvbmUoKQogICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKIH0KIAotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6
OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVy
bCkKIHsKICAgICBHT3duUHRyPGNoYXI+IHVybENTdHJpbmcoSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcodXJsKSk7CiAgICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4KHVybENTdHJpbmcuZ2V0KCksICJm
aWxlOi8vL3RtcC9MYXlvdXRUZXN0cy8iKSkKQEAgLTE4MSw3ICsxODEsNyBAQCBKU1N0cmluZ1Jl
ZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvCiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHRlc3RVUkkuZ2V0KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit2
b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRh
cmdldCkKIHsKICAgICBnY2hhciogcmVsYXRpdmVVUkwgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmlu
Zyh1cmwpOwogICAgIFNvdXBVUkkqIGJhc2VVUkkgPSBzb3VwX3VyaV9uZXcod2Via2l0X3dlYl9m
cmFtZV9nZXRfdXJpKG1haW5GcmFtZSkpOwpAQCAtMjAzLDEzICsyMDMsMTMgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkKEpTUwogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCkt
PnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0Vk
aXRpbmcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0Vk
aXRpbmcpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgd2Via2l0X3dlYl92aWV3X3NldF9lZGl0YWJs
ZSh3ZWJWaWV3LCBhY2NlcHRzRWRpdGluZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29v
a2llcykKIHsKICAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9z
ZXNzaW9uKCk7CiAgICAgU291cENvb2tpZUphciogamFyID0gcmVpbnRlcnByZXRfY2FzdDxTb3Vw
Q29va2llSmFyKj4oc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9D
T09LSUVfSkFSKSk7CkBAIC0yMzMsMjMgKzIzMywyMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBbHdheXNBY2NlCiAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKGphciksIFNPVVBf
Q09PS0lFX0pBUl9BQ0NFUFRfUE9MSUNZLCBwb2xpY3ksIE5VTEwpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRl
LCBib29sIHBlcm1pc3NpdmUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVn
YXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSkKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lE
ZWxlZ2F0ZSgpCit2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB7CiAg
ICAgd2FpdEZvclBvbGljeSA9IHRydWU7CiAgICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVm
IG9yaWVudGF0aW9uLCBKU1N0cmluZ1JlZiBwb2xpY3kpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNj
cm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYgcG9saWN5
KQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3Jp
Z2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRl
U3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJp
bmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKIHsKICAgICBnY2hhciogc291cmNl
T3JpZ2luR0NoYXIgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzb3VyY2VPcmlnaW4pOwogICAg
IGdjaGFyKiBwcm90b2NvbEdDaGFyID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcocHJvdG9jb2wp
OwpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdp
bkFjY2UKICAgICBnX2ZyZWUoaG9zdEdDaGFyKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNl
T3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNs
dWRlU3ViZG9tYWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwg
SlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKIHsKICAgICBHT3duUHRy
PGdjaGFyPiBzb3VyY2VPcmlnaW5HQ2hhcihKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhzb3VyY2VP
cmlnaW4pKTsKICAgICBHT3duUHRyPGdjaGFyPiBwcm90b2NvbEdDaGFyKEpTU3RyaW5nQ29weVVU
RjhDU3RyaW5nKHByb3RvY29sKSk7CkBAIC0yNjgsMTkgKzI2OCwxOSBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpyZW1vdmVXaGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbkdDaGFyLmdldCgp
LCBwcm90b2NvbEdDaGFyLmdldCgpLCBob3N0R0NoYXIuZ2V0KCksIGluY2x1ZGVTdWJkb21haW5z
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJl
c3BvbmRlcihib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RS
ZXNwb25kZXIoYm9vbCBmbGFnKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJv
b2wgY3ljbGVzKQordm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoYm9vbCBjeWNsZXMpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgV2ViS2l0V2ViU2V0dGluZ3Mq
IHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKICAgICBn
X29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAidGFiLWtleS1jeWNsZXMtdGhyb3VnaC1l
bGVtZW50cyIsIGN5Y2xlcywgTlVMTCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hCiBzdGF0aWMgZ2NoYXIqIHVzZXJTdHlsZVNoZWV0
ID0gTlVMTDsKIHN0YXRpYyBnYm9vbGVhbiB1c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBUUlVFOwog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9v
bCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBm
bGFnKQogewogICAgIHVzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7CiAKQEAgLTMwMCw3ICsz
MDAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTCiAgICAgICAg
IGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwg
IiIsIE5VTEwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsKICAgICBnX2ZyZWUodXNlclN0
eWxlU2hlZXQpOwogICAgIHVzZXJTdHlsZVNoZWV0ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmco
cGF0aCk7CkBAIC0zMDgsMTIgKzMwOCwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRVc2VyU3R5bGVTCiAgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgbm9kZU9iamVjdCwgdmFsdWUp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVy
ZShKU1N0cmluZ1JlZiBtb2RlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3TW9kZU1lZGlhRmVh
dHVyZShKU1N0cmluZ1JlZiBtb2RlKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VSVCh2aWV3KTsK
QEAgLTMzNCwxMiArMzM0LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdN
b2RlTWUKICAgICBnX2ZyZWUodmlld01vZGUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KQordm9pZCBUZXN0UnVubmVyOjpz
ZXRXaW5kb3dJc0tleShib29sIHdpbmRvd0lzS2V5KQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCh3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpLCBmbGFnKTsKIH0KQEAgLTM0NywxMSArMzQ3LDExIEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNtYXJ0SW5zZXIKIHN0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1wV2F0Y2hk
b2dGaXJlZCh2b2lkKikKIHsKICAgICBzZXRXYWl0VG9EdW1wV2F0Y2hkb2coMCk7Ci0gICAgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAg
Z1Rlc3RSdW5uZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9v
bCB3YWl0VW50aWxEb25lKQordm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2Fp
dFVudGlsRG9uZSkKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVvdXRTZWNvbmRzID0gMzA7
CiAKQEAgLTM2MCwxMyArMzYwLDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdh
aXRUb0R1bXAKICAgICAgICAgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKGdfdGltZW91dF9hZGRfc2Vj
b25kcyh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDApKTsKIH0KIAot
aW50IExheW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCitpbnQgVGVzdFJ1bm5lcjo6
d2luZG93Q291bnQoKQogewogICAgIC8vICsxIC0+IGluY2x1ZGluZyB0aGUgbWFpbiB2aWV3CiAg
ICAgcmV0dXJuIGdfc2xpc3RfbGVuZ3RoKHdlYlZpZXdMaXN0KSArIDE7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBmbGFnKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKICAgICBBU1NFUlQodmlldyk7CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJybwogICAgIGdfb2JqZWN0X3NldChHX09C
SkVDVChzZXR0aW5ncyksICJlbmFibGUtcHJpdmF0ZS1icm93c2luZyIsIGZsYWcsIE5VTEwpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZChib29sIGZsYWcpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgQVNTRVJUKHZpZXcpOwpA
QCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHQKICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiamF2YXNjcmlwdC1jYW4t
YWNjZXNzLWNsaXBib2FyZCIsIGZsYWcsIE5VTEwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6
OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBBU1NF
UlQodmlldyk7CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0WFNTQXVkaXRvcgogICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFi
bGUteHNzLWF1ZGl0b3IiLCBmbGFnLCBOVUxMKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIFdlYktpdFdl
YlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwog
ICAgIEFTU0VSVCh2aWV3KTsKQEAgLTQwMiw3ICs0MDIsNyBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRGcmFtZUZsYXR0CiAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdz
KSwgImVuYWJsZS1mcmFtZS1mbGF0dGVuaW5nIiwgZmxhZywgTlVMTCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7CiAgICAgQVNTRVJUKHZpZXcpOwpAQCAtNDExLDcgKzQxMSw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXYKICAgICBnX29iamVjdF9zZXQo
R19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXNwYXRpYWwtbmF2aWdhdGlvbiIsIGZsYWcsIE5V
TEwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFj
Y2Vzc0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxhZykKIHsKICAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBB
U1NFUlQodmlldyk7CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QWxsb3dVbml2ZQogICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJl
bmFibGUtdW5pdmVyc2FsLWFjY2Vzcy1mcm9tLWZpbGUtdXJpcyIsIGZsYWcsIE5VTEwpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoYm9vbCBmbGFnKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VSVCh2aWV3KTsKQEAgLTQy
OSwxNyArNDI5LDE3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUEK
ICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLWZpbGUtYWNjZXNz
LWZyb20tZmlsZS11cmlzIiwgZmxhZywgTlVMTCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBi
b29sIGlzQXV0b2ZpbGxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGlzQXV0b2ZpbGxlZCkK
IHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEF1dG9maWxsZWQoY29udGV4dCwg
bm9kZU9iamVjdCwgaXNBdXRvZmlsbGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxv
YWRpbmcoKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VSVCh2aWV3KTsKQEAgLTQ0OCwxMyArNDQ4
LDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUwKICAgICBnX29i
amVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLCBO
VUxMKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVu
dGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlk
ZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRl
QWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJv
b2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgRGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzMzUuCiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQordm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VC
S0lUX1dFQl9WSUVXKGdfc2xpc3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKICAgICBpZiAo
IXZpZXcpCkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TW9ja0dlb2xvYwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24odmlldywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29k
ZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0
aW9uRXJyb3IoaW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCiB7CiAgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRhKHdlYlZpZXdMaXN0
LCAwKSk7CiAgICAgaWYgKCF2aWV3KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKHZpZXcsIGNvZGUsIGNNZXNzYWdlLmdldCgpKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2wgYWxsb3cpCit2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29s
IGFsbG93KQogewogICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CiAg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3NsaXN0X250aF9kYXRh
KHdlYlZpZXdMaXN0LCAwKSk7CkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0R2VvbG9jYXRpbwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0
TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbih2aWV3LCBhbGxvdyk7CiB9CiAKLWludCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMoKQoraW50IFRlc3RSdW5uZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBpZiAoIXZpZXcpCkBAIC00OTYsMjUgKzQ5
NiwyNSBAQCBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluCiAgICAgcmV0
dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHModmlldyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25m
aWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1Nw
ZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpT
U3RyaW5nUmVmIGxhbmd1YWdlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVj
aCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1l
bnQpCit2b2lkIFRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0
RWxlbWVudCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5
b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRh
YmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CiAgICAgaWYgKGVuYWJsZWQpIHsKQEAg
LTUyNCwxMiArNTI0LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRh
YmEKICAgICAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIDApOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdX
aGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGZsYWcpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKICAgICBBU1NFUlQodmlldyk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9jawogCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZp
ZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwogICAgIEFTU0VS
VCh2aWV3KTsKQEAgLTU0OCwxMiArNTQ4LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBsdWdpbnNFbmEKICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5h
YmxlLXBsdWdpbnMiLCBmbGFnLCBOVUxMKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlk
KSAKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGlkKSAKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQobWFpbkZyYW1lLCBp
ZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5n
UmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFu
ZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAg
ICBBU1NFUlQodmlldyk7CkBAIC01NjUsNyArNTY1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXhlY0NvbW1hbmQoSgogICAgIGdfZnJlZShjVmFsdWUpOwogfQogCi1ib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKK2Jvb2wgVGVzdFJ1bm5lcjo6
ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09i
amVjdFJlZiBvcHRpb25zQXJyYXkpCiB7CiAgICAgV2ViS2l0RmluZE9wdGlvbnMgZmluZE9wdGlv
bnMgPSAwOwogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwpAQCAtNjAzLDcgKzYwMyw3IEBAIGJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlMKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpmaW5kU3RyaW5nKHdlYlZpZXcsIHRhcmdldFN0cmluZy5nZXQoKSwgZmluZE9wdGlv
bnMpOyAKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChK
U1N0cmluZ1JlZiBuYW1lKQorYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3Ry
aW5nUmVmIG5hbWUpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgQVNTRVJUKHZpZXcpOwpAQCAtNjE0LDcg
KzYxNCw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWIKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNoZU1v
ZGVsKGludCBjYWNoZU1vZGVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRDYWNoZU1vZGVsKGludCBj
YWNoZU1vZGVsKQogewogICAgIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRo
ZSBNYWMgY2FjaGUgbW9kZWwgZW51bSBpbiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzLmguCiAgICAgc3dpdGNoIChjYWNoZU1vZGVsKSB7CkBAIC02MzIsMTEwICs2MzIs
MTEwIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwKICAgICB9CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQordm9pZCBUZXN0UnVubmVyOjpzZXRQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVy
c2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXQoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCit2b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNp
Z25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9w
YXF1ZUpTU3RyaW5nKikKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9y
T3JpZ2luKE9wYXF1ZUpTU3RyaW5nKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1
cHBvcnQgZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgogfQog
Ci1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQorbG9uZyBsb25nIFRlc3RSdW5u
ZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVu
dGlmaWVyKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRp
c2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KICAgICByZXR1cm4gMDsKIH0KIAotSlNW
YWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
KEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVz
LgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotbG9uZyBs
b25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3Jp
Z2luKEpTU3RyaW5nUmVmIG5hbWUpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25D
YWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNl
cygpCiB7CiAgICAgd2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcygpOwogfQogIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nIHF1b3RhKQogewogICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9zZWN1cml0eV9vcmlnaW4obWFpbkZyYW1lKTsKICAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7CiB9
CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5z
V2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQordm9p
ZCBUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQogewogICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2Fs
U3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQordm9pZCBUZXN0
UnVubmVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRl
bnRpZmllcikKIHsKICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2ln
bmVkIG51bWJlcikKK3ZvaWQgVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZp
Y2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit2b2lk
IFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKQor
dm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCiB7CiAgICAgR093blB0cjxnY2hh
cj4gdXJsU2NoZW1lKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNjaGVtZSkpOwogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNj
aGVtZShmb3JiaWRkZW4sIHVybFNjaGVtZS5nZXQoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmdvQmFjaygpCit2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7CiAgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7CiAgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sod2ViVmlldyk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit2b2lk
IFRlc3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7CiAgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREZWZlcnNMb2FkaW5nKHdlYlZp
ZXcsIGRlZmVycyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hl
TWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCiB7CiAgICAgd2Vi
a2l0X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUoc2l6ZSk7CiB9CiAKLWJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVt
ZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcoYW5pbWF0aW9uTmFtZSk7CiAgICAgZ2NoYXIqIGVsZW1lbnQgPSBKU1N0cmluZ0NvcHlVVEY4
Q1N0cmluZyhlbGVtZW50SWQpOwpAQCAtNzQ1LDcgKzc0NSw3IEBAIGJvb2wgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhdXNlQW5pbWF0aW8KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1Jl
ZiBlbGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENT
dHJpbmcocHJvcGVydHlOYW1lKTsKICAgICBnY2hhciogZWxlbWVudCA9IEpTU3RyaW5nQ29weVVU
RjhDU3RyaW5nKGVsZW1lbnRJZCk7CkBAIC03NTUsNyArNzU1LDcgQEAgYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAot
dW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygp
IGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdAogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyhtYWluRnJhbWUpOwogfQpAQCAtNzY1LDcgKzc2NSw3IEBAIHN0YXRpYyBn
Ym9vbGVhbiBib29sZWFuRnJvbVZhbHVlKGdjaGFyKiAKICAgICByZXR1cm4gIWdfYXNjaWlfc3Ry
Y2FzZWNtcCh2YWx1ZSwgInRydWUiKSB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKHZhbHVlLCAiMSIp
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNT
dHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAg
R093blB0cjxnY2hhcj4gb3JpZ2luYWxOYW1lKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKGtleSkp
OwogICAgIEdPd25QdHI8Z2NoYXI+IHZhbHVlQXNTdHJpbmcoSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcodmFsdWUpKTsKQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpvdmVycmlkZVByZWZlCiAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q1NT
UmVnaW9uc0VuYWJsZWQod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwg
Ym9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxheW91dFRlc3RDb250cm9s
bGVyOjpvdmVycmlkZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUgIgorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSB0cmllZCB0byBvdmVy
cmlkZSAiCiAgICAgICAgICAgICAgICAgInVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgb3Jp
Z2luYWxOYW1lLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgyNywxNiArODI3
LDE2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICAgICAg
Z2Zsb2F0IG5ld1ZhbHVlID0gZ19hc2NpaV9zdHJ0b2QodmFsdWVBc1N0cmluZy5nZXQoKSwgMCk7
CiAgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksIHByb3BlcnR5TmFtZSwg
bmV3VmFsdWUsIE5VTEwpOwogICAgIH0gZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxh
eW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UgZmFpbGVkIHRvIG92ZXJyaWRl
ICIKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVu
Y2UgZmFpbGVkIHRvIG92ZXJyaWRlICIKICAgICAgICAgICAgICAgICAicHJlZmVyZW5jZSAnJXMn
LlxuIiwgb3JpZ2luYWxOYW1lLmdldCgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9v
bCBhbGxGcmFtZXMpCit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYg
c291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIHByaW50Zigi
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQgbm90IGltcGxlbWVudGVkLlxuIik7
CisgICAgcHJpbnRmKCJUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5c
biIpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChK
U1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRV
c2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewogICAg
IEdPd25QdHI8Z2NoYXI+IHNvdXJjZUNvZGUoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNl
KSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjphZGRVc2VyU3R5bGVTaGVldChtYWlu
RnJhbWUsIHNvdXJjZUNvZGUuZ2V0KCksIGFsbEZyYW1lcyk7CkBAIC04NDQsNyArODQ0LDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlUwogCiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVk
KQordm9pZCBUZXN0UnVubmVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
d2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBXZWJLaXRXZWJTZXR0aW5ncyogd2ViU2V0dGluZ3Mg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOwpAQCAtODUyLDEyICs4NTIs
MTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRQogICAgIGdfb2Jq
ZWN0X3NldCh3ZWJTZXR0aW5ncywgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgZW5hYmxlZCwg
TlVMTCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7CiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAg
ICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lu
c3BlY3Rvcih3ZWJWaWV3KTsKQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzaG93V2ViSW5zcGVjCiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2hvdyhpbnNw
ZWN0b3IpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rv
cigpCit2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKICAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwpAQCAtODczLDcgKzg3Myw3IEBAIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGUKICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9z
ZShpbnNwZWN0b3IpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RS
dW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKICAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
ciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwpAQCAtODgzLDQxICs4
ODMsNDEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIGdf
ZnJlZShzY3JpcHRTdHJpbmcpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9pZCBUZXN0
UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRl
c3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRl
ZExpbmtzKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLWJvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCitib29sIFRlc3RS
dW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2hvdWxkQ2xvc2UobWFpbkZyYW1lKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmlu
Z1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBp
VGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJp
bmdSZWYgYmFzZVVSTCkKIHsKIAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlU
ZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQordm9pZCBUZXN0UnVubmVyOjphcGlUZXN0
R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQogewogCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRX
ZWJWaWV3RWRpdGFibGUoYm9vbCkKIHsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExh
eW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKIHsKICAgICBDU3RyaW5nIG1hcmtlclRl
eHRHQ2hhciA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bWFya2VyVGV4dEZvckxpc3RJdGVt
KG1haW5GcmFtZSwgY29udGV4dCwgbm9kZU9iamVjdCk7CiAgICAgaWYgKG1hcmtlclRleHRHQ2hh
ci5pc051bGwoKSkKQEAgLTkyNyw3NiArOTI3LDc2IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHIKICAgICByZXR1cm4gbWFya2VyVGV4dDsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjphdXRoZW50aWNhdGVTZXNzaW9u
KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9ydE1v
ZGFsKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRU
UExvYWRzKGJvb2wgc2VyaWFsaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQ
TG9hZHMoYm9vbCBzZXJpYWxpemUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXRTZXJpYWxpemVIVFRQTG9hZHMoc2VyaWFsaXplKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVy
dmFsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWlu
aW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCh3ZWJWaWV3LCBtaW5pbXVtVGltZXJJ
bnRlcnZhbCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rp
b24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0
aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoKQordm9pZCBUZXN0UnVubmVy
OjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Zm9jdXNXZWJWaWV3KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkKIHsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRv
dWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSkKIHsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0
aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCit2b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlRGVz
a3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQogewogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25z
dCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciop
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQogewogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpz
ZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50
ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5u
ZXI6OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1Jl
ZikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCit2b2lk
IFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NyArMTE4LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYQogdm9s
YXRpbGUgYm9vbCBkb25lOwogCiBOYXZpZ2F0aW9uQ29udHJvbGxlciogZ05hdmlnYXRpb25Db250
cm9sbGVyID0gMDsKLVJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250
cm9sbGVyOworUmVmUHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogCiBXZWJGcmFtZSAqbWFp
bkZyYW1lID0gMDsKIC8vIFRoaXMgaXMgdGhlIHRvcG1vc3QgZnJhbWUgdGhhdCBpcyBsb2FkaW5n
LCBkdXJpbmcgYSBnaXZlbiBsb2FkLCBvciBuaWwgd2hlbiBubyBsb2FkIGlzIApAQCAtNTEwLDcg
KzUxMCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTW9ja1Njcm9sbGJhcnMoKQogCiBXZWJWaWV3
ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93KCkKIHsKLSAgICBOU1JlY3QgcmVjdCA9
IE5TTWFrZVJlY3QoMCwgMCwgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdXaWR0aCwgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om1heFZpZXdIZWlnaHQpOworICAgIE5TUmVjdCByZWN0ID0gTlNN
YWtlUmVjdCgwLCAwLCBUZXN0UnVubmVyOjptYXhWaWV3V2lkdGgsIFRlc3RSdW5uZXI6Om1heFZp
ZXdIZWlnaHQpOwogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6cmVjdCBmcmFtZU5hbWU6bmlsIGdyb3VwTmFtZTpAIm9yZy53ZWJraXQuRHVtcFJl
bmRlclRyZWUiXTsKICAgICAgICAgCiAgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTp1aURlbGVn
YXRlXTsKQEAgLTY3Myw3ICs2NzMsNyBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25z
aXN0ZW50VmFsCiAKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9hZGVy
U2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJv
bU1haW5Eb2N1bWVudERvbWFpbl07CiAgICAgCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNlcmlhbGl6ZUhUVFBMb2FkcyhmYWxzZSk7CisgICAgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXpl
SFRUUExvYWRzKGZhbHNlKTsKIAogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKIH0KQEAgLTg5
OSw3ICs4OTksNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyCiAg
ICAgCiAgICAgW0R1bXBSZW5kZXJUcmVlUGFzdGVib2FyZCByZWxlYXNlTG9jYWxQYXN0ZWJvYXJk
c107CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgb250byBMYXlvdXRUZXN0
Q29udHJvbGxlciBhbmQgbWFkZSBpbnRvIGEgSGFzaFNldAorICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBtb3ZlZCBvbnRvIFRlc3RSdW5uZXIgYW5kIG1hZGUgaW50byBhIEhhc2hTZXQKICAg
ICBpZiAoZGlzYWxsb3dlZFVSTHMpIHsKICAgICAgICAgQ0ZSZWxlYXNlKGRpc2FsbG93ZWRVUkxz
KTsKICAgICAgICAgZGlzYWxsb3dlZFVSTHMgPSAwOwpAQCAtOTI0LDkgKzkyNCw5IEBAIHN0YXRp
YyBOU0ludGVnZXIgY29tcGFyZUhpc3RvcnlJdGVtcyhpZCAKIAogc3RhdGljIE5TRGF0YSAqZHVt
cEF1ZGlvKCkKIHsKLSAgICBjb25zdCBjaGFyICplbmNvZGVkQXVkaW9EYXRhID0gZ0xheW91dFRl
c3RDb250cm9sbGVyLT5lbmNvZGVkQXVkaW9EYXRhKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFy
ICplbmNvZGVkQXVkaW9EYXRhID0gZ1Rlc3RSdW5uZXItPmVuY29kZWRBdWRpb0RhdGEoKS5jX3N0
cigpOwogICAgIAotICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczplbmNv
ZGVkQXVkaW9EYXRhIGxlbmd0aDpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmVuY29kZWRBdWRpb0Rh
dGEoKS5sZW5ndGgoKV07CisgICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVz
OmVuY29kZWRBdWRpb0RhdGEgbGVuZ3RoOmdUZXN0UnVubmVyLT5lbmNvZGVkQXVkaW9EYXRhKCku
bGVuZ3RoKCldOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC05NzQsNyArOTc0LDcgQEAgc3Rh
dGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV2ViRgogICAgICAgICBwcmludGYoInNj
cm9sbGVkIHRvICUuZiwlLmZcbiIsIHNjcm9sbFBvc2l0aW9uLngsIHNjcm9sbFBvc2l0aW9uLnkp
OwogICAgIH0KIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBDaGlsZEZyYW1l
U2Nyb2xsUG9zaXRpb25zKCkpIHsKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBDaGlsZEZyYW1l
U2Nyb2xsUG9zaXRpb25zKCkpIHsKICAgICAgICAgTlNBcnJheSAqa2lkcyA9IFtmIGNoaWxkRnJh
bWVzXTsKICAgICAgICAgaWYgKGtpZHMpCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgW2tpZHMgY291bnRdOyBpKyspCkBAIC05OTgsNyArOTk4LDcgQEAgc3RhdGljIE5TU3Ry
aW5nICpkdW1wRnJhbWVzQXNUZXh0KFdlYkZyYQogCiAgICAgW3Jlc3VsdCBhcHBlbmRGb3JtYXQ6
QCIlQFxuIiwgW2RvY3VtZW50RWxlbWVudCBpbm5lclRleHRdXTsKIAotICAgIGlmIChnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpKSB7CisgICAgaWYgKGdUZXN0
UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgewogICAgICAgICBOU0FycmF5ICpraWRz
ID0gW2ZyYW1lIGNoaWxkRnJhbWVzXTsKICAgICAgICAgaWYgKGtpZHMpIHsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBba2lkcyBjb3VudF07IGkrKykKQEAgLTEwNzgsMjEg
KzEwNzgsMjEgQEAgc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdEZvcldlYlZpZQogc3Rh
dGljIHZvaWQgc2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdCgpCiB7CiAgICAgLy8gVzNDIFNWRyB0
ZXN0cyBleHBlY3QgdG8gYmUgNDgweDM2MAotICAgIGJvb2wgaXNTVkdXM0NUZXN0ID0gKGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+dGVzdFBhdGhPclVSTCgpLmZpbmQoInN2Zy9XM0MtU1ZHLTEuMSIp
ICE9IHN0cmluZzo6bnBvcyk7CisgICAgYm9vbCBpc1NWR1czQ1Rlc3QgPSAoZ1Rlc3RSdW5uZXIt
PnRlc3RQYXRoT3JVUkwoKS5maW5kKCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBzdHJpbmc6Om5wb3Mp
OwogICAgIGlmIChpc1NWR1czQ1Rlc3QpCiAgICAgICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNl
dEZyYW1lU2l6ZTpOU01ha2VTaXplKDQ4MCwgMzYwKV07CiAgICAgZWxzZQotICAgICAgICBbW21h
aW5GcmFtZSB3ZWJWaWV3XSBzZXRGcmFtZVNpemU6TlNNYWtlU2l6ZShMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bWF4Vmlld1dpZHRoLCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hlaWdodCld
OworICAgICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRGcmFtZVNpemU6TlNNYWtlU2l6ZShU
ZXN0UnVubmVyOjptYXhWaWV3V2lkdGgsIFRlc3RSdW5uZXI6Om1heFZpZXdIZWlnaHQpXTsKIH0K
IAogc3RhdGljIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRUZXN0KCkKIHsK
ICAgICBjb25zdCBjaGFyICplcnJvck1lc3NhZ2U7Ci0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEFzVGV4dCgpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpKQog
ICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW2RvY3VtZW50RWxlbWVudCBpbm5lclRleHRdIjsKLSAg
ICBlbHNlIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSkK
KyAgICBlbHNlIGlmIChnVGVzdFJ1bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpKQogICAgICAg
ICBlcnJvck1lc3NhZ2UgPSAiW1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIHdlYkFyY2hpdmVdIjsK
LSAgICBlbHNlIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hp
dmUoKSkKKyAgICBlbHNlIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgp
KQogICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gd2ViQXJj
aGl2ZV0iOwogICAgIGVsc2UKICAgICAgICAgZXJyb3JNZXNzYWdlID0gIlttYWluRnJhbWUgcmVu
ZGVyVHJlZUFzRXh0ZXJuYWxSZXByZXNlbnRhdGlvbl0iOwpAQCAtMTE0Myw0MyArMTE0Myw0MyBA
QCB2b2lkIGR1bXAoKQogICAgICAgICBOU1N0cmluZyAqcmVzdWx0TWltZVR5cGUgPSBAInRleHQv
cGxhaW4iOwogCiAgICAgICAgIGlmIChbW1ttYWluRnJhbWUgZGF0YVNvdXJjZV0gX3Jlc3BvbnNl
TUlNRVR5cGVdIGlzRXF1YWxUb1N0cmluZzpAInRleHQvcGxhaW4iXSkgewotICAgICAgICAgICAg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICAgICAg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7Cisg
ICAgICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgICAg
IGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzQXVkaW8oKSkgeworICAg
ICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc0F1ZGlvKCkpIHsKICAgICAgICAgICAgIHJlc3Vs
dERhdGEgPSBkdW1wQXVkaW8oKTsKICAgICAgICAgICAgIHJlc3VsdE1pbWVUeXBlID0gQCJhdWRp
by93YXYiOwotICAgICAgICB9IGVsc2UgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFz
VGV4dCgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSkg
ewogICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gZHVtcEZyYW1lc0FzVGV4dChtYWluRnJhbWUp
OwotICAgICAgICB9IGVsc2UgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzUERGKCkp
IHsKKyAgICAgICAgfSBlbHNlIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEFzUERGKCkpIHsKICAgICAg
ICAgICAgIHJlc3VsdERhdGEgPSBkdW1wRnJhbWVBc1BERihtYWluRnJhbWUpOwogICAgICAgICAg
ICAgcmVzdWx0TWltZVR5cGUgPSBAImFwcGxpY2F0aW9uL3BkZiI7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkpIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChnVGVzdFJ1bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpKSB7CiAgICAg
ICAgICAgICBXZWJBcmNoaXZlICp3ZWJBcmNoaXZlID0gW1ttYWluRnJhbWUgRE9NRG9jdW1lbnRd
IHdlYkFyY2hpdmVdOwogICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gSGFyZEF1dG9yZWxlYXNl
KGNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YSgoQ0ZEYXRhUmVmKVt3ZWJBcmNoaXZl
IGRhdGFdKSk7CiAgICAgICAgICAgICByZXN1bHRNaW1lVHlwZSA9IEAiYXBwbGljYXRpb24veC13
ZWJhcmNoaXZlIjsKLSAgICAgICAgfSBlbHNlIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgeworICAgICAgICB9IGVsc2UgaWYgKGdUZXN0UnVubmVy
LT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKICAgICAgICAgICAgIFdlYkFyY2hpdmUgKndl
YkFyY2hpdmUgPSBbW21haW5GcmFtZSBkYXRhU291cmNlXSB3ZWJBcmNoaXZlXTsKICAgICAgICAg
ICAgIHJlc3VsdFN0cmluZyA9IEhhcmRBdXRvcmVsZWFzZShjcmVhdGVYTUxTdHJpbmdGcm9tV2Vi
QXJjaGl2ZURhdGEoKENGRGF0YVJlZilbd2ViQXJjaGl2ZSBkYXRhXSkpOwogICAgICAgICAgICAg
cmVzdWx0TWltZVR5cGUgPSBAImFwcGxpY2F0aW9uL3gtd2ViYXJjaGl2ZSI7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gW21haW5GcmFtZSByZW5kZXJUcmVlQXNF
eHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmc6Z0xheW91dFRlc3RDb250cm9sbGVyLT5p
c1ByaW50aW5nKCldOworICAgICAgICAgICAgcmVzdWx0U3RyaW5nID0gW21haW5GcmFtZSByZW5k
ZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmc6Z1Rlc3RSdW5uZXItPmlz
UHJpbnRpbmcoKV07CiAKICAgICAgICAgaWYgKHJlc3VsdFN0cmluZyAmJiAhcmVzdWx0RGF0YSkK
ICAgICAgICAgICAgIHJlc3VsdERhdGEgPSBbcmVzdWx0U3RyaW5nIGRhdGFVc2luZ0VuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXTsKIAogICAgICAgICBwcmludGYoIkNvbnRlbnQtVHlwZTog
JXNcbiIsIFtyZXN1bHRNaW1lVHlwZSBVVEY4U3RyaW5nXSk7CiAKLSAgICAgICAgaWYgKGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzQXVkaW8oKSkKKyAgICAgICAgaWYgKGdUZXN0UnVubmVy
LT5kdW1wQXNBdWRpbygpKQogICAgICAgICAgICAgcHJpbnRmKCJDb250ZW50LVRyYW5zZmVyLUVu
Y29kaW5nOiBiYXNlNjRcbiIpOwogCiAgICAgICAgIGlmIChyZXN1bHREYXRhKSB7CiAgICAgICAg
ICAgICBmd3JpdGUoW3Jlc3VsdERhdGEgYnl0ZXNdLCAxLCBbcmVzdWx0RGF0YSBsZW5ndGhdLCBz
dGRvdXQpOwogCi0gICAgICAgICAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFz
VGV4dCgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAm
JiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpCisgICAg
ICAgICAgICBpZiAoIWdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkgJiYgIWdUZXN0UnVubmVyLT5k
dW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNo
aXZlKCkpCiAgICAgICAgICAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24obWFpbkZyYW1l
KTsKIAotICAgICAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEJhY2tGb3J3
YXJkTGlzdCgpKQorICAgICAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQmFja0ZvcndhcmRM
aXN0KCkpCiAgICAgICAgICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEZvckFsbFdpbmRvd3Mo
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBuaWwgcmVzdWx0
IGZyb20gJXMiLCBtZXRob2ROYW1lU3RyaW5nRm9yRmFpbGVkVGVzdCgpKTsKQEAgLTExOTUsOSAr
MTE5NSw5IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIH0gICAgICAgICAgICAKICAgICB9CiAKLSAg
ICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSkKKyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0
ICYmIGdUZXN0UnVubmVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQogICAgICAgICAvLyBGSVhN
RTogd2hlbiBpc1ByaW50aW5nIGlzIHNldCwgZHVtcCB0aGUgaW1hZ2Ugd2l0aCBwYWdlIHNlcGFy
YXRvcnMuCi0gICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CisgICAgICAgIGR1
bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdUZXN0UnVubmVyLT5leHBl
Y3RlZFBpeGVsSGFzaCgpKTsKIAogICAgIHB1dHMoIiNFT0YiKTsgICAvLyB0ZXJtaW5hdGUgdGhl
IChwb3NzaWJseSBlbXB0eSkgcGl4ZWxzIGJsb2NrCiAKQEAgLTEyNTYsMTAgKzEyNTYsMTAgQEAg
c3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogICAgIAogICAgIHJlc2V0
RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBpZiAoZ1Rlc3RSdW5uZXIpIHsKICAgICAgICAgV2ViQ29yZVRlc3RTdXBw
b3J0OjpyZXNldEludGVybmFsc09iamVjdChbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdKTsKICAg
ICAgICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBhIHRlc3QgdXNpbmcgdGhlIGNocm9tZSBpbnB1dCBm
aWVsZCBmYWlsZWQsIGJlIHN1cmUgdG8gY2xlYW4gdXAgZm9yIHRoZSBuZXh0IHRlc3QKLSAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAg
ICAgIGdUZXN0UnVubmVyLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgfQogCiAgICAg
W1ttYWluRnJhbWUgd2ViVmlld10gc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOllFU107CkBA
IC0xMzA0LDE5ICsxMzA0LDE5IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBp
bnB1dEwKICAgICAKICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rp
bmcoKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVy
OjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ1Rlc3RS
dW5uZXIgPSBUZXN0UnVubmVyOjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVs
SGFzaCk7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gbmlsOwogICAgIEFTU0VSVCghZHJhZ2dpbmdJ
bmZvKTsgLy8gdGhlIHByZXZpb3VzIHRlc3Qgc2hvdWxkIGhhdmUgY2FsbGVkIGV2ZW50U2VuZGVy
Lm1vdXNlVXAgdG8gZHJvcCEKICAgICByZWxlYXNlQW5kWmVybygmZHJhZ2dpbmdJbmZvKTsKICAg
ICBkb25lID0gTk87CiAKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KCk7Ci0gICAgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5zZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKKyAgICBn
VGVzdFJ1bm5lci0+c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CiAKICAgICBpZiAoZGlz
YWxsb3dlZFVSTHMpCiAgICAgICAgIENGU2V0UmVtb3ZlQWxsVmFsdWVzKGRpc2FsbG93ZWRVUkxz
KTsKICAgICBpZiAoc2hvdWxkTG9nRnJhbWVMb2FkRGVsZWdhdGVzKHBhdGhPclVSTC5jX3N0cigp
KSkKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKHRydWUpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RHVtcEZyYW1lTG9hZENhbGxiYWNr
cyh0cnVlKTsKIAogICAgIGlmIChzaG91bGRMb2dIaXN0b3J5RGVsZWdhdGVzKHBhdGhPclVSTC5j
X3N0cigpKSkKICAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0SGlzdG9yeURlbGVnYXRl
Omhpc3RvcnlEZWxlZ2F0ZV07CkBAIC0xMzI0LDEyICsxMzI0LDEyIEBAIHN0YXRpYyB2b2lkIHJ1
blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKICAgICAgICAgW1ttYWluRnJhbWUgd2ViVmlld10g
c2V0SGlzdG9yeURlbGVnYXRlOm5pbF07CiAKICAgICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVy
RXh0cmFzKHBhdGhPclVSTC5jX3N0cigpKSkgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIGdUZXN0UnVubmVy
LT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwogICAgICAgICBpZiAoc2hvdWxkT3Bl
bldlYkluc3BlY3RvcihwYXRoT3JVUkwuY19zdHIoKSkpCi0gICAgICAgICAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPnNob3dXZWJJbnNwZWN0b3IoKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVy
LT5zaG93V2ViSW5zcGVjdG9yKCk7CiAgICAgICAgIGlmIChzaG91bGREdW1wQXNUZXh0KHBhdGhP
clVSTC5jX3N0cigpKSkgewotICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRE
dW1wQXNUZXh0KHRydWUpOwotICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRH
ZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CisgICAgICAgICAgICBnVGVzdFJ1bm5lci0+c2V0
RHVtcEFzVGV4dCh0cnVlKTsKKyAgICAgICAgICAgIGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBp
eGVsUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzNjQsNyArMTM2NCw3
IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPmNsZWFyKCk7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVy
LT5jbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoKSkgeworICAgIGlmIChnVGVzdFJ1
bm5lci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkpIHsKICAgICAgICAgTlNB
cnJheSogYXJyYXkgPSBbRHVtcFJlbmRlclRyZWVXaW5kb3cgb3BlbldpbmRvd3NdOwogCiAgICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gW2FycmF5IGNvdW50XTsKQEAgLTEzODQsOCArMTM4NCw4IEBA
IHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIC8vIElmIGRl
dmVsb3BlciBleHRyYXMgZW5hYmxlZCBXZWIgSW5zcGVjdG9yIG1heSBoYXZlIGJlZW4gb3BlbiBi
eSB0aGUgdGVzdC4KICAgICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHBhdGhPclVS
TC5jX3N0cigpKSkgewotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNsb3NlV2ViSW5z
cGVjdG9yKCk7Ci0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RGV2ZWxvcGVyRXh0
cmFzRW5hYmxlZChmYWxzZSk7CisgICAgICAgIGdUZXN0UnVubmVyLT5jbG9zZVdlYkluc3BlY3Rv
cigpOworICAgICAgICBnVGVzdFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxz
ZSk7CiAgICAgfQogCiAgICAgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0
aW5nKCk7CkBAIC0xMzk5LDcgKzEzOTksNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0
cmluZyYgaW5wdXRMCiAgICAgQVNTRVJUKENGQXJyYXlHZXRDb3VudChvcGVuV2luZG93c1JlZikg
PT0gMSk7CiAgICAgQVNTRVJUKENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgob3BlbldpbmRvd3NSZWYs
IDApID09IFtbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10pOwogCi0gICAgZ0xheW91dFRlc3RD
b250cm9sbGVyLmNsZWFyKCk7CisgICAgZ1Rlc3RSdW5uZXIuY2xlYXIoKTsKIAogICAgIGlmIChp
Z25vcmVXZWJDb3JlTm9kZUxlYWtzKQogICAgICAgICBbV2ViQ29yZVN0YXRpc3RpY3Mgc3RvcEln
bm9yaW5nV2ViQ29yZU5vZGVMZWFrc107CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWVXaW5kb3cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlV2luZG93Lm1tCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVXaW5kb3cubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTc5LDcgKzc5LDcgQEAgLSAodm9pZCljbG9zZQogCiAtIChCT09MKWlzS2V5V2luZG93
CiB7Ci0gICAgcmV0dXJuIGdMYXlvdXRUZXN0Q29udHJvbGxlciA/IGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+d2luZG93SXNLZXkoKSA6IFlFUzsKKyAgICByZXR1cm4gZ1Rlc3RSdW5uZXIgPyBnVGVz
dFJ1bm5lci0+d2luZG93SXNLZXkoKSA6IFlFUzsKIH0KIAogLSAodm9pZClrZXlEb3duOihOU0V2
ZW50ICopZXZlbnQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9FZGl0aW5nRGVsZWdh
dGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0VkaXRpbmdEZWxl
Z2F0ZS5tbQkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Vk
aXRpbmdEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDE0IEBAIC0gKGlk
KWluaXQKIAogLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRCZWdpbkVk
aXRpbmdJbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50
ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTolc1xuIiwg
W1tyYW5nZSBkdW1wXSBVVEY4U3RyaW5nXSk7CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwog
fQogCiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEVuZEVkaXRpbmdJ
bkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJ
VElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIFtbcmFuZ2Ug
ZHVtcF0gVVRGOFN0cmluZ10pOwogICAgIHJldHVybiBhY2NlcHRzRWRpdGluZzsKIH0KQEAgLTk0
LDcgKzk0LDcgQEAgLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bAogICAg
ICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKLSAgICBpZiAoIWRv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAg
IGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAg
ICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiVzIHJlcGxhY2lu
Z0RPTVJhbmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iLCBbW25vZGUgZHVtcFBhdGhdIFVURjhTdHJp
bmddLCBbW3JhbmdlIGR1bXBdIFVURjhTdHJpbmddLCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9u
XSk7CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQpAQCAtMTA3LDE0ICsxMDcsMTQgQEAg
LSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bAogICAgICAgICAiV2ViVmll
d0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiVzIHJlcGxhY2luZ0RPTVJhbmdlOiVz
IGdpdmVuQWN0aW9uOiVzXG4iLCBbW3RleHQgZGVzY3JpcHRpb25dIFVURjhTdHJpbmddLCBbW3Jh
bmdlIGR1bXBdIFVURjhTdHJpbmddLCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CiAgICAg
cmV0dXJuIGFjY2VwdHNFZGl0aW5nOwogfQogCiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3
ZWJWaWV3IHNob3VsZERlbGV0ZURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgaWYg
KCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkK
KyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6JXNc
biIsIFtbcmFuZ2UgZHVtcF0gVVRGOFN0cmluZ10pOwogICAgIHJldHVybiBhY2NlcHRzRWRpdGlu
ZzsKIH0KQEAgLTEzNSw1MiArMTM1LDUyIEBAIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdl
YlZpZXcgc2hvdWwKICAgICAgICAgIlRSVUUiCiAgICAgfTsKIAotICAgIGlmICghZG9uZSAmJiBn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmlu
dGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6JXMgdG9E
T01SYW5nZTolcyBhZmZpbml0eTolcyBzdGlsbFNlbGVjdGluZzolc1xuIiwgW1tjdXJyZW50UmFu
Z2UgZHVtcF0gVVRGOFN0cmluZ10sIFtbcHJvcG9zZWRSYW5nZSBkdW1wXSBVVEY4U3RyaW5nXSwg
YWZmaW5pdHlzdHJpbmdbc2VsZWN0aW9uQWZmaW5pdHldLCBib29sc3RyaW5nW2ZsYWddKTsKICAg
ICByZXR1cm4gYWNjZXB0c0VkaXRpbmc7CiB9CiAKIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAq
KXdlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxl
IHRvRWxlbWVudHNJbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgaWYgKCFkb25l
ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBp
ZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZTolcyB0b0VsZW1lbnRz
SW5ET01SYW5nZTolc1xuIiwgW1tzdHlsZSBkZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10sIFtbcmFu
Z2UgZHVtcF0gVVRGOFN0cmluZ10pOwogICAgIHJldHVybiBhY2NlcHRzRWRpdGluZzsKIH0KIAog
LSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRDaGFuZ2VUeXBpbmdTdHls
ZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKWN1cnJlbnRTdHlsZSB0b1N0eWxlOihET01DU1NT
dHlsZURlY2xhcmF0aW9uICopcHJvcG9zZWRTdHlsZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYo
IkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVR5cGluZ1N0eWxlOiVzIHRvU3R5bGU6JXNc
biIsIFtbY3VycmVudFN0eWxlIGRlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSwgW1twcm9wb3NlZFN0
eWxlIGRlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CiAgICAgcmV0dXJuIGFjY2VwdHNFZGl0aW5n
OwogfQogCiAtICh2b2lkKXdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZEJlZ2luRWRpdGluZzolc1xuIiwgW1tub3RpZmljYXRpb24gbmFtZV0gVVRGOFN0
cmluZ10pOwogfQogCiAtICh2b2lkKXdlYlZpZXdEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZTolc1xuIiwgW1tub3RpZmljYXRpb24gbmFtZV0gVVRGOFN0cmluZ10p
OwogfQogCiAtICh2b2lkKXdlYlZpZXdEaWRFbmRFZGl0aW5nOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbgogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRFbmRFZGl0aW5nOiVzXG4iLCBbW25vdGlmaWNhdGlvbiBuYW1lXSBVVEY4U3RyaW5n
XSk7CiB9CiAKIC0gKHZvaWQpd2ViVmlld0RpZENoYW5nZVR5cGluZ1N0eWxlOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIkVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VUeXBpbmdTdHlsZTolc1xuIiwgW1tub3RpZmljYXRpb24g
bmFtZV0gVVRGOFN0cmluZ10pOwogfQogCiAtICh2b2lkKXdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50
ZigiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjolc1xuIiwgW1tu
b3RpZmljYXRpb24gbmFtZV0gVVRGOFN0cmluZ10pOwogfQogCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjU1MDgpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCAtICh2b2lkKXByb2Nlc3NXb3JrOihpZClkdW1teQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBpZiB3ZSBmaW5pc2ggYWxsIHRoZSBjb21tYW5kcywg
d2UncmUgcmVhZHkgdG8gZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5w
cm9jZXNzV29yaygpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAg
ICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ1Rlc3RSdW5uZXIt
PndhaXRUb0R1bXAoKSkKICAgICAgICAgZHVtcCgpOwogfQogCkBAIC0xNDUsNyArMTQ1LDcgQEAg
LSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYyBsb2NhdGlvbkNoYQogICAgIGlmIChbZGF0YVNv
dXJjZSB3ZWJGcmFtZV0gPT0gdG9wTG9hZGluZ0ZyYW1lKSB7CiAgICAgICAgIHRvcExvYWRpbmdG
cmFtZSA9IG5pbDsKICAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUp
OyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVlIGZvciB0aGUgcmVzdCBv
ZiB0aGlzIHRlc3QKLSAgICAgICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1
bXAoKSkgeworICAgICAgICBpZiAoIWdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpIHsKICAgICAg
ICAgICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQogICAgICAgICAgICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocHJvY2Vzc1dvcms6KSB3aXRoT2JqZWN0
Om5pbCBhZnRlckRlbGF5OjBdOwogICAgICAgICAgICAgZWxzZQpAQCAtMTU2LDEyICsxNTYsMTIg
QEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYyBsb2NhdGlvbkNoYQogCiAtICh2b2lkKXdl
YlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZToo
V2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJp
bmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZSIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0XV07CiAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAg
ICB9CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wVXNlckdl
c3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5T
U3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gaW4gZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSIsIFtmcmFtZSBfZHJ0X3ByaW50RnJhbWVVc2Vy
R2VzdHVyZVN0YXR1c11dOwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3Ry
aW5nXSk7CiAgICAgfQpAQCAtMTcyLDEzICsxNzIsMTMgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJW
aWV3ICopc2VuZGVyIGRpZFN0YQogICAgIGlmICghdG9wTG9hZGluZ0ZyYW1lICYmICFkb25lKQog
ICAgICAgICB0b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKIAotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPnN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoKSkgeworICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+c3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKSB7CiAg
ICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVA
IC0gc3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxi
YWNrIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAg
ICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgICAgICBbZnJh
bWUgc3RvcExvYWRpbmddOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPnVzZURlZmVycmVkRnJhbWVMb2FkaW5nKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPnVzZURlZmVycmVkRnJhbWVMb2FkaW5nKCkpIHsKICAgICAgICAgW3NlbmRl
ciBzZXREZWZlcnNDYWxsYmFja3M6WUVTXTsKICAgICAgICAgaW50NjRfdCBkZWZlcnJlZFdhaXRU
aW1lID0gNSAqIE5TRUNfUEVSX01TRUM7CiAgICAgICAgIGRpc3BhdGNoX3RpbWVfdCB3aGVuID0g
ZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgZGVmZXJyZWRXYWl0VGltZSk7CkBAIC0x
OTAsNyArMTkwLDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZFN0YQog
CiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkQ29tbWl0TG9hZEZvckZyYW1l
OihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0
UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgTlNTdHJpbmcgKnN0
cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRDb21taXRMb2FkRm9y
RnJhbWUiLCBbZnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwog
ICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfQpAQCAt
MTk4LDE0ICsxOTgsMTQgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZENv
bQogICAgIEFTU0VSVCghW2ZyYW1lIHByb3Zpc2lvbmFsRGF0YVNvdXJjZV0pOwogICAgIEFTU0VS
VChbZnJhbWUgZGF0YVNvdXJjZV0pOwogICAgIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
c2V0V2luZG93SXNLZXkodHJ1ZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldFdpbmRvd0lzS2V5KHRy
dWUpOwogICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1ttYWluRnJhbWUgZnJhbWVWaWV3XSBk
b2N1bWVudFZpZXddOwogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJz
dFJlc3BvbmRlcjpkb2N1bWVudFZpZXddOwogfQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
KilzZW5kZXIgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9y
IGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgTlNT
dHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRGYWls
UHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHRdXTsKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgW3N0cmluZyBVVEY4U3Ry
aW5nXSk7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXNlbmRlciBkaWRGaW4KICAgICBBU1NFUlQoW2ZyYW1lIGRhdGFTb3VyY2VdKTsKICAgICBB
U1NFUlQoZnJhbWUgPT0gW1tmcmFtZSBkYXRhU291cmNlXSB3ZWJGcmFtZV0pOwogICAgIAotICAg
IGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVAIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lIiwgW2ZyYW1lIF9kcnRfZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAgICAgcHJpbnRmICgiJXNcbiIsIFtz
dHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTI0NCw3ICsyNDQsNyBAQCAtICh2b2lkKXdl
YlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkRmluCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXNlbmRlciBkaWRGYWlsTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvckZyYW1l
OihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0
UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgTlNTdHJpbmcgKnN0
cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRGYWlsTG9hZFdpdGhF
cnJvciIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XV07CiAg
ICAgICAgIHByaW50ZiAoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9CkBAIC0y
NTcsNyArMjU3LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZhaQog
CiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHdpbmRvd1NjcmlwdE9iamVjdEF2
YWlsYWJsZTooV2ViU2NyaXB0T2JqZWN0ICopd2luZG93U2NyaXB0T2JqZWN0CiB7Ci0gICAgaWYg
KCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
KSB7CisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpIHsKICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiPz8gLSB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUiXTsKICAgICAgICAgcHJpbnRm
ICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTI2NywxMyArMjY3LDEz
IEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgd2luZG8KIAogLSAodm9pZClk
aWRDbGVhcldpbmRvd09iamVjdEluU3RhbmRhcmRXb3JsZEZvckZyYW1lOihXZWJGcmFtZSAqKWZy
YW1lCiB7Ci0gICAgLy8gTWFrZSBOZXctU3R5bGUgTGF5b3V0VGVzdENvbnRyb2xsZXIKKyAgICAv
LyBNYWtlIE5ldy1TdHlsZSBUZXN0UnVubmVyCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBb
ZnJhbWUgZ2xvYmFsQ29udGV4dF07CiAgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKIAotICAgIEFTU0VSVChnTGF5b3V0VGVzdENvbnRyb2xsZXIpOwotICAgIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxPYmplY3QsICZl
eGNlcHRpb24pOworICAgIEFTU0VSVChnVGVzdFJ1bm5lcik7CisgICAgZ1Rlc3RSdW5uZXItPm1h
a2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKICAgICBB
U1NFUlQoIWV4Y2VwdGlvbik7CiAKICAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKQEAgLTMzOCwxOCArMzM4LDE4IEBA
IC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGUKIAogLSAodm9pZCl3ZWJW
aWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZFJlY2VpdmVUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBm
b3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3Ry
aW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkUmVjZWl2
ZVRpdGxlOiAlQCIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
XSwgdGl0bGVdOwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7
CiAgICAgfQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hhbmdl
cygpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFRpdGxlQ2hhbmdlcygpKQogICAgICAgICBw
cmludGYoIlRJVExFIENIQU5HRUQ6ICVzXG4iLCBbdGl0bGUgVVRGOFN0cmluZ10pOwogfQogCiAt
ICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICBpZiAo
IWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkp
IHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkgewogICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQCAtIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAg
ICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTM1
Nyw3ICszNTcsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkUmVjCiAK
IC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDaGFuZ2VMb2NhdGlvbldpdGhp
blBhZ2VGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAg
IE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlk
Q2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUiLCBbZnJhbWUgX2RydF9kZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmlu
ZyBVVEY4U3RyaW5nXSk7CiAgICAgfQpAQCAtMzY1LDEyICszNjUsMTIgQEAgLSAodm9pZCl3ZWJW
aWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZENoYQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
KilzZW5kZXIgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOihOU1VSTCAqKVVSTCBkZWxh
eTooTlNUaW1lSW50ZXJ2YWwpc2Vjb25kcyBmaXJlRGF0ZTooTlNEYXRlICopZGF0ZSBmb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVz
dFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpz
dHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gd2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdFRvVVJMOiAlQCAiLCBbZnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdF0sIFtVUkwgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1d
OwogICAgICAgICBwcmludGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfQog
Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBOU1N0cmlu
ZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAtIGluIHdpbGxQZXJm
b3JtQ2xpZW50UmVkaXJlY3QiLCBbZnJhbWUgX2RydF9wcmludEZyYW1lVXNlckdlc3R1cmVTdGF0
dXNdXTsKICAgICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAg
IH0KQEAgLTM3OCw3ICszNzgsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIg
d2lsbFBlCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDYW5jZWxDbGll
bnRSZWRpcmVjdEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAg
ICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAg
LSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lIiwgW2ZyYW1lIF9kcnRfZGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHRdXTsKICAgICAgICAgcHJpbnRmICgiJXNcbiIsIFtzdHJp
bmcgVVRGOFN0cmluZ10pOwogICAgIH0KQEAgLTM4Niw3ICszODYsNyBAQCAtICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkQ2FuCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAq
KXNlbmRlciBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQog
ewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUiLCBbZnJh
bWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwogICAgICAgICBwcmlu
dGYgKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfSBlbHNlIGlmICghZG9uZSkg
ewpAQCAtNDAwLDcgKzQwMCw3IEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBk
aWRGaW4KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEhhbmRsZU9ubG9h
ZEV2ZW50c0ZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAg
ICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBk
aWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSIsIFtmcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0XV07CiAgICAgICAgIHByaW50ZiAoIiVzXG4iLCBbc3RyaW5nIFVU
RjhTdHJpbmddKTsKICAgICB9CkBAIC00MDgsMjUgKzQwOCwyNSBAQCAtICh2b2lkKXdlYlZpZXc6
KFdlYlZpZXcgKilzZW5kZXIgZGlkSGFuCiAKIC0gKHZvaWQpd2ViVmlld0RpZERpc3BsYXlJbnNl
Y3VyZUNvbnRlbnQ6KFdlYlZpZXcgKilzZW5kZXIKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFkb25l
ICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50
ZiAoImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCiAtICh2b2lkKXdlYlZpZXc6
KFdlYlZpZXcgKilzZW5kZXIgZGlkUnVuSW5zZWN1cmVDb250ZW50OihXZWJTZWN1cml0eU9yaWdp
biAqKW9yaWdpbgogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmICgiZGlkUnVuSW5zZWN1cmVD
b250ZW50XG4iKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZERl
dGVjdFhTUzooTlNVUkwgKilpbnNlY3VyZVVSTAogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRm
ICgiZGlkRGV0ZWN0WFNTXG4iKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3UHJvZ3Jlc3NGaW5pc2hl
ZE5vdGlmaWNhdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBpZiAo
IWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxi
YWNrKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUHJvZ3Jlc3NGaW5pc2hl
ZENhbGxiYWNrKCkpCiAgICAgICAgIHByaW50ZiAoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZp
Y2F0aW9uXG4iKTsKIH0KIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0hpc3RvcnlE
ZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvSGlzdG9y
eURlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvSGlzdG9yeURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIC0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgdXBkYXQKIAogLSAodm9pZClwb3B1bGF0
ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3CiB7Ci0gICAgaWYgKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFZpc2l0ZWRMaW5rc0NhbGxiYWNrKCkpCisgICAgaWYg
KGdUZXN0UnVubmVyLT5kdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2soKSkKICAgICAgICAgcHJpbnRm
KCJBc2tlZCB0byBwb3B1bGF0ZSB2aXNpdGVkIGxpbmtzIGZvciBXZWJWaWV3IFwiJXNcIlxuIiwg
W1tbTlNVUkwgVVJMV2l0aFN0cmluZzpbd2ViVmlldyBtYWluRnJhbWVVUkxdXSBfZHJ0X2Rlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XSBVVEY4U3RyaW5nXSk7CiB9CiAKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9QaXhlbER1bXBTdXBwb3J0TWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9QaXhlbER1bXBTdXBwb3J0TWFjLm1tCShyZXZp
c2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUGl4ZWxEdW1wU3VwcG9y
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg0LDggKzE4NCw4IEBAIFBhc3NSZWZQdHI8Qml0
bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ28KIAogUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBj
cmVhdGVQYWdlZEJpdG1hcENvbnRleHQoKQogewotICAgIGludCBwYWdlV2lkdGhJblBpeGVscyA9
IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgaW50IHBhZ2VIZWlnaHRJ
blBpeGVscyA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0OworICAgIGludCBw
YWdlV2lkdGhJblBpeGVscyA9IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAgICBpbnQgcGFn
ZUhlaWdodEluUGl4ZWxzID0gVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodDsKICAgICBpbnQgbnVt
YmVyT2ZQYWdlcyA9IFttYWluRnJhbWUgbnVtYmVyT2ZQYWdlczpwYWdlV2lkdGhJblBpeGVsczpw
YWdlSGVpZ2h0SW5QaXhlbHNdOwogICAgIHNpemVfdCByb3dCeXRlcyA9IDA7CiAgICAgdm9pZCog
YnVmZmVyID0gMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Qb2xpY3lEZWxlZ2F0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Qb2xpY3lEZWxlZ2F0
ZS5oCShyZXZpc2lvbiAxMjU1MDcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5
RGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE0IEBACiAKICNpbXBvcnQg
PENvY29hL0NvY29hLmg+CiAKLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworY2xhc3MgVGVz
dFJ1bm5lcjsKIAogQGludGVyZmFjZSBQb2xpY3lEZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKICAgICBC
T09MIHBlcm1pc3NpdmVEZWxlZ2F0ZTsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlclRvTm90aWZ5RG9uZTsKKyAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyVG9Ob3RpZnlEb25l
OwogfQogCiAtICh2b2lkKXNldFBlcm1pc3NpdmU6KEJPT0wpcGVybWlzc2l2ZTsKLS0gKHZvaWQp
c2V0Q29udHJvbGxlclRvTm90aWZ5RG9uZTooTGF5b3V0VGVzdENvbnRyb2xsZXIqKWNvbnRyb2xs
ZXI7CistICh2b2lkKXNldENvbnRyb2xsZXJUb05vdGlmeURvbmU6KFRlc3RSdW5uZXIqKWNvbnRy
b2xsZXI7CiAKIEBlbmQKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Qb2xpY3lEZWxl
Z2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUG9saWN5RGVs
ZWdhdGUubW0JKHJldmlzaW9uIDEyNTUwOCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Q
b2xpY3lEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIC0gKHZv
aWQpc2V0UGVybWlzc2l2ZTooQk9PTClwZXJtaXNzaXZlCiAgICAgcGVybWlzc2l2ZURlbGVnYXRl
ID0gcGVybWlzc2l2ZTsKIH0KIAotLSAodm9pZClzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOihM
YXlvdXRUZXN0Q29udHJvbGxlciopY29udHJvbGxlcgorLSAodm9pZClzZXRDb250cm9sbGVyVG9O
b3RpZnlEb25lOihUZXN0UnVubmVyKiljb250cm9sbGVyCiB7CiAgICAgY29udHJvbGxlclRvTm90
aWZ5RG9uZSA9IGNvbnRyb2xsZXI7CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
UmVzb3VyY2VMb2FkRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1Jlc291cmNlTG9hZERlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEyMSw3ICsxMjEsNyBAQCAtIChpZCl3ZWJWaWV3OiAoV2ViVmlldyAqKXd2IGlkZW50
aWZpZXJGCiB7CiAgICAgQVNTRVJUKFtbZGF0YVNvdXJjZSB3ZWJGcmFtZV0gZGF0YVNvdXJjZV0g
fHwgW1tkYXRhU291cmNlIHdlYkZyYW1lXSBwcm92aXNpb25hbERhdGFTb3VyY2VdKTsKIAotICAg
IGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxs
YmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuIFtbcmVxdWVzdCBVUkxdIF9kcnRfZGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHRdOwogCiAgICAgcmV0dXJuIEAiPHVua25vd24+IjsKQEAg
LTE0MCwyMCArMTQwLDIwIEBAIEJPT0wgaG9zdElzVXNlZEJ5U29tZVRlc3RzVG9HZW5lcmF0ZUVy
cm8KIAogLShOU1VSTFJlcXVlc3QgKil3ZWJWaWV3OiAoV2ViVmlldyAqKXd2IHJlc291cmNlOmlk
ZW50aWZpZXIgd2lsbFNlbmRSZXF1ZXN0OiAoTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCByZWRpcmVj
dFJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVkaXJlY3RSZXNwb25zZSBmcm9tRGF0YVNvdXJj
ZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAo
IWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAg
ICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAt
IHdpbGxTZW5kUmVxdWVzdCAlQCByZWRpcmVjdFJlc3BvbnNlICVAIiwgaWRlbnRpZmllciwgW3Jl
cXVlc3QgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF0sCiAgICAgICAgICAg
ICBbcmVkaXJlY3RSZXNwb25zZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
XV07CiAgICAgICAgIHByaW50ZigiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0K
IAotICAgIGlmICghZG9uZSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kZWZlck1haW5SZXNv
dXJjZURhdGFMb2FkKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgIWdUZXN0UnVubmVyLT5kZWZlck1h
aW5SZXNvdXJjZURhdGFMb2FkKCkpIHsKICAgICAgICAgW2RhdGFTb3VyY2UgX3NldERlZmVyTWFp
blJlc291cmNlRGF0YUxvYWQ6ZmFsc2VdOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCisgICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkgJiYgcmVkaXJlY3RSZXNw
b25zZSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+d2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGxPblJlZGlyZWN0KCkgJiYgcmVkaXJlY3RSZXNwb25zZSkgewogICAgICAgICBwcmlu
dGYoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICB9CkBAIC0xNjEsNyArMTYxLDcgQEAgLShOU1VSTFJlcXVlc3QgKil3ZWJWaWV3
OiAoV2ViVmlldyAqKXd2IAogICAgIE5TVVJMICp1cmwgPSBbcmVxdWVzdCBVUkxdOwogICAgIE5T
U3RyaW5nICpob3N0ID0gW3VybCBob3N0XTsKICAgICBpZiAoaG9zdCAmJiAoTlNPcmRlcmVkU2Ft
ZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNP
cmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRw
cyJdKSkgewotICAgICAgICBOU1N0cmluZyAqdGVzdFBhdGhPclVSTCA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpnTGF5b3V0VGVzdENvbnRyb2xsZXItPnRlc3RQYXRoT3JVUkwoKS5j
X3N0cigpXTsKKyAgICAgICAgTlNTdHJpbmcgKnRlc3RQYXRoT3JVUkwgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6Z1Rlc3RSdW5uZXItPnRlc3RQYXRoT3JVUkwoKS5jX3N0cigpXTsK
ICAgICAgICAgTlNTdHJpbmcgKmxvd2VyY2FzZVRlc3RQYXRoT3JVUkwgPSBbdGVzdFBhdGhPclVS
TCBsb3dlcmNhc2VTdHJpbmddOwogICAgICAgICBOU1N0cmluZyAqdGVzdEhvc3QgPSAwOwogICAg
ICAgICBpZiAoW2xvd2VyY2FzZVRlc3RQYXRoT3JVUkwgaGFzUHJlZml4OkAiaHR0cDoiXSB8fCBb
bG93ZXJjYXNlVGVzdFBhdGhPclVSTCBoYXNQcmVmaXg6QCJodHRwczoiXSkKQEAgLTE3NiwxMyAr
MTc2LDEzIEBAIC0oTlNVUkxSZXF1ZXN0ICopd2ViVmlldzogKFdlYlZpZXcgKil3diAKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAogICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKm5ld1JlcXVlc3QgPSBb
cmVxdWVzdCBtdXRhYmxlQ29weV07Ci0gICAgY29uc3Qgc2V0PHN0cmluZz4mIGNsZWFySGVhZGVy
cyA9IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXJzKCk7
CisgICAgY29uc3Qgc2V0PHN0cmluZz4mIGNsZWFySGVhZGVycyA9IGdUZXN0UnVubmVyLT53aWxs
U2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKTsKICAgICBmb3IgKHNldDxzdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBoZWFkZXIgPSBjbGVhckhlYWRlcnMuYmVnaW4oKTsgaGVhZGVyICE9IGNsZWFySGVh
ZGVycy5lbmQoKTsgKytoZWFkZXIpIHsKICAgICAgICAgTlNTdHJpbmcgKm5zSGVhZGVyID0gW1tO
U1N0cmluZyBhbGxvY10gaW5pdFdpdGhVVEY4U3RyaW5nOmhlYWRlci0+Y19zdHIoKV07CiAgICAg
ICAgIFtuZXdSZXF1ZXN0IHNldFZhbHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6bnNIZWFkZXJd
OwogICAgICAgICBbbnNIZWFkZXIgcmVsZWFzZV07CiAgICAgfQotICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBkZXN0aW5hdGlvbiA9IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+cmVkaXJlY3Rpb25EZXN0
aW5hdGlvbkZvclVSTChbW3VybCBhYnNvbHV0ZVN0cmluZ10gVVRGOFN0cmluZ10pOworICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBkZXN0aW5hdGlvbiA9IGdUZXN0UnVubmVyLT5yZWRpcmVjdGlvbkRl
c3RpbmF0aW9uRm9yVVJMKFtbdXJsIGFic29sdXRlU3RyaW5nXSBVVEY4U3RyaW5nXSk7CiAgICAg
aWYgKGRlc3RpbmF0aW9uLmxlbmd0aCgpKQogICAgICAgICBbbmV3UmVxdWVzdCBzZXRVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmRlc3RpbmF0
aW9uLmRhdGEoKV1dXTsKIApAQCAtMTkxLDcgKzE5MSw3IEBAIC0oTlNVUkxSZXF1ZXN0ICopd2Vi
VmlldzogKFdlYlZpZXcgKil3diAKIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd3YgcmVz
b3VyY2U6KGlkKWlkZW50aWZpZXIgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihO
U1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlIGZyb21EYXRhU291cmNlOihX
ZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQogewotICAgIGlmICghZ0xheW91dFRlc3RDb250cm9s
bGVyLT5oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKCkpIHsKKyAgICBpZiAoIWdUZXN0
UnVubmVyLT5oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKCkpIHsKICAgICAgICAgTlNT
dHJpbmcgKnN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSBTaW11bGF0aW5nIGNhbmNlbGxlZCBhdXRoZW50
aWNhdGlvbiBzaGVldCIsIGlkZW50aWZpZXJdOwogICAgICAgICBwcmludGYoIiVzXG4iLCBbc3Ry
aW5nIFVURjhTdHJpbmddKTsKIApAQCAtMTk5LDEwICsxOTksMTAgQEAgLSAodm9pZCl3ZWJWaWV3
OihXZWJWaWV3ICopd3YgcmVzb3VyY2U6KAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGNvbnN0IGNoYXIqIHVzZXIgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmF1dGhlbnRpY2F0
aW9uVXNlcm5hbWUoKS5jX3N0cigpOworICAgIGNvbnN0IGNoYXIqIHVzZXIgPSBnVGVzdFJ1bm5l
ci0+YXV0aGVudGljYXRpb25Vc2VybmFtZSgpLmNfc3RyKCk7CiAgICAgTlNTdHJpbmcgKm5zVXNl
ciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMiLCB1c2VyID8gdXNlciA6ICIiXTsK
IAotICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5hdXRo
ZW50aWNhdGlvblBhc3N3b3JkKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9
IGdUZXN0UnVubmVyLT5hdXRoZW50aWNhdGlvblBhc3N3b3JkKCkuY19zdHIoKTsKICAgICBOU1N0
cmluZyAqbnNQYXNzd29yZCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMiLCBwYXNz
d29yZCA/IHBhc3N3b3JkIDogIiJdOwogCiAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgLSBSZXNwb25kaW5nIHdpdGggJUA6JUAiLCBpZGVudGlmaWVyLCBuc1VzZXIsIG5zUGFzc3dv
cmRdOwpAQCAtMjE4LDExICsyMTgsMTEgQEAgLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd3Yg
cmVzb3VyY2U6KAogCiAtKHZvaWQpd2ViVmlldzogKFdlYlZpZXcgKil3diByZXNvdXJjZTppZGVu
dGlmaWVyIGRpZFJlY2VpdmVSZXNwb25zZTogKE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZSBmcm9t
RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsK
KyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSkgewogICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQCAtIGRpZFJlY2VpdmVSZXNwb25zZSAlQCIsIGlkZW50aWZpZXIsIFtyZXNwb25zZSBf
ZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XV07CiAgICAgICAgIHByaW50Zigi
JXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwogICAgIH0KLSAgICBpZiAoIWRvbmUgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQorICAg
IGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMo
KSkKICAgICAgICAgcHJpbnRmKCIlcyBoYXMgTUlNRSB0eXBlICVzXG4iLCBbW1tbcmVzcG9uc2Ug
VVJMXSByZWxhdGl2ZVBhdGhdIGxhc3RQYXRoQ29tcG9uZW50XSBVVEY4U3RyaW5nXSwgW1tyZXNw
b25zZSBNSU1FVHlwZV0gVVRGOFN0cmluZ10pOwogfQogCkBAIC0yMzIsNyArMjMyLDcgQEAgLSh2
b2lkKXdlYlZpZXc6IChXZWJWaWV3ICopd3YgcmVzb3VyY2U6aQogCiAtKHZvaWQpd2ViVmlldzog
KFdlYlZpZXcgKil3diByZXNvdXJjZTppZGVudGlmaWVyIGRpZEZpbmlzaExvYWRpbmdGcm9tRGF0
YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKLSAgICBpZiAoIWRvbmUgJiYg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAg
ICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkg
ewogICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlQCAtIGRpZEZpbmlzaExvYWRpbmciLCBpZGVudGlmaWVyXTsKICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAgICAgfQpAQCAtMjQwLDcgKzI0MCw3IEBAIC0o
dm9pZCl3ZWJWaWV3OiAoV2ViVmlldyAqKXd2IHJlc291cmNlOmkKIAogLSh2b2lkKXdlYlZpZXc6
IChXZWJWaWV3ICopd3YgcmVzb3VyY2U6aWRlbnRpZmllciBkaWRGYWlsTG9hZGluZ1dpdGhFcnJv
cjooTlNFcnJvciAqKWVycm9yIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNv
dXJjZQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVt
cFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6
ICVAIiwgaWRlbnRpZmllciwgW2Vycm9yIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RS
ZXN1bHRdXTsKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgW3N0cmluZyBVVEY4U3RyaW5nXSk7CiAg
ICAgfQpAQCAtMjU1LDcgKzI1NSw3IEBAIC0gKHZvaWQpd2ViVmlldzogKFdlYlZpZXcgKil3diBw
bHVnSW5GYWkKIAogLShOU0NhY2hlZFVSTFJlc3BvbnNlICopIHdlYlZpZXc6IChXZWJWaWV3ICop
d3YgcmVzb3VyY2U6KGlkKWlkZW50aWZpZXIgd2lsbENhY2hlUmVzcG9uc2U6KE5TQ2FjaGVkVVJM
UmVzcG9uc2UgKilyZXNwb25zZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFT
b3VyY2UKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wV2ls
bENhY2hlUmVzcG9uc2UoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFdp
bGxDYWNoZVJlc3BvbnNlKCkpIHsKICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgLSB3aWxsQ2FjaGVSZXNwb25zZTogY2FsbGVkIiwgaWRl
bnRpZmllcl07CiAgICAgICAgIHByaW50ZigiJXNcbiIsIFtzdHJpbmcgVVRGOFN0cmluZ10pOwog
ICAgIH0KQEAgLTI2NiwxMSArMjY2LDExIEBAIC0oQk9PTCl3ZWJWaWV3OiAoV2ViVmlldyopd2Vi
VmlldyBzaG91bGQKIHsKICAgICAvLyBPbmx5IGxvZyB0aGUgbWVzc2FnZSB3aGVuIHNob3VsZFBh
aW50QnJva2VuSW1hZ2UoKSByZXR1cm5zIE5POyB0aGlzIGF2b2lkcyBjaGFuZ2luZyByZXN1bHRz
IG9mIGxheW91dCB0ZXN0cyB3aXRoIGZhaWxlZAogICAgIC8vIGltYWdlcywgZS5nLiwgc2VjdXJp
dHkvYmxvY2stdGVzdC1uby1wb3J0Lmh0bWwuCi0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpICYmICFnTGF5b3V0VGVzdENv
bnRyb2xsZXItPnNob3VsZFBhaW50QnJva2VuSW1hZ2UoKSkgeworICAgIGlmICghZG9uZSAmJiBn
VGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpICYmICFnVGVzdFJ1bm5lci0+
c2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpKSB7CiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIC0gc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTog
Tk8iLCBbaW1hZ2VVUkwgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF1dOwog
ICAgICAgICBwcmludGYoIiVzXG4iLCBbc3RyaW5nIFVURjhTdHJpbmddKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gZ0xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGRQYWludEJyb2tlbkltYWdlKCk7
CisgICAgcmV0dXJuIGdUZXN0UnVubmVyLT5zaG91bGRQYWludEJyb2tlbkltYWdlKCk7CiB9CiBA
ZW5kCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkocmV2
aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNywxMSArMTA3LDExIEBAIC0gKE5TSW50ZWdlcil0YWcK
IAogQGVuZAogCi1MYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkK
K1Rlc3RSdW5uZXI6On5UZXN0UnVubmVyKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCit2b2lkIFRlc3RSdW5uZXI6
OmFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdXJsKSk7CiAKQEAgLTEyNSwxNyArMTI1LDE3IEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZERpc2FsbG93ZWQKICAgICBDRlNldEFkZFZhbHVlKGRpc2FsbG93ZWRVUkxz
LCBbcmVxdWVzdCBVUkxdKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNo
b3VsZENsb3NlT25XZWJWaWV3KCkKK2Jvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25X
ZWJWaWV3KCkKIHsKICAgICByZXR1cm4gW1ttYWluRnJhbWUgd2ViVmlld10gc2hvdWxkQ2xvc2Vd
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2Fj
aGVzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7CiAg
ICAgW1dlYkFwcGxpY2F0aW9uQ2FjaGUgZGVsZXRlQWxsQXBwbGljYXRpb25DYWNoZXNdOwogfQog
Ci1sb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNh
Z2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQorbG9uZyBsb25nIFRlc3RSdW5uZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQogewogICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CiAgICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdp
biA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOihOU1N0cmluZyAqKXVybENGLmdldCgpXV07CkBAIC0xNDQsMTIgKzE0NCwxMiBAQCBs
b25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0CiAgICAgcmV0dXJuIHVzYWdl
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7CiAgICAgW1tXZWJTdG9yYWdlTWFu
YWdlciBzaGFyZWRXZWJTdG9yYWdlTWFuYWdlcl0gc3luY0xvY2FsU3RvcmFnZV07CiB9CiAKLWxv
bmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3Jp
Z2luKEpTU3RyaW5nUmVmIHVybCkKK2xvbmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VE
aXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgdXJsKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXJsQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdXJsKSk7CiAgICAgV2ViU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IFtbV2ViU2Vj
dXJpdHlPcmlnaW4gYWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0
cmluZyAqKXVybENGLmdldCgpXV07CkBAIC0xNTgsMTIgKzE1OCwxMiBAQCBsb25nIGxvbmcgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvCiAgICAgcmV0dXJuIHVzYWdlOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KHVuc2lnbmVkIG51bWJlcikKK3ZvaWQgVGVzdFJ1bm5lcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAgW3N0b3JhZ2VEZWxlZ2F0ZSBs
b2dOb3RpZmljYXRpb25zOm51bWJlciBjb250cm9sbGVyOnRoaXNdOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdS
ZWYgdXJsKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4o
SlNTdHJpbmdSZWYgdXJsKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsQ0YoQWRv
cHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CiAK
QEAgLTE4NiwzMiArMTg2LDMyIEBAIEpTVmFsdWVSZWYgb3JpZ2luc0FycmF5VG9KUyhKU0NvbnRl
eHRSZWYKICAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291bnQsIGpzT3Jp
Z2luc0FycmF5LCBOVUxMKTsKIH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1
ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVm
IGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIG9yaWdpbnNBcnJheVRvSlMoY29udGV4dCwgW1dlYkFw
cGxpY2F0aW9uQ2FjaGUgb3JpZ2luc1dpdGhDYWNoZV0pOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxs
RGF0YWJhc2VzKCkKIHsKICAgICBbW1dlYkRhdGFiYXNlTWFuYWdlciBzaGFyZWRXZWJEYXRhYmFz
ZU1hbmFnZXJdIGRlbGV0ZUFsbERhdGFiYXNlc107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFs
bExvY2FsU3RvcmFnZSgpCiB7CiAgICAgW1tXZWJTdG9yYWdlTWFuYWdlciBzaGFyZWRXZWJTdG9y
YWdlTWFuYWdlcl0gZGVsZXRlQWxsT3JpZ2luc107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCit2
b2lkIFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUgaW50
ZXJ2YWwpCiB7CiAgICAgW1dlYlN0b3JhZ2VNYW5hZ2VyIHNldFN0b3JhZ2VEYXRhYmFzZUlkbGVJ
bnRlcnZhbDppbnRlcnZhbF07CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJl
ZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4
dCkKIHsKICAgICByZXR1cm4gb3JpZ2luc0FycmF5VG9KUyhjb250ZXh0LCBbW1dlYlN0b3JhZ2VN
YW5hZ2VyIHNoYXJlZFdlYlN0b3JhZ2VNYW5hZ2VyXSBvcmlnaW5zXSk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1Jl
ZiBVUkwpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0
cmluZ1JlZiBVUkwpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENG
LCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVUkwpKTsKICAgICAK
QEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2Nh
bFN0CiAgICAgW29yaWdpbiByZWxlYXNlXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3
YXJkTGlzdCgpCiB7CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0ICpiYWNrRm9yd2FyZExpc3QgPSBb
W21haW5GcmFtZSB3ZWJWaWV3XSBiYWNrRm9yd2FyZExpc3RdOwogICAgIFdlYkhpc3RvcnlJdGVt
ICppdGVtID0gW1tiYWNrRm9yd2FyZExpc3QgY3VycmVudEl0ZW1dIHJldGFpbl07CkBAIC0yMzUs
MjYgKzIzNSwyNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3CiAg
ICAgW2l0ZW0gcmVsZWFzZV07CiB9CiAKLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitKU1N0cmluZ1JlZiBUZXN0
UnVubmVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCiB7CiAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSkpOwogICAgIE5TU3RyaW5nICpuYW1lTlMgPSAoTlNT
dHJpbmcgKiluYW1lQ0YuZ2V0KCk7CiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3Ry
aW5nKChDRlN0cmluZ1JlZilbbmFtZU5TIF93ZWJfZGVjb2RlSG9zdE5hbWVdKTsKIH0KIAotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJp
bmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUo
SlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWVDRihB
ZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1lKSk7
CiAgICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQoKTsKICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtuYW1lTlMgX3dl
Yl9lbmNvZGVIb3N0TmFtZV0pOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNw
bGF5KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7CiAgICAgZGlzcGxheVdlYlZpZXco
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9p
ZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiB7CiAgICAgaWYgKCFbV2ViSGlzdG9yeSBv
cHRpb25hbFNoYXJlZEhpc3RvcnldKSB7CiAgICAgICAgIFdlYkhpc3RvcnkgKmhpc3RvcnkgPSBb
W1dlYkhpc3RvcnkgYWxsb2NdIGluaXRdOwpAQCAtMjYzLDE4ICsyNjMsMTggQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcgogICAgIH0KIH0KIAotSlNWYWx1ZVJlZiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQorSlNWYWx1ZVJlZiBUZXN0UnVu
bmVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7ICAgCiAgICAgcmV0dXJuIFtbbWFpbkZyYW1lIHdlYlZp
ZXddIF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86Y29udGV4dCBmb3JFbGVtZW50
OnZhbHVlXTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRl
c3RSdW5uZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CiB7CiAgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHN0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKVttYWluRnJhbWUgX2xheWVyVHJlZUFzVGV4dF0pKTsKICAgICByZXR1cm4gc3RyaW5n
OwogfQogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1h
cmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2Rl
T2JqZWN0KSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Om1hcmtl
clRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2Jq
ZWN0KSBjb25zdAogewogICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbRE9NRWxlbWVudCBfRE9N
RWxlbWVudEZyb21KU0NvbnRleHQ6Y29udGV4dCB2YWx1ZTpub2RlT2JqZWN0XTsKICAgICBpZiAo
IWVsZW1lbnQpCkBAIC0yODQsNDUgKzI4NCw0NSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
TGF5b3V0VGVzdENvbnRyCiAgICAgcmV0dXJuIG1hcmtlclRleHQ7CiB9CiAKLUpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNo
YXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CitKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gVGVzdFJ1bm5lcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHByb3BlcnR5VmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmlu
Z1JlZilbbWFpbkZyYW1lIHBhZ2VQcm9wZXJ0eTpwcm9wZXJ0eU5hbWU6cGFnZU51bWJlcl0pKTsK
ICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFn
ZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2lu
UmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAorSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGlu
dCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBt
YXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0CiB7CiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5VmFsdWUoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilbbWFpbkZyYW1lIHBhZ2VTaXplQW5kTWFy
Z2luc0luUGl4ZWxzOnBhZ2VOdW1iZXI6d2lkdGg6aGVpZ2h0Om1hcmdpblRvcDptYXJnaW5SaWdo
dDptYXJnaW5Cb3R0b206bWFyZ2luTGVmdF0pKTsKICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsK
IH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VX
aWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMpCitpbnQgVGVzdFJ1bm5lcjo6
bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGhJblBpeGVscywgZmxvYXQgcGFnZUhlaWdodElu
UGl4ZWxzKQogewogICAgIHJldHVybiBbbWFpbkZyYW1lIG51bWJlck9mUGFnZXM6cGFnZVdpZHRo
SW5QaXhlbHM6cGFnZUhlaWdodEluUGl4ZWxzXTsKIH0KIAotaW50IExheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCitpbnQg
VGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMo
KQogewogICAgIHJldHVybiBbW1ttYWluRnJhbWUgd2ViVmlld10gVUlEZWxlZ2F0ZV0gbnVtYmVy
T2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHNdOwogfQogCi1zaXplX3QgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQorc2l6ZV90IFRlc3RSdW5u
ZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQogewogICAgIHJldHVybiBbW1tXZWJIaXN0b3J5IG9w
dGlvbmFsU2hhcmVkSGlzdG9yeV0gYWxsSXRlbXNdIGNvdW50XTsKIH0KIAotdW5zaWduZWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKK3Vuc2lnbmVkIFRl
c3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gW1dlYldv
cmtlcnNQcml2YXRlIHdvcmtlclRocmVhZENvdW50XTsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAorSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CiB7CiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKICAgICByZXR1cm4gcGxhdGZvcm1OYW1lOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6bm90aWZ5RG9uZSgpCiB7CiAgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGlu
Z0ZyYW1lICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQogICAgICAgICBkdW1wKCk7
CkBAIC0zNjIsMTIgKzM2MiwxMiBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6c3RyaW5nIHJlc291cmNl
Um9vdEFiCiAgICAgcmV0dXJuIHRlc3RQYXRoT3JVUkwuc3Vic3RyKDAsIGluZGV4T2ZTZXBhcmF0
b3JBZnRlckRpcmVjdG9yeU5hbWUoZXhwZWN0ZWRSb290TmFtZSwgdGVzdFBhdGhPclVSTCkpOwog
fQogCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9jYWxSZXNvdXJj
ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgbG9jYWxSZXNvdXJjZUpTU3RyaW5n
KQorSlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgbG9jYWxSZXNvdXJjZUpTU3RyaW5nKQogewogICAgIC8v
IFRoZSBwYXNzZWQgaW4gcGF0aCB3aWxsIGJlIGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc291
cmNlIHN0YXJ0aW5nCiAgICAgLy8gd2l0aCAiL3RtcCIgb3IgIi90bXAvTGF5b3V0VGVzdHMiLCBv
cHRpb25hbGx5IHN0YXJ0aW5nIHdpdGggdGhlIGV4cGxpY2l0IGZpbGU6Ly8gcHJvdG9jb2wuCiAg
ICAgLy8gL3RtcCBtYXBzIHRvIERVTVBSRU5ERVJUUkVFX1RFTVAsIGFuZCAvdG1wL0xheW91dFRl
c3RzIG1hcHMgdG8gTE9DQUxfUkVTT1VSQ0VfUk9PVC4KLSAgICAvLyBGSVhNRTogVGhpcyBjb2Rl
IHNob3VsZCB3b3JrIG9uIGFsbCAqbml4IHBsYXRmb3JtcyBhbmQgY2FuIGJlIG1vdmVkIGludG8g
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwLgorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxk
IHdvcmsgb24gYWxsICpuaXggcGxhdGZvcm1zIGFuZCBjYW4gYmUgbW92ZWQgaW50byBUZXN0UnVu
bmVyLmNwcC4KICAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFJvb3ROYW1lOwogICAgIHN0ZDo6c3Ry
aW5nIGFic29sdXRlUGF0aFRvUmVzb3VyY2VSb290OwogICAgIHN0ZDo6c3RyaW5nIGxvY2FsUmVz
b3VyY2VTdHJpbmcgPSBzdHJpbmdGcm9tSlNTdHJpbmcobG9jYWxSZXNvdXJjZUpTU3RyaW5nKTsK
QEAgLTM5Myw3ICszOTMsNyBAQCBKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0
aFRvCiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGFic29sdXRlUGF0
aFRvTG9jYWxSZXNvdXJjZS5jX3N0cigpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQordm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQp
CiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmxDRihBZG9wdENGLCBKU1N0cmluZ0Nv
cHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKICAgICBOU1N0cmluZyAqdXJs
TlMgPSAoTlNTdHJpbmcgKil1cmxDRi5nZXQoKTsKQEAgLTQwNSwxMiArNDA1LDEyIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1MKICAgICBXb3JrUXVldWU6OnNoYXJl
ZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIG5ld0Fj
Y2VwdHNFZGl0aW5nKQordm9pZCBUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIG5l
d0FjY2VwdHNFZGl0aW5nKQogewogICAgIFsoRWRpdGluZ0RlbGVnYXRlICopW1ttYWluRnJhbWUg
d2ViVmlld10gZWRpdGluZ0RlbGVnYXRlXSBzZXRBY2NlcHRzRWRpdGluZzpuZXdBY2NlcHRzRWRp
dGluZ107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENv
b2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQordm9pZCBUZXN0UnVubmVyOjpzZXRBbHdh
eXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKIHsKICAgICBpZiAoYWx3
YXlzQWNjZXB0Q29va2llcyA9PSBtX2Fsd2F5c0FjY2VwdENvb2tpZXMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQyMCwyNCArNDIwLDI0IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
d2F5c0FjY2UKICAgICBbV2ViUHJlZmVyZW5jZXMgX3NldEN1cnJlbnROZXR3b3JrTG9hZGVyU2Vz
c2lvbkNvb2tpZUFjY2VwdFBvbGljeTpjb29raWVBY2NlcHRQb2xpY3ldOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplKQordm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2ln
bmVkIGxvbmcgbG9uZyBzaXplKQogewogICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIHNldE1heGlt
dW1TaXplOnNpemVdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQordm9pZCBUZXN0
UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKQogewogICAgIFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5
T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8x
MjcuMC4wLjE6ODAwMCJdXTsKICAgICBbW29yaWdpbiBhcHBsaWNhdGlvbkNhY2hlUXVvdGFNYW5h
Z2VyXSBzZXRRdW90YTpxdW90YV07CiAgICAgW29yaWdpbiByZWxlYXNlXTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBm
bGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29s
IGZsYWcpCiB7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZDpmbGFnXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2Rl
T2JqZWN0LCBib29sIGF1dG9maWxsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmls
bGVkKQogewogICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbRE9NRWxlbWVudCBfRE9NRWxlbWVu
dEZyb21KU0NvbnRleHQ6Y29udGV4dCB2YWx1ZTpub2RlT2JqZWN0XTsKICAgICBpZiAoIWVsZW1l
bnQgfHwgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3Nd
XSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRv
ZmlsbGVkCiAgICAgWyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCBfc2V0QXV0b2ZpbGxl
ZDphdXRvZmlsbGVkXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUoYm9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29s
IHBlcm1pc3NpdmUpCiB7CiAgICAgaWYgKHNldERlbGVnYXRlKSB7CiAgICAgICAgIFtwb2xpY3lE
ZWxlZ2F0ZSBzZXRQZXJtaXNzaXZlOnBlcm1pc3NpdmVdOwpAQCAtNDU1LDMwICs0NTUsMzAgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saQogICAgICAgICBbW21haW5G
cmFtZSB3ZWJWaWV3XSBzZXRQb2xpY3lEZWxlZ2F0ZTpuaWxdOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVv
dGEpCiB7ICAgIAogICAgIFdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBbW1dlYlNlY3VyaXR5
T3JpZ2luIGFsbG9jXSBpbml0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8v
Il1dOwogICAgIFtbb3JpZ2luIGRhdGFiYXNlUXVvdGFNYW5hZ2VyXSBzZXRRdW90YTpxdW90YV07
CiAgICAgW29yaWdpbiByZWxlYXNlXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Z29CYWNrKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKICAgICBbW21haW5GcmFtZSB3
ZWJWaWV3XSBnb0JhY2tdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZl
cnNMb2FkaW5nKGJvb2wgZGVmZXJzKQordm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzKQogewogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldERlZmVyc0NhbGxi
YWNrczpkZWZlcnNdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1Jl
ZiBzY2hlbWUpCit2b2lkIFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKIHsKICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjaGVtZUNGU3RyaW5nKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNjaGVtZSkpOwogICAgIFtXZWJWaWV3IF9z
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuOmZvcmJpZGRlbiBmb3JVUkxTY2hlbWU6KE5TU3Ry
aW5nICopc2NoZW1lQ0ZTdHJpbmcuZ2V0KCldOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJs
ZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlk
ZUdhbW1hLCBkb3VibGUgZ2FtbWEpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmll
bnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3Zp
ZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkK
IHsKICAgICAvLyBEdW1wUmVuZGVyVHJlZSBjb25maWd1cmVkIHRoZSBXZWJWaWV3IHRvIHVzZSBX
ZWJEZXZpY2VPcmllbnRhdGlvblByb3ZpZGVyTW9jay4KICAgICBpZDxXZWJEZXZpY2VPcmllbnRh
dGlvblByb3ZpZGVyPiBwcm92aWRlciA9IFtbbWFpbkZyYW1lIHdlYlZpZXddIF9kZXZpY2VPcmll
bnRhdGlvblByb3ZpZGVyXTsKQEAgLTQ4OCwxNCArNDg4LDE0IEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tEZXZpY2UKICAgICBbb3JpZW50YXRpb24gcmVsZWFzZV07CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRv
dWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQordm9pZCBU
ZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKIHsKICAgICBXZWJHZW9sb2NhdGlvblBv
c2l0aW9uICpwb3NpdGlvbiA9IFtbV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiBhbGxvY10gaW5pdFdp
dGhUaW1lc3RhbXA6Y3VycmVudFRpbWUoKSBsYXRpdHVkZTpsYXRpdHVkZSBsb25naXR1ZGU6bG9u
Z2l0dWRlIGFjY3VyYWN5OmFjY3VyYWN5XTsKICAgICBbW01vY2tHZW9sb2NhdGlvblByb3ZpZGVy
IHNoYXJlZF0gc2V0UG9zaXRpb246cG9zaXRpb25dOwogICAgIFtwb3NpdGlvbiByZWxlYXNlXTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3Io
aW50IGNvZGUsIEpTU3RyaW5nUmVmIG1lc3NhZ2UpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tH
ZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQogewogICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbWVzc2FnZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1lc3NhZ2UpKTsKICAgICBOU1N0cmluZyAqbWVzc2Fn
ZU5TID0gKE5TU3RyaW5nICopbWVzc2FnZUNGLmdldCgpOwpAQCAtNTAzLDMxICs1MDMsMzEgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvYwogICAgIFtbTW9ja0dlb2xv
Y2F0aW9uUHJvdmlkZXIgc2hhcmVkXSBzZXRFcnJvcjplcnJvcl07CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQordm9p
ZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsKICAg
ICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwogICAgIFtbW21haW5GcmFt
ZSB3ZWJWaWV3XSBVSURlbGVnYXRlXSBkaWRTZXRNb2NrR2VvbG9jYXRpb25QZXJtaXNzaW9uXTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0
KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1
YWdlKQordm9pZCBUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdS
ZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVj
dChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0
KGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQg
bGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3Bl
ZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c3Rh
cnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRh
YmFzZUVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9v
bCBpY29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8vIEZJWE1FOiBXb3JrYXJvdW5kIDxyZGFy
Oi8vcHJvYmxlbS82NDgwMTA4PgogICAgIHN0YXRpYyBXZWJJY29uRGF0YWJhc2UgKnNoYXJlZFdl
Ykljb25EYXRhYmFzZSA9IE5VTEw7CkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYQogICAgIFtzaGFyZWRXZWJJY29uRGF0YWJhc2Ugc2V0
RW5hYmxlZDppY29uRGF0YWJhc2VFbmFibGVkXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpCit2b2lkIFRlc3RS
dW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQogewogICAgIE5T
VmlldyAqZG9jdW1lbnRWaWV3ID0gW1ttYWluRnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
OwogICAgIApAQCAtNTQ5LDc5ICs1NDksNzkgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TWFpbkZyYW1lSQogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIG1ha2VGaXJz
dFJlc3BvbmRlcjpmaXJzdFJlc3BvbmRlcl07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVk
KQordm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5j
ZXNdIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQ6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZF07CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0WFNTQXVk
aXRvckVuYWJsZWQ6ZW5hYmxlZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBbW1ttYWluRnJh
bWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQ6ZW5hYmxl
ZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHBy
ZWZlcmVuY2VzXSBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQ6ZW5hYmxlZF07CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nl
c3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3
XSBwcmVmZXJlbmNlc10gc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6ZW5hYmxl
ZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFj
Y2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCiB7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZp
ZXddIHByZWZlcmVuY2VzXSBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHM6ZW5hYmxlZF07
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVk
KGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxv
Y2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQpCiB7CiAgICAgW1tbbWFpbkZy
YW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRv
bWF0aWNhbGx5OiFwb3B1cEJsb2NraW5nRW5hYmxlZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgcGx1Z2luc0VuYWJsZWQpCit2b2lkIFRl
c3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgcGx1Z2luc0VuYWJsZWQpCiB7CiAgICAg
W1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRQbHVnSW5zRW5hYmxlZDpwbHVn
aW5zRW5hYmxlZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBbW1ttYWlu
RnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQ6ZW5hYmxlZF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9tYXRp
Y0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFtbbWFp
bkZyYW1lIHdlYlZpZXddIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOmVuYWJsZWRd
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoYm9vbCBjeWNsZXMpCit2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhib29sIGN5Y2xlcykKIHsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBz
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM6Y3ljbGVzXTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFn
KQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29s
IGZsYWcpCiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gX3NldERhc2hib2FyZEJlaGF2aW9y
OldlYkRhc2hib2FyZEJlaGF2aW9yVXNlQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSB0bzpmbGFn
XTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVk
KGJvb2wgZmxhZykKIHsKICAgICBbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNd
IHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZDpmbGFnXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgp
CiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoQ0YoQWRvcHRDRiwgSlNTdHJpbmdD
b3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGF0aCkpOwogICAgIE5TVVJMICp1cmwg
PSBbTlNVUkwgVVJMV2l0aFN0cmluZzooTlNTdHJpbmcgKilwYXRoQ0YuZ2V0KCldOwogICAgIFtb
V2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbjp1cmxdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVz
ZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdS
ZWYgdmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAg
ICBET01FbGVtZW50ICplbGVtZW50ID0gW0RPTUVsZW1lbnQgX0RPTUVsZW1lbnRGcm9tSlNDb250
ZXh0OmNvbnRleHQgdmFsdWU6bm9kZU9iamVjdF07CiAgICAgaWYgKCFlbGVtZW50IHx8ICFbZWxl
bWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MSW5wdXRFbGVtZW50IGNsYXNzXV0pCkBAIC02MzEs
MjIgKzYzMSwyMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzCiAg
ICAgWyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCBfc2V0VmFsdWVGb3JVc2VyOihOU1N0
cmluZyAqKXZhbHVlQ0YuZ2V0KCldOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQordm9pZCBUZXN0UnVubmVy
OjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQogewogICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUlt
YWdlTG9hZGluZygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQogewog
ICAgIFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gc2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5Ok5PXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0
Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGF0Y2hQZW5kaW5n
TG9hZFJlcXVlc3RzKCkKIHsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfZGlzcGF0Y2hQZW5k
aW5nTG9hZFJlcXVlc3RzXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCit2b2lkIFRl
c3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVm
IHZhbHVlKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4ga2V5Q0YoQWRvcHRDRiwgSlNT
dHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5KSk7CiAgICAgTlNTdHJp
bmcgKmtleU5TID0gKE5TU3RyaW5nICopa2V5Q0YuZ2V0KCk7CkBAIC02NTcsMzQgKzY1NywzNCBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlCiAgICAgW1tXZWJQcmVm
ZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBfc2V0UHJlZmVyZW5jZUZvclRlc3RXaXRoVmFs
dWU6dmFsdWVOUyBmb3JLZXk6a2V5TlNdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQordm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxWaXNp
dGVkTGlua3MoKQogewogICAgIFtXZWJIaXN0b3J5IF9yZW1vdmVBbGxWaXNpdGVkTGlua3NdOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGVyc2lz
dGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCiB7CiAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiB1cmxTdHJpbmcoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoMCwganNVUkwpKTsKICAgICA6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KHVybFN0cmluZy5nZXQoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFy
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXQoKQogewogICAgIDo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oMCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lz
S2V5KGJvb2wgd2luZG93SXNLZXkpCit2b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJv
b2wgd2luZG93SXNLZXkpCiB7CiAgICAgbV93aW5kb3dJc0tleSA9IHdpbmRvd0lzS2V5OwogICAg
IFtbbWFpbkZyYW1lIHdlYlZpZXddIF91cGRhdGVBY3RpdmVTdGF0ZV07CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVk
OmZsYWddOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgW1ttYWluRnJhbWUg
d2ViVmlld10gc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZDpmbGFnXTsKIH0KQEAg
LTY5MywyMiArNjkzLDIyIEBAIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCB3YWl0VG9EdW1w
V2EKIAogc3RhdGljIHZvaWQgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQoQ0ZSdW5Mb29wVGlt
ZXJSZWYgdGltZXIsIHZvaWQqIGluZm8pCiB7Ci0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgZ1Rlc3RSdW5uZXItPndhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFdh
aXRUb0R1bXAoYm9vbCB3YWl0VW50aWxEb25lKQogewogICAgIG1fd2FpdFRvRHVtcCA9IHdhaXRV
bnRpbERvbmU7CiAgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiBzaG91bGRTZXRXYWl0VG9EdW1wV2F0
Y2hkb2coKSkKICAgICAgICAgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKENGUnVuTG9vcFRpbWVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgd2Fp
dFRvRHVtcFdhdGNoZG9nSW50ZXJ2YWwsIDAsIDAsIDAsIHdhaXRVbnRpbERvbmVXYXRjaGRvZ0Zp
cmVkLCBOVUxMKSk7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQo
KQoraW50IFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KCkKIHsKICAgICByZXR1cm4gQ0ZBcnJheUdl
dENvdW50KG9wZW5XaW5kb3dzUmVmKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGpzU3Ry
aW5nKQorYm9vbCBUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRX
aXRoSWQoSlNTdHJpbmdSZWYganNTdHJpbmcpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBpZENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGpzU3RyaW5nKSk7CiAgICAgTlNTdHJpbmcgKmlkTlMgPSAoTlNTdHJpbmcgKilpZENGLmdldCgp
OwpAQCAtNzIyLDcgKzcyMiw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnRE
b2VzQXUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBU
ZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1
ZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWVDRihBZG9wdENGLCBKU1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1lKSk7CiAgICAgTlNTdHJpbmcg
Km5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQoKTsKQEAgLTczMyw3ICs3MzMsNyBAQCB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKCiAgICAgW1ttYWluRnJhbWUg
d2ViVmlld10gX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpuYW1lTlMgdmFsdWU6dmFsdWVOU107
CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQor
Ym9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKIHsKICAgICBXZWJGaW5kT3B0
aW9ucyBvcHRpb25zID0gMDsKIApAQCAtNzY5LDEyICs3NjksMTIgQEAgYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKUwogICAgIHJldHVybiBbW21haW5GcmFtZSB3ZWJWaWV3
XSBmaW5kU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldENGU3RyaW5nLmdldCgpIG9wdGlvbnM6b3B0
aW9uc107CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50
IGNhY2hlTW9kZWwpCit2b2lkIFRlc3RSdW5uZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9k
ZWwpCiB7CiAgICAgW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBzZXRDYWNo
ZU1vZGVsOmNhY2hlTW9kZWxdOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0Nv
bW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCitib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFu
ZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IG5hbWVDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBuYW1lKSk7CiAgICAgTlNTdHJpbmcgKm5hbWVOUyA9IChOU1N0cmluZyAqKW5hbWVDRi5nZXQo
KTsKQEAgLTc5OCw3ICs3OTgsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1h
bmRFbmFiCiAgICAgcmV0dXJuIFt2YWxpZGF0b3IgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTp0
YXJnZXQuZ2V0KCldOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVyOjpwYXVzZUFu
aW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gaWRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBlbGVtZW50SWQpKTsKICAgICBOU1N0cmluZyAqaWROUyA9IChOU1N0cmluZyAqKWlk
Q0YuZ2V0KCk7CkBAIC04MDgsNyArODA4LDcgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGF1c2VBbmltYXRpbwogICAgIHJldHVybiBbbWFpbkZyYW1lIF9wYXVzZUFuaW1hdGlvbjpuYW1l
TlMgb25Ob2RlOltbbWFpbkZyYW1lIERPTURvY3VtZW50XSBnZXRFbGVtZW50QnlJZDppZE5TXSBh
dFRpbWU6dGltZV07CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNp
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJs
ZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRv
dWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7CiAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBpZENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGVsZW1lbnRJZCkpOwogICAgIE5TU3RyaW5nICppZE5TID0gKE5TU3RyaW5nICopaWRD
Ri5nZXQoKTsKQEAgLTgxOCwxOSArODE4LDE5IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnBhdXNlVHJhbnNpdGkKICAgICByZXR1cm4gW21haW5GcmFtZSBfcGF1c2VUcmFuc2l0aW9uT2ZQ
cm9wZXJ0eTpuYW1lTlMgb25Ob2RlOltbbWFpbkZyYW1lIERPTURvY3VtZW50XSBnZXRFbGVtZW50
QnlJZDppZE5TXSBhdFRpbWU6dGltZV07CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAordW5zaWduZWQgVGVzdFJ1bm5l
cjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21haW5G
cmFtZSBfbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6d2FpdEZv
clBvbGljeURlbGVnYXRlKCkKIHsKICAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwogICAgIFtwb2xp
Y3lEZWxlZ2F0ZSBzZXRDb250cm9sbGVyVG9Ob3RpZnlEb25lOnRoaXNdOwogICAgIFtbbWFpbkZy
YW1lIHdlYlZpZXddIHNldFBvbGljeURlbGVnYXRlOnBvbGljeURlbGVnYXRlXTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNT
dHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBK
U1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFp
bnMpCit2b2lkIFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3Ry
aW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNT
dHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc291cmNlT3JpZ2luQ0YoQWRvcHRDRiwg
SlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291cmNlT3JpZ2luKSk7
CiAgICAgTlNTdHJpbmcgKnNvdXJjZU9yaWdpbk5TID0gKE5TU3RyaW5nICopc291cmNlT3JpZ2lu
Q0YuZ2V0KCk7CkBAIC04NDEsNyArODQxLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YWRkT3JpZ2luQWNjZQogICAgIFtXZWJWaWV3IF9hZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eVdpdGhTb3VyY2VPcmlnaW46c291cmNlT3JpZ2luTlMgZGVzdGluYXRpb25Qcm90b2NvbDpkZXN0
aW5hdGlvblByb3RvY29sTlMgZGVzdGluYXRpb25Ib3N0OmRlc3RpbmF0aW9uSG9zdE5TIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zOmFsbG93RGVzdGluYXRpb25TdWJkb21haW5zXTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3Rv
Y29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnMpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc291cmNlT3JpZ2luQ0Yo
QWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291cmNl
T3JpZ2luKSk7CiAgICAgTlNTdHJpbmcgKnNvdXJjZU9yaWdpbk5TID0gKE5TU3RyaW5nICopc291
cmNlT3JpZ2luQ0YuZ2V0KCk7CkBAIC04NTIsNDYgKzg1Miw0NiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZW1vdmVPcmlnaW5BCiAgICAgW1dlYlZpZXcgX3JlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5V2l0aFNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW5OUyBkZXN0aW5hdGlv
blByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9jb2xOUyBkZXN0aW5hdGlvbkhvc3Q6ZGVzdGluYXRp
b25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnM6YWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnNdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xp
Y3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmIG9yaWVudGF0aW9uLCBKU1N0
cmluZ1JlZiBwb2xpY3kpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9v
bCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclNj
cmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMp
CiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VDRihBZG9wdENGLCBKU1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2UpKTsKICAgICBOU1N0cmlu
ZyAqc291cmNlTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VDRi5nZXQoKTsKICAgICBbV2ViVmlldyBf
YWRkVXNlclNjcmlwdFRvR3JvdXA6QCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIiB3b3JsZDpb
V2ViU2NyaXB0V29ybGQgd29ybGRdIHNvdXJjZTpzb3VyY2VOUyB1cmw6bmlsIHdoaXRlbGlzdDpu
aWwgYmxhY2tsaXN0Om5pbCBpbmplY3Rpb25UaW1lOihydW5BdFN0YXJ0ID8gV2ViSW5qZWN0QXRE
b2N1bWVudFN0YXJ0IDogV2ViSW5qZWN0QXREb2N1bWVudEVuZCkgaW5qZWN0ZWRGcmFtZXM6KGFs
bEZyYW1lcyA/IFdlYkluamVjdEluQWxsRnJhbWVzIDogV2ViSW5qZWN0SW5Ub3BGcmFtZU9ubHkp
XTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNl
clN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykKIHsKICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNvdXJjZUNGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNvdXJjZSkpOwogICAgIE5TU3RyaW5nICpzb3VyY2VO
UyA9IChOU1N0cmluZyAqKXNvdXJjZUNGLmdldCgpOwogICAgIFtXZWJWaWV3IF9hZGRVc2VyU3R5
bGVTaGVldFRvR3JvdXA6QCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIiB3b3JsZDpbV2ViU2Ny
aXB0V29ybGQgd29ybGRdIHNvdXJjZTpzb3VyY2VOUyB1cmw6bmlsIHdoaXRlbGlzdDpuaWwgYmxh
Y2tsaXN0Om5pbCBpbmplY3RlZEZyYW1lczooYWxsRnJhbWVzID8gV2ViSW5qZWN0SW5BbGxGcmFt
ZXMgOiBXZWJJbmplY3RJblRvcEZyYW1lT25seSldOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
W1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkOmVuYWJsZWRdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hy
b25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6
OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAg
ICBbW1ttYWluRnJhbWUgd2ViVmlld10gcHJlZmVyZW5jZXNdIHNldEFzeW5jaHJvbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzaG93V2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcigp
CiB7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIGluc3BlY3Rvcl0gc2hvdzpuaWxdOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCit2b2lkIFRl
c3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAgICBbW1ttYWluRnJhbWUgd2ViVmll
d10gaW5zcGVjdG9yXSBjbG9zZTpuaWxdOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQp
Cit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpT
U3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdENG
KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNjcmlw
dCkpOwogICAgIE5TU3RyaW5nICpzY3JpcHROUyA9IChOU1N0cmluZyAqKXNjcmlwdENGLmdldCgp
OwpAQCAtOTE2LDEyICs5MTYsMTIgQEAgdW5zaWduZWQgd29ybGRJREZvcldvcmxkKFdlYlNjcmlw
dFdvcmxkIAogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9pZCBU
ZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVu
c2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29y
bGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lk
IFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7CiAgICAgTlNTdHJpbmcgKnNjcmlw
dE5TID0gKE5TU3RyaW5nICopc2NyaXB0Q0YuZ2V0KCk7CkBAIC05NzgsNyArOTc4LDcgQEAgLSAo
dm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZpbgogCiBAZW5kCiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJp
bmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCit2b2lkIFRlc3RSdW5uZXI6OmFw
aVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3Ry
aW5nUmVmIGJhc2VVUkwpCiB7CiAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0
b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKIApAQCAtMTAwNSwxMyArMTAwNSwxMyBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luCiAgICAgW3Bvb2wgcmVsZWFzZV07
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tG
b3J3YXJkSXRlbSgpCit2b2lkIFRlc3RSdW5uZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3
YXJkSXRlbSgpCiB7CiAgICAgV2ViVmlldyAqdmlldyA9IFttYWluRnJhbWUgd2ViVmlld107CiAg
ICAgW3ZpZXcgZ29Ub0JhY2tGb3J3YXJkSXRlbTpbW3ZpZXcgYmFja0ZvcndhcmRMaXN0XSBjdXJy
ZW50SXRlbV1dOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRp
dGFibGUoYm9vbCBlZGl0YWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViVmlld0VkaXRhYmxl
KGJvb2wgZWRpdGFibGUpCiB7CiAgICAgV2ViVmlldyAqdmlldyA9IFttYWluRnJhbWUgd2ViVmll
d107CiAgICAgW3ZpZXcgc2V0RWRpdGFibGU6ZWRpdGFibGVdOwpAQCAtMTA5Miw3ICsxMDkyLDcg
QEAgKyAodm9pZCltYWtlUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdQogCiBAZW5kCiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYg
dXJsLCBKU1N0cmluZ1JlZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYgcGFzc3dvcmQpCit2b2lkIFRl
c3RSdW5uZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1Jl
ZiB1c2VybmFtZSwgSlNTdHJpbmdSZWYgcGFzc3dvcmQpCiB7CiAgICAgLy8gU2VlIDxyZGFyOi8v
cHJvYmxlbS83ODgwNjk5Pi4KICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwNjAKQEAgLTExMDYsMjIgKzExMDYsMjIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YXV0aGVudGljYXRlUwogI2VuZGlmCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFi
b3J0TW9kYWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9ydE1vZGFsKCkKIHsKICAgICBbTlNBcHAg
YWJvcnRNb2RhbF07CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6
ZUhUVFBMb2Fkcyhib29sIHNlcmlhbGl6ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXpl
SFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQogewogICAgIFtXZWJWaWV3IF9zZXRMb2FkUmVzb3Vy
Y2VzU2VyaWFsbHk6c2VyaWFsaXplXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVy
SW50ZXJ2YWwpCiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gX3NldE1pbmltdW1UaW1lcklu
dGVydmFsOm1pbmltdW1UaW1lckludGVydmFsXTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb25OYW1lKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbk5hbWUpCiB7
CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDYwCiAgICAgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uTmFtZSwgImx0ciIpKQpAQCAtMTEz
Myw3ICsxMTMzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdAog
I2VuZGlmCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0Rmll
bGQoKQordm9pZCBUZXN0UnVubmVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKIHsKICAgICBOU1Rl
eHRGaWVsZCAqdGV4dEZpZWxkID0gW1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDEwMCwgMjApXTsKICAgICB0ZXh0RmllbGQudGFnID0gMTsKQEAgLTEx
NDQsNyArMTE0NCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHUK
ICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXROZXh0S2V5Vmlldzp0ZXh0RmllbGRdOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiAgICAgTlNWaWV3KiB0
ZXh0RmllbGQgPSBbW1tbbWFpbkZyYW1lIHdlYlZpZXddIHdpbmRvd10gY29udGVudFZpZXddIHZp
ZXdXaXRoVGFnOjFdOwogICAgIGlmICh0ZXh0RmllbGQpIHsKQEAgLTExNTMsMzcgKzExNTMsMzcg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQ2hyb21lSQogICAgIH0KIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9jdXNXZWJWaWV3KCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6Zm9jdXNXZWJWaWV3KCkKIHsKICAgICBbW1ttYWluRnJhbWUgd2ViVmlld10gd2luZG93XSBt
YWtlRmlyc3RSZXNwb25kZXI6W21haW5GcmFtZSB3ZWJWaWV3XV07CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUgYmFja2luZ1NjYWxl
RmFjdG9yKQordm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJh
Y2tpbmdTY2FsZUZhY3RvcikKIHsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBfc2V0Q3VzdG9t
QmFja2luZ1NjYWxlRmFjdG9yOmJhY2tpbmdTY2FsZUZhY3Rvcl07CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKEpTU3RyaW5n
UmVmIHRpdGxlKQordm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25D
bGljayhKU1N0cmluZ1JlZiB0aXRsZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZpc2liaWxpdHko
Y29uc3QgY2hhciopCit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNo
YXIqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGl2ZXJXZWJJ
bnRlbnQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5n
UmVmKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwx
MCBAQCAtICh2b2lkKW1vZGFsV2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhCiAKIC0gKHZvaWQp
d2ViVmlld1J1bk1vZGFsOihXZWJWaWV3ICopc2VuZGVyCiB7Ci0gICAgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5zZXRXaW5kb3dJc0tleShmYWxzZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldFdpbmRv
d0lzS2V5KGZhbHNlKTsKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKG1vZGFsV2luZG93V2lsbENsb3Nl
OikgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICBb
TlNBcHAgcnVuTW9kYWxGb3JXaW5kb3c6W3NlbmRlciB3aW5kb3ddXTsKLSAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPnNldFdpbmRvd0lzS2V5KHRydWUpOworICAgIGdUZXN0UnVubmVyLT5zZXRX
aW5kb3dJc0tleSh0cnVlKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVy
IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBp
bml0aWF0ZWRCeUZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCkBAIC0xMTEsNyArMTExLDcgQEAgLSAo
Qk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopYyBydW5CZWZvcmVVbgogICAgIGlmICghZG9uZSkKICAg
ICAgICAgcHJpbnRmKCJDT05GSVJNIE5BVklHQVRJT046ICVzXG4iLCBbbWVzc2FnZSBVVEY4U3Ry
aW5nXSk7CiAgICAgCi0gICAgcmV0dXJuICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNob3VsZFN0
YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKCk7CisgICAgcmV0dXJuICFnVGVzdFJ1
bm5lci0+c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKTsKIH0KIAog
CkBAIC0xMjUsMjUgKzEyNSwyNSBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIg
ZHJhZ0ltCiAKIC0gKHZvaWQpd2ViVmlld0ZvY3VzOihXZWJWaWV3ICopd2ViVmlldwogewotICAg
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0V2luZG93SXNLZXkodHJ1ZSk7CisgICAgZ1Rlc3RS
dW5uZXItPnNldFdpbmRvd0lzS2V5KHRydWUpOwogfQogCiAtICh2b2lkKXdlYlZpZXdVbmZvY3Vz
OihXZWJWaWV3ICopd2ViVmlldwogewotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0V2lu
ZG93SXNLZXkoZmFsc2UpOworICAgIGdUZXN0UnVubmVyLT5zZXRXaW5kb3dJc0tleShmYWxzZSk7
CiB9CiAKIC0gKFdlYlZpZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGNyZWF0ZVdlYlZp
ZXdXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAogewotICAgIGlmICghZ0xheW91
dFRlc3RDb250cm9sbGVyLT5jYW5PcGVuV2luZG93cygpKQorICAgIGlmICghZ1Rlc3RSdW5uZXIt
PmNhbk9wZW5XaW5kb3dzKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgd2FpdFVudGlsRG9uZSBoYXMgYmVlbiBjYWxsZWQuCi0gICAgQVNTRVJUKGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcCgpKTsKKyAgICBBU1NFUlQoZ1Rlc3RSdW5u
ZXItPndhaXRUb0R1bXAoKSk7CiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gY3JlYXRlV2ViVmll
d0FuZE9mZnNjcmVlbldpbmRvdygpOwogICAgIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPm5ld1dpbmRvd3NDb3B5QmFja0ZvcndhcmRMaXN0KCkpCisgICAgaWYgKGdUZXN0UnVubmVy
LT5uZXdXaW5kb3dzQ29weUJhY2tGb3J3YXJkTGlzdCgpKQogICAgICAgICBbd2ViVmlldyBfbG9h
ZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6c2VuZGVyXTsKICAgICAKICAgICByZXR1cm4g
W3dlYlZpZXcgYXV0b3JlbGVhc2VdOwpAQCAtMTUzLDcgKzE1Myw3IEBAIC0gKHZvaWQpd2ViVmll
d0Nsb3NlOihXZWJWaWV3ICopc2VuZGVyCiB7CiAgICAgTlNXaW5kb3cqIHdpbmRvdyA9IFtzZW5k
ZXIgd2luZG93XTsKICAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5jYWxsQ2xvc2VP
bldlYlZpZXdzKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5jYWxsQ2xvc2VPbldlYlZpZXdzKCkp
CiAgICAgICAgIFtzZW5kZXIgY2xvc2VdOwogICAgIAogICAgIFt3aW5kb3cgY2xvc2VdOwpAQCAt
MTYxLDcgKzE2MSw3IEBAIC0gKHZvaWQpd2ViVmlld0Nsb3NlOihXZWJWaWV3ICopc2VuZGVyCiAK
IC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBmcmFtZTooV2ViRnJhbWUgKilmcmFt
ZSBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjooV2ViU2VjdXJpdHlPcmln
aW4gKilvcmlnaW4gZGF0YWJhc2U6KE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyCiB7Ci0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBEYXRhYmFzZUNhbGxi
YWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6
IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOnslcywgJXMsICVpfSBkYXRh
YmFzZTolc1xuIiwgW1tvcmlnaW4gcHJvdG9jb2xdIFVURjhTdHJpbmddLCBbW29yaWdpbiBob3N0
XSBVVEY4U3RyaW5nXSwgCiAgICAgICAgICAgICBbb3JpZ2luIHBvcnRdLCBbZGF0YWJhc2VJZGVu
dGlmaWVyIFVURjhTdHJpbmddKTsKICAgICB9CkBAIC0xNzIsNyArMTcyLDcgQEAgLSAodm9pZCl3
ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGZyYW1lOgogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZp
ZXcgKilzZW5kZXIgZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4gdG90YWxTcGFjZU5lZWRlZDooTlNV
SW50ZWdlcil0b3RhbFNwYWNlTmVlZGVkCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpKSB7Cisg
ICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRl
Q2FsbGJhY2tzKCkpIHsKICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIG51bWJlcnMgZnJvbSAzMDAw
MCAtIDM5OTk5IHdpbGwgb3V0cHV0IGFzIDMwMDAwLgogICAgICAgICAvLyBSb3VuZGluZyB1cCBv
ciBkb3duIG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAgICAv
LyBzdWZmaWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlm
IHdlIHdlcmUKQEAgLTE4Miw3ICsxODIsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilz
ZW5kZXIgZXhjZWVkCiAgICAgICAgICAgICBbW29yaWdpbiBwcm90b2NvbF0gVVRGOFN0cmluZ10s
IFtbb3JpZ2luIGhvc3RdIFVURjhTdHJpbmddLCBbb3JpZ2luIHBvcnRdLCB0cnVuY2F0ZWRTcGFj
ZU5lZWRlZCk7CiAgICAgfQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQorICAgIGlmIChnVGVzdFJ1bm5l
ci0+ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRPcmln
aW5RdW90YSA9IFtXZWJBcHBsaWNhdGlvbkNhY2hlIGRlZmF1bHRPcmlnaW5RdW90YV07CkBAIC0x
OTEsMjAgKzE5MSwyMCBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZXhjZWVk
CiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzZXRTdGF0dXNUZXh0OihOU1N0
cmluZyAqKXRleHQKIHsKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU3RhdHVz
Q2FsbGJhY2tzKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkp
CiAgICAgICAgIHByaW50ZigiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNU
ZXh0OiVzXG4iLCBbdGV4dCBVVEY4U3RyaW5nXSk7CiB9CiAKIC0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdp
bjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4gZnJhbWU6KFdlYkZyYW1lICopZnJhbWUgbGlz
dGVuZXI6KGlkPFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPilsaXN0ZW5lcgogewotICAgIGlm
ICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKSB7
CisgICAgaWYgKCFnVGVzdFJ1bm5lci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSkgewog
ICAgICAgICBpZiAoIW1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycykKICAg
ICAgICAgICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycyA9IFtbTlNN
dXRhYmxlU2V0IHNldF0gcmV0YWluXTsKICAgICAgICAgW21fcGVuZGluZ0dlb2xvY2F0aW9uUGVy
bWlzc2lvbkxpc3RlbmVycyBhZGRPYmplY3Q6bGlzdGVuZXJdOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VvbG9jYXRpb25QZXJtaXNz
aW9uKCkpCisgICAgaWYgKGdUZXN0UnVubmVyLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKICAg
ICAgICAgW2xpc3RlbmVyIGFsbG93XTsKICAgICBlbHNlCiAgICAgICAgIFtsaXN0ZW5lciBkZW55
XTsKQEAgLTIxMiw3ICsyMTIsNyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IGRlY2lkCiAKIC0gKHZvaWQpZGlkU2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbgogewotICAg
IEFTU0VSVChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0
KCkpOworICAgIEFTU0VSVChnVGVzdFJ1bm5lci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQo
KSk7CiAgICAgaWYgKG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycyAmJiAh
bV90aW1lcikKICAgICAgICAgbV90aW1lciA9IFtOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRp
bWVJbnRlcnZhbDowIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0aW1lckZpcmVkKSB1
c2VySW5mbzowIHJlcGVhdHM6Tk9dOwogfQpAQCAtMjI3LDEyICsyMjcsMTIgQEAgLSAoaW50KW51
bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzcwogCiAtICh2b2lkKXRpbWVyRmlyZWQKIHsK
LSAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lv
blNldCgpKTsKKyAgICBBU1NFUlQoZ1Rlc3RSdW5uZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9u
U2V0KCkpOwogICAgIG1fdGltZXIgPSAwOwogICAgIE5TRW51bWVyYXRvciogZW51bWVyYXRvciA9
IFttX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMgb2JqZWN0RW51bWVyYXRv
cl07CiAgICAgaWQ8V2ViQWxsb3dEZW55UG9saWN5TGlzdGVuZXI+IGxpc3RlbmVyOwogICAgIHdo
aWxlICgobGlzdGVuZXIgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkpIHsKLSAgICAgICAgaWYg
KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAg
IGlmIChnVGVzdFJ1bm5lci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICBb
bGlzdGVuZXIgYWxsb3ddOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBbbGlzdGVuZXIgZGVu
eV07CkBAIC0yNjAsNyArMjYwLDcgQEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW5XaXRoTGlzdGVu
ZXI6KE5TTwogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQ6KERPTUVsZW1lbnQqKWVsZW1lbnQgbGlzdGVuZXI6KE5TT2JqZWN0PFdl
YktpdEZ1bGxTY3JlZW5MaXN0ZW5lcj4qKWxpc3RlbmVyCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKQorICAgIGlmICghZ1Rl
c3RSdW5uZXItPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKQogICAgICAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGVudGVyRnVsbFNjcmVlbldpdGhMaXN0ZW5lcjopIHdp
dGhPYmplY3Q6bGlzdGVuZXIgYWZ0ZXJEZWxheTowXTsKIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBA
IC0gKHZvaWQpZXhpdEZ1bGxTY3JlZW5XaXRoTGlzdGVuZXI6KE5TT2IKIAogLSAodm9pZCl3ZWJW
aWV3OihXZWJWaWV3ICopd2ViVmlldyBleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQ6KERPTUVsZW1l
bnQqKWVsZW1lbnQgbGlzdGVuZXI6KE5TT2JqZWN0PFdlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lcj4q
KWxpc3RlbmVyCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmhhc0N1c3RvbUZ1
bGxTY3JlZW5CZWhhdmlvcigpKQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmhhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvcigpKQogICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9y
KGV4aXRGdWxsU2NyZWVuV2l0aExpc3RlbmVyOikgd2l0aE9iamVjdDpsaXN0ZW5lciBhZnRlckRl
bGF5OjBdOwogfQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJl
ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0LmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQv
RHVtcFJlbmRlclRyZWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBR
V2ViSW5zcGVjdG9yKiBXZWJQYWdlOjp3ZWJJbnNwZWN0b3IoKQogdm9pZCBXZWJQYWdlOjpyZXNl
dFNldHRpbmdzKCkKIHsKICAgICAvLyBBZnRlciBlYWNoIGxheW91dCB0ZXN0LCByZXNldCB0aGUg
c2V0dGluZ3MgdGhhdCBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgYnkKLSAgICAvLyBsYXlvdXRUZXN0
Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoKSBvciBzaW1pbGFyLgorICAgIC8vIHRlc3RS
dW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCkgb3Igc2ltaWxhci4KICAgICBzZXR0aW5ncygpLT5y
ZXNldEZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZvbnRTaXplKTsKICAgICBzZXR0aW5n
cygpLT5yZXNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93
cyk7CiAgICAgc2V0dGluZ3MoKS0+cmVzZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2Ny
aXB0RW5hYmxlZCk7CkBAIC0xOTQsMTYgKzE5NCwxNiBAQCB2b2lkIFdlYlBhZ2U6OnJlc2V0U2V0
dGluZ3MoKQogICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Q1NT
R3JpZExheW91dEVuYWJsZWQpOwogICAgIHNldHRpbmdzKCktPnJlc2V0QXR0cmlidXRlKFFXZWJT
ZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpOwogCi0gICAgbV9kcnQtPmxh
eW91dFRlc3RDb250cm9sbGVyKCktPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKLSAg
ICBtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQodHJ1ZSk7Ci0gICAgbV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPnNldEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQoZmFsc2UpOwotICAgIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoZmFsc2UpOwotICAgIG1fZHJ0LT5sYXlvdXRU
ZXN0Q29udHJvbGxlcigpLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQodHJ1ZSk7Ci0gICAg
bV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoZmFsc2UpOwotICAgIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zZXRE
ZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICBtX2RydC0+dGVzdFJ1bm5lcigpLT5zZXRDYXJldEJy
b3dzaW5nRW5hYmxlZChmYWxzZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+c2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQodHJ1ZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+c2V0
RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChmYWxzZSk7CisgICAgbV9kcnQtPnRlc3RSdW5uZXIoKS0+
c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGZhbHNlKTsKKyAgICBtX2RydC0+dGVzdFJ1bm5lcigp
LT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQodHJ1ZSk7CisgICAgbV9kcnQtPnRlc3RSdW5u
ZXIoKS0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxzZSk7CisgICAgbV9k
cnQtPnRlc3RSdW5uZXIoKS0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAKICAgICAvLyBnbG9i
YWxTZXR0aW5ncyBtdXN0IGJlIHJlc2V0IGV4cGxpY2l0bHkuCi0gICAgbV9kcnQtPmxheW91dFRl
c3RDb250cm9sbGVyKCktPnNldFhTU0F1ZGl0b3JFbmFibGVkKGZhbHNlKTsKKyAgICBtX2RydC0+
dGVzdFJ1bm5lcigpLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChmYWxzZSk7CiAKICAgICBRV2ViU2V0
dGluZ3M6OnNldE1heGltdW1QYWdlc0luQ2FjaGUoMCk7IC8vIHJlc2V0IHRvIGRlZmF1bHQKICAg
ICBzZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOyAvLyByZXNldCB0byBk
ZWZhdWx0CkBAIC0yMzIsMTIgKzIzMiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RQZXJtaXNz
aW9uKFFXZWJGcmFtCiB7CiAgICAgc3dpdGNoIChmZWF0dXJlKSB7CiAgICAgY2FzZSBOb3RpZmlj
YXRpb25zOgotICAgICAgICBpZiAoIW1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pZ25v
cmVSZXFlc3RGb3JQZXJtaXNzaW9uKCkpCisgICAgICAgIGlmICghbV9kcnQtPnRlc3RSdW5uZXIo
KS0+aWdub3JlUmVxZXN0Rm9yUGVybWlzc2lvbigpKQogICAgICAgICAgICAgc2V0RmVhdHVyZVBl
cm1pc3Npb24oZnJhbWUsIGZlYXR1cmUsIFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBHZW9sb2NhdGlvbjoKLSAgICAgICAgaWYgKG1fZHJ0LT5sYXlv
dXRUZXN0Q29udHJvbGxlcigpLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKQotICAgICAg
ICAgICAgaWYgKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5nZW9sb2NhdGlvblBlcm1p
c3Npb24oKSkKKyAgICAgICAgaWYgKG1fZHJ0LT50ZXN0UnVubmVyKCktPmlzR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uU2V0KCkpCisgICAgICAgICAgICBpZiAobV9kcnQtPnRlc3RSdW5uZXIoKS0+Z2Vv
bG9jYXRpb25QZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICAgICAgc2V0RmVhdHVyZVBlcm1pc3Np
b24oZnJhbWUsIGZlYXR1cmUsIFBlcm1pc3Npb25HcmFudGVkQnlVc2VyKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBzZXRGZWF0dXJlUGVybWlzc2lvbihmcmFtZSwgZmVhdHVy
ZSwgUGVybWlzc2lvbkRlbmllZEJ5VXNlcik7CkBAIC0yNjUsOSArMjY1LDkgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJtaXNzaW9uU2V0KFFXZWJQYWdlOjpGZQogICAgIHN3aXRjaCAoZmVhdHVyZSkgewog
ICAgIGNhc2UgR2VvbG9jYXRpb246CiAgICAgICAgIHsKLSAgICAgICAgUV9BU1NFUlQobV9kcnQt
PmxheW91dFRlc3RDb250cm9sbGVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpOwor
ICAgICAgICBRX0FTU0VSVChtX2RydC0+dGVzdFJ1bm5lcigpLT5pc0dlb2xvY2F0aW9uUGVybWlz
c2lvblNldCgpKTsKICAgICAgICAgZm9yZWFjaCAoUVdlYkZyYW1lKiBmcmFtZSwgbV9wZW5kaW5n
R2VvbG9jYXRpb25SZXF1ZXN0cykKLSAgICAgICAgICAgIGlmIChtX2RydC0+bGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgICAgICBpZiAobV9k
cnQtPnRlc3RSdW5uZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICAg
ICAgc2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIGZlYXR1cmUsIFBlcm1pc3Npb25HcmFudGVk
QnlVc2VyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRGZWF0dXJlUGVy
bWlzc2lvbihmcmFtZSwgZmVhdHVyZSwgUGVybWlzc2lvbkRlbmllZEJ5VXNlcik7CkBAIC0zMzAs
OCArMzMwLDggQEAgYm9vbCBXZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZQogCiBi
b29sIFdlYlBhZ2U6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNv
bnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSkKIHsKLSAg
ICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRGb3JQb2xpY3koKSkKLSAg
ICAgICAgbV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPm5vdGlmeURvbmUoKTsKKyAgICBp
ZiAobV9kcnQtPnRlc3RSdW5uZXIoKS0+d2FpdEZvclBvbGljeSgpKQorICAgICAgICBtX2RydC0+
dGVzdFJ1bm5lcigpLT5ub3RpZnlEb25lKCk7CiAKICAgICByZXR1cm4gUVdlYlBhZ2U6OmFjY2Vw
dE5hdmlnYXRpb25SZXF1ZXN0KGZyYW1lLCByZXF1ZXN0LCB0eXBlKTsKIH0KQEAgLTMzOSw3ICsz
MzksNyBAQCBib29sIFdlYlBhZ2U6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXCiBib29sIFdl
YlBhZ2U6OnN1cHBvcnRzRXh0ZW5zaW9uKFFXZWJQYWdlOjpFeHRlbnNpb24gZXh0ZW5zaW9uKSBj
b25zdAogewogICAgIGlmIChleHRlbnNpb24gPT0gUVdlYlBhZ2U6OkVycm9yUGFnZUV4dGVuc2lv
bikKLSAgICAgICAgcmV0dXJuIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRI
YW5kbGVFcnJvclBhZ2VzKCk7CisgICAgICAgIHJldHVybiBtX2RydC0+dGVzdFJ1bm5lcigpLT5z
aG91bGRIYW5kbGVFcnJvclBhZ2VzKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00MjQs
NyArNDI0LDcgQEAgRHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6d2ViUGFnZVNldEdyb3VwTmFtZShtX3BhZ2UsICJvcmcud2Via2l0
LnF0LkR1bXBSZW5kZXJUcmVlIik7CiAKICAgICBtX21haW5WaWV3LT5zZXRDb250ZXh0TWVudVBv
bGljeShRdDo6Tm9Db250ZXh0TWVudSk7Ci0gICAgbV9tYWluVmlldy0+cmVzaXplKFFTaXplKExh
eW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGgsIExheW91dFRlc3RDb250cm9sbGVyOjpt
YXhWaWV3SGVpZ2h0KSk7CisgICAgbV9tYWluVmlldy0+cmVzaXplKFFTaXplKFRlc3RSdW5uZXI6
Om1heFZpZXdXaWR0aCwgVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodCkpOwogCiAgICAgLy8gY2xl
YW4gdXAgY2FjaGUgYnkgcmVzZXR0aW5nIHF1b3RhLgogICAgIHFpbnQ2NCBxdW90YSA9IHdlYlBh
Z2UoKS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpOwpAQCAt
NDMyLDcgKzQzMiw3IEBAIER1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSgpCiAKICAgICAv
LyBjcmVhdGUgb3VyIGNvbnRyb2xsZXJzLiBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSBjb25u
ZWN0RnJhbWUsCiAgICAgLy8gYXMgaXQgZXhwb3J0cyB0aGVyZSB0byB0aGUgSmF2YVNjcmlwdCBE
T00gd2luZG93LgotICAgIG1fY29udHJvbGxlciA9IG5ldyBMYXlvdXRUZXN0Q29udHJvbGxlcih0
aGlzKTsKKyAgICBtX2NvbnRyb2xsZXIgPSBuZXcgVGVzdFJ1bm5lcih0aGlzKTsKICAgICBjb25u
ZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKHNob3dQYWdlKCkpLCB0aGlzLCBTTE9UKHNob3dQYWdl
KCkpKTsKICAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGhpZGVQYWdlKCkpLCB0aGlz
LCBTTE9UKGhpZGVQYWdlKCkpKTsKIApAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWU6OmRyeVJ1blByaW50KFFXZWJGcmEKIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9D
b25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0IFFVcmwmIHVybCkKIHsKICAgICAvLyBy
ZXNldCBzbyB0aGF0IGFueSBjdXJyZW50IGxvYWRzIGFyZSBzdG9wcGVkCi0gICAgLy8gTk9URTog
dGhhdCB0aGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSB0aGUgbGF5b3V0VGVzdENvbnRyb2xsZXIg
aXMKKyAgICAvLyBOT1RFOiB0aGF0IHRoaXMgaGFzIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSB0ZXN0
UnVubmVyIGlzCiAgICAgLy8gcmVzZXQgb3Igd2UgZ2V0IHRpbWVvdXRzIGZvciBzb21lIHRlc3Rz
LgogICAgIG1fcGFnZS0+YmxvY2tTaWduYWxzKHRydWUpOwogICAgIG1fcGFnZS0+dHJpZ2dlckFj
dGlvbihRV2ViUGFnZTo6U3RvcCk7CkBAIC01MTksNyArNTE5LDcgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZTo6cmVzZXRUb0NvbnNpc3RlbnRTdAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwga25vd25P
cmlnaW5zLnNpemUoKTsgKytpKQogICAgICAgICBrbm93bk9yaWdpbnNbaV0uc2V0RGF0YWJhc2VR
dW90YShkYXRhYmFzZURlZmF1bHRRdW90YSk7CiAKLSAgICAvLyByZXNldCB0aGUgbGF5b3V0VGVz
dENvbnRyb2xsZXIgYXQgdGhpcyBwb2ludCwgc28gdGhhdCB3ZSB1bmRlciBubworICAgIC8vIHJl
c2V0IHRoZSB0ZXN0UnVubmVyIGF0IHRoaXMgcG9pbnQsIHNvIHRoYXQgd2UgdW5kZXIgbm8KICAg
ICAvLyBjaXJjdW1zdGFuY2UgZHVtcCAoc3RvcCB0aGUgd2FpdFVudGlsRG9uZSB0aW1lcikgZHVy
aW5nIHRoZSByZXNldAogICAgIC8vIG9mIHRoZSBEUlQuCiAgICAgbV9jb250cm9sbGVyLT5yZXNl
dCgpOwpAQCAtNTYzLDcgKzU2Myw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnJlc2V0VG9Db25z
aXN0ZW50U3QKIAogICAgIFFMb2NhbGU6OnNldERlZmF1bHQoUUxvY2FsZTo6YygpKTsKIAotICAg
IGxheW91dFRlc3RDb250cm9sbGVyKCktPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7
CisgICAgdGVzdFJ1bm5lcigpLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwogI2lm
bmRlZiBRX09TX1dJTkNFCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogI2VuZGlmCkBAIC01
OTksMjEgKzU5OSwyMSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpvcGVuKGNvbnN0IFFVcmwmIHVy
CiAgICAgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcodXJsKTsKIAogICAgIGlm
IChpc1dlYkluc3BlY3RvclRlc3QobV9wYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkpKQotICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlcigpLT5jbG9zZVdlYkluc3BlY3RvcigpOworICAgICAgICB0
ZXN0UnVubmVyKCktPmNsb3NlV2ViSW5zcGVjdG9yKCk7CiAKICAgICBpZiAoaXNXZWJJbnNwZWN0
b3JUZXN0KHVybCkpCi0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3dXZWJJbnNw
ZWN0b3IoKTsKKyAgICAgICAgdGVzdFJ1bm5lcigpLT5zaG93V2ViSW5zcGVjdG9yKCk7CiAKICAg
ICBpZiAoaXNEdW1wQXNUZXh0VGVzdCh1cmwpKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIoKS0+ZHVtcEFzVGV4dCgpOwog
CiAgICAgaWYgKGlzR2xvYmFsSGlzdG9yeVRlc3QodXJsKSkKLSAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+ZHVtcEhpc3RvcnlDYWxsYmFja3MoKTsKKyAgICAgICAgdGVzdFJ1bm5lcigp
LT5kdW1wSGlzdG9yeUNhbGxiYWNrcygpOwogCiAgICAgLy8gVzNDIFNWRyB0ZXN0cyBleHBlY3Qg
dG8gYmUgNDgweDM2MAogICAgIGJvb2wgaXNXM0NUZXN0ID0gdXJsLnRvU3RyaW5nKCkuY29udGFp
bnMoInN2Zy9XM0MtU1ZHLTEuMSIpOwotICAgIGludCB3aWR0aCA9IGlzVzNDVGVzdCA/IDQ4MCA6
IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3V2lkdGg7Ci0gICAgaW50IGhlaWdodCA9IGlz
VzNDVGVzdCA/IDM2MCA6IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0OworICAg
IGludCB3aWR0aCA9IGlzVzNDVGVzdCA/IDQ4MCA6IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsK
KyAgICBpbnQgaGVpZ2h0ID0gaXNXM0NUZXN0ID8gMzYwIDogVGVzdFJ1bm5lcjo6bWF4Vmlld0hl
aWdodDsKICAgICBtX21haW5WaWV3LT5yZXNpemUoUVNpemUod2lkdGgsIGhlaWdodCkpOwogICAg
IG1fcGFnZS0+c2V0UHJlZmVycmVkQ29udGVudHNTaXplKFFTaXplKCkpOwogICAgIG1fcGFnZS0+
c2V0Vmlld3BvcnRTaXplKFFTaXplKHdpZHRoLCBoZWlnaHQpKTsKQEAgLTg3Niw3ICs4NzYsNyBA
QCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlOjpkdW1wQmFja0ZvcndhcmRMCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRU
ZXN0KExheW91dFRlc3RDb250cm9sbGVyICpjb250cm9sbGVyKQorc3RhdGljIGNvbnN0IGNoYXIg
Km1ldGhvZE5hbWVTdHJpbmdGb3JGYWlsZWRUZXN0KFRlc3RSdW5uZXIgKmNvbnRyb2xsZXIpCiB7
CiAgICAgY29uc3QgY2hhciAqZXJyb3JNZXNzYWdlOwogICAgIGlmIChjb250cm9sbGVyLT5zaG91
bGREdW1wQXNUZXh0KCkpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
Ojpjb25uZWN0RnJhbWUoUVdlYkZyCiB7CiAgICAgY29ubmVjdChmcmFtZSwgU0lHTkFMKGphdmFT
Y3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkpLCB0aGlzLCBTTE9UKGluaXRKU09iamVjdHMoKSkp
OwogICAgIGNvbm5lY3QoZnJhbWUsIFNJR05BTChwcm92aXNpb25hbExvYWQoKSksCi0gICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigpLCBTTE9UKHByb3Zpc2lvbmFsTG9hZCgpKSk7Cisg
ICAgICAgICAgICB0ZXN0UnVubmVyKCksIFNMT1QocHJvdmlzaW9uYWxMb2FkKCkpKTsKIH0KIAog
dm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcERhdGFiYXNlUXVvdGEoUVdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgUVN0cmluZyYgZGJOYW1lKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVt
cFJlbmRlclRyZWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24gMTI1NTA3KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBA
IFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3MgUVdlYkZyYW1lOwogCi1jbGFzcyBMYXlvdXRUZXN0
Q29udHJvbGxlcjsKK2NsYXNzIFRlc3RSdW5uZXI7CiBjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDsKIGNsYXNzIEV2ZW50U2VuZGVyOwogY2xhc3MgVGV4dElucHV0Q29udHJvbGxlcjsKQEAg
LTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7
CiAgICAgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJs
Jik7CiAKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciAqbGF5b3V0VGVzdENvbnRyb2xsZXIoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRyb2xsZXI7IH0KKyAgICBUZXN0UnVubmVyICp0ZXN0UnVubmVy
KCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sbGVyOyB9CiAgICAgRXZlbnRTZW5kZXIgKmV2ZW50
U2VuZGVyKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFNlbmRlcjsgfQogICAgIFRleHRJbnB1dENv
bnRyb2xsZXIgKnRleHRJbnB1dENvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHRJbnB1
dENvbnRyb2xsZXI7IH0KICAgICBRU3RyaW5nIHBlcnNpc3RlbnRTdG9yYWdlUGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGVyc2lzdGVudFN0b3JhZ2VQYXRoOyB9CkBAIC0xMzgsNyArMTM4LDcgQEAg
cHJpdmF0ZToKICAgICBRU3RyaW5nIGR1bXBGcmFtZXNBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSk7
CiAgICAgUVN0cmluZyBkdW1wQmFja0ZvcndhcmRMaXN0KFFXZWJQYWdlKiBwYWdlKTsKICAgICBR
U3RyaW5nIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpOwotICAgIExh
eW91dFRlc3RDb250cm9sbGVyICptX2NvbnRyb2xsZXI7CisgICAgVGVzdFJ1bm5lciAqbV9jb250
cm9sbGVyOwogCiAgICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKICAgICBRU3Ry
aW5nIG1fZXhwZWN0ZWRIYXNoOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvVGVzdFJ1
bm5lclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0UnVu
bmVyUXQuY3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9U
ZXN0UnVubmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVk
ZSA8UUxvY2FsZT4KICNpbmNsdWRlIDxxd2Vic2V0dGluZ3MuaD4KIAotTGF5b3V0VGVzdENvbnRy
b2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlKiBkcnQp
CitUZXN0UnVubmVyOjpUZXN0UnVubmVyKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlKiBkcnQpCiAg
ICAgOiBRT2JqZWN0KCkKICAgICAsIG1fZHJ0KGRydCkKICAgICAsIG1fc2hvdWxkVGltZW91dCh0
cnVlKQpAQCAtNDgsNyArNDgsNyBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENv
bnRyb2xsCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBOb3RpZmljYXRpb24odHJ1
ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6cmVzZXQoKQogewogICAgIG1faGFzRHVtcGVkID0gZmFsc2U7CiAgICAgbV9sb2FkRmlu
aXNoZWQgPSBmYWxzZTsKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cmVzZXQoKQogICAgIGVtaXQgaGlkZVBhZ2UoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cHJvY2Vzc1dvcmsoKQordm9pZCBUZXN0UnVubmVyOjpwcm9jZXNzV29yaygpCiB7
CiAgICAgLy8gcURlYnVnKCkgPDwgIj4+PnByb2Nlc3NXb3JrIjsKIApAQCAtMTExLDcgKzExMSw3
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnByb2Nlc3NXb3JrKCkKIH0KIAogLy8gQ2Fs
bGVkIG9uIGxvYWRGaW5pc2hlZCBvbiBXZWJQYWdlCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjptYXliZUR1bXAoYm9vbCAvKnN1Y2Nlc3MqLykKK3ZvaWQgVGVzdFJ1bm5lcjo6bWF5YmVEdW1w
KGJvb2wgLypzdWNjZXNzKi8pCiB7CiAKICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gb24gYW55IG9m
IHRoZSBodHRwL3Rlc3RzL3NlY3VyaXR5L3dpbmRvdy1ldmVudHMtKi5odG1sIHRlc3RzLCB3aGVy
ZSB0aGUgdGVzdCBvcGVucwpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om1heWJlRHVtcChib28KICAgICB9CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OndhaXRVbnRpbERvbmUoKQordm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKCkKIHsK
ICAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+d2FpdEZvckRvbmUiOwogICAgIG1fd2FpdEZvckRvbmUg
PSB0cnVlOwpAQCAtMTUzLDEyICsxNTMsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2FpdFVudGlsRG9uZQogICAgIG1fdGltZW91dFRpbWVyLnN0YXJ0KG1fdGltZW91dCwgdGhpcyk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJl
KGNvbnN0IFFTdHJpbmcmIG1vZGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFZpZXdNb2RlTWVkaWFG
ZWF0dXJlKGNvbnN0IFFTdHJpbmcmIG1vZGUpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0
UHJvcGVydHkoIl9xX3ZpZXdNb2RlIiwgbW9kZSk7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitpbnQgVGVzdFJ1bm5lcjo6d2ViSGlzdG9yeUl0
ZW1Db3VudCgpCiB7CiAgICAgaWYgKCFtX3dlYkhpc3RvcnkpCiAgICAgICAgIHJldHVybiAtMTsK
QEAgLTE2OCwxMiArMTY4LDEyIEBAIGludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9y
eUl0ZW0KICAgICByZXR1cm4gbV93ZWJIaXN0b3J5LT5jb3VudCgpIC0gMTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9pZCBUZXN0UnVubmVyOjpr
ZWVwV2ViSGlzdG9yeSgpCiB7CiAgICAgbV93ZWJIaXN0b3J5ID0gbV9kcnQtPndlYlBhZ2UoKS0+
aGlzdG9yeSgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiB7CiAgICAgcURlYnVnKCkgPDwgIj4+Pj5u
b3RpZnlEb25lIjsKIApAQCAtMTk3LDQ5ICsxOTcsNDkgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bm90aWZ5RG9uZSgpCiAgICAgbV93YWl0Rm9yUG9saWN5ID0gZmFsc2U7CiB9CiAKLWlu
dCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93Q291bnQoKQoraW50IFRlc3RSdW5uZXI6Ondp
bmRvd0NvdW50KCkKIHsKICAgICByZXR1cm4gbV9kcnQtPndpbmRvd0NvdW50KCk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Np
b24oY29uc3QgUVN0cmluZyYgb3JpZ2luKQordm9pZCBUZXN0UnVubmVyOjpncmFudERlc2t0b3BO
b3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IFFTdHJpbmcmIG9yaWdpbikKIHsKICAgICBRV2Vi
RnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCk7CiAgICAgbV9kcnQt
PndlYlBhZ2UoKS0+c2V0RmVhdHVyZVBlcm1pc3Npb24oZnJhbWUsIFFXZWJQYWdlOjpOb3RpZmlj
YXRpb25zLCBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWRCeVVzZXIpOwogICAgIG1fZGVza3Rv
cE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmFwcGVuZChvcmlnaW4pOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjppZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlRGVza3RvcE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0cygpCiB7CiAgICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gdHJ1
ZTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2hlY2tEZXNrdG9wTm90aWZpY2F0
aW9uUGVybWlzc2lvbihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCitib29sIFRlc3RSdW5uZXI6OmNo
ZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgUVN0cmluZyYgb3JpZ2luKQog
ewogICAgIHJldHVybiAhbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uICYmIG1fZGVza3RvcE5v
dGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNvbnRhaW5zKG9yaWdpbik7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0
IFFTdHJpbmcmIHRpdGxlKQordm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmlj
YXRpb25DbGljayhjb25zdCBRU3RyaW5nJiB0aXRsZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0aW9uQ2xpY2sodGl0bGUpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlz
cGxheSgpCiB7CiAgICAgZW1pdCBzaG93UGFnZSgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oKQordm9pZCBUZXN0UnVubmVyOjpkaXNw
bGF5SW52YWxpZGF0ZWRSZWdpb24oKQogewogICAgIGRpc3BsYXkoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQordm9pZCBUZXN0UnVubmVy
OjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+aGlzdG9y
eSgpLT5jbGVhcigpOwogfQogCi1RU3RyaW5nIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9M
b2NhbFJlc291cmNlKGNvbnN0IFFTdHJpbmcmIHVybCkKK1FTdHJpbmcgVGVzdFJ1bm5lcjo6cGF0
aFRvTG9jYWxSZXNvdXJjZShjb25zdCBRU3RyaW5nJiB1cmwpCiB7CiAgICAgUVN0cmluZyBsb2Nh
bFRtcFVybChRTGF0aW4xU3RyaW5nKCJmaWxlOi8vL3RtcC9MYXlvdXRUZXN0cyIpKTsKIApAQCAt
MjU2LDgyICsyNTYsODIgQEAgUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9j
YQogICAgIHJldHVybiB1cmw7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3Mo
KQogewogICAgIHFEZWJ1ZygpIDw8ICI+Pj5kdW1wRWRpdGluZ0NhbGxiYWNrcyI7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKHRydWUpOwogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpCiB7CiAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcih0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpCit2b2lkIFRlc3RSdW5u
ZXI6OmR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKQogewogICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKHRydWUpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNr
cygpCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
KCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFt
ZUxvYWRlcih0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZUxvYWRDYWxs
YmFja3MoKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKHRydWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcygpCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZVJl
c3BvbnNlTUlNRVR5cGVzKCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXModHJ1ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmR1bXBXaWxsQ2FjaGVSZXNwb25zZSgpCit2b2lkIFRlc3RSdW5uZXI6OmR1bXBXaWxs
Q2FjaGVSZXNwb25zZSgpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBXaWxs
Q2FjaGVSZXNwb25zZUNhbGxiYWNrcyh0cnVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcEhpc3RvcnlDYWxsYmFja3MoKQordm9pZCBUZXN0UnVubmVyOjpkdW1wSGlzdG9y
eUNhbGxiYWNrcygpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBIaXN0b3J5
Q2FsbGJhY2tzKHRydWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0
UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoYm9vbCBlbmFi
bGVkKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbE9uUmVkaXJlY3QoZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGJvb2wgZW5hYmxlZCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCBlbmFibGVkKQog
ewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5z
TnVsbChlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgUVN0cmluZ0xpc3QmIGhlYWRlcnMpCit2b2lkIFRl
c3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IFFTdHJpbmdMaXN0
JiBoZWFkZXJzKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRXaWxsU2VuZFJl
cXVlc3RDbGVhckhlYWRlcnMoaGVhZGVycyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoYm9vbCBkZWZlcikKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChib29sIGRlZmVyKQogewogICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGRlZmVy
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cXVldWVCYWNrTmF2aWdhdGlvbihp
bnQgaG93RmFyQmFja3dhcmQpCit2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmlnYXRpb24o
aW50IGhvd0ZhckJhY2t3YXJkKQogewogICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlQmFja05h
dmlnYXRpb24iIDw8IGhvd0ZhckJhY2t3YXJkOwogICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGhv
d0ZhckJhY2t3YXJkOyArK2kpCiAgICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5l
dyBCYWNrSXRlbSgxLCBtX2RydC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oaW50IGhvd0ZhckZvcndhcmQpCit2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oaW50IGhvd0ZhckZvcndhcmQpCiB7
CiAgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVGb3J3YXJkTmF2aWdhdGlvbiIgPDwgaG93RmFy
Rm9yd2FyZDsKICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBob3dGYXJGb3J3YXJkOyArK2kpCiAg
ICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBGb3J3YXJkSXRlbSgxLCBtX2Ry
dC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9h
ZChjb25zdCBRU3RyaW5nJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRhcmdldCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVMb2FkKGNvbnN0IFFTdHJpbmcmIHVybCwgY29uc3QgUVN0cmluZyYgdGFyZ2V0
KQogewogICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlTG9hZCIgPDwgdXJsIDw8IHRhcmdldDsK
ICAgICBRVXJsIG1haW5SZXNvdXJjZVVybCA9IG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgp
LT51cmwoKTsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpx
dWV1ZUxvYWQoY29uCiAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVt
KGFic29sdXRlVXJsLCB0YXJnZXQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBRU3RyaW5nJiBjb250
ZW50LCBjb25zdCBRU3RyaW5nJiBiYXNlVVJMLCBjb25zdCBRU3RyaW5nJiBmYWlsaW5nVVJMKQor
dm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0IFFTdHJpbmcmIGNvbnRl
bnQsIGNvbnN0IFFTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFFTdHJpbmcmIGZhaWxpbmdVUkwpCiB7
CiAgICAgaWYgKGZhaWxpbmdVUkwuaXNFbXB0eSgpKQogICAgICAgICBXb3JrUXVldWU6OnNoYXJl
ZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwsIG1fZHJ0
LT53ZWJQYWdlKCkpKTsKQEAgLTM0NywzMiArMzQ3LDMyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnF1ZXVlTG9hZEhUTUwKICAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUo
bmV3IExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMLCBmYWlsaW5n
VVJMLCBtX2RydC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnF1ZXVlUmVsb2FkKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogewogICAgIC8v
cURlYnVnKCkgPDwgIj4+PnF1ZXVlUmVsb2FkIjsKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5x
dWV1ZShuZXcgUmVsb2FkSXRlbShtX2RydC0+d2ViUGFnZSgpKSk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHQp
Cit2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBRU3RyaW5nJiBzY3Jp
cHQpCiB7CiAgICAgLy9xRGVidWcoKSA8PCAiPj4+cXVldWVMb2FkaW5nU2NyaXB0IiA8PCBzY3Jp
cHQ7CiAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRpbmdTY3JpcHRJdGVt
KHNjcmlwdCwgbV9kcnQtPndlYlBhZ2UoKSkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KQordm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0KQog
ewogICAgIC8vcURlYnVnKCkgPDwgIj4+PnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIgPDwgc2NyaXB0
OwogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBOb25Mb2FkaW5nU2NyaXB0SXRl
bShzY3JpcHQsIG1fZHJ0LT53ZWJQYWdlKCkpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cHJvdmlzaW9uYWxMb2FkKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cHJvdmlzaW9uYWxMb2Fk
KCkKIHsKICAgICBRV2ViRnJhbWUqIGZyYW1lID0gcW9iamVjdF9jYXN0PFFXZWJGcmFtZSo+KHNl
bmRlcigpKTsKICAgICBpZiAoIW1fdG9wTG9hZGluZ0ZyYW1lICYmICFtX2hhc0R1bXBlZCkKICAg
ICAgICAgbV90b3BMb2FkaW5nRnJhbWUgPSBmcmFtZTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6dGltZXJFdmVudChRVGltZXJFdmVudCAqZXYpCit2b2lkIFRlc3RSdW5uZXI6OnRp
bWVyRXZlbnQoUVRpbWVyRXZlbnQgKmV2KQogewogICAgIGlmIChldi0+dGltZXJJZCgpID09IG1f
dGltZW91dFRpbWVyLnRpbWVySWQoKSkgewogICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0g
IkZBSUw6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsK
QEAgLTM4MywxNDQgKzM4MywxNDQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6dGltZXJF
dmVudChRVAogICAgICAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2KTsKIH0KIAotUVN0cmluZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkK
K1FTdHJpbmcgVGVzdFJ1bm5lcjo6ZW5jb2RlSG9zdE5hbWUoY29uc3QgUVN0cmluZyYgaG9zdCkK
IHsKICAgICBRU3RyaW5nIGVuY29kZWQgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKFFVcmw6OnRvQWNl
KGhvc3QgKyBRTGF0aW4xU3RyaW5nKCIubm8iKSkpOwogICAgIGVuY29kZWQudHJ1bmNhdGUoZW5j
b2RlZC5sZW5ndGgoKSAtIDMpOyAvLyBzdHJpcCAubm8KICAgICByZXR1cm4gZW5jb2RlZDsKIH0K
IAotUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVjb2RlSG9zdE5hbWUoY29uc3QgUVN0
cmluZyYgaG9zdCkKK1FTdHJpbmcgVGVzdFJ1bm5lcjo6ZGVjb2RlSG9zdE5hbWUoY29uc3QgUVN0
cmluZyYgaG9zdCkKIHsKICAgICBRU3RyaW5nIGRlY29kZWQgPSBRVXJsOjpmcm9tQWNlKGhvc3Qu
dG9MYXRpbjEoKSArIFFCeXRlQXJyYXkoIi5ubyIpKTsKICAgICBkZWNvZGVkLnRydW5jYXRlKGRl
Y29kZWQubGVuZ3RoKCkgLSAzKTsKICAgICByZXR1cm4gZGVjb2RlZDsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TWVkaWFUeXBlKGNvbnN0IFFTdHJpbmcmIHR5cGUpCit2b2lk
IFRlc3RSdW5uZXI6OnNldE1lZGlhVHlwZShjb25zdCBRU3RyaW5nJiB0eXBlKQogewogICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNZWRpYVR5cGUobV9kcnQtPndlYlBhZ2UoKS0+bWFp
bkZyYW1lKCksIHR5cGUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdl
Ykluc3BlY3RvcigpCit2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2ViSW5zcGVjdG9yQ2xvc2UobV9kcnQtPndlYlBh
Z2UoKSk7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgZmFsc2UpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgZW5hYmxlZCk7CiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGJvb2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2hvd1dlYkluc3BlY3RvcigpCiB7CiAgICAgbV9kcnQtPndlYlBhZ2UoKS0+c2V0dGluZ3MoKS0+
c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgdHJ1ZSk7
CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndlYkluc3BlY3RvclNob3cobV9kcnQtPndl
YlBhZ2UoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJ
bnNwZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgUVN0cmluZyYg
c2NyaXB0KQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojp3ZWJJbnNwZWN0b3JFeGVj
dXRlU2NyaXB0KG1fZHJ0LT53ZWJQYWdlKCksIGNhbGxJZCwgc2NyaXB0KTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVuYWJs
ZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRGcmFtZUZsYXR0ZW5pbmdF
bmFibGVkKG1fZHJ0LT53ZWJQYWdlKCksIGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobV9kcnQt
PndlYlBhZ2UoKSwgZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omdv
QmFjaygpCit2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmdvQmFjayhtX2RydC0+d2ViUGFnZSgpKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6
OnNldERlZmVyc0xvYWRpbmcoYm9vbCBmbGFnKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpzZXREZWZlcnNMb2FkaW5nKG1fZHJ0LT53ZWJQYWdlKCksIGZsYWcpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJM
cyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0
aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NS
ZW1vdGVVcmxzLCBlbmFibGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICBt
X2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpM
b2NhbENvbnRlbnRDYW5BY2Nlc3NGaWxlVXJscywgZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKQordm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVk
IGxvbmcgbG9uZyBxdW90YSkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5z
ZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZVF1b3RhKHF1b3RhKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVu
dCwgYm9vbCBpc0F1dG9maWxsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQoY29u
c3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgaXNBdXRvZmlsbGVkKQogewogICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QXV0b2ZpbGxlZChlbGVtZW50LCBpc0F1dG9m
aWxsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIo
Y29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFFTdHJpbmcmIHZhbHVlKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRW
YWx1ZUZvclVzZXIoZWxlbWVudCwgdmFsdWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRGaXhlZENvbnRlbnRzU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEZpeGVkQ29udGVudHNTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsK
ICAgICBtX3RvcExvYWRpbmdGcmFtZS0+cGFnZSgpLT5zZXRQcmVmZXJyZWRDb250ZW50c1NpemUo
UVNpemUod2lkdGgsIGhlaWdodCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQordm9pZCBUZXN0UnVubmVyOjpz
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQogewogICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlByaXZhdGVCcm93
c2luZ0VuYWJsZWQsIGVuYWJsZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlKQogewogICAgIG1fZHJ0LT53
ZWJQYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlNwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZCwgZW5hYmxlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXI6
OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlKQogewogICAgIG1fZHJ0LT53ZWJQ
YWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRD
YW5PcGVuV2luZG93cywgIWVuYWJsZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2lu
c0VuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgUVN0cmluZyYgbG9j
YWxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBRU3RyaW5nJiBsb2Nh
bGUpCiB7CiAgICAgUUxvY2FsZSBxbG9jYWxlKGxvY2FsZSk7CiAgICAgUUxvY2FsZTo6c2V0RGVm
YXVsdChxbG9jYWxlKTsKIH0gCiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRv
d0lzS2V5KGJvb2wgaXNLZXkpCit2b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wg
aXNLZXkpCiB7CiAgICAgbV9kcnQtPnN3aXRjaEZvY3VzKGlzS2V5KTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGlzRmly
c3QpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBp
c0ZpcnN0KQogewogICAgIC8vRklYTUU6IG9ubHkgbmVlZCB0aGlzIGZvciB0aGUgbW9tZW50OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTAKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29s
IGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2Fy
ZChib29sIGVuYWJsZSkKIHsKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0aW5ncygpLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkLCBlbmFi
bGUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxl
ZChib29sIGVuYWJsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9v
bCBlbmFibGUpCiB7CiAgICAgLy8gU2V0IFhTU0F1ZGl0aW5nRW5hYmxlZCBnbG9iYWxseSBzbyB0
aGF0IHdpbmRvd3MgY3JlYXRlZCBieSB0aGUgdGVzdCBpbmhlcml0IGl0IHRvby4KICAgICAvLyBy
ZXNldFNldHRpbmdzKCkgd2lsbCBjYWxsIHRoaXMgdG8gcmVzZXQgdGhlIHBhZ2UgYW5kIGdsb2Jh
bCBzZXR0aW5nIHRvIGZhbHNlIGFnYWluLgpAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3IKICAgICBtX2RydC0+d2ViUGFnZSgpLT5zZXR0
aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpYU1NBdWRpdGluZ0VuYWJsZWQsIGVu
YWJsZSk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCitib29sIFRl
c3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFFTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmcmIGVsZW1lbnRJZCkKIHsKQEAgLTUzOSw3ICs1MzksNyBAQCBib29sIExheW91dFRlc3RDb250
cm9sbGVyOjpwYXVzZUFuaW1hdGlvCiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpwYXVzZUFuaW1hdGlvbihmcmFtZSwgYW5pbWF0aW9uTmFtZSwgdGltZSwgZWxlbWVudElkKTsK
IH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5TmFtZSwKK2Jvb2wgVGVzdFJ1bm5l
cjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFFTdHJpbmcmIHBy
b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBl
bGVtZW50SWQpCiB7CkBAIC01NDgsNTkgKzU0OCw1OSBAQCBib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpwYXVzZVRyYW5zaXRpCiAgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpw
YXVzZVRyYW5zaXRpb25PZlByb3BlcnR5KGZyYW1lLCBwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1l
bnRJZCk7CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoKSBjb25zdAordW5zaWduZWQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKIHsKICAgICBRV2ViRnJhbWUqIGZyYW1lID0gbV9kcnQtPndlYlBh
Z2UoKS0+bWFpbkZyYW1lKCk7CiAgICAgUV9BU1NFUlQoZnJhbWUpOwogICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit2b2lk
IFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQogewogICAgIG1fZHJ0LT53ZWJQYWdl
KCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkF1dG9Mb2FkSW1hZ2Vz
LCBmYWxzZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNoUGVuZGlu
Z0xvYWRSZXF1ZXN0cygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1
ZXN0cygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIDY3
Mjc0OTUKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcygpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQog
ewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVz
KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiB1cmwpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBw
bGljYXRpb25DYWNoZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiB1cmwpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMg
Zm9yIGFuIG9yaWdpbi4KIH0KIAotbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2Nh
bFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cikKK2xvbmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4o
Y29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4u
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRl
c3RSdW5uZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcgcXVvdGEpCiB7CiAgICAgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fdG9wTG9hZGluZ0ZyYW1lLT5zZWN1cml0eU9yaWdpbigpLnNldEFwcGxpY2F0aW9u
Q2FjaGVRdW90YShxdW90YSk7CiB9CiAKLWxvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW4p
Citsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdp
bihjb25zdCBRU3RyaW5nJiBvcmlnaW4pCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBz
dXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBh
biBvcmlnaW4uCiAgICAgcmV0dXJuIDA7CiB9CiAKLVFTdHJpbmdMaXN0IExheW91dFRlc3RDb250
cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQorUVN0cmluZ0xpc3QgVGVzdFJ1
bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkKIHsKICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRvIGdldCBvcmlnaW5zIHRoYXQgaGF2ZSBhcHBsaWNhdGlvbiBjYWNoZXMuCiAgICAg
cmV0dXJuIFFTdHJpbmdMaXN0KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dENhY2hlTW9kZWwoaW50IG1vZGVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRDYWNoZU1vZGVsKGlu
dCBtb2RlbCkKIHsKICAgICAvLyBxd2Vic2V0dGluZyBkb2Vzbid0IGhhdmUgbWF0Y2hlZCBzZXR0
aW5nIHlldCA6CiAgICAgLy8gV0VCS0lUX0NBQ0hFX01PREVMX0RPQ1VNRU5UX1ZJRVdFUgpAQCAt
NjEwLDQxICs2MTAsNDEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2Rl
bAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldERhdGFiYXNlUXVvdGEoaW50IHNpemUpCit2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFi
YXNlUXVvdGEoaW50IHNpemUpCiB7CiAgICAgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fdG9wTG9hZGluZ0ZyYW1lLT5zZWN1cml0eU9yaWdpbigpLnNldERh
dGFiYXNlUXVvdGEoc2l6ZSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFy
QWxsRGF0YWJhc2VzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewog
ICAgIFFXZWJEYXRhYmFzZTo6cmVtb3ZlQWxsRGF0YWJhc2VzKCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFFTdHJp
bmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb25Qcm90b2NvbCwgY29u
c3QgUVN0cmluZyYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zKQordm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25z
dCBRU3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9j
b2wsIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucykKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6d2hpdGVMaXN0QWNj
ZXNzRnJvbU9yaWdpbihzb3VyY2VPcmlnaW4sIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0
aW9uSG9zdCwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBRU3Ry
aW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNv
bnN0IFFTdHJpbmcmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9t
YWlucykKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgUVN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvblBy
b3RvY29sLCBjb25zdCBRU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlbW92ZVdo
aXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvblByb3RvY29s
LCBkZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFi
bGVkLCBib29sIHBlcm1pc3NpdmUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURl
bGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogewogICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJtaXNzaXZl
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRl
KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKIHsKICAgICBzZXRD
dXN0b21Qb2xpY3lEZWxlZ2F0ZSh0cnVlKTsKICAgICBtX3dhaXRGb3JQb2xpY3kgPSB0cnVlOwog
ICAgIHdhaXRVbnRpbERvbmUoKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1
ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IFFTdHJpbmcmIG5h
bWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKIHsKICAgICBRV2ViU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV90b3BMb2FkaW5nRnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKTsKIApAQCAtNjczLDExICs2
NzMsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZQogICAgIGVs
c2UgaWYgKG5hbWUgPT0gIldlYktpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIikKICAg
ICAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkLCB2YWx1ZS50b0Jvb2woKSk7CiAgICAgZWxzZQotICAgICAgICBwcmlu
dGYoIkVSUk9SOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCkgZG9l
cyBub3Qgc3VwcG9ydCB0aGUgJyVzJyBwcmVmZXJlbmNlXG4iLAorICAgICAgICBwcmludGYoIkVS
Uk9SOiBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoKSBkb2VzIG5vdCBzdXBwb3J0IHRo
ZSAnJXMnIHByZWZlcmVuY2VcbiIsCiAgICAgICAgICAgICBuYW1lLnRvTGF0aW4xKCkuZGF0YSgp
KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihjb25zdCBRU3RyaW5nJiB1cmwpCit2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIFFCeXRlQXJyYXkgdXJsRGF0
YSA9IHBhdGhUb0xvY2FsUmVzb3VyY2UodXJsKS50b0xhdGluMSgpOwogICAgIG1fdXNlclN0eWxl
U2hlZXRMb2NhdGlvbiA9IFFVcmw6OmZyb21FbmNvZGVkKHVybERhdGEsIFFVcmw6OlN0cmljdE1v
ZGUpOwpAQCAtNjg2LDE3ICs2ODYsMTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VXNlclN0eWxlUwogICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7CiB9CiAK
LXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wg
dmFsdWUpCit2b2lkIFRlc3RSdW5uZXI6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmFs
dWUpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldENhcmV0QnJvd3NpbmdFbmFi
bGVkKG1fZHJ0LT53ZWJQYWdlKCksIHZhbHVlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKIHsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQo
bV9kcnQtPndlYlBhZ2UoKSwgdmFsdWUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVy
OjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fdXNlclN0
eWxlU2hlZXRFbmFibGVkID0gZW5hYmxlZDsKIApAQCAtNzA2LDI3ICs3MDYsMjcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlUwogICAgICAgICBtX2RydC0+d2ViUGFn
ZSgpLT5zZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBjb25zdCBRU3RyaW5nJiBzY2hlbWUpCit2b2lkIFRlc3RS
dW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3Ji
aWRkZW4sIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRkZW4s
IHNjaGVtZSk7CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291
bnQoKQoraW50IFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KCkKIHsKICAgICByZXR1cm4g
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OndvcmtlclRocmVhZENvdW50KCk7CiB9CiAKLWludCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0KQoraW50IFRlc3RSdW5uZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mUGFn
ZXMobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHdpZHRoLCBoZWlnaHQpOwogfQogCi1i
b29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQorYm9v
bCBUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewogICAgIHJldHVybiBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2hvdWxkQ2xvc2UobV9kcnQtPndlYlBhZ2UoKS0+bWFp
bkZyYW1lKCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQ
b2xpY3koY29uc3QgUVN0cmluZyYgb3JpZW50YXRpb24sIGNvbnN0IFFTdHJpbmcmIHBvbGljeSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KGNvbnN0IFFTdHJpbmcmIG9yaWVu
dGF0aW9uLCBjb25zdCBRU3RyaW5nJiBwb2xpY3kpCiB7CiAgICAgUXQ6Ok9yaWVudGF0aW9uIG87
CiAgICAgUXQ6OlNjcm9sbEJhclBvbGljeSBwOwpAQCAtNzUwLDUyICs3NTAsNTIgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUAogICAgIG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3kobywgcCk7CiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGVuYWJsZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wgZW5hYmxl
KQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRTbWFydEluc2VydERlbGV0ZUVu
YWJsZWQobV9kcnQtPndlYlBhZ2UoKSwgZW5hYmxlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGVuYWJsZSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29s
IGVuYWJsZSkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0U2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBlbmFibGUpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChjb25zdCBRU3RyaW5nJiBuYW1lLCBj
b25zdCBRU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoY29uc3Qg
UVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUpCiB7CiAgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShtX2RydC0+d2ViUGFnZSgpLCBu
YW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVu
YWJsZWQoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNDb21t
YW5kRW5hYmxlZChjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNDb21tYW5kRW5hYmxlZChtX2RydC0+d2ViUGFnZSgpLCBu
YW1lKTsKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBR
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJpbmdMaXN0JiBvcHRpb25BcnJheSkKK2Jvb2wgVGVz
dFJ1bm5lcjo6ZmluZFN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFTdHJpbmdM
aXN0JiBvcHRpb25BcnJheSkKIHsKICAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmZpbmRTdHJpbmcobV9kcnQtPndlYlBhZ2UoKSwgc3RyaW5nLCBvcHRpb25BcnJheSk7CiB9CiAK
LVFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25z
dCBRV2ViRWxlbWVudCYgbGlzdEl0ZW0pCitRU3RyaW5nIFRlc3RSdW5uZXI6Om1hcmtlclRleHRG
b3JMaXN0SXRlbShjb25zdCBRV2ViRWxlbWVudCYgbGlzdEl0ZW0pCiB7CiAgICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0obGlzdEl0ZW0pOwog
fQogCi1RVmFyaWFudE1hcCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKGNvbnN0IFFXZWJFbGVtZW50JiBlbGVtZW50KSBjb25zdAorUVZhcmlh
bnRNYXAgVGVzdFJ1bm5lcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGNvbnN0
IFFXZWJFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGVsZW1lbnQpOwog
fQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVy
OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgUVN0cmluZyYg
ZWxlbWVudElkKQogewogICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZWxlbWVu
dERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5G
cmFtZSgpLCBlbGVtZW50SWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRo
ZW50aWNhdGVTZXNzaW9uKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0
cmluZyYpCit2b2lkIFRlc3RSdW5uZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oY29uc3QgUVN0cmlu
ZyYsIGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogSWYg
dGhlcmUgaXMgYSBjb25jZXB0IHBlci1zZXNzaW9uIChwZXItcHJvY2VzcykgY3JlZGVudGlhbCBz
dG9yYWdlLCB0aGUgY3JlZGVudGlhbHMgc2hvdWxkIGJlIGFkZGVkIHRvIGl0IGZvciBsYXRlciB1
c2UuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJs
ZWQoYm9vbCBlbmFibGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQo
Ym9vbCBlbmFibGUpCiB7CiAgICAgaWYgKGVuYWJsZSAmJiAhbV9kcnQtPnBlcnNpc3RlbnRTdG9y
YWdlUGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgUVdlYlNldHRpbmdzOjpzZXRJY29uRGF0YWJh
c2VQYXRoKG1fZHJ0LT5wZXJzaXN0ZW50U3RvcmFnZVBhdGgoKSk7CkBAIC04MDMsMTQgKzgwMywx
NCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhCiAgICAgICAgIFFX
ZWJTZXR0aW5nczo6c2V0SWNvbkRhdGFiYXNlUGF0aChRU3RyaW5nKCkpOwogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92
aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEs
IGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhh
LCBib29sIGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEs
IGRvdWJsZSBnYW1tYSkKIHsKICAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBt
X2RydC0+Z2V0QWxsUGFnZXMoKTsKICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdl
LCBwYWdlcykKICAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbihwYWdlLCBjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwg
YmV0YSwgY2FuUHJvdmlkZUdhbW1hLCBnYW1tYSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQordm9pZCBUZXN0UnVu
bmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsKICAgICBzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBh
Z2UqPiBwYWdlcyA9IG1fZHJ0LT5nZXRBbGxQYWdlcygpOwpAQCAtODE4LDcgKzgxOCw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW8KICAgICAgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb24ocGFnZSwgYWxsb3cp
OwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK2ludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiB7CiAgICAgaW50IHBlbmRpbmdQZXJtaXNz
aW9uQ291bnQgPSAwOwogICAgIFFMaXN0PFdlYkNvcmU6OldlYlBhZ2UqPiBwYWdlcyA9IG1fZHJ0
LT5nZXRBbGxQYWdlcygpOwpAQCAtODI4LDEzMyArODI4LDEzMyBAQCBpbnQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om51bWJlck9mUGVuZGluCiAgICAgcmV0dXJuIHBlbmRpbmdQZXJtaXNzaW9uQ291
bnQ7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNvbW1vbihib29sIGFsbG93KQordm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb25Db21tb24oYm9vbCBhbGxvdykKIHsKICAgICAgbV9pc0dlb2xvY2F0aW9uUGVybWlz
c2lvblNldCA9IHRydWU7CiAgICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gYWxsb3c7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGlu
dCBjb2RlLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2Nr
R2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKIHsKICAg
ICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+Z2V0QWxsUGFnZXMoKTsK
ICAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdlcykKICAgICAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKHBhZ2UsIGNvZGUs
IG1lc3NhZ2UpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAg
UUxpc3Q8V2ViQ29yZTo6V2ViUGFnZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CiAg
ICAgZm9yZWFjaCAoV2ViQ29yZTo6V2ViUGFnZSogcGFnZSwgcGFnZXMpCiAgICAgICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihwYWdlLCBsYXRp
dHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBRU3RyaW5nJiByZXN1bHQsIGRvdWJs
ZSBjb25maWRlbmNlLCBjb25zdCBRU3RyaW5nJiBsYW5ndWFnZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6
YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNv
bmZpZGVuY2UsIGNvbnN0IFFTdHJpbmcmIGxhbmd1YWdlKQogewogICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoYm9vbCBmbGFnKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IFFT
dHJpbmcmIGlucHV0RWxlbWVudCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChj
b25zdCBRU3RyaW5nJiBpbnB1dEVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBm
b3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGludCB3
b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFT
dHJpbmcmIHNjcmlwdCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29y
bGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQordm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQog
ewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKIH0K
IAotUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhl
bHMoaW50IHBhZ2VJbmRleCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBp
bnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KQorUVN0cmlu
ZyBUZXN0UnVubmVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50
IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpCiB7CiAgICAgcmV0dXJuIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhtX2RydC0+d2ViUGFnZSgp
LT5tYWluRnJhbWUoKSwgcGFnZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9w
LCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KTsKIH0KIAotUVN0cmluZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IFFTdHJpbmcmIHByb3BlcnR5
TmFtZSwgaW50IHBhZ2VOdW1iZXIpCitRU3RyaW5nIFRlc3RSdW5uZXI6OnBhZ2VQcm9wZXJ0eShj
b25zdCBRU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKQogewogICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFnZVByb3BlcnR5KG1fZHJ0LT53ZWJQYWdlKCkt
Pm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5hbWUsIHBhZ2VOdW1iZXIpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBRU3RyaW5nJiBzb3VyY2VD
b2RlKQordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBRU3RyaW5nJiBz
b3VyY2VDb2RlKQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjphZGRVc2VyU3R5bGVT
aGVldChtX2RydC0+d2ViUGFnZSgpLCBzb3VyY2VDb2RlKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVt
b3ZlQWxsVmlzaXRlZExpbmtzKCkKIHsKICAgICBRV2ViSGlzdG9yeSogaGlzdG9yeSA9IG1fZHJ0
LT53ZWJQYWdlKCktPmhpc3RvcnkoKTsKICAgICBoaXN0b3J5LT5jbGVhcigpOwogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wVmlzaXRlZExpbmtzQ2FsbGJhY2tzKHRydWUpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJp
bmcmIG9yaWdpbiwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pCit2b2lkIFRlc3RSdW5uZXI6
OmFkZFVSTFRvUmVkaXJlY3QoY29uc3QgUVN0cmluZyYgb3JpZ2luLCBjb25zdCBRU3RyaW5nJiBk
ZXN0aW5hdGlvbikKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6YWRkVVJMVG9SZWRp
cmVjdChvcmlnaW4sIGRlc3RpbmF0aW9uKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRp
bWVySW50ZXJ2YWwpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1U
aW1lckludGVydmFsKG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQor
dm9pZCBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxs
TG9jYWxTdG9yYWdlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcikKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNv
bnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit2b2lkIFRlc3RSdW5uZXI6Om9ic2VydmVT
dG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2Nh
bFN0b3JhZ2UoKQordm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNl
dFBhZ2VWaXNpYmlsaXR5KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KIH0KIAotUVN0cmluZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkK
K1FTdHJpbmcgVGVzdFJ1bm5lcjo6bGF5ZXJUcmVlQXNUZXh0KCkKIHsKICAgICByZXR1cm4gRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmxheWVyVHJlZUFzVGV4dChtX2RydC0+d2ViUGFnZSgpLT5t
YWluRnJhbWUoKSk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJl
Y3Rpb24oY29uc3QgUVN0cmluZyYgZGlyZWN0aW9uTmFtZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
VGV4dERpcmVjdGlvbihjb25zdCBRU3RyaW5nJiBkaXJlY3Rpb25OYW1lKQogewogICAgIGlmIChk
aXJlY3Rpb25OYW1lID09ICJhdXRvIikKICAgICAgICAgbV9kcnQtPndlYlBhZ2UoKS0+dHJpZ2dl
ckFjdGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvbkRlZmF1bHQpOwpAQCAtOTY0LDcgKzk2
NCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3QKICAgICAgICAg
bV9kcnQtPndlYlBhZ2UoKS0+dHJpZ2dlckFjdGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlv
bkxlZnRUb1JpZ2h0KTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlz
QWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNj
ZXB0Q29va2llcyhib29sIGFjY2VwdCkKIHsKICAgICBRV2ViU2V0dGluZ3MqIGdsb2JhbFNldHRp
bmdzID0gUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpOwogICAgIGlmIChhY2NlcHQpCkBA
IC05NzUsNyArOTc1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNj
ZQogICAgIH0KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQmxvY2tD
b29raWVzKGJvb2wgYmxvY2spCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0Jsb2NrQ29va2ll
cyhib29sIGJsb2NrKQogewogICAgIFFXZWJTZXR0aW5ncyogZ2xvYmFsU2V0dGluZ3MgPSBRV2Vi
U2V0dGluZ3M6Omdsb2JhbFNldHRpbmdzKCk7CiAgICAgaWYgKGJsb2NrKQpAQCAtOTg0LDUgKzk4
NCw1IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0Jsb2MKICAgICAgICAg
Z2xvYmFsU2V0dGluZ3MtPnNldFRoaXJkUGFydHlDb29raWVQb2xpY3koUVdlYlNldHRpbmdzOjpB
bHdheXNBbGxvd1RoaXJkUGFydHlDb29raWVzKTsKIH0KIAotY29uc3QgdW5zaWduZWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om1heFZpZXdXaWR0aCA9IDgwMDsKLWNvbnN0IHVuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjptYXhWaWV3SGVpZ2h0ID0gNjAwOworY29uc3QgdW5zaWduZWQgVGVz
dFJ1bm5lcjo6bWF4Vmlld1dpZHRoID0gODAwOworY29uc3QgdW5zaWduZWQgVGVzdFJ1bm5lcjo6
bWF4Vmlld0hlaWdodCA9IDYwMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RS
dW5uZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L1Rlc3RSdW5u
ZXJRdC5oCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9UZXN0
UnVubmVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTMgKzUyLDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIER1bXBSZW5kZXJUcmVlOwogfQogCi1jbGFzcyBMYXlvdXRUZXN0Q29u
dHJvbGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKK2NsYXNzIFRlc3RSdW5uZXIgOiBwdWJsaWMgUU9i
amVjdCB7CiAgICAgUV9PQkpFQ1QKICAgICBRX1BST1BFUlRZKGludCB3ZWJIaXN0b3J5SXRlbUNv
dW50IFJFQUQgd2ViSGlzdG9yeUl0ZW1Db3VudCkKICAgICBRX1BST1BFUlRZKGludCB3b3JrZXJU
aHJlYWRDb3VudCBSRUFEIHdvcmtlclRocmVhZENvdW50KQogICAgIFFfUFJPUEVSVFkoYm9vbCBn
bG9iYWxGbGFnIFJFQUQgZ2xvYmFsRmxhZyBXUklURSBzZXRHbG9iYWxGbGFnKQogcHVibGljOgot
ICAgIExheW91dFRlc3RDb250cm9sbGVyKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlKik7CisgICAg
VGVzdFJ1bm5lcihXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZSopOwogCiAgICAgYm9vbCBzaG91bGRE
aXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhOyB9CiAgICAgYm9vbCBz
aG91bGREdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHVtcDsgfQpAQCAtMjQwLDcg
KzI0MCw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQoYm9vbCk7CiAKLSAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBh
cml0eSB3aXRoIG9iamVjdCBtb2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBMYXlvdXRUZXN0Q29udHJv
bGxlci4KKyAgICAvLyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0eSB3aXRoIG9iamVj
dCBtb2RlbCBleHBvc2VkIGJ5IGdsb2JhbCBUZXN0UnVubmVyLgogICAgIHZvaWQgYWJvcnRNb2Rh
bCgpIHsgfQogCiAgICAgdm9pZCBhZGRVUkxUb1JlZGlyZWN0KGNvbnN0IFFTdHJpbmcmIG9yaWdp
biwgY29uc3QgUVN0cmluZyYgZGVzdGluYXRpb24pOwpAQCAtMzE4LDQgKzMxOCw0IEBAIHByaXZh
dGU6CiAgICAgaW50IG1fdGltZW91dDsKIH07CiAKLSNlbmRpZiAvLyBMYXlvdXRUZXN0Q29udHJv
bGxlclF0X2gKKyNlbmRpZiAvLyBUZXN0UnVubmVyUXRfaApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0RSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREZXNrdG9wTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmNwcAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RS
VERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEUlREZXNrdG9wTm90aQogewog
I2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMp
CiAgICAgSlNTdHJpbmdSZWYganNPcmlnaW4gPSBKU1N0cmluZ0NyZWF0ZVdpdGhCU1RSKG9yaWdp
bik7Ci0gICAgYm9vbCBhbGxvd2VkID0gOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNoZWNrRGVz
a3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oanNPcmlnaW4pOworICAgIGJvb2wgYWxsb3dlZCA9
IDo6Z1Rlc3RSdW5uZXItPmNoZWNrRGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb24oanNPcmln
aW4pOwogCiAgICAgaWYgKGFsbG93ZWQpCiAgICAgICAgICpyZXN1bHQgPSBXZWJDb3JlOjpOb3Rp
ZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25BbGxvd2VkOwpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDcgQEAgQ09NUHRyPEhpc3RvcnlEZWxlZ2F0ZT4gc2hhcmVkSGlzdG9yeURl
bAogSVdlYkZyYW1lKiBmcmFtZTsKIEhXTkQgd2ViVmlld1dpbmRvdzsKIAotUmVmUHRyPExheW91
dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7CitSZWZQdHI8VGVzdFJ1bm5l
cj4gZ1Rlc3RSdW5uZXI7CiAKIFVJTlRfUFRSIHdhaXRUb0R1bXBXYXRjaGRvZyA9IDA7CiAKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKElXZWJGcmFtZSog
CiAgICAgICAgIHByaW50Zigic2Nyb2xsZWQgdG8gJS5mLCUuZlxuIiwgKGRvdWJsZSlzY3JvbGxQ
b3NpdGlvbi5jeCwgKGRvdWJsZSlzY3JvbGxQb3NpdGlvbi5jeSk7CiAgICAgfQogCi0gICAgaWYg
KDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygp
KSB7CisgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
KCkpIHsKICAgICAgICAgQ09NUHRyPElFbnVtVkFSSUFOVD4gZW51bUtpZHM7CiAgICAgICAgIGlm
IChGQUlMRUQoZnJhbWUtPmNoaWxkRnJhbWVzKCZlbnVtS2lkcykpKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIHN0YXRpYyB3c3RyaW5nIGR1bXBGcmFtZXNBc1RleHQo
SVdlYkZyYW0KIAogICAgIFN5c0ZyZWVTdHJpbmcoaW5uZXJUZXh0KTsKIAotICAgIGlmICg6OmdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkpIHsKKyAgICBpZiAo
OjpnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkpIHsKICAgICAgICAgQ09NUHRy
PElFbnVtVkFSSUFOVD4gZW51bUtpZHM7CiAgICAgICAgIGlmIChGQUlMRUQoZnJhbWUtPmNoaWxk
RnJhbWVzKCZlbnVtS2lkcykpKQogICAgICAgICAgICAgcmV0dXJuIEwiIjsKQEAgLTcxMyw4ICs3
MTMsOCBAQCB2b2lkIGR1bXAoKQogICAgICAgICBpZiAoU1VDQ0VFREVEKGRhdGFTb3VyY2UtPnJl
c3BvbnNlKCZyZXNwb25zZSkpICYmIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICBCU1RSIG1pbWVU
eXBlOwogICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXNwb25zZS0+TUlNRVR5cGUoJm1pbWVU
eXBlKSkgJiYgIV90Y3NjbXAobWltZVR5cGUsIFRFWFQoInRleHQvcGxhaW4iKSkpIHsKLSAgICAg
ICAgICAgICAgICA6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RHVtcEFzVGV4dCh0cnVlKTsK
LSAgICAgICAgICAgICAgICA6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0R2VuZXJhdGVQaXhl
bFJlc3VsdHMoZmFsc2UpOworICAgICAgICAgICAgICAgIDo6Z1Rlc3RSdW5uZXItPnNldER1bXBB
c1RleHQodHJ1ZSk7CisgICAgICAgICAgICAgICAgOjpnVGVzdFJ1bm5lci0+c2V0R2VuZXJhdGVQ
aXhlbFJlc3VsdHMoZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzRnJlZVN0
cmluZyhtaW1lVHlwZSk7CiAgICAgICAgIH0KQEAgLTcyNiwxOCArNzI2LDE4IEBAIHZvaWQgZHVt
cCgpCiAgICAgICAgIDo6SW52YWxpZGF0ZVJlY3Qod2ViVmlld1dpbmRvdywgMCwgVFJVRSk7CiAg
ICAgICAgIDo6U2VuZE1lc3NhZ2Uod2ViVmlld1dpbmRvdywgV01fUEFJTlQsIDAsIDApOwogCi0g
ICAgICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKSB7CisgICAg
ICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkpIHsKICAgICAgICAgICAgIHdzdHJp
bmcgcmVzdWx0ID0gZHVtcEZyYW1lc0FzVGV4dChmcmFtZSk7CiAgICAgICAgICAgICByZXN1bHRT
dHJpbmcgPSBTeXNBbGxvY1N0cmluZ0xlbihyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBm
cmFtZVByaXZhdGU7CiAgICAgICAgICAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFj
ZSgmZnJhbWVQcml2YXRlKSkpCiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAg
ICAgZnJhbWVQcml2YXRlLT5yZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uKGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+aXNQcmludGluZygpLCAmcmVzdWx0U3RyaW5nKTsKKyAgICAgICAg
ICAgIGZyYW1lUHJpdmF0ZS0+cmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihnVGVz
dFJ1bm5lci0+aXNQcmludGluZygpLCAmcmVzdWx0U3RyaW5nKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKCFyZXN1bHRTdHJpbmcpCi0gICAgICAgICAgICBwcmludGYoIkVSUk9S
OiBuaWwgcmVzdWx0IGZyb20gJXMiLCA6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4
dCgpID8gIklET01FbGVtZW50Ojppbm5lclRleHQiIDogIklGcmFtZVZpZXdQcml2YXRlOjpyZW5k
ZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uIik7CisgICAgICAgICAgICBwcmludGYoIkVS
Uk9SOiBuaWwgcmVzdWx0IGZyb20gJXMiLCA6OmdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkgPyAi
SURPTUVsZW1lbnQ6OmlubmVyVGV4dCIgOiAiSUZyYW1lVmlld1ByaXZhdGU6OnJlbmRlclRyZWVB
c0V4dGVybmFsUmVwcmVzZW50YXRpb24iKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBzdHJpbmdMZW5ndGggPSBTeXNTdHJpbmdMZW4ocmVzdWx0U3RyaW5nKTsKICAgICAg
ICAgICAgIGludCBidWZmZXJTaXplID0gOjpXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAs
IHJlc3VsdFN0cmluZywgc3RyaW5nTGVuZ3RoLCAwLCAwLCAwLCAwKTsKQEAgLTc0NSwxMCArNzQ1
LDEwIEBAIHZvaWQgZHVtcCgpCiAgICAgICAgICAgICA6OldpZGVDaGFyVG9NdWx0aUJ5dGUoQ1Bf
VVRGOCwgMCwgcmVzdWx0U3RyaW5nLCBzdHJpbmdMZW5ndGgsIGJ1ZmZlciwgYnVmZmVyU2l6ZSAr
IDEsIDAsIDApOwogICAgICAgICAgICAgZndyaXRlKGJ1ZmZlciwgMSwgYnVmZmVyU2l6ZSwgc3Rk
b3V0KTsKICAgICAgICAgICAgIGZyZWUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmICghOjpnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKSkKKyAgICAgICAgICAgIGlmICghOjpnVGVz
dFJ1bm5lci0+ZHVtcEFzVGV4dCgpKQogICAgICAgICAgICAgICAgIGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKGZyYW1lKTsKICAgICAgICAgfQotICAgICAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgaWYgKDo6Z1Rlc3RSdW5uZXIt
PmR1bXBCYWNrRm9yd2FyZExpc3QoKSkKICAgICAgICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3RG
b3JBbGxXaW5kb3dzKCk7CiAgICAgfQogCkBAIC03NjAsMTAgKzc2MCwxMCBAQCB2b2lkIGR1bXAo
KQogICAgIH0KIAogICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QKLSAgICAgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCi0gICAgICYmICFnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQotICAgICAmJiAhZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpCi0gICAgICAgIGR1bXBX
ZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CisgICAgICYmIGdUZXN0UnVubmVyLT5nZW5lcmF0ZVBp
eGVsUmVzdWx0cygpCisgICAgICYmICFnVGVzdFJ1bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgp
CisgICAgICYmICFnVGVzdFJ1bm5lci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQorICAgICAg
ICBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChnVGVzdFJ1bm5lci0+
ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CiAKICAgICBwcmludGYoIiNFT0ZcbiIpOyAgIC8vIHRlcm1p
bmF0ZSB0aGUgKHBvc3NpYmx5IGVtcHR5KSBwaXhlbHMgYmxvY2sKICAgICBmZmx1c2goc3Rkb3V0
KTsKQEAgLTg5Myw3ICs4OTMsNyBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3Rl
bnRTdGF0CiAgICAgaWYgKFNVQ0NFRURFRCh3ZWJWaWV3LT5wcmVmZXJlbmNlcygmcHJlZmVyZW5j
ZXMpKSkKICAgICAgICAgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyhwcmVmZXJlbmNl
cy5nZXQoKSk7CiAKLSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgaWYgKGdU
ZXN0UnVubmVyKSB7CiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gZnJhbWUt
Pmdsb2JhbENvbnRleHQoKTsKICAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVy
bmFsc09iamVjdChjb250ZXh0KTsKICAgICB9CkBAIC05MzQsMTUgKzkzNCwxNSBAQCBzdGF0aWMg
dm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAKIHN0YXRpYyB2b2lkIHNpemVXZWJW
aWV3Rm9yQ3VycmVudFRlc3QoKQogewotICAgIGJvb2wgaXNTVkdXM0NUZXN0ID0gKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+dGVzdFBhdGhPclVSTCgpLmZpbmQoInN2Z1xcVzNDLVNWRy0xLjEiKSAh
PSBzdHJpbmc6Om5wb3MpOworICAgIGJvb2wgaXNTVkdXM0NUZXN0ID0gKGdUZXN0UnVubmVyLT50
ZXN0UGF0aE9yVVJMKCkuZmluZCgic3ZnXFxXM0MtU1ZHLTEuMSIpICE9IHN0cmluZzo6bnBvcyk7
CiAgICAgdW5zaWduZWQgd2lkdGg7CiAgICAgdW5zaWduZWQgaGVpZ2h0OwogICAgIGlmIChpc1NW
R1czQ1Rlc3QpIHsKICAgICAgICAgd2lkdGggPSA0ODA7CiAgICAgICAgIGhlaWdodCA9IDM2MDsK
ICAgICB9IGVsc2UgewotICAgICAgICB3aWR0aCA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhW
aWV3V2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IExheW91dFRlc3RDb250cm9sbGVyOjptYXhWaWV3
SGVpZ2h0OworICAgICAgICB3aWR0aCA9IFRlc3RSdW5uZXI6Om1heFZpZXdXaWR0aDsKKyAgICAg
ICAgaGVpZ2h0ID0gVGVzdFJ1bm5lcjo6bWF4Vmlld0hlaWdodDsKICAgICB9CiAKICAgICA6OlNl
dFdpbmRvd1Bvcyh3ZWJWaWV3V2luZG93LCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBTV1BfTk9N
T1ZFKTsKQEAgLTk3NywyMiArOTc3LDIyIEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3Ry
aW5nJiBpbnB1dEwKIAogICAgIENGUmVsZWFzZSh1cmwpOwogCi0gICAgOjpnTGF5b3V0VGVzdENv
bnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFu
ZC5leHBlY3RlZFBpeGVsSGFzaCk7CisgICAgOjpnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNy
ZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIGRvbmUgPSBm
YWxzZTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogCiAgICAgc2l6ZVdlYlZpZXdGb3JDdXJy
ZW50VGVzdCgpOwotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0SWNvbkRhdGFiYXNlRW5h
YmxlZChmYWxzZSk7CisgICAgZ1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoZmFs
c2UpOwogCiAgICAgaWYgKHNob3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyhwYXRoT3JVUkwuY19z
dHIoKSkpCi0gICAgICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0RHVtcEZyYW1lTG9hZENh
bGxiYWNrcyh0cnVlKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBGcmFtZUxvYWRDYWxs
YmFja3ModHJ1ZSk7CiAKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKFNV
Q0NFRURFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKSB7CiAgICAgICAgIENPTVB0cjxJV2Vi
Vmlld1ByaXZhdGU+IHZpZXdQcml2YXRlOwogICAgICAgICBpZiAoU1VDQ0VFREVEKHdlYlZpZXct
PlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxk
TG9nSGlzdG9yeURlbGVnYXRlcyhwYXRoT3JVUkwuY19zdHIoKSkpIHsKLSAgICAgICAgICAgICAg
ICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldER1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3Mo
dHJ1ZSk7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBI
aXN0b3J5RGVsZWdhdGVDYWxsYmFja3ModHJ1ZSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgdmlld1ByaXZhdGUtPnNldEhpc3RvcnlEZWxlZ2F0ZShzaGFyZWRIaXN0b3J5RGVsZWdhdGUu
Z2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgdmlld1ByaXZhdGUt
PnNldEhpc3RvcnlEZWxlZ2F0ZSgwKTsKQEAgLTEwMDUsMTMgKzEwMDUsMTMgQEAgc3RhdGljIHZv
aWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lz
dGVudFN0YXRlQmVmb3JlVGVzdGluZygpOwogCiAgICAgaWYgKHNob3VsZEVuYWJsZURldmVsb3Bl
ckV4dHJhcyhwYXRoT3JVUkwuY19zdHIoKSkpIHsKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgICAgICBnVGVzdFJ1bm5l
ci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKICAgICAgICAgaWYgKHNob3VsZE9w
ZW5XZWJJbnNwZWN0b3IocGF0aE9yVVJMLmNfc3RyKCkpKQotICAgICAgICAgICAgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5zaG93V2ViSW5zcGVjdG9yKCk7CisgICAgICAgICAgICBnVGVzdFJ1bm5l
ci0+c2hvd1dlYkluc3BlY3RvcigpOwogICAgIH0KICAgICBpZiAoc2hvdWxkRHVtcEFzVGV4dChw
YXRoT3JVUkwuY19zdHIoKSkpIHsKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRE
dW1wQXNUZXh0KHRydWUpOwotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldEdlbmVy
YXRlUGl4ZWxSZXN1bHRzKGZhbHNlKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBBc1Rl
eHQodHJ1ZSk7CisgICAgICAgIGdUZXN0UnVubmVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhm
YWxzZSk7CiAgICAgfQogCiAgICAgcHJldlRlc3RCRkl0ZW0gPSAwOwpAQCAtMTA0OSwxNSArMTA0
OSwxNSBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAgICAgfQog
CiAgICAgaWYgKHNob3VsZEVuYWJsZURldmVsb3BlckV4dHJhcyhwYXRoT3JVUkwuY19zdHIoKSkp
IHsKLSAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5jbG9zZVdlYkluc3BlY3RvcigpOwot
ICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQo
ZmFsc2UpOworICAgICAgICBnVGVzdFJ1bm5lci0+Y2xvc2VXZWJJbnNwZWN0b3IoKTsKKyAgICAg
ICAgZ1Rlc3RSdW5uZXItPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZmFsc2UpOwogICAgIH0K
IAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZygpOwogCiAg
ICAgZnJhbWUtPnN0b3BMb2FkaW5nKCk7CiAKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmNsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgpKSB7CisgICAgaWYgKDo6Z1Rl
c3RSdW5uZXItPmNsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgpKSB7CiAgICAgICAg
IFZlY3RvcjxIV05EPiB3aW5kb3dzID0gb3BlbldpbmRvd3MoKTsKICAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IHdpbmRvd3Muc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CkBAIC0xMDczLDcgKzEwNzMsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNv
bnN0IHN0cmluZyYgaW5wdXRMCiAKIGV4aXQ6CiAgICAgU3lzRnJlZVN0cmluZyh1cmxCU3RyKTsK
LSAgICA6OmdMYXlvdXRUZXN0Q29udHJvbGxlci5jbGVhcigpOworICAgIDo6Z1Rlc3RSdW5uZXIu
Y2xlYXIoKTsKIAogICAgIHJldHVybjsKIH0KQEAgLTExOTcsOCArMTE5Nyw4IEBAIFdpbmRvd1Rv
V2ViVmlld01hcCYgd2luZG93VG9XZWJWaWV3TWFwKCkKIAogSVdlYlZpZXcqIGNyZWF0ZVdlYlZp
ZXdBbmRPZmZzY3JlZW5XaW5kb3coSFdORCogd2ViVmlld1dpbmRvdykKIHsKLSAgICB1bnNpZ25l
ZCBtYXhWaWV3V2lkdGggPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld1dpZHRoOwotICAg
IHVuc2lnbmVkIG1heFZpZXdIZWlnaHQgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWF4Vmlld0hl
aWdodDsKKyAgICB1bnNpZ25lZCBtYXhWaWV3V2lkdGggPSBUZXN0UnVubmVyOjptYXhWaWV3V2lk
dGg7CisgICAgdW5zaWduZWQgbWF4Vmlld0hlaWdodCA9IFRlc3RSdW5uZXI6Om1heFZpZXdIZWln
aHQ7CiAgICAgSFdORCBob3N0V2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfVE9PTFdJTkRP
Vywga0R1bXBSZW5kZXJUcmVlQ2xhc3NOYW1lLCBURVhUKCJEdW1wUmVuZGVyVHJlZSIpLCBXU19Q
T1BVUCwKICAgICAgIC1tYXhWaWV3V2lkdGgsIC1tYXhWaWV3SGVpZ2h0LCBtYXhWaWV3V2lkdGgs
IG1heFZpZXdIZWlnaHQsIDAsIDAsIEdldE1vZHVsZUhhbmRsZSgwKSwgMCk7CiAKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FZGl0aW5nRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FZGl0aW5nRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAx
MjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRWRpdGluZ0RlbGVnYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAg
ICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYg
IWRvbmUpCisgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYg
IWRvbmUpCiAgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJl
Z2luRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIpLCBkdW1wKHJhbmdlKSk7CiAKICAgICAqcmVzdWx0
ID0gbV9hY2NlcHRzRWRpdGluZzsKQEAgLTE0NSw3ICsxNDUsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAg
fQogCi0gICAgaWYgKDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpICYmICFkb25lKQorICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpICYmICFkb25lKQogICAgICAgICBfdHByaW50ZihURVhUKCJFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTolc1xuIiksIGR1bXAocmFuZ2UpKTsKIAogICAgICpy
ZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5nOwpAQCAtMTY0LDcgKzE2NCw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgVEVYVCgiV2ViVmlld0luc2Vy
dEFjdGlvbkRyb3BwZWQiKSwKICAgICB9OwogCi0gICAgaWYgKDo6Z0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAgIGlmICg6OmdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAgICAgICBfdHByaW50ZihU
RVhUKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiVzIHJlcGxhY2luZ0RPTVJh
bmdlOiVzIGdpdmVuQWN0aW9uOiVzXG4iKSwgZHVtcFBhdGgobm9kZSksIGR1bXAocmFuZ2UpLCBp
bnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTE4OCw3
ICsxODgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAg
ICAgIFRFWFQoIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiksCiAgICAgfTsKIAotICAgIGlm
ICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9u
ZSkKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9u
ZSkKICAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0
VGV4dDolcyByZXBsYWNpbmdET01SYW5nZTolcyBnaXZlbkFjdGlvbjolc1xuIiksIHRleHQgPyB0
ZXh0IDogVEVYVCgiIiksIGR1bXAocmFuZ2UpLCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7
CiAKICAgICAqcmVzdWx0ID0gbV9hY2NlcHRzRWRpdGluZzsKQEAgLTIwNSw3ICsyMDUsNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CiAgICAgfQogCi0gICAgaWYgKDo6Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAgICAgICBfdHByaW50ZihURVhUKCJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZTolc1xuIiksIGR1bXAocmFuZ2UpKTsK
IAogICAgICpyZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5nOwpAQCAtMjM0LDcgKzIzNCw3IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgVEVYVCgiVFJV
RSIpCiAgICAgfTsKIAotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRp
bmdDYWxsYmFja3MoKSAmJiAhZG9uZSkKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRp
bmdDYWxsYmFja3MoKSAmJiAhZG9uZSkKICAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTolcyB0b0RPTVJhbmdlOiVzIGFm
ZmluaXR5OiVzIHN0aWxsU2VsZWN0aW5nOiVzXG4iKSwgZHVtcChjdXJyZW50UmFuZ2UpLCBkdW1w
KHByb3Bvc2VkUmFuZ2UpLCBhZmZpbml0eXN0cmluZ1tzZWxlY3Rpb25BZmZpbml0eV0sIGJvb2xz
dHJpbmdbc3RpbGxTZWxlY3RpbmddKTsKIAogICAgICpyZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5n
OwpAQCAtMjUyLDcgKzI1Miw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0Rl
bGVnYXQKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBpZiAoOjpnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpCisgICAg
aWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpCiAgICAg
ICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6JXMg
dG9FbGVtZW50c0luRE9NUmFuZ2U6JXNcbiIpLCBURVhUKCInc3R5bGUgZGVzY3JpcHRpb24nIikv
Kltbc3R5bGUgZGVzY3JpcHRpb25dIFVURjhTdHJpbmddKi8sIGR1bXAocmFuZ2UpKTsKIAogICAg
ICpyZXN1bHQgPSBtX2FjY2VwdHNFZGl0aW5nOwpAQCAtMjcwLDcgKzI3MCw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKICAgICB9CiAKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkgJiYgIWRvbmUpCisgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkgJiYgIWRvbmUpCiAgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZENoYW5nZVR5cGluZ1N0eWxlOiVzIHRvU3R5bGU6JXNcbiIpLCBURVhUKCIn
Y3VycmVudFN0eWxlIGRlc2NyaXB0aW9uJyIpLCBURVhUKCIncHJvcG9zZWRTdHlsZSBkZXNjcmlw
dGlvbiciKSk7CiAKICAgICAqcmVzdWx0ID0gbV9hY2NlcHRzRWRpdGluZzsKQEAgLTI4Nyw3ICsy
ODcsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0CiAgICAgICAg
IHJldHVybiBFX1BPSU5URVI7CiAgICAgfQogCi0gICAgaWYgKDo6Z0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQorICAgIGlmICg6OmdUZXN0UnVu
bmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKQogICAgICAgICBfdHByaW50ZihU
RVhUKCJFRElUSU5HIERFTEVHQVRFOiBkb1BsYXRmb3JtQ29tbWFuZDolc1xuIiksIGNvbW1hbmQg
PyBjb21tYW5kIDogVEVYVCgiIikpOwogCiAgICAgKnJlc3VsdCA9IG1fYWNjZXB0c0VkaXRpbmc7
CkBAIC0yOTcsNyArMjk3LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVs
ZWdhdAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFZGl0aW5nRGVsZWdhdGU6OndlYlZpZXdE
aWRCZWdpbkVkaXRpbmcoIAogICAgIC8qIFtpbl0gKi8gSVdlYk5vdGlmaWNhdGlvbiogbm90aWZp
Y2F0aW9uKQogewotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVkaXRpbmdD
YWxsYmFja3MoKSAmJiAhZG9uZSkgeworICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wRWRpdGlu
Z0NhbGxiYWNrcygpICYmICFkb25lKSB7CiAgICAgICAgIEJTVFIgbmFtZTsKICAgICAgICAgbm90
aWZpY2F0aW9uLT5uYW1lKCZuYW1lKTsKICAgICAgICAgX3RwcmludGYoVEVYVCgiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzolc1xuIiksIG5hbWUgPyBuYW1lIDogVEVY
VCgiIikpOwpAQCAtMzA5LDcgKzMwOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRp
dGluZ0RlbGVnYXQKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXRlOjp3
ZWJWaWV3RGlkQ2hhbmdlKCAKICAgICAvKiBbaW5dICovIElXZWJOb3RpZmljYXRpb24gKm5vdGlm
aWNhdGlvbikKIHsKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRp
bmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgewogICAgICAgICBCU1RSIG5hbWU7CiAgICAgICAgIG5v
dGlmaWNhdGlvbi0+bmFtZSgmbmFtZSk7CiAgICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6JXNcbiIpLCBuYW1lID8gbmFtZSA6IFRF
WFQoIiIpKTsKQEAgLTMyMSw3ICszMjEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVk
aXRpbmdEZWxlZ2F0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0ZTo6
d2ViVmlld0RpZEVuZEVkaXRpbmcoIAogICAgIC8qIFtpbl0gKi8gSVdlYk5vdGlmaWNhdGlvbiAq
bm90aWZpY2F0aW9uKQogewotICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgeworICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpICYmICFkb25lKSB7CiAgICAgICAgIEJTVFIgbmFtZTsKICAgICAg
ICAgbm90aWZpY2F0aW9uLT5uYW1lKCZuYW1lKTsKICAgICAgICAgX3RwcmludGYoVEVYVCgiRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6JXNcbiIpLCBuYW1lID8gbmFtZSA6
IFRFWFQoIiIpKTsKQEAgLTMzMyw3ICszMzMsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVkaXRpbmdEZWxlZ2F0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVkaXRpbmdEZWxlZ2F0
ZTo6d2ViVmlld0RpZENoYW5nZVR5cGluZ1N0eWxlKCAKICAgICAvKiBbaW5dICovIElXZWJOb3Rp
ZmljYXRpb24gKm5vdGlmaWNhdGlvbikKIHsKLSAgICBpZiAoOjpnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKKyAgICBpZiAoOjpnVGVzdFJ1
bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgewogICAgICAgICBCU1RSIG5h
bWU7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZSk7CiAgICAgICAgIF90cHJpbnRm
KFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VUeXBpbmdTdHlsZTolc1xu
IiksIG5hbWUgPyBuYW1lIDogVEVYVCgiIikpOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRWRpdGluZ0RlbGVnYXQKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRWRpdGluZ0RlbGVnYXRlOjp3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uKCAKICAgICAvKiBb
aW5dICovIElXZWJOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikKIHsKLSAgICBpZiAoOjpnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgJiYgIWRvbmUpIHsKKyAg
ICBpZiAoOjpnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSAmJiAhZG9uZSkgewog
ICAgICAgICBCU1RSIG5hbWU7CiAgICAgICAgIG5vdGlmaWNhdGlvbi0+bmFtZSgmbmFtZSk7CiAg
ICAgICAgIF90cHJpbnRmKFRFWFQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246JXNcbiIpLCBuYW1lID8gbmFtZSA6IFRFWFQoIiIpKTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAkocmV2aXNpb24gMTI1
NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAogICAg
IC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkgCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9u
ZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmlu
dGYoIiVzIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZVxuIiwgZGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNfc3RyKCkpOwogCiAgICAgLy8gTWFrZSBzdXJl
IHdlIG9ubHkgc2V0IHRoaXMgb25jZSBwZXIgdGVzdC4gIElmIGl0IGdldHMgY2xlYXJlZCwgYW5k
IHRoZW4gc2V0IGFnYWluLCB3ZSBtaWdodApAQCAtMTM3LDcgKzEzNyw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3
ZWJWaWV3LAogICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkKIHsgCi0gICAgaWYgKCFk
b25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQor
ICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQog
ICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1l
KS5jX3N0cigpKTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJF
cnJvciAqZXJyb3IsCiAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKQogewotICAgIGlm
ICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3Jc
biIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAog
ICAgIGxvY2F0aW9uQ2hhbmdlRG9uZShlcnJvciwgZnJhbWUpOwpAQCAtMTU5LDcgKzE1OSw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICov
IElXZWJWaWV3ICp3ZWJWaWV3LAogICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkKIHsK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVcbiIs
IGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAogICAg
IENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdlYlZpZXdQcml2YXRlOwpAQCAtMTc2LDEwICsxNzYs
MTAgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxvYWREZWxlZwogICAgIC8qIFtp
bl0gKi8gQlNUUiB0aXRsZSwKICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpCiB7Ci0g
ICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVRpdGxlOiAlU1xuIiwgZGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNfc3RyKCksIHRpdGxlKTsKIAot
ICAgIGlmICg6OmdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFRpdGxlQ2hhbmdlcygpICYmICFk
b25lKQorICAgIGlmICg6OmdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkgJiYgIWRvbmUp
CiAgICAgICAgIHByaW50ZigiVElUTEUgQ0hBTkdFRDogJVNcbiIsIHRpdGxlID8gdGl0bGUgOiBM
IiIpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTg4LDcgKzE4OCw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3
ZWJWaWV3LAogICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIWRv
bmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSWNvbkNoYW5nZXMoKSkKKyAgICBpZiAo
IWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBJY29uQ2hhbmdlcygpKQogICAgICAgICBwcmludGYo
IiVzIC0gZGlkQ2hhbmdlSWNvbnNcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGZyYW1lKS5jX3N0cigpKTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMjAxLDcgKzIwMSw3IEBA
IHZvaWQgRnJhbWVMb2FkRGVsZWdhdGU6OnByb2Nlc3NXb3JrKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gaWYgd2UgZmluaXNoIGFsbCB0aGUgY29tbWFuZHMsIHdlJ3JlIHJlYWR5IHRvIGR1
bXAgc3RhdGUKLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAh
OjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoV29ya1F1ZXVl
OjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmsoKSAmJiAhOjpnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgp
KQogICAgICAgICBkdW1wKCk7CiB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIEZyYW1lTG9h
ZERlbGVnYXRlOjpsb2NhdGlvbkNoYW5nZURvCiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7CiAKLSAgICBpZiAoOjpnTGF5
b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoOjpnVGVzdFJ1bm5lci0+
d2FpdFRvRHVtcCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+Y291bnQoKSkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRnJhbWVMb2FkRGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAog
ICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHBy
aW50ZigiJXMgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAogICAgIGxvY2F0aW9uQ2hhbmdlRG9uZSgw
LCBmcmFtZSk7CkBAIC0yNjksNyArMjY5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBG
cmFtZUxvYWREZWxlZwogICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yKiBlcnJvciwKICAgICAvKiBb
aW5dICovIElXZWJGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBn
VGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVz
IC0gZGlkRmFpbExvYWRXaXRoRXJyb3JcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KGZyYW1lKS5jX3N0cigpKTsKIAogICAgIGxvY2F0aW9uQ2hhbmdlRG9uZShlcnJvciwgZnJh
bWUpOwpAQCAtMjgzLDcgKzI4Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVM
b2FkRGVsZWcKICAgICAvKiBbaW5dICovIERBVEUgZmlyZURhdGUsCiAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZyYW1lKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5u
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIHdpbGxQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogJVMgXG4iLCBkZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdChmcmFtZSkuY19zdHIoKSwKICAgICAgICAgICAgICAgICB1cmxTdWl0YWJsZUZv
clRlc3RSZXN1bHQoc3RkOjp3c3RyaW5nKHVybCwgOjpTeXNTdHJpbmdMZW4odXJsKSkpLmNfc3Ry
KCkpOwogCkBAIC0yOTQsNyArMjk0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFt
ZUxvYWREZWxlZwogICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCiAgICAgLyogW2lu
XSAqLyBJV2ViRnJhbWUgKmZyYW1lKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rl
c3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAt
IGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWVcbiIsIGRlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIAogICAgIHJldHVybiBTX09LOwpAQCAtMzYw
LDcgKzM2MCw3IEBAIHZvaWQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2IKIAog
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKIAotICAgIDo6Z0xheW91dFRlc3RDb250cm9s
bGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7
CisgICAgOjpnVGVzdFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmpl
Y3QsICZleGNlcHRpb24pOwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKIAogICAgIG1fZ2NDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7CkBAIC0zODQsNyArMzg0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBGcmFtZUxv
YWREZWxlZwogICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlciwKICAgICAvKiBbaW5dICov
IElXZWJGcmFtZSAqZnJhbWUpCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIsCiAgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpLmNfc3RyKCkpOwogICAgIGlmICghZG9uZSkg
ewpAQCAtNDA4LDcgKzQwOCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2Fk
RGVsZWcKICAgICAvKiBbaW5dICovIElXZWJWaWV3ICpzZW5kZXIsCiAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZyYW1lKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5u
ZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCIlcyAtIGRpZEhh
bmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lXG4iLAogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKS5jX3N0cigpKTsKIApAQCAtNDI1LDcgKzQyNSw3
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWcKIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRl
bnQoIAogICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKnNlbmRlcikKIHsKLSAgICBpZiAoIWRvbmUg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHByaW50ZigiZGlkRGlzcGxheUluc2VjdXJlQ29udGVudFxuIik7CiAKICAgICByZXR1cm4g
U19PSzsKQEAgLTQzNSw3ICs0MzUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEZyYW1l
TG9hZERlbGVnCiAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqc2VuZGVyLAogICAgIC8qIFtpbl0g
Ki8gSVdlYlNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCiB7Ci0gICAgaWYgKCFkb25lICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghZG9u
ZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmlu
dGYoImRpZFJ1bkluc2VjdXJlQ29udGVudFxuIik7CiAKICAgICByZXR1cm4gU19PSzsKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9IaXN0b3J5RGVsZWdhdGUuY3BwCShyZXZpc2lv
biAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vSGlzdG9yeURlbGVnYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBVTE9ORyBIaXN0b3J5RGVsZWdhdGU6
OlJlbGVhc2Uodm9pZCkKIC8vIElXZWJIaXN0b3J5RGVsZWdhdGUKIEhSRVNVTFQgSGlzdG9yeURl
bGVnYXRlOjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShJV2ViVmlldyogd2ViVmlldywg
SVdlYk5hdmlnYXRpb25EYXRhKiBuYXZpZ2F0aW9uRGF0YSwgSVdlYkZyYW1lKiB3ZWJGcmFtZSkK
IHsKLSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNh
bGxiYWNrcygpKQorICAgIGlmICghZ1Rlc3RSdW5uZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxs
YmFja3MoKSkKICAgICAgICAgcmV0dXJuIFNfT0s7CiAKICAgICBCU1RSIHVybEJTVFI7CkBAIC0x
NTEsNyArMTUxLDcgQEAgSFJFU1VMVCBIaXN0b3J5RGVsZWdhdGU6OmRpZE5hdmlnYXRlV2l0aAog
CiBIUkVTVUxUIEhpc3RvcnlEZWxlZ2F0ZTo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVS
TChJV2ViVmlldyosIEJTVFIgc291cmNlVVJMLCBCU1RSIGRlc3RpbmF0aW9uVVJMLCBJV2ViRnJh
bWUqKQogewotICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wSGlzdG9yeURlbGVn
YXRlQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0
ZUNhbGxiYWNrcygpKQogICAgICAgICByZXR1cm4gU19PSzsKIAogICAgIHdzdHJpbmcgc291cmNl
OwpAQCAtMTY4LDcgKzE2OCw3IEBAIEhSRVNVTFQgSGlzdG9yeURlbGVnYXRlOjpkaWRQZXJmb3Jt
Q2xpZW4KICAgICAKIEhSRVNVTFQgSGlzdG9yeURlbGVnYXRlOjpkaWRQZXJmb3JtU2VydmVyUmVk
aXJlY3RGcm9tVVJMKElXZWJWaWV3KiB3ZWJWaWV3LCBCU1RSIHNvdXJjZVVSTCwgQlNUUiBkZXN0
aW5hdGlvblVSTCwgSVdlYkZyYW1lKiB3ZWJGcmFtZSkKIHsKLSAgICBpZiAoIWdMYXlvdXRUZXN0
Q29udHJvbGxlci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQorICAgIGlmICghZ1Rl
c3RSdW5uZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJu
IFNfT0s7CiAKICAgICB3c3RyaW5nIHNvdXJjZTsKQEAgLTE4NSw3ICsxODUsNyBAQCBIUkVTVUxU
IEhpc3RvcnlEZWxlZ2F0ZTo6ZGlkUGVyZm9ybVNlcnZlCiAKIEhSRVNVTFQgSGlzdG9yeURlbGVn
YXRlOjp1cGRhdGVIaXN0b3J5VGl0bGUoSVdlYlZpZXcqIHdlYlZpZXcsIEJTVFIgdGl0bGVCU1RS
LCBCU1RSIHVybEJTVFIpCiB7Ci0gICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBI
aXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAgICBpZiAoIWdUZXN0UnVubmVyLT5kdW1wSGlz
dG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogICAgIAogICAg
IHdzdHJpbmcgdXJsOwpAQCAtMjAyLDcgKzIwMiw3IEBAIEhSRVNVTFQgSGlzdG9yeURlbGVnYXRl
Ojp1cGRhdGVIaXN0b3J5VGkKICAgICAKIEhSRVNVTFQgSGlzdG9yeURlbGVnYXRlOjpwb3B1bGF0
ZVZpc2l0ZWRMaW5rc0ZvcldlYlZpZXcoSVdlYlZpZXcqIHdlYlZpZXcpCiB7Ci0gICAgaWYgKCFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBIaXN0b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKKyAg
ICBpZiAoIWdUZXN0UnVubmVyLT5kdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHJldHVybiBTX09LOwogCiAgICAgQlNUUiB1cmxCU1RSOwpAQCAtMjE0LDcgKzIxNCw3IEBA
IEhSRVNVTFQgSGlzdG9yeURlbGVnYXRlOjpwb3B1bGF0ZVZpc2l0ZWQKICAgICAgICAgdXJsID0g
dXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KHdzdHJpbmdGcm9tQlNUUih1cmxCU1RSKSk7CiAgICAg
U3lzRnJlZVN0cmluZyh1cmxCU1RSKTsKIAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBWaXNpdGVkTGlua3NDYWxsYmFjaygpKQorICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcFZp
c2l0ZWRMaW5rc0NhbGxiYWNrKCkpCiAgICAgICAgIHByaW50ZigiQXNrZWQgdG8gcG9wdWxhdGUg
dmlzaXRlZCBsaW5rcyBmb3IgV2ViVmlldyBcIiVTXCJcbiIsIHVybC5jX3N0cigpKTsKIAogICAg
IHJldHVybiBTX09LOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVn
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1BvbGljeURlbGVn
YXRlLmgJKHJldmlzaW9uIDEyNTUwNykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9Qb2xp
Y3lEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRl
IDxXZWJLaXQvV2ViS2l0Lmg+CiAKLWNsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworY2xhc3Mg
VGVzdFJ1bm5lcjsKIAogY2xhc3MgUG9saWN5RGVsZWdhdGUgOiBwdWJsaWMgSVdlYlBvbGljeURl
bGVnYXRlIHsKIHB1YmxpYzoKQEAgLTcxLDEyICs3MSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBQ
b2xpY3lEZWxlZ2F0ZQogICAgIHZvaWQgc2V0UGVybWlzc2l2ZShib29sIHBlcm1pc3NpdmUpIHsg
bV9wZXJtaXNzaXZlRGVsZWdhdGUgPSBwZXJtaXNzaXZlOyB9Ci0gICAgdm9pZCBzZXRDb250cm9s
bGVyVG9Ob3RpZnlEb25lKExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fY29u
dHJvbGxlclRvTm90aWZ5RG9uZSA9IGNvbnRyb2xsZXI7IH0KKyAgICB2b2lkIHNldENvbnRyb2xs
ZXJUb05vdGlmeURvbmUoVGVzdFJ1bm5lciogY29udHJvbGxlcikgeyBtX2NvbnRyb2xsZXJUb05v
dGlmeURvbmUgPSBjb250cm9sbGVyOyB9CiAKIHByaXZhdGU6CiAgICAgVUxPTkcgbV9yZWZDb3Vu
dDsKICAgICBib29sIG1fcGVybWlzc2l2ZURlbGVnYXRlOwotICAgIExheW91dFRlc3RDb250cm9s
bGVyKiBtX2NvbnRyb2xsZXJUb05vdGlmeURvbmU7CisgICAgVGVzdFJ1bm5lciogbV9jb250cm9s
bGVyVG9Ob3RpZnlEb25lOwogfTsKIAogI2VuZGlmIC8vIFBvbGljeURlbGVnYXRlX2gKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNw
cAkocmV2aXNpb24gMTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Jlc291cmNl
TG9hZERlbGVnYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2FkRGUKICAgICAvKiBbaW5dICovIElXZWJE
YXRhU291cmNlKiBkYXRhU291cmNlLAogICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyKQogeyAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBCU1RSIHVybFN0cjsKICAg
ICAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5VUkwoJnVybFN0cikpKQogICAgICAgICAgICAgcmV0
dXJuIEVfRkFJTDsKQEAgLTIzOCwyNiArMjM4LDI2IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgUmVzb3VyY2VMb2FkRGUKICAgICAvKiBbaW5dICovIElXZWJEYXRhU291cmNlKiBkYXRhU291
cmNlLAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYlVSTFJlcXVlc3QgKipuZXdSZXF1ZXN0
KQogewotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIHByaW50ZigiJVMgLSB3aWxsU2VuZFJl
cXVlc3QgJVMgcmVkaXJlY3RSZXNwb25zZSAlU1xuIiwgCiAgICAgICAgICAgICBkZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChpZGVudGlmaWVyKS5jX3N0cigpLAogICAgICAgICAgICAg
ZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCkuY19zdHIoKSwKICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlZGlyZWN0UmVzcG9uc2Up
LmNfc3RyKCkpOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiAhZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgIWdU
ZXN0UnVubmVyLT5kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkpIHsKICAgICAgICAgQ09NUHRy
PElXZWJEYXRhU291cmNlUHJpdmF0ZT4gZGF0YVNvdXJjZVByaXZhdGUoUXVlcnksIGRhdGFTb3Vy
Y2UpOwogICAgICAgICBpZiAoIWRhdGFTb3VyY2VQcml2YXRlKQogICAgICAgICAgICAgcmV0dXJu
IEVfRkFJTDsKICAgICAgICAgZGF0YVNvdXJjZVByaXZhdGUtPnNldERlZmVyTWFpblJlc291cmNl
RGF0YUxvYWQoRkFMU0UpOwogICAgIH0KIAotICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpIHsKKyAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpIHsKICAgICAgICAg
Km5ld1JlcXVlc3QgPSAwOwogICAgICAgICByZXR1cm4gU19PSzsKICAgICB9CiAKLSAgICBpZiAo
IWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVs
bE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFJlc3BvbnNlKSB7CisgICAgaWYgKCFkb25lICYmIGdU
ZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRp
cmVjdFJlc3BvbnNlKSB7CiAgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIG51bGwgZm9yIHRoaXMg
cmVkaXJlY3RcbiIpOwogICAgICAgICAqbmV3UmVxdWVzdCA9IDA7CiAgICAgICAgIHJldHVybiBT
X09LOwpAQCAtMjY1LDcgKzI2NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3Vy
Y2VMb2FkRGUKIAogICAgIElXZWJNdXRhYmxlVVJMUmVxdWVzdCogcmVxdWVzdENvcHkgPSAwOwog
ICAgIHJlcXVlc3QtPm11dGFibGVDb3B5KCZyZXF1ZXN0Q29weSk7Ci0gICAgY29uc3Qgc2V0PHN0
cmluZz4mIGNsZWFySGVhZGVycyA9IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2lsbFNlbmRSZXF1
ZXN0Q2xlYXJIZWFkZXJzKCk7CisgICAgY29uc3Qgc2V0PHN0cmluZz4mIGNsZWFySGVhZGVycyA9
IGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnMoKTsKICAgICBmb3IgKHNl
dDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBoZWFkZXIgPSBjbGVhckhlYWRlcnMuYmVnaW4oKTsg
aGVhZGVyICE9IGNsZWFySGVhZGVycy5lbmQoKTsgKytoZWFkZXIpIHsKICAgICAgIEJTVFIgYnN0
ckhlYWRlciA9IEJTVFJGcm9tU3RyaW5nKCpoZWFkZXIpOwogICAgICAgcmVxdWVzdENvcHktPnNl
dFZhbHVlKDAsIGJzdHJIZWFkZXIpOwpAQCAtMjg2LDE0ICsyODYsMTQgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIGlmICghY2hhbGxlbmdlIHx8IEZBSUxF
RChjaGFsbGVuZ2UtPnNlbmRlcigmc2VuZGVyKSkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAK
LSAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcygpKSB7CisgICAgaWYgKCFnVGVzdFJ1bm5lci0+aGFuZGxlc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlcygpKSB7CiAgICAgICAgIHByaW50ZigiJVMgLSBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgLSBTaW11bGF0aW5nIGNhbmNlbGxlZCBhdXRoZW50aWNhdGlvbiBzaGVl
dFxuIiwgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoaWRlbnRpZmllcikuY19zdHIo
KSk7CiAgICAgICAgIHNlbmRlci0+Y29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CiAgICAgICAgIHJldHVybiBTX09LOwogICAgIH0K
ICAgICAKLSAgICBjb25zdCBjaGFyKiB1c2VyID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5hdXRo
ZW50aWNhdGlvblVzZXJuYW1lKCkuY19zdHIoKTsKLSAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+YXV0aGVudGljYXRpb25QYXNzd29yZCgpLmNfc3RyKCk7
CisgICAgY29uc3QgY2hhciogdXNlciA9IGdUZXN0UnVubmVyLT5hdXRoZW50aWNhdGlvblVzZXJu
YW1lKCkuY19zdHIoKTsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IGdUZXN0UnVubmVyLT5h
dXRoZW50aWNhdGlvblBhc3N3b3JkKCkuY19zdHIoKTsKIAogICAgIHByaW50ZigiJVMgLSBkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSBSZXNwb25kaW5nIHdpdGggJXM6JXNcbiIs
IGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGlkZW50aWZpZXIpLmNfc3RyKCksIHVz
ZXIsIHBhc3N3b3JkKTsKIApAQCAtMzEyLDEyICszMTIsMTIgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBSZXNvdXJjZUxvYWREZQogICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlc3BvbnNlKiBy
ZXNwb25zZSwgCiAgICAgLyogW2luXSAqLyBJV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsK
LSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBwcmludGYoIiVTIC0gZGlkUmVjZWl2ZVJlc3Bv
bnNlICVTXG4iLAogICAgICAgICAgICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
aWRlbnRpZmllcikuY19zdHIoKSwKICAgICAgICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHJlc3BvbnNlKS5jX3N0cigpKTsKICAgICB9Ci0gICAgaWYgKCFkb25lICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkgewor
ICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlw
ZXMoKSkgewogICAgICAgICBCU1RSIG1pbWVUeXBlQlNUUjsKICAgICAgICAgaWYgKEZBSUxFRChy
ZXNwb25zZS0+TUlNRVR5cGUoJm1pbWVUeXBlQlNUUikpKQogICAgICAgICAgICAgRV9GQUlMOwpA
QCAtMzQ0LDcgKzM0NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VMb2Fk
RGUKICAgICAvKiBbaW5dICovIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKICAgICAvKiBbaW5d
ICovIElXZWJEYXRhU291cmNlKiBkYXRhU291cmNlKQogewotICAgIGlmICghZG9uZSAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAg
ICAgICAgIHByaW50ZigiJVMgLSBkaWRGaW5pc2hMb2FkaW5nXG4iLAogICAgICAgICAgICAgZGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoaWRlbnRpZmllcikuY19zdHIoKSk7CiAgICAg
fQpAQCAtMzYwLDcgKzM2MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVzb3VyY2VM
b2FkRGUKICAgICAvKiBbaW5dICovIElXZWJFcnJvciogZXJyb3IsCiAgICAgLyogW2luXSAqLyBJ
V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSkKIHsKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAg
ICBwcmludGYoIiVTIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICVTXG4iLCAKICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGlkZW50aWZpZXIpLmNfc3RyKCks
CiAgICAgICAgICAgICBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChlcnJvciwgaWRl
bnRpZmllcikuY19zdHIoKSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1
bm5lcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RS
dW5uZXJXaW4uY3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdXNp
bmcgc3RkOjp3c3RyaW5nOwogCiBzdGF0aWMgYm9vbCByZXNvbHZlQ3lnd2luUGF0aChjb25zdCB3
c3RyaW5nJiBjeWd3aW5QYXRoLCB3c3RyaW5nJiB3aW5kb3dzUGF0aCk7CiAKLUxheW91dFRlc3RD
b250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQorVGVzdFJ1bm5lcjo6flRlc3RSdW5u
ZXIoKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZy
YW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC03OSwxMiArNzksMTIgQEAgTGF5b3V0VGVzdENv
bnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbAogICAgICAgICBlZGl0aW5nRGVsZWdhdGUtPnNl
dEFjY2VwdHNFZGl0aW5nKFRSVUUpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjph
ZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlz
YWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCEK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQor
dm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7CiAgICAgQ09NUHRyPElX
ZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcp
KSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJh
Y2tGb3J3CiAgICAgYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShpdGVtLmdldCgpKTsKIH0KIAot
Ym9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK2Jv
b2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKIHsKICAgICBDT01QdHI8
SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmll
dykpKQpAQCAtMTI1LDE5ICsxMjUsMTkgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2Fs
bFNob3VsZENsbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91dFRl
c3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitKU1N0
cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCEKICAgICByZXR1cm4gMDsKIH0KIAotSlNTdHJp
bmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdS
ZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNT
dHJpbmdSZWYgbmFtZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IQogICAgIHJldHVybiAw
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCiB7CiAgICAgQ09NUHRyPElX
ZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcp
KSkKQEAgLTE1MCwxNyArMTUwLDE3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2Fi
bGVJbWFnZUwKICAgICBwcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KEZB
TFNFKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9h
ZFJlcXVlc3RzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3Rz
KCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBmb3IgNjcyNzQ5
NQogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZGlzcGxheSgpCiB7CiAgICAgZGlzcGxheVdlYlZpZXcoKTsKIH0KIAotdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9pZCBUZXN0UnVubmVyOjprZWVw
V2ViSGlzdG9yeSgpCiB7CiAgICAgQ09NUHRyPElXZWJIaXN0b3J5PiBoaXN0b3J5OwogICAgIGlm
IChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViSGlzdG9yeSwgMCwgX191dWlk
b2YoaGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaGlzdG9yeSkpKSkKQEAgLTE3
MywxMyArMTczLDEzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3IK
ICAgICBoaXN0b3J5LT5zZXRPcHRpb25hbFNoYXJlZEhpc3Rvcnkoc2hhcmVkSGlzdG9yeS5nZXQo
KSk7CiB9CiAKLUpTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJ
bmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJ
bmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0
UnVubmVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogewogICAgIENPTVB0cjxJV2ViRnJhbWVQ
cml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKICAgICBpZiAoIWZyYW1lUHJpdmF0
ZSkKQEAgLTE5NCw3ICsxOTQsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyCiAgICAgcmV0dXJuIHRleHRWYWx1ZUpTOwogfQogCi1KU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAorSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAogewogICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCkBAIC0yMjEsNyArMjIxLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRl
c3RDb250cgogICAgIHJldHVybiBtYXJrZXJUZXh0OwogfQogCi12b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQordm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9y
UG9saWN5RGVsZWdhdGUoKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBp
ZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC0yMzIsNyArMjMyLDcgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeQogICAgIHdlYlZpZXctPnNl
dFBvbGljeURlbGVnYXRlKHBvbGljeURlbGVnYXRlKTsKIH0KIAotc2l6ZV90IExheW91dFRlc3RD
b250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3NpemVfdCBUZXN0UnVubmVyOjp3ZWJI
aXN0b3J5SXRlbUNvdW50KCkKIHsKICAgICBDT01QdHI8SVdlYkhpc3Rvcnk+IGhpc3Rvcnk7CiAg
ICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5LCAwLCBf
X3V1aWRvZihoaXN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZoaXN0b3J5KSkpKQpA
QCAtMjUzLDcgKzI1Myw3IEBAIHNpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9y
eUkKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVy
Ojp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JrZXJU
aHJlYWRDb3VudCgpIGNvbnN0CiB7CiAgICAgQ09NUHRyPElXZWJXb3JrZXJzUHJpdmF0ZT4gd29y
a2VyczsKICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYldvcmtl
cnNQcml2YXRlLCAwLCBfX3V1aWRvZih3b3JrZXJzKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZ3b3JrZXJzKSkpKQpAQCAtMjY0LDEzICsyNjQsMTMgQEAgdW5zaWduZWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OndvcmtlclRocgogICAgIHJldHVybiBjb3VudDsKIH0KIAotSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0
CiB7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpbiIpKTsKICAgICByZXR1cm4gcGxhdGZvcm1O
YW1lOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiB7CiAgICAgLy8gU2FtZSBhcyBvbiBtYWMuICBUaGlz
IGNhbiBiZSBzaGFyZWQuCiAgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1l
ICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQpAQCAtMjc4LDcgKzI3OCw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogICAgIG1fd2FpdFRvRHVtcCA9
IGZhbHNlOwogfQogCi1KU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0aFRvTG9j
YWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdXJsKQorSlNTdHJp
bmdSZWYgVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNTdHJpbmdSZWYgdXJsKQogewogICAgIHdzdHJpbmcgaW5wdXQoSlNTdHJpbmdHZXRDaGFy
YWN0ZXJzUHRyKHVybCksIEpTU3RyaW5nR2V0TGVuZ3RoKHVybCkpOwogCkBAIC0zMDEsNyArMzAx
LDcgQEAgc3RhdGljIHdzdHJpbmcganNTdHJpbmdSZWZUb1dTdHJpbmcoSlNTdAogICAgIHJldHVy
biBidWZmZXIuZGF0YSgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxv
YWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKIHsKICAgICBD
T01QdHI8SVdlYkRhdGFTb3VyY2U+IGRhdGFTb3VyY2U7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+
ZGF0YVNvdXJjZSgmZGF0YVNvdXJjZSkpKQpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1MKICAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5x
dWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0Vk
aXRpbmcpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0Vk
aXRpbmcpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQo
ZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpCiAgICAgZWRpdGluZ0RlbGVnYXRlLT5zZXRB
Y2NlcHRzRWRpdGluZyhhY2NlcHRzRWRpdGluZyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0
Q29va2llcykKIHsKICAgICBpZiAoYWx3YXlzQWNjZXB0Q29va2llcyA9PSBtX2Fsd2F5c0FjY2Vw
dENvb2tpZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlCiAgICAgbV9hbHdheXNBY2NlcHRDb29raWVz
ID0gYWx3YXlzQWNjZXB0Q29va2llczsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVy
OjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgQ09NUHRy
PElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZp
ZXcpKSkKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
dXRob3JBbmRVCiAgICAgcHJlZnNQcml2YXRlLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChmbGFnKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBib29sIGF1dG9maWxs
ZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBhdXRvZmlsbGVkKQogewogICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0
b2ZpbGxlZAogICAgIGF1dG9maWxsRWxlbWVudC0+c2V0QXV0b2ZpbGxlZChhdXRvZmlsbGVkKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
Ym9vbCBzZXREZWxlZ2F0ZSwgYm9vbCBwZXJtaXNzaXZlKQordm9pZCBUZXN0UnVubmVyOjpzZXRD
dXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCiB7
CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndl
YlZpZXcoJndlYlZpZXcpKSkKQEAgLTQwOCw1NSArNDA4LDU1IEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEN1c3RvbVBvbGkKICAgICAgICAgd2ViVmlldy0+c2V0UG9saWN5RGVsZWdh
dGUoMCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmll
bnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3Zp
ZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlk
ZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBi
b29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1LgogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
R2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdl
KQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNT
dHJpbmdSZWYgbWVzc2FnZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2Nh
dGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODI2NC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit2b2lkIFRlc3RSdW5uZXI6OnNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KICAgICBzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb25Db21tb24oYWxsb3cpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJl
ck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK2ludCBUZXN0UnVubmVy
OjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgogICAgIHJl
dHVybiAtMTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElu
cHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIEpTU3RyaW5n
UmVmIGxhbmd1YWdlKQordm9pZCBUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQo
SlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3Vh
Z2UpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0
ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM5NDg1LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5w
dXREdW1wUmVjdChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1
dER1bXBSZWN0KGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVl
Y2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50KQogewogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29s
IGljb25EYXRhYmFzZUVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEljb25EYXRhYmFzZUVu
YWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8vIFNlZSBhbHNvIDxyZGFy
Oi8vcHJvYmxlbS82NDgwMTA4PgogICAgIENPTVB0cjxJV2ViSWNvbkRhdGFiYXNlPiBpY29uRGF0
YWJhc2U7CkBAIC00NjksMTIgKzQ2OSwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRJY29uRGF0YWJhCiAgICAgaWNvbkRhdGFiYXNlLT5zZXRFbmFibGVkKGljb25EYXRhYmFzZUVu
YWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJc0Zp
cnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TWFpbkZyYW1lSXNG
aXJzdFJlc3BvbmRlcihib29sIGZsYWcpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCEKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChi
b29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQogewogICAgIENPTVB0
cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJW
aWV3KSkpCkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
UHJpdmF0ZUJybwogICAgIHByZWZlcmVuY2VzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHBy
aXZhdGVCcm93c2luZ0VuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFhT
U0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdl
YlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtNTA0
LDcgKzUwNCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3IKICAg
ICBwcmVmc1ByaXZhdGUtPnNldFhTU0F1ZGl0b3JFbmFibGVkKGVuYWJsZWQpOwogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQo
ZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTUyMSwxMiArNTIxLDEyIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHQKICAgICBwcmVmc1ByaXZhdGUtPnNldEZy
YW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRl
c3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgU3BhdGlhbE5hdmlnYXRpb24gbGF5b3V0IHRlc3Rz
LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKICAgICBDT01QdHI8SVdl
YlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykp
KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93
VW5pdmUKICAgICBwcmVmc1ByaXZhdGUtPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0Zp
bGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRB
bGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQogewogICAgIENPTVB0cjxJ
V2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3
KSkpCkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxs
b3dGaWxlQQogICAgIHByZWZzUHJpdmF0ZS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tp
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7
CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtNTczLDEyICs1
NzMsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9jawogICAgIHBy
ZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCFlbmFi
bGVkKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQo
Ym9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQp
CiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUt
PndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRKYXZhU2NyaXB0CiAgICAgcHJlZnNQcml2YXRlLT5zZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGVuYWJsZWQpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBzaG91bGRDeWNsZSkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgc2hvdWxk
Q3ljbGUpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQo
ZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTYwOCwxMiArNjA4LDEyIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2wKICAgICB2aWV3UHJpdmF0ZS0+c2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKHNob3VsZEN5Y2xlID8gVFJVRSA6IEZBTFNFKTsKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0
eU1vZGUoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRp
YmlsaXR5TW9kZShib29sIGZsYWcpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCEKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wg
ZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxh
ZykKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFt
ZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtNzMzLDcgKzczMyw3IEBAIHN0YXRpYyBib29sIHJl
c29sdmVDeWd3aW5QYXRoKGNvbnN0IHdzdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1Jl
ZiBqc1VSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0
cmluZ1JlZiBqc1VSTCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYg
KEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVMKICAgICBTeXNGcmVlU3RyaW5n
KHJlc3VsdFBhdGhCU1RSKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFs
dWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3Ry
aW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAg
ICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZp
ZXcoJndlYlZpZXcpKSkKQEAgLTgwMCwyMyArODAwLDIzIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFZhbHVlRm9yVXMKICAgICBkb21JbnB1dEVsZW1lbnQtPnNldFZhbHVlRm9yVXNl
cih2YWx1ZUJTVFIpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9k
ZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3
TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQogewogICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQogewog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJsU3RyaW5nKEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKDAsIGpzVVJMKSk7CiAgICAgOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRM
b2NhdGlvbih1cmxTdHJpbmcuZ2V0KCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKIHsKICAgICA6OnNldFBlcnNpc3RlbnRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKDApOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRX
aW5kb3dJc0tleShib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJv
b2wgZmxhZykKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxF
RChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAtODMzLDcgKzgzMyw3IEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2UKICAgICA6OlNlbmRNZXNzYWdlKHdlYlZp
ZXdXaW5kb3csIGZsYWcgPyBXTV9TRVRGT0NVUyA6IFdNX0tJTExGT0NVUywgKFdQQVJBTSk6Okdl
dERlc2t0b3BXaW5kb3coKSwgMCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgQ09NUHRyPElXZWJW
aWV3PiB3ZWJWaWV3OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkK
QEAgLTg0Niw3ICs4NDYsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydElu
c2VyCiAgICAgdmlld0VkaXRpbmctPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChmbGFnID8g
VFJVRSA6IEZBTFNFKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIENPTVB0
cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJW
aWV3KSkpCkBAIC04NjMsMjIgKzg2MywyMiBAQCBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwg
d2FpdFRvRHVtcFdhCiAKIHN0YXRpYyB2b2lkIENBTExCQUNLIHdhaXRVbnRpbERvbmVXYXRjaGRv
Z0ZpcmVkKEhXTkQsIFVJTlQsIFVJTlRfUFRSLCBEV09SRCkKIHsKLSAgICBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICBnVGVzdFJ1bm5l
ci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUpCiB7CiAgICAgbV93YWl0VG9E
dW1wID0gd2FpdFVudGlsRG9uZTsKICAgICBpZiAobV93YWl0VG9EdW1wICYmICF3YWl0VG9EdW1w
V2F0Y2hkb2cpCiAgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IFNldFRpbWVyKDAsIDAsIHdh
aXRUb0R1bXBXYXRjaGRvZ0ludGVydmFsICogMTAwMCwgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmly
ZWQpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK2ludCBU
ZXN0UnVubmVyOjp3aW5kb3dDb3VudCgpCiB7CiAgICAgcmV0dXJuIG9wZW5XaW5kb3dzKCkuc2l6
ZSgpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21w
bGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpCitib29sIFRlc3RSdW5uZXI6OmVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkKIHsK
ICAgICBDT01QdHI8SURPTURvY3VtZW50PiBkb2N1bWVudDsKICAgICBpZiAoRkFJTEVEKGZyYW1l
LT5ET01Eb2N1bWVudCgmZG9jdW1lbnQpKSkKQEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIExheW91
dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1CiAgICAgcmV0dXJuIGF1dG9Db21wbGV0ZXM7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVm
IG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChK
U1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICB3c3RyaW5nIHdOYW1l
ID0ganNTdHJpbmdSZWZUb1dTdHJpbmcobmFtZSk7CiAgICAgd3N0cmluZyB3VmFsdWUgPSBqc1N0
cmluZ1JlZlRvV1N0cmluZyh2YWx1ZSk7CkBAIC05MjUsNTEgKzkyNSw1MSBAQCB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKCiAgICAgU3lzRnJlZVN0cmluZyh2YWx1ZUJT
VFIpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4
dFJlZiAvKiBjb250ZXh0ICovLCBKU1N0cmluZ1JlZiAvKiB0YXJnZXQgKi8sIEpTT2JqZWN0UmVm
IC8qIG9wdGlvbnNBcnJheSAqLykKK2Jvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRl
eHRSZWYgLyogY29udGV4dCAqLywgSlNTdHJpbmdSZWYgLyogdGFyZ2V0ICovLCBKU09iamVjdFJl
ZiAvKiBvcHRpb25zQXJyYXkgKi8pCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2Rl
bChpbnQpCit2b2lkIFRlc3RSdW5uZXI6OnNldENhY2hlTW9kZWwoaW50KQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5k
RW5hYmxlZChKU1N0cmluZ1JlZiAvKm5hbWUqLykKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5k
RW5hYmxlZChKU1N0cmluZ1JlZiAvKm5hbWUqLykKIHsKLSAgICBwcmludGYoIkVSUk9SOiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCgpIG5vdCBpbXBsZW1lbnRlZFxuIik7
CisgICAgcHJpbnRmKCJFUlJPUjogVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCgpIG5vdCBp
bXBsZW1lbnRlZFxuIik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9y
aWdpbikKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpT
U3RyaW5nUmVmIG9yaWdpbikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQg
ZGVsZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNp
Z25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KIH0KIAotSlNW
YWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
KEpTQ29udGV4dFJlZiBjb250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVzLgog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotbG9uZyBsb25n
IExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2lu
KEpTU3RyaW5nUmVmIG5hbWUpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNo
ZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdG8gZ2V0IGRpc2sgdXNhZ2UgYnkgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3Ig
YW4gb3JpZ2luLgogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbGVhckFsbERhdGFiYXNlcygpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2Vz
KCkKIHsKICAgICBDT01QdHI8SVdlYkRhdGFiYXNlTWFuYWdlcj4gZGF0YWJhc2VNYW5hZ2VyOwog
ICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiB0bXBEYXRhYmFzZU1hbmFnZXI7CkBAIC05
ODEsNyArOTgxLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYgog
ICAgIGRhdGFiYXNlTWFuYWdlci0+ZGVsZXRlQWxsRGF0YWJhc2VzKCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpT
U3RyaW5nUmVmIHZhbHVlKQordm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNT
dHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAt
MTAwMiw3ICsxMDAyLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVm
ZQogICAgIFN5c0ZyZWVTdHJpbmcodmFsdWVCU1RSKTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit2b2lk
IFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQog
ewogICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiBkYXRhYmFzZU1hbmFnZXI7CiAgICAg
Q09NUHRyPElXZWJEYXRhYmFzZU1hbmFnZXI+IHRtcERhdGFiYXNlTWFuYWdlcjsKQEAgLTEwMTUs
MTcgKzEwMTUsMTcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdQog
ICAgIGRhdGFiYXNlTWFuYWdlci0+c2V0UXVvdGEoVEVYVCgiZmlsZTovLy8iKSwgcXVvdGEpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQordm9pZCBUZXN0UnVubmVy
Ojpnb0JhY2soKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9u
YXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
RGVmZXJzTG9hZGluZyhib29sKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxl
IGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmluZy1sb2Fkcy5odG1sCiB9CiAKLXZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNjaGVtZSkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRl
biwgSlNTdHJpbmdSZWYgc2NoZW1lKQogewogICAgIENPTVB0cjxJV2ViVmlld1ByaXZhdGU+IHdl
YlZpZXc7CiAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShfX3V1aWRvZihXZWJW
aWV3KSwgMCwgX191dWlkb2Yod2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2Vi
VmlldykpKSkKQEAgLTEwMzYsMTIgKzEwMzYsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RG9tYWluUmVsYQogICAgIFN5c0ZyZWVTdHJpbmcoc2NoZW1lQlNUUik7CiB9CiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQg
bG9uZyBsb25nIHNpemUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUo
dW5zaWduZWQgbG9uZyBsb25nIHNpemUpCiB7Ci0gICAgcHJpbnRmKCJFUlJPUjogTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUoKSBub3QgaW1wbGVtZW50ZWRcbiIp
OworICAgIHByaW50ZigiRVJST1I6IFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUo
KSBub3QgaW1wbGVtZW50ZWRcbiIpOwogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVy
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRp
b25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIENPTVB0
cjxJRE9NRG9jdW1lbnQ+IGRvY3VtZW50OwogICAgIGlmIChGQUlMRUQoZnJhbWUtPkRPTURvY3Vt
ZW50KCZkb2N1bWVudCkpKQpAQCAtMTA2Niw3ICsxMDY2LDcgQEAgYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGF1c2VBbmltYXRpbwogICAgIHJldHVybiBTVUNDRUVERUQoaHIpICYmIHdhc1J1
bm5pbmc7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1l
LCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCitib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0
aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7CiAgICAgQ09NUHRyPElET01Eb2N1bWVudD4g
ZG9jdW1lbnQ7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+RE9NRG9jdW1lbnQoJmRvY3VtZW50KSkp
CkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRy
YW5zaXRpCiAgICAgcmV0dXJuIFNVQ0NFRURFRChocikgJiYgd2FzUnVubmluZzsKIH0KIAotdW5z
aWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNv
bnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25z
dAogewogICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZy
YW1lKTsKICAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKQEAgLTExMTAsNyArMTExMCw3IEBAIHN0YXRp
YyBfYnN0cl90IGJzdHJUKEpTU3RyaW5nUmVmIGpzU3RyaW4KICAgICByZXR1cm4gX2JzdHJfdChK
U1N0cmluZ0NvcHlCU1RSKGpzU3RyaW5nKSwgZmFsc2UpOwogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3Vy
Y2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRl
c3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3ZvaWQgVGVz
dFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNl
T3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0
aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgQ09N
UHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0
ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQpAQCAtMTExOSw3ICsxMTE5LDcgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZQogICAgIHdlYlZpZXctPmFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGJzdHJUKHNvdXJjZU9yaWdpbikuR2V0QlNUUigpLCBi
c3RyVChkZXN0aW5hdGlvblByb3RvY29sKS5HZXRCU1RSKCksIGJzdHJUKGRlc3RpbmF0aW9uSG9z
dCkuR2V0QlNUUigpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3Ry
aW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNT
dHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5z
KQordm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0
cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpT
U3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cykKIHsKICAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3OwogICAgIGlmIChGQUlM
RUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoX191dWlkb2YoV2ViVmlldyksIDAsIF9fdXVpZG9mKHdl
YlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZpZXcpKSkpCkBAIC0xMTI4LDEy
ICsxMTI4LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkEKICAg
ICB3ZWJWaWV3LT5yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShic3RyVChzb3VyY2VP
cmlnaW4pLkdldEJTVFIoKSwgYnN0clQoZGVzdGluYXRpb25Qcm90b2NvbCkuR2V0QlNUUigpLCBi
c3RyVChkZXN0aW5hdGlvbkhvc3QpLkdldEJTVFIoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFp
bnMpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTY3JvbGxiYXJQb2xpY3ko
SlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmIG9yaWVudGF0aW9uLCBKU1N0cmlu
Z1JlZiBwb2xpY3kpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBy
dW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlw
dChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCiB7
CiAgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKFdl
YktpdENyZWF0ZUluc3RhbmNlKF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQpAQCAtMTE0Nyw3ICsxMTQ3
LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdAogfQogCiAKLXZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNv
dXJjZSwgYm9vbCBhbGxGcmFtZXMpCit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0
KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiB7CiAgICAgQ09NUHRyPElXZWJW
aWV3UHJpdmF0ZT4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNl
KF9fdXVpZG9mKFdlYlZpZXcpLCAwLCBfX3V1aWRvZih3ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZ3ZWJWaWV3KSkpKQpAQCAtMTE2MCw3ICsxMTYwLDcgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlUwogICAgIHdlYlZpZXctPmFkZFVzZXJTdHlsZVNo
ZWV0VG9Hcm91cChfYnN0cl90KEwib3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIpLkdldEJTVFIo
KSwgd29ybGQuZ2V0KCksIGJzdHJUKHNvdXJjZSkuR2V0QlNUUigpLCAwLCAwLCAwLCAwLCAwKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewogICAgIENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBp
ZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3ZWJWaWV3KSkpCkBAIC0xMTc3LDEyICsxMTc3LDEy
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVsb3BlckUKICAgICBwcmVmc1By
aXZhdGUtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2hv
d1dlYkluc3BlY3RvcigpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAgIGlm
IChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTExOTcsNyArMTE5Nyw3IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWMKICAgICAgICAgaW5zcGVj
dG9yLT5zaG93KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5z
cGVjdG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQogewogICAgIENP
TVB0cjxJV2ViVmlldz4gd2ViVmlldzsKICAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3KCZ3
ZWJWaWV3KSkpCkBAIC0xMjE0LDcgKzEyMTQsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbG9zZVdlYkluc3BlCiAgICAgaW5zcGVjdG9yLT5jbG9zZSgpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0
cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
bG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQpAQCAt
MTI1MywxMiArMTI1MywxMiBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdlYlNjcmlwdFdv
cmxkCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit2b2lkIFRlc3RS
dW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWdu
ZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElE
LCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgQ09N
UHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwogICAgIGlm
ICghZnJhbWVQcml2YXRlKQpAQCAtMTI4Myw3ICsxMjgzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcAogICAgIFN5c0ZyZWVTdHJpbmcocmVzdWx0KTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3ZvaWQg
VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIHsKICAgICBDT01QdHI8SVdlYkhp
c3Rvcnk+IGhpc3Rvcnk7CiAgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJ
RF9XZWJIaXN0b3J5LCAwLCBfX3V1aWRvZihoaXN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZoaXN0b3J5KSkpKQpAQCAtMTMwMCw3ICsxMzAwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVmlzaQogICAgIHNoYXJlZEhpc3RvcnlQcml2YXRlLT5yZW1vdmVB
bGxWaXNpdGVkTGlua3MoKTsKIH0KIAotaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJP
ZlBhZ2VzKGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMp
CitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGhJblBpeGVscywg
ZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzKQogewogICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRl
PiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKICAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKQEAg
LTEzMTIsMjQgKzEzMTIsMjQgQEAgaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBh
Z2VzKAogICAgIHJldHVybiBwYWdlTnVtYmVyOwogfQogCi1KU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRl
c3RSdW5uZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdl
TnVtYmVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KICAgICByZXR1
cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERh
dGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCit2b2lkIFRlc3RSdW5uZXI6OmFwaVRlc3ROZXdXaW5k
b3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VV
UkwpCiB7CiAKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5C
b3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRl
c3RSdW5uZXI6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1h
cmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oKTsKIH0KIAotdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkK
K3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKIHsK
ICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CiAgICAgaWYgKEZBSUxFRChmcmFtZS0+d2Vi
Vmlldygmd2ViVmlldykpKQpAQCAtMTM0Nyw1NiArMTM0Nyw1NiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphcGlUZXN0R29Ub0N1CiAgICAgd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRl
bShpdGVtLmdldCgpLCAmc3VjY2Vzcyk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRXZWJWaWV3RWRp
dGFibGUoYm9vbCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGlj
YXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQordm9pZCBU
ZXN0UnVubmVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwg
SlNTdHJpbmdSZWYpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9k
YWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9ydE1vZGFsKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQor
dm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKICAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3ZvaWQgVGVzdFJ1bm5lcjo6b2Jz
ZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZGVsZXRlQWxsTG9jYWxTdG9y
YWdlKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQogCi1KU1ZhbHVlUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29u
dGV4dCkKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlND
b250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLWxvbmcgbG9uZyBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVm
IG9yaWdpbklkZW50aWZpZXIpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlz
a1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgbG9jYWwgc3RvcmFnZSBkaXNrIHVz
YWdlIGZvciBhbiBvcmlnaW4uCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCit2
b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBV
UkwpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVy
dmFsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWlu
aW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAgQ09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OwogICAg
IGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXcoJndlYlZpZXcpKSkKQEAgLTE0MDksNyArMTQwOSw3
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KICAgICB2aWV3UHJp
dmF0ZS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobWluaW11bVRpbWVySW50ZXJ2YWwpOwogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVm
IGRpcmVjdGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1Jl
ZiBkaXJlY3Rpb24pCiB7CiAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0
ZShRdWVyeSwgZnJhbWUpOwogICAgIGlmICghZnJhbWVQcml2YXRlKQpAQCAtMTQxOCw1MyArMTQx
OCw1MyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0CiAgICAgZnJh
bWVQcml2YXRlLT5zZXRUZXh0RGlyZWN0aW9uKGJzdHJUKGRpcmVjdGlvbikuR2V0QlNUUigpKTsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCit2
b2lkIFRlc3RSdW5uZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQogewogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmZvY3VzV2ViVmlldygpCit2b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldygpCiB7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihk
b3VibGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUpCiB7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNpbXVsYXRlRGVza3RvcE5vdGlmaWNh
dGlvbkNsaWNrKEpTU3RyaW5nUmVmIHRpdGxlKQordm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZURl
c2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0cmluZ1JlZiB0aXRsZSkKIHsKICAgICAvLyBGSVhN
RTogSW1wbGVtZW50LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldFBhZ2VW
aXNpYmlsaXR5KCkKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciopCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZChib29sKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZChib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3Ry
aW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UoSlNTdHJpbmdS
ZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwg
SlNTdHJpbmdSZWYpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGl2ZXJXZWJJbnRlbnQoSlNTdHJpbmdS
ZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFN0b3JhZ2VEYXRhYmFz
ZUlkbGVJbnRlcnZhbChkb3VibGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VEYXRhYmFz
ZUlkbGVJbnRlcnZhbChkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgog
fQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcAkocmV2aXNpb24g
MTI1NTA4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzEsNyArNDcxLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBV
SURlbGVnYXRlOjpydQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OwogICAgIHByaW50ZigiQ09ORklSTSBOQVZJR0FUSU9OOiAlU1xuIiwgbWVzc2FnZSA/IG1lc3Nh
Z2UgOiBMIiIpOwotICAgICpyZXN1bHQgPSAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5zaG91bGRT
dGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpOworICAgICpyZXN1bHQgPSAhZ1Rl
c3RSdW5uZXItPnNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKCk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTUzNiw3ICs1MzYsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFVJRGVsZWdhdGU6OmNyCiAgICAgICAgIC8qIFtpbl0gKi8gSVdlYlVSTFJlcXVl
c3QgKnJlcXVlc3QsCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYlZpZXcgKipuZXdX
ZWJWaWV3KQogewotICAgIGlmICghOjpnTGF5b3V0VGVzdENvbnRyb2xsZXItPmNhbk9wZW5XaW5k
b3dzKCkpCisgICAgaWYgKCE6OmdUZXN0UnVubmVyLT5jYW5PcGVuV2luZG93cygpKQogICAgICAg
ICByZXR1cm4gRV9GQUlMOwogICAgICpuZXdXZWJWaWV3ID0gY3JlYXRlV2ViVmlld0FuZE9mZnNj
cmVlbldpbmRvdygpOwogICAgIHJldHVybiBTX09LOwpAQCAtNTg3LDcgKzU4Nyw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZXgKICAgICBvcmlnaW4tPmhvc3QoJmhv
c3QpOwogICAgIG9yaWdpbi0+cG9ydCgmcG9ydCk7CiAKLSAgICBpZiAoIWRvbmUgJiYgZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBEYXRhYmFzZUNhbGxiYWNrcygpKQogICAgICAgICBwcmludGYo
IlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JT
ZWN1cml0eU9yaWdpbjp7JVMsICVTLCAlaX0gZGF0YWJhc2U6JVNcbiIsIHByb3RvY29sLCBob3N0
LCBwb3J0LCBkYXRhYmFzZUlkZW50aWZpZXIpOwogCiAgICAgU3lzRnJlZVN0cmluZyhwcm90b2Nv
bCk7CkBAIC02MzIsNyArNjMyLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVn
YXRlOjp3ZQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnNldFN0YXR1
c1RleHQoSVdlYlZpZXcqLCBCU1RSIHRleHQpCiB7IAotICAgIGlmIChnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkKKyAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBT
dGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FM
TEJBQ0s6IHNldFN0YXR1c1RleHQ6JXNcbiIsIHRleHQgPyB0b1VURjgodGV4dCkuY19zdHIoKSA6
ICIiKTsKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0R1bXBSZW5kZXJUcmVlV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCShyZXZpc2lvbiAxMjU1MDgpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBGSUxFKiBsb2dPdXRwdXQ7CiAK
LVJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOworUmVm
UHRyPFRlc3RSdW5uZXI+IGdUZXN0UnVubmVyOwogc3RhdGljIFdlYlZpZXcqIHdlYlZpZXc7CiBz
dGF0aWMgd3hUaW1lciogaWRsZVRpbWVyOwogCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKGV2ZW50LkdldFN0YXRlKCkgPT0gV0VCVklFV19MT0FEX09OTE9BRF9IQU5ETEVE
KSB7CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPndhaXRUb0R1bXAoKSB8fCBub3RpZmllZCkgewor
ICAgICAgICAgICAgaWYgKCFnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpIHx8IG5vdGlmaWVkKSB7
CiAgICAgICAgICAgICAgICAgZHVtcCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
MjgsMTQgKzEyOCwxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBPblJlY2VpdmVkVGl0bGVF
dmVudChXZWJWaWV3UmVjZWl2ZWRUaXRsZUV2ZW50JiBldmVudCkKICAgICB7Ci0gICAgICAgIGlm
IChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBUaXRsZUNoYW5nZXMoKSAmJiAhZG9uZSkKKyAg
ICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wVGl0bGVDaGFuZ2VzKCkgJiYgIWRvbmUpCiAgICAg
ICAgICAgICB3eEZwcmludGYoc3Rkb3V0LCAiVElUTEUgQ0hBTkdFRDogJVNcbiIsIGV2ZW50Lkdl
dFRpdGxlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIE9uV2luZG93T2JqZWN0Q2xlYXJlZEV2
ZW50KFdlYlZpZXdXaW5kb3dPYmplY3RDbGVhcmVkRXZlbnQmIGV2ZW50KQogICAgIHsKICAgICAg
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAgICBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPm1ha2VXaW5kb3dPYmplY3QoZXZlbnQuR2V0SlNDb250ZXh0KCksIGV2ZW50LkdldFdpbmRv
d09iamVjdCgpLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dP
YmplY3QoZXZlbnQuR2V0SlNDb250ZXh0KCksIGV2ZW50LkdldFdpbmRvd09iamVjdCgpLCAmZXhj
ZXB0aW9uKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTU1LDcgKzE1NSw3IEBAIExheW91
dFdlYlZpZXdFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlciAKIHN0YXRpYyB3eFN0cmluZyBkdW1w
RnJhbWVzQXNUZXh0KFdlYkZyYW1lKiBmcmFtZSkKIHsKICAgICAvLyBUT0RPOiBpbXBsZW1lbnQg
dGhpcy4gbGVhdmluZyB0aGlzIGhlcmUgc28gd2UgZG9uJ3QgZm9yZ2V0IHRoaXMgY2FzZS4KLSAg
ICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgewor
ICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVzQXNUZXh0KCkpIHsKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIGZyYW1lLT5HZXRJbm5lclRleHQoKTsKQEAgLTE2NiwxNSArMTY2LDE1
IEBAIHZvaWQgZHVtcCgpCiAgICAgaWYgKCFkb25lKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcCgpICYmICFub3RpZmllZCkK
KyAgICBpZiAoZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSAmJiAhbm90aWZpZWQpCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgaWYgKGR1bXBUcmVlKSB7CiAgICAgICAgIGNvbnN0IGNo
YXIqIHJlc3VsdCA9IDA7CiAKLSAgICAgICAgYm9vbCBkdW1wQXNUZXh0ID0gZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wQXNUZXh0KCk7CisgICAgICAgIGJvb2wgZHVtcEFzVGV4dCA9IGdUZXN0
UnVubmVyLT5kdW1wQXNUZXh0KCk7CiAgICAgICAgIHd4U3RyaW5nIHN0cjsKLSAgICAgICAgaWYg
KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKQorICAgICAgICBpZiAoZ1Rlc3RS
dW5uZXItPmR1bXBBc1RleHQoKSkKICAgICAgICAgICAgIHN0ciA9IGR1bXBGcmFtZXNBc1RleHQo
d2ViVmlldy0+R2V0TWFpbkZyYW1lKCkpOwogICAgICAgICBlbHNlIAogICAgICAgICAgICAgc3Ry
ID0gd2ViVmlldy0+R2V0TWFpbkZyYW1lKCktPkdldEV4dGVybmFsUmVwcmVzZW50YXRpb24oKTsK
QEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICByZXN1bHQgPSBzdHIuVG9V
VEY4KCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2U7Ci0gICAgICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
QXNUZXh0KCkpCisgICAgICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSkKICAg
ICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiV2ViRnJhbWU6OkdldElubmVyVGV4dCI7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIldlYkZyYW1l
OjpHZXRFeHRlcm5hbFJlcHJlc2VudGF0aW9uIjsKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIGR1
bXAoKQogICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmVzdWx0KTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkg
eworICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkgewogICAg
ICAgICAgICAgLy8gRklYTUU6IG5vdCBpbXBsZW1lbnRlZAogICAgICAgICB9CiAKQEAgLTIwNCw5
ICsyMDQsOSBAQCB2b2lkIGR1bXAoKQogICAgIH0KIAogICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QKLSAgICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVs
UmVzdWx0cygpCi0gICAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dl
YkFyY2hpdmUoKQotICAgICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNl
QXNXZWJBcmNoaXZlKCkpIHsKKyAgICAgICAgJiYgZ1Rlc3RSdW5uZXItPmdlbmVyYXRlUGl4ZWxS
ZXN1bHRzKCkKKyAgICAgICAgJiYgIWdUZXN0UnVubmVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkK
KyAgICAgICAgJiYgIWdUZXN0UnVubmVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBkdW1waW5nIHBpeGVscwogICAgICAgICBm
Zmx1c2goc3Rkb3V0KTsKICAgICB9CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBkdW1wKCkKICAg
ICBmZmx1c2goc3Rkb3V0KTsKICAgICBmZmx1c2goc3RkZXJyKTsKIAotICAgIGdMYXlvdXRUZXN0
Q29udHJvbGxlci5jbGVhcigpOworICAgIGdUZXN0UnVubmVyLmNsZWFyKCk7CiB9CiAKIHN0YXRp
YyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgaW5wdXRMaW5lKQpAQCAtMjMyLDggKzIzMiw4
IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgaW5wdXQKICAgICBpZiAoaHR0
cCA9PSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIHBhdGhPclVSTC5pbnNlcnQoMCwgImZpbGU6Ly8i
KTsKICAgICAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7Ci0gICAgaWYg
KCFnTGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBnVGVzdFJ1bm5lciA9IFRlc3RSdW5uZXI6
OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGlmICgh
Z1Rlc3RSdW5uZXIpIHsKICAgICAgICAgd3hUaGVBcHAtPkV4aXRNYWluTG9vcCgpOwogICAgIH0K
IApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvVGVzdFJ1bm5lcld4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9UZXN0UnVubmVyV3guY3BwCShyZXZpc2lv
biAxMjU1MDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9UZXN0UnVubmVyV3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2MDIgKzM5LDYwMyBAQAogCiAKIAotTGF5b3V0VGVzdENvbnRy
b2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCitUZXN0UnVubmVyOjp+VGVzdFJ1bm5lcigp
CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCkKK3ZvaWQgVGVzdFJ1bm5lcjo6
YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlz
dCgpCit2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKIHsKIH0KIAotSlNT
dHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUoSlNTdHJp
bmdSZWYgbmFtZSkKK0pTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlEZWNvZGVkSG9zdE5hbWUo
SlNTdHJpbmdSZWYgbmFtZSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJu
IDA7CiB9CiAKLUpTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RW5jb2RlZEhv
c3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCitKU1N0cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RW5j
b2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVu
dAogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRj
aFBlbmRpbmdMb2FkUmVxdWVzdHMoKQordm9pZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdM
b2FkUmVxdWVzdHMoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4
IGZvciA2NzI3NDk1CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQor
dm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6a2VlcFdlYkhpc3RvcnkoKQordm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgp
CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpub3RpZnlEb25lKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiB7CiAgICAg
aWYgKG1fd2FpdFRvRHVtcCAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKICAgICAg
ICAgbm90aWZ5RG9uZUZpcmVkKCk7CiAgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7CiB9CiAKLUpT
U3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCitKU1N0cmluZ1JlZiBUZXN0UnVubmVy
OjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1
cmwpCiB7CiAgICAgLy8gRnVuY3Rpb24gaW50cm9kdWNlZCBpbiByMjg2OTAuIFRoaXMgbWF5IG5l
ZWQgc3BlY2lhbC1jYXNpbmcgb24gV2luZG93cy4KICAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4o
dXJsKTsgLy8gRG8gbm90aGluZyBvbiBVbml4LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdl
dCkKIHsKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZXNvbHZlIHJlbGF0aXZlIFVSTHMgaGVy
ZQogICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbSh1cmwsIHRhcmdl
dCkpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhi
b29sIGFjY2VwdHNFZGl0aW5nKQordm9pZCBUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRpdGluZyhi
b29sIGFjY2VwdHNFZGl0aW5nKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIChhbmQgcmVzdG9yZSB0aGUgZGVmYXVs
dCB2YWx1ZSBiZWZvcmUgcnVubmluZyBlYWNoIHRlc3QgaW4gRHVtcFJlbmRlclRyZWUuY3BwKS4K
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
Ym9vbCwgYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9v
bCwgYm9vbCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGN5Y2xlcykKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVy
OjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2Vy
U3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5
bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit2b2lkIFRl
c3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKIHsK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQordm9p
ZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVh
dHVyZShKU1N0cmluZ1JlZiBtb2RlKQordm9pZCBUZXN0UnVubmVyOjpzZXRWaWV3TW9kZU1lZGlh
RmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJ
c0tleSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkK
IHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9E
dW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFRvRHVtcChi
b29sIHdhaXRVbnRpbERvbmUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGludCB0aW1lb3V0U2Vjb25k
cyA9IDEwOwogCiAgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKIH0KIAotaW50IExh
eW91dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCitpbnQgVGVzdFJ1bm5lcjo6d2luZG93
Q291bnQoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMTsKIH0KIAot
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29s
IHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEph
dmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRv
ckVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJs
ZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
KGJvb2wgZW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVu
YWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhi
b29sIGVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wgZmxh
ZykKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIGVsZW1lbnQsIGJv
b2wgaXNBdXRvZmlsbGVkKQordm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZiBlbGVtZW50LCBib29sIGlzQXV0b2ZpbGxlZCkKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVw
QmxvY2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgcG9wdXBCbG9ja2luZ0VuYWJsZWQpCiB7
CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdp
bnNFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiB9CiAKLWJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBpZCkgCitib29sIFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0
b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBpZCkgCiB7CiAgICAgLy8gRklY
TUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgdmFsdWUp
Cit2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5n
UmVmIHZhbHVlKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJp
bmdSZWYganNVUkwpCit2b2lkIFRlc3RSdW5uZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxl
U2hlZXQoKQordm9pZCBUZXN0UnVubmVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgp
CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBw
b3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIHVybCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVm
IHVybCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcgYWxs
IGFwcGxpY2F0aW9uIGNhY2hlIGZvciBhbiBvcmlnaW4uCiB9CiAKLWxvbmcgbG9uZyBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVm
IG9yaWdpbklkZW50aWZpZXIpCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6bG9jYWxTdG9yYWdlRGlz
a1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBm
b3IgYW4gb3JpZ2luLgogICAgIHJldHVybiAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1
b3RhKQordm9pZCBUZXN0UnVubmVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5z
aWduZWQgbG9uZyBsb25nIHF1b3RhKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3Vw
cG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCiB9CiAKLWxvbmcgbG9uZyBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1Jl
ZiBvcmlnaW4pCitsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2Fn
ZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBieSBhbGwgYXBwbGljYXRpb24gY2FjaGVz
IGZvciBhbiBvcmlnaW4uCiAgICAgcmV0dXJuIDA7CiB9CiAKIAotSlNWYWx1ZVJlZiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBj
b250ZXh0KQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2Fj
aGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBn
ZXQgb3JpZ2lucyB0aGF0IGhhdmUgYXBwbGljYXRpb24gY2FjaGVzLgogICAgIHJldHVybiAwOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAgCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVu
c2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90
YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7ICAgIAogICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKK3ZvaWQgVGVzdFJ1
bm5lcjo6Z29CYWNrKCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2Fk
ZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCit2b2lkIFRlc3RSdW5uZXI6
OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVu
YWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9y
VVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVmKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9s
bGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAordW5zaWduZWQgVGVzdFJ1bm5l
cjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVy
Ojp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JrZXJU
aHJlYWRDb3VudCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1do
aXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwg
SlNTdHJpbmdSZWYgZWxlbWVudElkKQorYm9vbCBUZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGlt
ZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tE
ZXZpY2VPcmllbnRhdGlvbihib29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29s
IGNhblByb3ZpZGVCZXRhLCBkb3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJs
ZSBnYW1tYSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGJvb2wg
Y2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wgY2FuUHJvdmlkZUJldGEsIGRvdWJs
ZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91YmxlIGdhbW1hKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KICAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1LgogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1Jl
ZiBtZXNzYWdlKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQg
Y29kZSwgSlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit2b2lkIFRlc3RSdW5u
ZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KICAgICBzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOwogfQogCi1pbnQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK2ludCBU
ZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygp
CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3Rz
LgogICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9j
a1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2Us
IEpTU3RyaW5nUmVmIGxhbmd1YWdlKQordm9pZCBUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoSW5w
dXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdS
ZWYgbGFuZ3VhZ2UpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0
IGxheW91dCB0ZXN0cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM5NDg1LgogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
U3BlZWNoSW5wdXREdW1wUmVjdChib29sIGZsYWcpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tT
cGVlY2hJbnB1dER1bXBSZWN0KGJvb2wgZmxhZykKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW5wdXQoSlNDb250ZXh0UmVmIGlucHV0RWxlbWVudCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChKU0NvbnRleHRSZWYgaW5wdXRFbGVtZW50
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVz
dHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
OTQ4NS4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5h
YmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCit2b2lkIFRlc3RSdW5uZXI6OnNldEljb25E
YXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAotYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91
YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDYWNoZU1vZGVsKGludCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQpCiB7
CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi1ib29sIExheW91dFRlc3RDb250cm9sbGVy
Ojppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQorYm9vbCBUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIC8qbmFtZSovKQogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCitzaXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlz
dG9yeUl0ZW1Db3VudCgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAw
OwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUo
KQordm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIC8qIGtleSAqLywgSlNTdHJpbmdSZWYgLyogdmFs
dWUgKi8pCit2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiAv
KiBrZXkgKi8sIEpTU3RyaW5nUmVmIC8qIHZhbHVlICovKQogewogICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCit2b2lkIFRl
c3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3Rh
cnQsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIHByaW50ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZFVzZXJTY3JpcHQgbm90IGltcGxlbWVudGVkLlxuIik7CisgICAgcHJpbnRmKCJUZXN0UnVu
bmVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOwogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJv
b2wgYWxsRnJhbWVzKQordm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmlu
Z1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIHByaW50ZigiTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOworICAgIHBy
aW50ZigiVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQgbm90IGltcGxlbWVudGVkLlxuIik7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQordm9p
ZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVj
dG9yKCkKK3ZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KQordm9p
ZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmlu
Z1JlZiBzY3JpcHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQordm9pZCBUZXN0
UnVubmVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElE
LCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKIAogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
dW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBz
Y3JpcHQpCiB7CiAKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdl
TG9hZGluZygpCit2b2lkIFRlc3RSdW5uZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcoKQogewogCiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKQordm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9j
b2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWlucykKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVm
IHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdS
ZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQordm9p
ZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1Jl
ZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5n
UmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNTdHJpbmdSZWYg
cG9saWN5KQordm9pZCBUZXN0UnVubmVyOjpzZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYg
b3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKLWludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCwg
ZmxvYXQpCitpbnQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCwgZmxvYXQpCiB7CiAg
ICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1Jl
ZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3ZvaWQgVGVzdFJ1bm5lcjo6YXBpVGVz
dE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdS
ZWYgYmFzZVVSTCkKIHsKIAogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0
R29Ub0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQordm9pZCBUZXN0UnVubmVyOjphcGlUZXN0R29U
b0N1cnJlbnRCYWNrRm9yd2FyZEl0ZW0oKQogewogCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sKQordm9pZCBUZXN0UnVubmVy
OjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCkKIHsKIAogfQogCi12b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCiB7CiB9CiAKLWJvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCitib29sIFRlc3RSdW5uZXI6OmNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgp
IGNvbnN0CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6bGF5ZXJUcmVlQXNU
ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsK
IH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZikKK0pTVmFsdWVSZWYgVGVz
dFJ1bm5lcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiwg
SlNWYWx1ZVJlZikKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3Ry
aW5nUmVmKQordm9pZCBUZXN0UnVubmVyOjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVm
LCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCiB7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFib3J0TW9kYWwoKQordm9pZCBUZXN0UnVubmVyOjphYm9ydE1vZGFsKCkKIHsKIH0K
IAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJv
cGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
SW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VO
dW1iZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJp
Z2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQg
cGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFy
Z2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLWJvb2wgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRh
cmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQorYm9vbCBUZXN0UnVubmVyOjpmaW5kU3Ry
aW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVm
IG9wdGlvbnNBcnJheSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9h
ZHMoYm9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVydmFsKSB7Cit2b2lkIFRlc3RS
dW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3sKIAogfQog
Ci12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3ZvaWQgVGVz
dFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90
aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1iZXIpCit2b2lkIFRlc3RSdW5uZXI6Om9ic2VydmVTdG9y
YWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSgpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0KIAotSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCitK
U1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJl
ZiBjb250ZXh0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBVUkwpCit2b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZiBVUkwpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KIH0K
IAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1Jl
ZiBkaXJlY3Rpb24pCit2b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdS
ZWYgZGlyZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiB9CiAKLXZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZENocm9tZUlucHV0RmllbGQoKQordm9pZCBUZXN0UnVubmVy
OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKIHsKIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUNocm9t
ZUlucHV0RmllbGQoKQogewogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb2N1c1dl
YlZpZXcoKQordm9pZCBUZXN0UnVubmVyOjpmb2N1c1dlYlZpZXcoKQogewogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQordm9pZCBU
ZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQogewogfQogCi12b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzaW11bGF0ZURlc2t0b3BOb3RpZmljYXRpb25DbGljayhKU1N0
cmluZ1JlZiB0aXRsZSkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVEZXNrdG9wTm90aWZpY2F0
aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
IH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCit2
b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGFnZVZp
c2liaWxpdHkoY29uc3QgY2hhciopCit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5
KGNvbnN0IGNoYXIqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQo
Ym9vbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQo
Ym9vbCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShKU1N0cmluZ1JlZikKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKEpTU3RyaW5nUmVmKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAotdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsaXZlcldlYkludGVudChKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQor
dm9pZCBUZXN0UnVubmVyOjpkZWxpdmVyV2ViSW50ZW50KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1Jl
ZiwgSlNTdHJpbmdSZWYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCi12
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwo
ZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwo
ZG91YmxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0K
</data>
<flag name="review"
          id="168271"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>