<?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>205021</bug_id>
          
          <creation_ts>2019-12-09 10:51:04 -0800</creation_ts>
          <short_desc>Move WKWebView code related to testing to new files, with their own headers, and stop exposing test-only functions as SPI.</short_desc>
          <delta_ts>2019-12-15 10:00:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>205133</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>david_quesada</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1596893</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-09 10:51:04 -0800</bug_when>
    <thetext>Move WKWebView code related to testing to new files, with their own headers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596896</commentid>
    <comment_count>1</comment_count>
      <attachid>385168</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-09 10:52:02 -0800</bug_when>
    <thetext>Created attachment 385168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596897</commentid>
    <comment_count>2</comment_count>
      <attachid>385169</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-09 10:55:54 -0800</bug_when>
    <thetext>Created attachment 385169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597112</commentid>
    <comment_count>3</comment_count>
      <attachid>385240</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-09 22:15:30 -0800</bug_when>
    <thetext>Created attachment 385240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597187</commentid>
    <comment_count>4</comment_count>
      <attachid>385265</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-10 08:23:20 -0800</bug_when>
    <thetext>Created attachment 385265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597192</commentid>
    <comment_count>5</comment_count>
      <attachid>385240</attachid>
    <who name="David Quesada">david_quesada</who>
    <bug_when>2019-12-10 08:42:21 -0800</bug_when>
    <thetext>Comment on attachment 385240
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:-480
&gt; -- (void)didEndFormControlInteraction WK_API_AVAILABLE(ios(10.3));

It seems Safari is overriding these methods. Could they stay in the private header rather than being demoted to test-only SPI?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:-576
&gt; -@property (nonatomic, readonly) _WKFrameHandle *_mainFrame WK_API_AVAILABLE(macos(10.14.4), ios(12.2));

_hasInspectorFrontend, _inspector, and _mainFrame are used by Safari, and it doesn&apos;t seem like they were added explicitly for test purposes. Can they stay in the private header?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:-580
&gt; -- (void)_completeTextManipulation:(_WKTextManipulationItem *)item completion:(void(^)(BOOL success))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

I don&apos;t think these text manipulation SPIs are test-only. (It looks like they are needed for rdar://problem/56049043) They probably shouldn&apos;t have been added to the WKTesting section in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597209</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-10 09:15:30 -0800</bug_when>
    <thetext>(In reply to David Quesada from comment #5)
&gt; Comment on attachment 385240 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385240&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:-480
&gt; &gt; -- (void)didEndFormControlInteraction WK_API_AVAILABLE(ios(10.3));
&gt; 
&gt; It seems Safari is overriding these methods. Could they stay in the private
&gt; header rather than being demoted to test-only SPI?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:-576
&gt; &gt; -@property (nonatomic, readonly) _WKFrameHandle *_mainFrame WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
&gt; 
&gt; _hasInspectorFrontend, _inspector, and _mainFrame are used by Safari, and it
&gt; doesn&apos;t seem like they were added explicitly for test purposes. Can they
&gt; stay in the private header?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:-580
&gt; &gt; -- (void)_completeTextManipulation:(_WKTextManipulationItem *)item completion:(void(^)(BOOL success))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; I don&apos;t think these text manipulation SPIs are test-only. (It looks like
&gt; they are needed for rdar://problem/56049043) They probably shouldn&apos;t have
&gt; been added to the WKTesting section in the first place.

I&apos;ll be building the Safari stack for testing, so I&apos;ll find out where Safari is using WKTesting by mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597358</commentid>
    <comment_count>7</comment_count>
      <attachid>385307</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-10 14:51:32 -0800</bug_when>
    <thetext>Created attachment 385307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597405</commentid>
    <comment_count>8</comment_count>
      <attachid>385315</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-10 16:23:52 -0800</bug_when>
    <thetext>Created attachment 385315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597407</commentid>
    <comment_count>9</comment_count>
      <attachid>385315</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-10 16:34:03 -0800</bug_when>
    <thetext>Comment on attachment 385315
Patch

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

rs=me

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.h:52
&gt; +@property (nonatomic, readonly) BOOL _hasInspectorFrontend;

Keep properties separate!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597411</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-10 16:41:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/57814555&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597659</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-11 09:50:56 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/253376/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597753</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-11 13:27:46 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 205133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597790</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-12-11 14:11:24 -0800</bug_when>
    <thetext>Reverted r253376 for reason:

Broke internal builds

Committed r253396: &lt;https://trac.webkit.org/changeset/253396&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598153</commentid>
    <comment_count>14</comment_count>
      <attachid>385553</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-12 15:00:19 -0800</bug_when>
    <thetext>Created attachment 385553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598753</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-15 10:00:09 -0800</bug_when>
    <thetext>Re-landed in https://trac.webkit.org/r253465 with SPI headers.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385168</attachid>
            <date>2019-12-09 10:52:02 -0800</date>
            <delta_ts>2019-12-09 10:55:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191209105201.patch</filename>
            <type>text/plain</type>
            <size>150623</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYxZjI5MTZmNjIyZjVkYzI0
N2Q5OTYzZTNiZGI4OGEwZWQyYTBlYTEuLjNlZTgwMzFmZjM4ODkzMDk4Mzk0ODI2NjNiYjYxNjg5
N2NkZjc5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQwIEBACisyMDE5LTEyLTA5ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgV0tXZWJWaWV3
IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5nIHRvIG5ldyBmaWxlcywgd2l0aCB0aGVpciBvd24gaGVh
ZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
MDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBXSVAKKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfaW50ZXJuYWxE
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOndp
dGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
cHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF91c2VTeXN0ZW1BcHBlYXJhbmNlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0VXNlU3lzdGVtQXBwZWFyYW5jZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mdWxsU2Ny
ZWVuUGxhY2Vob2xkZXJWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdEFjdGl2
YXRlZEVsZW1lbnRBdFBvc2l0aW9uOmNvbXBsZXRpb25CbG9jazpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlck5leHRTdGFibGVQcmVzZW50
YXRpb25VcGRhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZmlyZVByZXNlbnRhdGlvblVw
ZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZv
clRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vz
c2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6d2l0aFRleHQ6Y29tcGxldGlv
bkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0
eVN0b3JlU2VsZWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNz
aWJpbGl0eUNsZWFyU2VsZWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
Y29udGVudFZpc2libGVSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29u
dmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dF0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcga2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91c10pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0cmluZzp3aXRo
Q29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBkaXNt
aXNzRm9ybUFjY2Vzc29yeVZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aXNtaXNzRmlsZVBpY2tlcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0VGlt
ZVBpY2tlclZhbHVlVG9Ib3VyOm1pbnV0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBmb3JtSW5wdXRMYWJlbF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2hvd0NvbnRleHRNZW51XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZGlkRGlzbWlzc0NvbnRleHRNZW51XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfdWlUZXh0Q2FyZXRSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5wdXRWaWV3Qm91bmRzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfdWlUZXh0U2VsZWN0aW9uUmVjdHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zY3JvbGxpbmdUcmVlQXNUZXh0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfc3RhYmxlU3RhdGVPdmVycmlkZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGlu
ZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlUmVmRm9yVHJhbnNpdGlv
blRvV0tXZWJWaWV3XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0Nv
bnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldEZyYW1lOmFuZFNjcm9sbEJ5Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc10pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5n
ZXNTeW5jXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SWdub3Jlc05vbldo
ZWVsRXZlbnRzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lnbm9yZXNOb25X
aGVlbEV2ZW50c10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3
aXBlVmlld3M6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Q3VzdG9tU3dp
cGVWaWV3c1RvcENvbnRlbnRJbnNldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF90cnlUb1N3aXBlV2l0aEV2ZW50Omlnbm9yaW5nUGlubmVkU3RhdGU6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mdWxsU2NyZWVuV2luZG93XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmFibGVGcmFtZVNpemVVcGRhdGVzXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdW5kZXJsYXlDb2xvcl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVuZGVybGF5Q29sb3I6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXJdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRF0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRIYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rp
ZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2luc2VydFRleHQ6cmVwbGFjZW1lbnRSYW5nZTpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jYW5kaWRhdGVSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyB2aWV3RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZV0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhlYWRlckJhbm5lckhlaWdodDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VF
dmVudHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlTWVudV0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vz
c2lvbkluZm86XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZVNjYWxl
OndpdGhPcmlnaW46XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVNjYWxl
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2Fi
bGVkRm9yVGVzdGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNjcm9s
bGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFu
aW1hdGVkUmVzaXplRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9kb0FmdGVyTmV4dFZpc2libGVDb250ZW50UmVjdFVwZGF0ZTpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JU
ZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZXhlY3V0ZUVkaXRDb21t
YW5kOmFyZ3VtZW50OmNvbXBsZXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpjb21w
bGV0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvbjpjb21wbGV0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2RyYWdDYXJldFJlY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0
ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2ltdWxhdGVUZXh0RW50ZXJlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9keW5hbWljVXNlckludGVyZmFjZVRyYWl0RGlkQ2hhbmdlXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hhcmVTaGVldENvbXBsZXRlc0lt
bWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5zcGVjdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
bWFpbkZyYW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VXb3JrZXJG
b3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25PbkVsZW1lbnQ6ZG9jdW1lbnQ6cGFn
ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0lu
dGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbTog
QWRkZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZVNjYWxlOndpdGhPcmlnaW46XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVNjYWxlXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVz
dGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVw
ZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0
eUZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6
YXJndW1lbnQ6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0
aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfaW5zcGVjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWFpbkZy
YW1lXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eUZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9y
VGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVz
dGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OndpdGhUZXh0OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlT
dG9yZVNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlDbGVh
clNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRWaXNpYmxlUmVjdF0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBrZXlib2FyZEFjY2Vzc29yeUJhck5leHRdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXNdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlzbWlzc0Zvcm1BY2Nlc3NvcnlW
aWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0ZpbGVQaWNrZXJdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjptaW51dGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
Zm9ybUlucHV0TGFiZWxdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRpZFN0YXJ0Rm9ybUNvbnRy
b2xJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlkRW5kRm9ybUNvbnRyb2xJ
bnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZFNob3dDb250ZXh0TWVudV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZERpc21pc3NDb250ZXh0TWVudV0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3VpVGV4dENhcmV0UmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2lucHV0Vmlld0JvdW5kc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VpVGV4dFNlbGVjdGlv
blJlY3RzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5nVHJlZUFzVGV4dF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3N0YWJsZVN0YXRlT3ZlcnJpZGVdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfZHJhZ0NhcmV0UmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zaW11bGF0ZVRleHRFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2R5bmFt
aWNVc2VySW50ZXJmYWNlVHJhaXREaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90
cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDpkb2N1bWVudDpwYWdlOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbTogQWRkZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlld10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRv
d3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGcmFtZTphbmRTY3JvbGxCeTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUb3RhbEhlaWdodE9mQmFubmVyczpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF90b3RhbEhlaWdodE9mQmFubmVyc10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luY10pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NldElnbm9yZXNOb25XaGVlbEV2ZW50czpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9pZ25vcmVzTm9uV2hlZWxFdmVudHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRDdXN0b21Td2lwZVZpZXdzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3
aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdHJ5VG9T
d2lwZVdpdGhFdmVudDppZ25vcmluZ1Bpbm5lZFN0YXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2Z1bGxTY3JlZW5XaW5kb3ddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxlRnJhbWVT
aXplVXBkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuYWJsZUZyYW1lU2l6ZVVwZGF0
ZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5DaGFuZ2VGcmFtZUxheW91dDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF91bmRlcmxheUNvbG9yXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0VW5kZXJsYXlDb2xvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYXNBY3RpdmVW
aWRlb0ZvckNvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RD
b250cm9sbGVkRWxlbWVudElEXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlQ29udHJv
bGxlZEVsZW1lbnRJRFJlc3BvbnNlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRl
TGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZm9yY2VSZXF1ZXN0Q2Fu
ZGlkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVz
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5zZXJ0VGV4dDpyZXBsYWNlbWVudFJhbmdlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbmRpZGF0ZVJlY3RdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IHZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0SGVhZGVyQmFubmVySGVpZ2h0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldEZvb3RlckJhbm5lckhlaWdodDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVy
UHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9hY3RpdmVNZW51XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBs
Q29jb2EubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06Cisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMTItMDgg
IHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFRpZ2h0ZW4gTWFj
IHNhbmRib3ggYnkgcmVtb3ZpbmcgbWljcm9waG9uZSBhY2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dAppbmRleCA5ZDI0MmUyYTA2NGRmZjcyZjQ5YzQyZjU0ZDk3ODEzY2FkOTRkOTJjLi4xYjI1YTdi
OWQwOWVhMzY1YjcyNGQwNWE5N2RiZmM2MzBmZGFjNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CkBAIC0zMjIsMTEgKzMyMiwxNSBAQCBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5t
bQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkLm1tCiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2luZG93
RmVhdHVyZXMubW0KIAorVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQor
CiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KK1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmll
d1Rlc3RpbmdNYWMubW0KIAogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL2NvY29hL0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbQogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL2Nv
Y29hL1NlY0tleVByb3h5U3RvcmUubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCmluZGV4IDUzNjJiMThlODUzZmE1
NDgzMTY5ZWY0ZTIyMWVlMTlmMjhjNDhlYjIuLmUwNWI3OTZlODdmMzZiZjBiMjZlZTIyY2VlM2U3
OTM3ZWU4ZGVjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VJRGVsZWdhdGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHN0cnVjdCBV
SUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJ
bnRlcmFjdGlvbjooaWQpaW50ZXJhY3Rpb24gc2Vzc2lvbjooaWQpc2Vzc2lvbiBkaWRFbmRXaXRo
T3BlcmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJbnRlcmFjdGlv
bk9wZXJhdGlvbldhc0hhbmRsZWQ6KEJPT0wpaGFuZGxlZCBmb3JTZXNzaW9uOihpZClzZXNzaW9u
IGl0ZW1Qcm92aWRlcnM6KE5TQXJyYXkgKilpdGVtUHJvdmlkZXJzIFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDExLjApKTsKIC0gKE5TVUludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
d2lsbFVwZGF0ZURhdGFJbnRlcmFjdGlvbk9wZXJhdGlvblRvT3BlcmF0aW9uOihOU1VJbnRlZ2Vy
KW9wZXJhdGlvbiBmb3JTZXNzaW9uOihpZClzZXNzaW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEx
LjApKTsKKwogI2lmIFRBUkdFVF9PU19JT1MKIC0gKFVJRHJvcFByb3Bvc2FsICopX3dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0ZURyb3BQcm9wb3NhbFRvUHJvcG9zYWw6KFVJ
RHJvcFByb3Bvc2FsICopcHJvcG9zYWwgZm9yU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNl
c3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMikpOwogLSAoVUlUYXJnZXRlZERyYWdQcmV2
aWV3ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcHJldmlld0ZvckxpZnRpbmdJdGVt
OihVSURyYWdJdGVtICopaXRlbSBzZXNzaW9uOihpZCA8VUlEcmFnU2Vzc2lvbj4pc2Vzc2lvbiBX
S19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CkBAIC0xOTAsNiArMTkxLDcgQEAgc3RydWN0IFVJ
RWRnZUluc2V0czsKIC0gKE5TSW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBk
YXRhT3duZXJGb3JEcm9wU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24gV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAoTlNJbnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRhdGFPd25lckZvckRyYWdTZXNzaW9uOihpZCA8VUlEcmFnU2Vzc2lvbj4pc2Vz
c2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAjZW5kaWYKKwogLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRDaGFuZ2VTYWZlQXJlYVNob3VsZEFmZmVjdE9i
c2N1cmVkSW5zZXRzOihCT09MKXNhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHMgV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkaWRQcmVzZW50Rm9jdXNlZEVsZW1lbnRWaWV3Q29udHJvbGxlcjooVUlWaWV3Q29u
dHJvbGxlciAqKWNvbnRyb2xsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwogLSAodm9p
ZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWREaXNtaXNzRm9jdXNlZEVsZW1lbnRW
aWV3Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTIuMCkpOwpAQCAtMjA0LDYgKzIwNiw3IEBAIHN0cnVjdCBVSUVkZ2VJbnNldHM7
CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEFsbG93RGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAq
KXJlcXVlc3RpbmdGcmFtZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wpKWRlY2lzaW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7CiAKICNlbHNlIC8vICFUQVJHRVRf
T1NfSVBIT05FCisKIC0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25G
b3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCkpOwogLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
IC0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKQEAgLTIz
Nyw2ICsyNDAsNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwogICAgIEBwYXJhbSBpbnNwZWN0b3Ig
VGhlIFdlYiBJbnNwZWN0b3IgaW5zdGFuY2UgYXR0YWNoZWQgdG8gdGhpcyBXS1dlYlZpZXcuCiAq
LwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRBdHRhY2hJbnNwZWN0
b3I6KF9XS0luc3BlY3RvciAqKWluc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpKTsKKwogI2VuZGlmIC8vICFUQVJHRVRfT1NfSVBIT05FCiAKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDM1MDk3OTlk
Y2VlMGE5MzgwZjMwZDJlZmVhNWMyMzcxODIxODE1ZjUuLmZjZGE1ZGQ3MDJmYjM4ODYwYTJkODhh
NDBkNjZmYjZkNGI3YzY1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQpAQCAtNTIsNyArNTIsNiBAQAogI2ltcG9ydCAiVGV4dENoZWNrZXIu
aCIKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIK
LSNpbXBvcnQgIlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgiCiAjaW1wb3J0ICJWZXJzaW9uQ2hl
Y2tzLmgiCiAjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQg
IlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgpAQCAtODAsNiArNzksNyBAQAogI2ltcG9ydCAiV0tV
c2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmln
dXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb250ZW50UHJvdmlkZXIuaCIK
KyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdJT1MuaCIKICNpbXBvcnQgIldLV2VicGFnZVByZWZl
cmVuY2VzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmgi
CiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKQEAgLTk5LDE1ICs5OSw5IEBACiAjaW1w
b3J0ICJfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCIKICNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLSW5wdXREZWxlZ2F0ZS5oIgotI2ltcG9ydCAiX1dLSW5z
cGVjdG9ySW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tU
ZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25D
b25maWd1cmF0aW9uLmgiCi0jaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCIK
LSNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmgiCi0jaW1wb3J0ICJf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgotI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuLmgiCiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQg
Il9XS1dlYnNpdGVQb2xpY2llc0ludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnRD
b250ZXh0Lmg+CkBAIC0xMjQsNyArMTE4LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmluZ1V0aWxpdGllcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9WYWxp
ZGF0aW9uQnViYmxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dyaXRpbmdNb2RlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tEcmFnRGVz
dGluYXRpb25BY3Rpb24uaD4KQEAgLTI4MiwyOSArMjc1LDE4IEBAIEBpbXBsZW1lbnRhdGlvbiBX
S1dlYlZpZXcgewogCiAgICAgV2Vha09iakNQdHI8aWQgPF9XS0lucHV0RGVsZWdhdGU+PiBfaW5w
dXREZWxlZ2F0ZTsKIAotICAgIE9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVl
dEltbWVkaWF0ZUNvbXBsZXRpb25Gb3JUZXN0aW5nOwogICAgIFJldGFpblB0cjxXS1NhZmVCcm93
c2luZ1dhcm5pbmc+IF9zYWZlQnJvd3NpbmdXYXJuaW5nOwogCiAgICAgQk9PTCBfdXNlUGxhdGZv
cm1GaW5kVUk7CiAKLSAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPj4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgUmV0YWluUHRyPF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0
UmVnaXN0cnk7CiAKLSAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKLSAg
ICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gX2NvbnRlbnRWaWV3OwotCi0jaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
PiBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Ci0jZW5kaWYKLQogICAgIE9wdGlvbmFsPENH
U2l6ZT4gX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6Rmxv
YXRTaXplPiBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZTsKICAgICBPcHRpb25hbDxDR1NpemU+IF9t
YXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9h
dFNpemU+IF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZTsKIAotICAgIENHUmVjdCBfaW5w
dXRWaWV3Qm91bmRzOwogICAgIENHRmxvYXQgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoOwogICAgIEJP
T0wgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQ7CiAgICAgQk9PTCBfdmlld3BvcnRN
ZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50OwpAQCAtMzQ5LDcgKzMzMSw2IEBAIEBpbXBsZW1l
bnRhdGlvbiBXS1dlYlZpZXcgewogICAgIE9wdGlvbmFsPFdlYktpdDo6VHJhbnNhY3Rpb25JRD4g
X2ZpcnN0VHJhbnNhY3Rpb25JREFmdGVyUGFnZVJlc3RvcmU7CiAgICAgZG91YmxlIF9zY2FsZVRv
UmVzdG9yZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcj4gX2dlc3R1cmVDb250cm9sbGVyOwogICAgIEJPT0wgX2FsbG93c0JhY2tGb3J3YXJkTmF2
aWdhdGlvbkdlc3R1cmVzOwogCiAgICAgUmV0YWluUHRyPFVJVmlldyA8V0tXZWJWaWV3Q29udGVu
dFByb3ZpZGVyPj4gX2N1c3RvbUNvbnRlbnRWaWV3OwpAQCAtMzgxLDcgKzM2Miw2IEBAIEBpbXBs
ZW1lbnRhdGlvbiBXS1dlYlZpZXcgewogCiAgICAgQk9PTCBfaGFzU2NoZWR1bGVkVmlzaWJsZVJl
Y3RVcGRhdGU7CiAgICAgQk9PTCBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlU2NoZWR1bGVkRnJv
bVNjcm9sbFZpZXdJblN0YWJsZVN0YXRlOwotICAgIFZlY3RvcjxCbG9ja1B0cjx2b2lkICgpPj4g
X3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrczsKIAogICAgIF9XS0RyYWdJbnRlcmFj
dGlvblBvbGljeSBfZHJhZ0ludGVyYWN0aW9uUG9saWN5OwogCkBAIC0zOTcsNyArMzc3LDYgQEAg
QGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyB7CiAgICAgQk9PTCBfaGFzRW50ZXJlZERlYWxsb2M7
CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6
V2ViVmlld0ltcGw+IF9pbXBsOwogICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IF90
ZXh0RmluZGVyQ2xpZW50OwogI2VuZGlmCiAgICAgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBfc2Vs
ZWN0aW9uQXR0cmlidXRlczsKQEAgLTE0MzAsNiArMTQwOSw0MSBAQCAtICh2b2lkKV9jbGVhclNh
ZmVCcm93c2luZ1dhcm5pbmdJZkZvck1haW5GcmFtZU5hdmlnYXRpb24KICAgICAgICAgW3NlbGYg
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZ107CiB9CiAKKy0gKHZvaWQpX2ludGVybmFsRG9BZnRl
ck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIHdpdGhv
dXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWludGluZyB3aXRo
b3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0
ZWRSZXNpemUKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICghW3NlbGYgdXNl
c1N0YW5kYXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgaWYgKHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcpCisgICAgICAgIF9w
YWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBhaW50QWZ0ZXJOZXh0Vmlld0RpZE1vdmVUb1dp
bmRvdyh0cnVlKTsKKworICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVw
ZGF0ZUJsb2NrKTsKKworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1NlbGYgPSBzZWxm
OworICAgIF9wYWdlLT5jYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlKFt1cGRhdGVCbG9j
a0NvcHksIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUsIHN0cm9uZ1NlbGZdKFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoIXVwZGF0ZUJsb2Nr
Q29weSkKKyAgICAgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgICAgIGlmICghd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSAmJiBzdHJvbmdTZWxm
LT5fZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVw
ZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7CisgICAgICAgICAgICBzdHJvbmdTZWxmLT5fY2FsbGJh
Y2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFt1cGRhdGVCbG9ja0NvcHldIHsKKyAgICAg
ICAgICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNF
RF9QQVJBTSh3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplKTsKKyNlbmRpZgorCisgICAg
ICAgIHVwZGF0ZUJsb2NrQ29weSgpOworICAgIH0pOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKIAogLSAodm9pZClfZGlkSW5zZXJ0QXR0YWNobWVudDooQVBJOjpBdHRhY2ht
ZW50JilhdHRhY2htZW50IHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlCkBAIC0xNDU5LDEx
ICsxNDczLDYgQEAgLSAodm9pZClfZGlkSW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihBUEk6
OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLS0g
KEJPT0wpX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcgotewotICAgIHJldHVybiBzZWxmLl9j
dXJyZW50Q29udGVudFZpZXcuaXNGaXJzdFJlc3BvbmRlcjsKLX0KLQogLSAoQk9PTClfc2hvdWxk
QXZvaWRSZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2UKIHsKICAgICByZXR1cm4gW19j
b250ZW50VmlldyBfc2hvdWxkQXZvaWRSZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2Vd
OwpAQCAtMzY3NSw2ICszNjg0LDIzIEBAIC0gKHZvaWQpX3dlYl9ncmFudERPTVBhc3RlQWNjZXNz
CiAgICAgX2ltcGwtPmhhbmRsZURPTVBhc3RlUmVxdWVzdFdpdGhSZXN1bHQoV2ViQ29yZTo6RE9N
UGFzdGVBY2Nlc3NSZXNwb25zZTo6R3JhbnRlZEZvckdlc3R1cmUpOwogfQogCistICh2b2lkKV9w
cmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0gKHZvaWQpX2NhbmNl
bEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoreworfQorCistICh2b2lkKV9jb21wbGV0ZUltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbgoreworfQorCistICh2b2lkKV9nZXN0dXJlRXZlbnRXYXNOb3RI
YW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1wbC0+Z2VzdHVyZUV2
ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZUZyb21WaWV3T25seShldmVudCk7Cit9CisKIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCiAtICh2b2lkKXJlbmV3R1N0YXRlCiBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKQEAgLTQ4MzAsNiArNDg1NiwxNiBA
QCAtICh2b2lkKV9jaGFuZ2VMaXN0VHlwZTooaWQpc2VuZGVyCiAgICAgX3BhZ2UtPmNoYW5nZUxp
c3RUeXBlKCk7CiB9CiAKKy0gKEJPT0wpX3VzZVN5c3RlbUFwcGVhcmFuY2UKK3sKKyAgICByZXR1
cm4gX2ltcGwtPnVzZVN5c3RlbUFwcGVhcmFuY2UoKTsKK30KKworLSAodm9pZClfc2V0VXNlU3lz
dGVtQXBwZWFyYW5jZTooQk9PTCl1c2VTeXN0ZW1BcHBlYXJhbmNlCit7CisgICAgX2ltcGwtPnNl
dFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSk7Cit9CisKICNlbmRpZiAv
LyBQTEFURk9STShNQUMpCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDg2NCw2ICs0
OTAwLDI1IEBAIC0gKFVJVmlldyAqKWlucHV0VmlldwogICAgIHJldHVybiBbX2NvbnRlbnRWaWV3
IGlucHV0Vmlld0ZvcldlYlZpZXddOwogfQogCistIChVSVZpZXcgKilfZnVsbFNjcmVlblBsYWNl
aG9sZGVyVmlldworeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoW19mdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKQorICAgICAgICByZXR1cm4gW19m
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3UGxhY2Vob2xkZXJdOworI2VuZGlmIC8v
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9y
ZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxl
dGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jaworewor
ICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1
ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOworICAgIGluZm9SZXF1ZXN0
LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7CisKKyAgICBbX2NvbnRlbnRWaWV3IGRvQWZ0ZXJQb3Np
dGlvbkluZm9ybWF0aW9uVXBkYXRlOltjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRyKGJsb2Nr
KV0gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24p
IHsKKyAgICAgICAgY2FwdHVyZWRCbG9jayhbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWN0aXZh
dGVkRWxlbWVudEluZm9XaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246aW5mb3Jt
YXRpb24gdXNlckluZm86bmlsXSk7CisgICAgfSBmb3JSZXF1ZXN0OmluZm9SZXF1ZXN0XTsKK30K
KwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0gKEJPT0wpX2lzRWRpdGFibGUK
QEAgLTYxNDMsNiArNjE5OCwzNiBAQCAtICh2b2lkKV9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczoo
ZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uCiAjZW5kaWYKIH0KIAorLy8gRXhlY3V0ZSB0aGUg
c3VwcGxpZWQgYmxvY2sgYWZ0ZXIgdGhlIG5leHQgdHJhbnNhY3Rpb24gZnJvbSB0aGUgV2ViUHJv
Y2Vzcy4KKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2
b2lkKSl1cGRhdGVCbG9jaworeworICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0
aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJO
ZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXiko
dm9pZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOllFUyB3
aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOk5PXTsKK30KKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCistICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZToo
ZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jaworeworICAgIGlmICghW3NlbGYgdXNlc1N0YW5k
YXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKKworICAg
IGlmIChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MpCisgICAgICAgIFtf
c3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgYWRkT2JqZWN0OnVwZGF0ZUJs
b2NrQ29weS5nZXQoKV07CisgICAgZWxzZSB7CisgICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRh
dGlvblVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmlsXSk7CisgICAgICAgIFtzZWxm
IF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9u
Q2FsbGJhY2tzXTsKKyAgICB9Cit9CisjZW5kaWYKKwogI3ByYWdtYSBtYXJrIGlPUy1zcGVjaWZp
YyBtZXRob2RzCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNjQ3MCw2ICs2NTU1LDE3
IEBAIC0gKHZvaWQpX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOih2b2lkIChe
KSh2b2lkKSl1cGRhdGVCbG9jawogICAgIH0KIH0KIAorLSAodm9pZClfZmlyZVByZXNlbnRhdGlv
blVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrcworeworICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1NlbGYgPSBzZWxmOworICAgIFtzZWxmIF9kb0Fm
dGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTpbc3Ryb25nU2VsZl0geworICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nU2VsZl0geworICAgICAg
ICAgICAgaWYgKFtzdHJvbmdTZWxmLT5fc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxs
YmFja3MgY291bnRdKQorICAgICAgICAgICAgICAgIFtzdHJvbmdTZWxmIF9maXJlUHJlc2VudGF0
aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKKyAg
ICAgICAgfSk7CisgICAgfV07Cit9CisKIC0gKHZvaWQpX3NldE92ZXJsYWlkQWNjZXNzb3J5Vmll
d3NJbnNldDooQ0dTaXplKWluc2V0CiB7CiAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc2V0
T3ZlcmxhaWRBY2Nlc3NvcnlWaWV3c0luc2V0Omluc2V0XTsKQEAgLTY5MjMsODYzICs3MDE5LDYg
QEAgQGVuZAogCiAjdW5kZWYgRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklFVwogCi1AaW1w
bGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmcpCi0KLS0gKHZvaWQpX3NldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZAotewotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgW19jb250ZW50VmlldyBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQ6ZW5hYmxlZF07Ci0jZWxzZQotICAgIF9pbXBsLT5zZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotLSAoTlNEaWN0aW9u
YXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJm
YWNlSXRlbQotewotICAgIGlmIChbdXNlckludGVyZmFjZUl0ZW0gaXNFcXVhbFRvU3RyaW5nOkAi
dmFsaWRhdGlvbkJ1YmJsZSJdKSB7Ci0gICAgICAgIGF1dG8qIHZhbGlkYXRpb25CdWJibGUgPSBf
cGFnZS0+dmFsaWRhdGlvbkJ1YmJsZSgpOwotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbGlk
YXRpb25CdWJibGUgPyB2YWxpZGF0aW9uQnViYmxlLT5tZXNzYWdlKCkgOiBlbXB0eVN0cmluZygp
OwotICAgICAgICBkb3VibGUgZm9udFNpemUgPSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlv
bkJ1YmJsZS0+Zm9udFNpemUoKSA6IDA7Ci0gICAgICAgIHJldHVybiBAeyB1c2VySW50ZXJmYWNl
SXRlbTogQHsgQCJtZXNzYWdlIjogKE5TU3RyaW5nICopbWVzc2FnZSwgQCJmb250U2l6ZSI6IFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOmZvbnRTaXplXSB9IH07Ci0gICAgfQotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtXTsKLSNlbHNlCi0g
ICAgcmV0dXJuIG5pbDsKLSNlbmRpZgotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLS0g
KHZvaWQpX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjooQ0dQb2ludClwb3NpdGlv
biBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopKWJs
b2NrCi17Ci0gICAgYXV0byBpbmZvUmVxdWVzdCA9IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1h
dGlvblJlcXVlc3QoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvc2l0aW9uKSk7Ci0gICAgaW5m
b1JlcXVlc3QuaW5jbHVkZVNuYXBzaG90ID0gdHJ1ZTsKLQotICAgIFtfY29udGVudFZpZXcgZG9B
ZnRlclBvc2l0aW9uSW5mb3JtYXRpb25VcGRhdGU6W2NhcHR1cmVkQmxvY2sgPSBtYWtlQmxvY2tQ
dHIoYmxvY2spXSAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZv
cm1hdGlvbikgewotICAgICAgICBjYXB0dXJlZEJsb2NrKFtfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
byBhY3RpdmF0ZWRFbGVtZW50SW5mb1dpdGhJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bjppbmZvcm1hdGlvbiB1c2VySW5mbzpuaWxdKTsKLSAgICB9IGZvclJlcXVlc3Q6aW5mb1JlcXVl
c3RdOwotfQotCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9u
T2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRp
b25IYW5kbGVyCi17Ci0gICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVj
dHNBdFNlbGVjdGlvbk9mZnNldDpvZmZzZXQgd2l0aFRleHQ6dGV4dCBjb21wbGV0aW9uSGFuZGxl
cjpbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFu
ZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mIHNlbGVjdGlvblJl
Y3RzKSB7Ci0gICAgICAgIGlmICghY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgYXV0byByZWN0VmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNlbGVjdGlvblJlY3RzLnNpemUoKV0pOwot
ICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdGlvblJlY3QgOiBzZWxlY3Rpb25SZWN0cykKLSAgICAg
ICAgICAgIFtyZWN0VmFsdWVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6c2Vs
ZWN0aW9uUmVjdC5yZWN0KCldXTsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihy
ZWN0VmFsdWVzLmdldCgpKTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0
b3JlU2VsZWN0aW9uCi17Ci0gICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2Vs
ZWN0aW9uXTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uCi17Ci0g
ICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uXTsKLX0KLQotLSAo
VUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcKLXsKLSNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCi0gICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2Ny
ZWVuXSkKLSAgICAgICAgcmV0dXJuIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmll
d1BsYWNlaG9sZGVyXTsKLSNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgcmV0
dXJuIG5pbDsKLX0KLQotLSAoQ0dSZWN0KV9jb250ZW50VmlzaWJsZVJlY3QKLXsKLSAgICByZXR1
cm4gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgYm91bmRzXSB0b1ZpZXc6c2VsZi5fY3VycmVudENv
bnRlbnRWaWV3XTsKLX0KLQotLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9W
aWV3OihDR1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2ludDpwb2lu
dCBmcm9tVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwotfQotCi0tIChDR1BvaW50KV9j
b252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQKLXsKLSAgICByZXR1
cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZp
ZXddOwotfQotCi0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dAotewotICAgIFtfY29u
dGVudFZpZXcgYWNjZXNzb3J5VGFiOllFU107Ci19Ci0KLS0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3Nv
cnlCYXJQcmV2aW91cwotewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5VGFiOk5PXTsKLX0K
LQotLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0b1N0
cmluZzooTlNTdHJpbmcgKilvbGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFtfY29udGVudFZpZXcgYXBwbHlBdXRv
Y29ycmVjdGlvbjpuZXdTdHJpbmcgdG9TdHJpbmc6b2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFu
ZGxlcjpbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9u
SGFuZGxlcildIChVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHMpIHsKLSAgICAgICAgY2Fw
dHVyZWRDb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH1dOwotfQotCi0tICh2b2lkKWRpc21pc3NG
b3JtQWNjZXNzb3J5VmlldwotewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5RG9uZV07Ci19
Ci0KLS0gKHZvaWQpX2Rpc21pc3NGaWxlUGlja2VyCi17Ci0gICAgW19jb250ZW50VmlldyBkaXNt
aXNzRmlsZVBpY2tlcl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOihO
U0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGUKLXsKLSAgICBbX2NvbnRlbnRW
aWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjpob3VyIG1pbnV0ZTptaW51dGVdOwotfQotCi0t
ICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6KGludClyb3dJbmRleAotewotICAg
IFtfY29udGVudFZpZXcgc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzpyb3dJbmRleF07Ci19
Ci0KLS0gKE5TU3RyaW5nICopc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZQotewotICAgIHJldHVybiBb
X2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1Qb3BvdmVyVGl0bGVdOwotfQotCi0tIChOU1N0cmluZyAq
KXRleHRDb250ZW50VHlwZUZvclRlc3RpbmcKLXsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyB0
ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXTsKLX0KLQotLSAoTlNTdHJpbmcgKilmb3JtSW5wdXRM
YWJlbAotewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGZvcm1JbnB1dExhYmVsXTsKLX0KLQot
LSAodm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24KLXsKLSAgICAvLyBGb3Igc3Vi
Y2xhc3NlcyB0byBvdmVycmlkZS4KLX0KLQotLSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVy
YWN0aW9uCi17Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKHZv
aWQpX2RpZFNob3dDb250ZXh0TWVudQotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJy
aWRlLgotfQotCi0tICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnUKLXsKLSAgICAvLyBGb3Ig
c3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLX0KLQotLSAoQ0dSZWN0KV91aVRleHRDYXJldFJlY3QK
LXsKLSAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4K
LSAgICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKLQotICAgIHJldHVy
biBbW19jb250ZW50VmlldyB2YWx1ZUZvcktleVBhdGg6QCJpbnRlcmFjdGlvbkFzc2lzdGFudC5z
ZWxlY3Rpb25WaWV3LnNlbGVjdGlvbi5jYXJldFJlY3QiXSBDR1JlY3RWYWx1ZV07Ci19Ci0KLS0g
KENHUmVjdClfaW5wdXRWaWV3Qm91bmRzCi17Ci0gICAgcmV0dXJuIF9pbnB1dFZpZXdCb3VuZHM7
Ci19Ci0KLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKV91aVRleHRTZWxlY3Rpb25SZWN0cwotewot
ICAgIC8vIEZvcmNlIHRoZSBzZWxlY3Rpb24gdmlldyB0byB1cGRhdGUgaWYgbmVlZGVkLgotICAg
IFtfY29udGVudFZpZXcgX3VwZGF0ZUNoYW5nZWRTZWxlY3Rpb25dOwotCi0gICAgcmV0dXJuIFtf
Y29udGVudFZpZXcgX3VpVGV4dFNlbGVjdGlvblJlY3RzXTsKLX0KLQotLSAoTlNTdHJpbmcgKilf
c2Nyb2xsaW5nVHJlZUFzVGV4dAotewotICAgIFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eSogY29vcmRpbmF0b3IgPSBfcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eSgpOwotICAgIGlmICghY29vcmRpbmF0b3IpCi0gICAgICAgIHJldHVybiBAIiI7Ci0KLSAgICBy
ZXR1cm4gY29vcmRpbmF0b3ItPnNjcm9sbGluZ1RyZWVBc1RleHQoKTsKLX0KLQotLSAoTlNOdW1i
ZXIgKilfc3RhYmxlU3RhdGVPdmVycmlkZQotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92
ZXJyaWRlLgotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxl
UHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9ibG9ja190KXVwZGF0ZUJsb2NrCi17Ci0gICAg
aWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIo
dXBkYXRlQmxvY2spOwotCi0gICAgaWYgKF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNh
bGxiYWNrcykKLSAgICAgICAgW19zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNr
cyBhZGRPYmplY3Q6dXBkYXRlQmxvY2tDb3B5LmdldCgpXTsKLSAgICBlbHNlIHsKLSAgICAgICAg
X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6dXBkYXRlQmxvY2tDb3B5LmdldCgpLCBu
aWxdKTsKLSAgICAgICAgW3NlbGYgX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3Rh
YmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3NdOwotICAgIH0KLX0KLQotLSAodm9pZClfZmly
ZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxi
YWNrcwotewotICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1NlbGYgPSBzZWxmOwotICAg
IFtzZWxmIF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTpbc3Ryb25nU2VsZl0gewotICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nU2Vs
Zl0gewotICAgICAgICAgICAgaWYgKFtzdHJvbmdTZWxmLT5fc3RhYmxlU3RhdGVQcmVzZW50YXRp
b25VcGRhdGVDYWxsYmFja3MgY291bnRdKQotICAgICAgICAgICAgICAgIFtzdHJvbmdTZWxmIF9m
aXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2Fs
bGJhY2tzXTsKLSAgICAgICAgfSk7Ci0gICAgfV07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9w
cm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5zaWduZWQgbG9uZyBsb25nKWxheWVySUQKLXsKLSAg
ICBDQUxheWVyKiBsYXllciA9IGRvd25jYXN0PFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eT4oKl9wYWdlLT5kcmF3aW5nQXJlYSgpKS5sYXllcldpdGhJREZvclRlc3Rpbmco
bGF5ZXJJRCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJl
dHVybiBAewotICAgICAgICBAImJvdW5kcyIgOiBAewotICAgICAgICAgICAgQCJ4IiA6IEAobGF5
ZXIuYm91bmRzLm9yaWdpbi54KSwKLSAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLmJvdW5kcy5v
cmlnaW4ueCksCi0gICAgICAgICAgICBAIndpZHRoIiA6IEAobGF5ZXIuYm91bmRzLnNpemUud2lk
dGgpLAotICAgICAgICAgICAgQCJoZWlnaHQiIDogQChsYXllci5ib3VuZHMuc2l6ZS5oZWlnaHQp
LAotCi0gICAgICAgIH0sCi0gICAgICAgIEAicG9zaXRpb24iIDogQHsKLSAgICAgICAgICAgIEAi
eCIgOiBAKGxheWVyLnBvc2l0aW9uLngpLAotICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIucG9z
aXRpb24ueSksCi0gICAgICAgIH0sCi0gICAgICAgIEAielBvc2l0aW9uIiA6IEAobGF5ZXIuelBv
c2l0aW9uKSwKLSAgICAgICAgQCJhbmNob3JQb2ludCIgOiBAewotICAgICAgICAgICAgQCJ4IiA6
IEAobGF5ZXIuYW5jaG9yUG9pbnQueCksCi0gICAgICAgICAgICBAInkiIDogQChsYXllci5hbmNo
b3JQb2ludC55KSwKLSAgICAgICAgfSwKLSAgICAgICAgQCJhbmNob3JQb2ludFoiIDogQChsYXll
ci5hbmNob3JQb2ludFopLAotICAgICAgICBAInRyYW5zZm9ybSIgOiBAewotICAgICAgICAgICAg
QCJtMTEiIDogQChsYXllci50cmFuc2Zvcm0ubTExKSwKLSAgICAgICAgICAgIEAibTEyIiA6IEAo
bGF5ZXIudHJhbnNmb3JtLm0xMiksCi0gICAgICAgICAgICBAIm0xMyIgOiBAKGxheWVyLnRyYW5z
Zm9ybS5tMTMpLAotICAgICAgICAgICAgQCJtMTQiIDogQChsYXllci50cmFuc2Zvcm0ubTE0KSwK
LQotICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci50cmFuc2Zvcm0ubTIxKSwKLSAgICAgICAg
ICAgIEAibTIyIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMiksCi0gICAgICAgICAgICBAIm0yMyIg
OiBAKGxheWVyLnRyYW5zZm9ybS5tMjMpLAotICAgICAgICAgICAgQCJtMjQiIDogQChsYXllci50
cmFuc2Zvcm0ubTI0KSwKLQotICAgICAgICAgICAgQCJtMzEiIDogQChsYXllci50cmFuc2Zvcm0u
bTMxKSwKLSAgICAgICAgICAgIEAibTMyIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMiksCi0gICAg
ICAgICAgICBAIm0zMyIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzMpLAotICAgICAgICAgICAgQCJt
MzQiIDogQChsYXllci50cmFuc2Zvcm0ubTM0KSwKLQotICAgICAgICAgICAgQCJtNDEiIDogQChs
YXllci50cmFuc2Zvcm0ubTQxKSwKLSAgICAgICAgICAgIEAibTQyIiA6IEAobGF5ZXIudHJhbnNm
b3JtLm00MiksCi0gICAgICAgICAgICBAIm00MyIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDMpLAot
ICAgICAgICAgICAgQCJtNDQiIDogQChsYXllci50cmFuc2Zvcm0ubTQ0KSwKLSAgICAgICAgfSwK
LSAgICAgICAgQCJzdWJsYXllclRyYW5zZm9ybSIgOiBAewotICAgICAgICAgICAgQCJtMTEiIDog
QChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMTEpLAotICAgICAgICAgICAgQCJtMTIiIDogQChs
YXllci5zdWJsYXllclRyYW5zZm9ybS5tMTIpLAotICAgICAgICAgICAgQCJtMTMiIDogQChsYXll
ci5zdWJsYXllclRyYW5zZm9ybS5tMTMpLAotICAgICAgICAgICAgQCJtMTQiIDogQChsYXllci5z
dWJsYXllclRyYW5zZm9ybS5tMTQpLAotCi0gICAgICAgICAgICBAIm0yMSIgOiBAKGxheWVyLnN1
YmxheWVyVHJhbnNmb3JtLm0yMSksCi0gICAgICAgICAgICBAIm0yMiIgOiBAKGxheWVyLnN1Ymxh
eWVyVHJhbnNmb3JtLm0yMiksCi0gICAgICAgICAgICBAIm0yMyIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm0yMyksCi0gICAgICAgICAgICBAIm0yNCIgOiBAKGxheWVyLnN1YmxheWVyVHJh
bnNmb3JtLm0yNCksCi0KLSAgICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFu
c2Zvcm0ubTMxKSwKLSAgICAgICAgICAgIEAibTMyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zv
cm0ubTMyKSwKLSAgICAgICAgICAgIEAibTMzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTMzKSwKLSAgICAgICAgICAgIEAibTM0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTM0
KSwKLQotICAgICAgICAgICAgQCJtNDEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tNDEp
LAotICAgICAgICAgICAgQCJtNDIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tNDIpLAot
ICAgICAgICAgICAgQCJtNDMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tNDMpLAotICAg
ICAgICAgICAgQCJtNDQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tNDQpLAotICAgICAg
ICB9LAotCi0gICAgICAgIEAiaGlkZGVuIiA6IEAobGF5ZXIuaGlkZGVuKSwKLSAgICAgICAgQCJk
b3VibGVTaWRlZCIgOiBAKGxheWVyLmRvdWJsZVNpZGVkKSwKLSAgICAgICAgQCJtYXNrc1RvQm91
bmRzIiA6IEAobGF5ZXIubWFza3NUb0JvdW5kcyksCi0gICAgICAgIEAiY29udGVudHNTY2FsZSIg
OiBAKGxheWVyLmNvbnRlbnRzU2NhbGUpLAotICAgICAgICBAInJhc3Rlcml6YXRpb25TY2FsZSIg
OiBAKGxheWVyLnJhc3Rlcml6YXRpb25TY2FsZSksCi0gICAgICAgIEAib3BhcXVlIiA6IEAobGF5
ZXIub3BhcXVlKSwKLSAgICAgICAgQCJvcGFjaXR5IiA6IEAobGF5ZXIub3BhY2l0eSksCi0gICAg
fTsKLX0KLQotLSAodm9pZClfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6KGRpc3Bh
dGNoX2Jsb2NrX3QpYWN0aW9uCi17Ci0gICAgW19jb250ZW50VmlldyBfZG9BZnRlclJlc2V0dGlu
Z1NpbmdsZVRhcEdlc3R1cmU6YWN0aW9uXTsKLX0KLQotLSAodm9pZClfZG9BZnRlclJlY2Vpdmlu
Z0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgotewot
ICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVz
dGluZzphY3Rpb25dOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI2lm
IFBMQVRGT1JNKE1BQykKLS0gKFdLUGFnZVJlZilfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2Vi
VmlldwotewotICAgIHJldHVybiB0b0FQSShfcGFnZS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpX2Rp
c21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MKLXsKLSAgICBfaW1wbC0+ZGlzbWlzc0Nv
bnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c0Zyb21WaWV3T25seSgpOwotfQotCi0tICh2b2lkKV9z
ZXRGcmFtZTooTlNSZWN0KXJlY3QgYW5kU2Nyb2xsQnk6KE5TU2l6ZSlvZmZzZXQKLXsKLSAgICBf
aW1wbC0+c2V0RnJhbWVBbmRTY3JvbGxCeShOU1JlY3RUb0NHUmVjdChyZWN0KSwgTlNTaXplVG9D
R1NpemUob2Zmc2V0KSk7Ci19Ci0KLS0gKHZvaWQpX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOihD
R0Zsb2F0KXRvdGFsSGVpZ2h0T2ZCYW5uZXJzCi17Ci0gICAgX2ltcGwtPnNldFRvdGFsSGVpZ2h0
T2ZCYW5uZXJzKHRvdGFsSGVpZ2h0T2ZCYW5uZXJzKTsKLX0KLQotLSAoQ0dGbG9hdClfdG90YWxI
ZWlnaHRPZkJhbm5lcnMKLXsKLSAgICByZXR1cm4gX2ltcGwtPnRvdGFsSGVpZ2h0T2ZCYW5uZXJz
KCk7Ci19Ci0KLS0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwotewot
ICAgIF9pbXBsLT5iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKLX0KLQotLSAo
dm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwotewotICAgIF9pbXBsLT5lbmRE
ZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19Ci0KLS0gKHZvaWQpX2VuZERlZmVycmlu
Z1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jCi17Ci0gICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJ
bldpbmRvd0NoYW5nZXNTeW5jKCk7Ci19Ci0KLS0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhh
bmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5nZXN0dXJlRXZl
bnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlRnJvbVZpZXdPbmx5KGV2ZW50KTsKLX0KLQotLSAodm9p
ZClfc2V0SWdub3Jlc05vbldoZWVsRXZlbnRzOihCT09MKWlnbm9yZXNOb25XaGVlbEV2ZW50cwot
ewotICAgIF9pbXBsLT5zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHMoaWdub3Jlc05vbldoZWVsRXZl
bnRzKTsKLX0KLQotLSAoQk9PTClfaWdub3Jlc05vbldoZWVsRXZlbnRzCi17Ci0gICAgcmV0dXJu
IF9pbXBsLT5pZ25vcmVzTm9uV2hlZWxFdmVudHMoKTsKLX0KLQotLSAodm9pZClfc2V0Q3VzdG9t
U3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKLXsKLSAgICBfaW1wbC0+c2V0
Q3VzdG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKLX0KLQotLSAodm9pZClfc2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0Ci17Ci0g
ICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQodG9wQ29udGVudElu
c2V0KTsKLX0KLQotLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50
IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRTdGF0ZQotewotICAgIHJl
dHVybiBfaW1wbC0+dHJ5VG9Td2lwZVdpdGhFdmVudChldmVudCwgaWdub3JpbmdQaW5uZWRTdGF0
ZSk7Ci19Ci0KLS0gKHZvaWQpX3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQo
XikoQ0dSZWN0KSljYWxsYmFjawotewotICAgIF9pbXBsLT5zZXREaWRNb3ZlU3dpcGVTbmFwc2hv
dENhbGxiYWNrKGNhbGxiYWNrKTsKLX0KLQotLSAoTlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcKLXsKLSAgICByZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXco
KTsKLX0KLQotLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdwotewotICAgIHJldHVybiBf
aW1wbC0+ZnVsbFNjcmVlbldpbmRvdygpOwotfQotCi0tICh2b2lkKV9kaXNhYmxlRnJhbWVTaXpl
VXBkYXRlcwotewotICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwotfQotCi0t
ICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzCi17Ci0gICAgX2ltcGwtPmVuYWJsZUZyYW1l
U2l6ZVVwZGF0ZXMoKTsKLX0KLQotLSAodm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbgotewotfQotCi0tICh2b2lkKV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24K
LXsKLX0KLQotLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KLXsKLX0K
LQotLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVI
YW5kbGUKLXsKLSAgICBpZiAoYXV0byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCku
d2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFt
ZUlEKSkpCi0gICAgICAgIHJldHVybiBfaW1wbC0+Y2FuQ2hhbmdlRnJhbWVMYXlvdXQoKndlYkZy
YW1lUHJveHkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLSAoTlNDb2xvciAqKV91bmRlcmxh
eUNvbG9yCi17Ci0gICAgcmV0dXJuIF9pbXBsLT51bmRlcmxheUNvbG9yKCk7Ci19Ci0KLS0gKHZv
aWQpX3NldFVuZGVybGF5Q29sb3I6KE5TQ29sb3IgKil1bmRlcmxheUNvbG9yCi17Ci0gICAgX2lt
cGwtPnNldFVuZGVybGF5Q29sb3IodW5kZXJsYXlDb2xvcik7Ci19Ci0KLS0gKEJPT0wpX2hhc0Fj
dGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyCi17Ci0gICAgcmV0dXJuIF9wYWdlICYmIF9wYWdl
LT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpOwotfQotCi0tICh2b2lkKV9yZXF1
ZXN0Q29udHJvbGxlZEVsZW1lbnRJRAotewotICAgIGlmIChfcGFnZSkKLSAgICAgICAgX3BhZ2Ut
PnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7Ci19Ci0KLS0gKHZvaWQpX2hhbmRsZUNvbnRy
b2xsZWRFbGVtZW50SURSZXNwb25zZTooTlNTdHJpbmcgKilpZGVudGlmaWVyCi17Ci0gICAgLy8g
T3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQotCi0tICh2b2lkKV9oYW5kbGVBY2NlcHRlZENh
bmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUKLXsKLSAgICBfaW1wbC0+
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLX0KLQotLSAodm9pZClfZGlkSGFu
ZGxlQWNjZXB0ZWRDYW5kaWRhdGUKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMu
Ci19Ci0KLS0gKHZvaWQpX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKXZp
c2libGUKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQp
X2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMKLXsKLSAgICBfaW1wbC0+Zm9yY2VSZXF1ZXN0Q2FuZGlk
YXRlc0ZvclRlc3RpbmcoKTsKLX0KLQotLSAoQk9PTClfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMK
LXsKLSAgICByZXR1cm4gX2ltcGwtPnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCk7Ci19Ci0KLS0g
KHZvaWQpX2luc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJl
cGxhY2VtZW50UmFuZ2UKLXsKLSAgICBbc2VsZiBpbnNlcnRUZXh0OnN0cmluZyByZXBsYWNlbWVu
dFJhbmdlOnJlcGxhY2VtZW50UmFuZ2VdOwotfQotCi0tIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QK
LXsKLSAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5mb2N1
c2VkRWxlbWVudFJlY3Q7Ci19Ci0KLS0gKEJPT0wpX3VzZVN5c3RlbUFwcGVhcmFuY2UKLXsKLSAg
ICByZXR1cm4gX2ltcGwtPnVzZVN5c3RlbUFwcGVhcmFuY2UoKTsKLX0KLQotLSAodm9pZClfc2V0
VXNlU3lzdGVtQXBwZWFyYW5jZTooQk9PTCl1c2VTeXN0ZW1BcHBlYXJhbmNlCi17Ci0gICAgX2lt
cGwtPnNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSk7Ci19Ci0KLS0g
KHZvaWQpdmlld0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2UKLXsKLSAgICAvLyBUaGlzIGNh
biBiZSBjYWxsZWQgZHVyaW5nIFtzdXBlciBpbml0V2l0aENvZGVyOl0gYW5kIFtzdXBlciBpbml0
V2l0aEZyYW1lOl0uCi0gICAgLy8gVGhhdCBpcyBiZWZvcmUgX2ltcGwgaXMgcmVhZHkgdG8gYmUg
dXNlZCwgc28gY2hlY2suIDxyZGFyOi8vcHJvYmxlbS8zOTYxMTIzNj4KLSAgICBpZiAoIV9pbXBs
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfaW1wbC0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENo
YW5nZSgpOwotfQotCi0tICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQK
LXsKLSAgICBfcGFnZS0+c2V0SGVhZGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwot
fQotCi0tICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQKLXsKLSAgICBf
cGFnZS0+c2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwotfQotCi0tICh2
b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxv
Y2tfdClhY3Rpb24KLXsKLSAgICBfaW1wbC0+ZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91
c2VFdmVudHMoYWN0aW9uKTsKLX0KLQotLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUKLXsKLSAgICAv
LyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Ig
bm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQotICAgIC8vIGV4dGVuZGVkIHRvIHJlY29n
bml6ZSB0aGUgcmVndWxhciBjb250ZXh0IG1lbnUgYXMgd2VsbC4KLSAgICByZXR1cm4gX2ltcGwt
PmRvbVBhc3RlTWVudSgpOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0tICh2b2lk
KV9yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvOih2b2lkKF4pKEJPT0wsIEJPT0ws
IE5TU3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5TSW50ZWdlcikpY2FsbGJhY2sKLXsKLSAgICBp
ZiAoIV9wYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNrKE5PLCBOTywgQCIiLCBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gaGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjYWxsYmFjayk7Ci0gICAgYXV0byBsb2NhbENhbGxiYWNrID0g
V2ViS2l0OjpOb3dQbGF5aW5nSW5mb0NhbGxiYWNrOjpjcmVhdGUoW2hhbmRsZXJdKGJvb2wgYWN0
aXZlLCBib29sIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgU3RyaW5nIHRpdGxl
LCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRl
bnRpZmllciwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAgIGhhbmRsZXIo
YWN0aXZlLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlv
biwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIH0pOwotCi0gICAgX3BhZ2Ut
PnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oV1RGTW92ZShsb2NhbENhbGxiYWNr
KSk7Ci19Ci0KLS0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2lu
OihDR1BvaW50KW9yaWdpbgotewotICAgIF9wYWdlLT5zY2FsZVBhZ2Uoc2NhbGUsIFdlYkNvcmU6
OnJvdW5kZWRJbnRQb2ludChvcmlnaW4pKTsKLX0KLQotLSAoQ0dGbG9hdClfcGFnZVNjYWxlCi17
Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKLX0KLQotLSAodm9pZClfaW50
ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRl
QmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBh
aW50aW5nIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRp
bmdGb3JBbmltYXRlZFJlc2l6ZQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYg
KCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAod2l0aG91dFdhaXRpbmdGb3JQYWludGluZykK
LSAgICAgICAgX3BhZ2UtPnNldFNob3VsZFNraXBXYWl0aW5nRm9yUGFpbnRBZnRlck5leHRWaWV3
RGlkTW92ZVRvV2luZG93KHRydWUpOwotCi0gICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtl
QmxvY2tQdHIodXBkYXRlQmxvY2spOwotCi0gICAgUmV0YWluUHRyPFdLV2ViVmlldz4gc3Ryb25n
U2VsZiA9IHNlbGY7Ci0gICAgX3BhZ2UtPmNhbGxBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUo
W3VwZGF0ZUJsb2NrQ29weSwgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSwgc3Ryb25n
U2VsZl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIGlmICgh
dXBkYXRlQmxvY2tDb3B5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgaWYgKCF3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplICYm
IHN0cm9uZ1NlbGYtPl9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdlYktpdDo6RHluYW1p
Y1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAgICAgICAgICAgIHN0cm9uZ1Nl
bGYtPl9jYWxsYmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5hcHBlbmQoW3VwZGF0ZUJsb2NrQ29w
eV0gewotICAgICAgICAgICAgICAgIHVwZGF0ZUJsb2NrQ29weSgpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUpOwotI2Vu
ZGlmCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7Ci0gICAgfSk7Ci19Ci0KLS0gKEJPT0wp
X3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcKLXsKLSAgICAvLyBGb3Igc3ViY2xh
c3NlcyB0byBvdmVycmlkZTsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpX3NldFNjcm9s
bGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KEJPT0wpZGlzYWJsZWQKLXsKLX0KLQotLy8g
RXhlY3V0ZSB0aGUgc3VwcGxpZWQgYmxvY2sgYWZ0ZXIgdGhlIG5leHQgdHJhbnNhY3Rpb24gZnJv
bSB0aGUgV2ViUHJvY2Vzcy4KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRl
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0
ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107Ci19Ci0KLS0gKHZv
aWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JBbmltYXRl
ZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCi17Ci0gICAgW3Nl
bGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0
aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
OllFU107Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91
dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKLXsKLSAgICBb
c2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3
aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOllFUyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVz
aXplOk5PXTsKLX0KLQotLSAodm9pZClfZG9BZnRlck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzLmFwcGVuZChtYWtlQmxv
Y2tQdHIodXBkYXRlQmxvY2spKTsKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVdOwotI2Vsc2UKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCB1cGRhdGVCbG9jayk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfZGlzYWJsZUJhY2tG
b3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZwotewotICAgIFdlYktpdDo6Vmlld1Nu
YXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLnNldERpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JU
ZXN0aW5nKHRydWUpOwotfQotCi0tICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5n
ICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lk
ICheKShCT09MKSljb21wbGV0aW9uCi17Ci0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChj
b21tYW5kLCBhcmd1bWVudCwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb24pXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAg
ICAgaWYgKGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKQotICAgICAgICAgICAgY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsK
LSAgICB9KTsKLX0KLQotLSAoaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZQotewotICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlLmdldEF1dG9yZWxlYXNlZCgpOwotfQotCi0tICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0g
ICAgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0tICh2b2lkKV9z
dGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRp
b25Db25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29t
cGxldGlvbkhhbmRsZXIKLXsKLSAgICB1c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7Ci0KLSAgICBpZiAoIV90ZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUgfHwgIV9wYWdlKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IGV4Y2x1c2lvblJ1bGVzOwot
ICAgIGlmIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlv
bkV4Y2x1c2lvblJ1bGUgKndrUnVsZSBpbiBjb25maWd1cmF0aW9uLmV4Y2x1c2lvblJ1bGVzKSB7
Ci0gICAgICAgICAgICBhdXRvIHR5cGUgPSB3a1J1bGUuaXNFeGNsdXNpb24gPyBFeGNsdXNpb25S
dWxlOjpUeXBlOjpFeGNsdWRlIDogRXhjbHVzaW9uUnVsZTo6VHlwZTo6SW5jbHVkZTsKLSAgICAg
ICAgICAgIGlmICh3a1J1bGUuYXR0cmlidXRlTmFtZSkKLSAgICAgICAgICAgICAgICBleGNsdXNp
b25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGUgeyB3a1J1
bGUuYXR0cmlidXRlTmFtZSwgd2tSdWxlLmF0dHJpYnV0ZVZhbHVlIH0gfSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICh3a1J1bGUuY2xhc3NOYW1lKQotICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1
bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6Q2xhc3NSdWxlIHsgd2tSdWxlLmNsYXNz
TmFtZSB9IH0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1
bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGUgeyB3a1J1bGUuZWxl
bWVudE5hbWUgfSB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9wYWdlLT5zdGFydFRleHRN
YW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dl
YlZpZXc+KHNlbGYpXSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1J
ZGVudGlmaWVyIGl0ZW1JRCwKLSAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgewotICAgICAg
ICBpZiAoIXdlYWtTZWxmKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8gcmV0
YWluZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0gICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0
YWluZWRTZWxmIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOwotICAgICAgICBpZiAoIWRlbGVn
YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rv
a2VucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsK
LSAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2VucykgewotICAgICAgICAgICAgYXV0byB3
a1Rva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0p
OwotICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tl
bi5pZGVudGlmaWVyLnRvVUludDY0KCkpXTsKLSAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRl
bnQ6dG9rZW4uY29udGVudF07Ci0gICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tl
bi5pc0V4Y2x1ZGVkXTsKLSAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5n
ZXQoKV07Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJl
cihpdGVtSUQudG9VSW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7Ci0gICAgICAgIFtkZWxlZ2F0
ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVt
Oml0ZW0uZ2V0KCldOwotICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildICgpIHsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9u
QmxvY2soKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
OihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09M
IHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVz
dWx0ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJl
c3VsdDsKLQotICAgIGlmICghX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaXRl
bUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikudG9VSW50
NjQoKSk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7Ci0gICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKLSAgICAgICAgYXV0byB0b2tlbklEID0g
bWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OlRva2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLnRvVUludDY0
KCkpOwotICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4uY29udGVudCB9KTsK
LSAgICB9Ci0KLSAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9r
ZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhh
bmRsZXIpXSAoTWFuaXB1bGF0aW9uUmVzdWx0IHJlc3VsdCkgewotICAgICAgICBjYXB0dXJlZENv
bXBsZXRpb25CbG9jayhyZXN1bHQgPT0gTWFuaXB1bGF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKLSAg
ICB9KTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS0gKENHUmVjdClfZHJhZ0Nh
cmV0UmVjdAotewotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAgcmV0dXJuIF9wYWdlLT5j
dXJyZW50RHJhZ0NhcmV0UmVjdCgpOwotI2Vsc2UKLSAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSNl
bmRpZgotfQotCi0tICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENH
UG9pbnQpbG9jYXRpb24KLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9zaW11bGF0ZUxvbmdQcmVzc0Fj
dGlvbkF0TG9jYXRpb246bG9jYXRpb25dOwotfQotCi0tICh2b2lkKV9zaW11bGF0ZVRleHRFbnRl
cmVkOihOU1N0cmluZyAqKXRleHQKLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9zaW11bGF0ZVRleHRF
bnRlcmVkOnRleHRdOwotfQotCi0tICh2b2lkKV9keW5hbWljVXNlckludGVyZmFjZVRyYWl0RGlk
Q2hhbmdlCi17Ci0gICAgaWYgKCFfcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIF9wYWdlLT5l
ZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCk7Ci0gICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZp
ZXdCYWNrZ3JvdW5kXTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS0g
KEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZwotewotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICByZXR1cm4gX2ltcGwtPmJlZ2luQmFja1N3aXBlRm9yVGVzdGluZygpOwotI2Vsc2UKLSAgICBp
ZiAoIV9nZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBf
Z2VzdHVyZUNvbnRyb2xsZXItPmJlZ2luU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3Rp
bmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsK
LSNlbmRpZgotfQotCi0tIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcKLXsKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIF9pbXBsLT5jb21wbGV0ZUJhY2tTd2lwZUZvclRl
c3RpbmcoKTsKLSNlbHNlCi0gICAgaWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybiBOTzsKLSAgICByZXR1cm4gX2dlc3R1cmVDb250cm9sbGVyLT5jb21wbGV0ZVNpbXVsYXRl
ZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVy
OjpTd2lwZURpcmVjdGlvbjo6QmFjayk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfc2V0RGVmZXJz
TG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZwotewotICAgIF9wYWdlLT5zZXRE
ZWZlcnNMb2FkaW5nRm9yVGVzdGluZyhkZWZlcnNMb2FkaW5nKTsKLX0KLQotLSAodm9pZClfc2V0
U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihC
T09MKXJlc29sdmVkCi17Ci0gICAgX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29t
cGxldGlvbkZvclRlc3RpbmcgPSByZXNvbHZlZDsKLX0KLQotLSAoQk9PTClfaGFzSW5zcGVjdG9y
RnJvbnRlbmQKLXsKLSAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0luc3BlY3RvckZyb250
ZW5kKCk7Ci19Ci0KLS0gKF9XS0luc3BlY3RvciAqKV9pbnNwZWN0b3IKLXsKLSAgICBpZiAoYXV0
byogaW5zcGVjdG9yID0gX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICByZXR1cm4gd3JhcHBl
cigqaW5zcGVjdG9yKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChfV0tGcmFtZUhhbmRsZSAq
KV9tYWluRnJhbWUKLXsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkp
Ci0gICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZShmcmFtZS0+
ZnJhbWVJRCgpKSk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClfcHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9w
YWdlLT5wcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoV2ViS2l0OjpJc1N1c3BlbnNpb25J
bW1pbmVudDo6WWVzLCBbXSB7IH0pOwotfQotCi0tICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9y
VGVzdGluZwotewotICAgIGlmIChfcGFnZSkKLSAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5zZW5k
UHJvY2Vzc0RpZFJlc3VtZSgpOwotfQotCi0tICh2b2lkKV9zZXRBc3NlcnRpb25TdGF0ZUZvclRl
c3Rpbmc6KGludCl2YWx1ZQotewotICAgIGlmICghX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIF9wYWdlLT5wcm9jZXNzKCkuc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nKHN0YXRpY19j
YXN0PFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU+KHZhbHVlKSk7Ci19Ci0KLS0gKEJPT0wpX2hhc1Nl
cnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nCi17Ci0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIHJldHVybiBfcGFnZSA/IF9wYWdlLT5wcm9jZXNzKCkucHJvY2Vz
c1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIDog
ZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0tIChCT09MKV9o
YXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwotewotI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKLSAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnBy
b2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmco
KSA6IGZhbHNlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAodm9p
ZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0Ci17Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LSAgICBXZWJLaXQ6OlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5kZW55TmV4
dFVzZXJNZWRpYVJlcXVlc3QoKTsKLSNlbmRpZgotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLS0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRf
dCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3Qp
cGFnZUlECi17Ci0jaWYgVVNFKFNZU1RFTV9QUkVWSUVXKQotICAgIGlmIChfcGFnZSkgewotICAg
ICAgICBpZiAoYXV0byogcHJldmlld0NvbnRyb2xsZXIgPSBfcGFnZS0+c3lzdGVtUHJldmlld0Nv
bnRyb2xsZXIoKSkKLSAgICAgICAgICAgIHByZXZpZXdDb250cm9sbGVyLT50cmlnZ2VyU3lzdGVt
UHJldmlld0FjdGlvbldpdGhUYXJnZXRGb3JUZXN0aW5nKGVsZW1lbnRJRCwgZG9jdW1lbnRJRCwg
cGFnZUlEKTsKLSAgICB9Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi1AZW5kCi0KICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIEBpbXBsZW1lbnRhdGlv
biBXS1dlYlZpZXcgKEZ1bGxTY3JlZW5BUElfUHJpdmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKaW5kZXggNDM1MDgw
ZjMyNDQ1Y2U4ZTdmNTZlZTVkYzAwNDM5NGJjZjFhYTVkOS4uMDBjYzMxNTMxMDIyMTg5ZTQyZWU3
ZmFjOTA2NzE0NWNjYWI2NWMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBv
cnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTY4LDE4ICs2OSw0NiBAQCBj
bGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2Vi
UGFnZVByb3h5Owogc3RydWN0IFByaW50SW5mbzsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBX
ZWJWaWV3SW1wbDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitjbGFzcyBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI7CisjZW5kaWYKIH0KIAogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQ
cm92aWRlclJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1l
SGFuZGxlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitAY2xhc3MgV0tTY3JvbGxWaWV3Owor
QGNsYXNzIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKIAogQGludGVyZmFj
ZSBXS1dlYlZpZXcgKCkgV0tfV0VCX1ZJRVdfUFJPVE9DT0xTIHsKIAogQHBhY2thZ2UKICAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gX2NvbmZpZ3VyYXRpb247Ci0KICAgICBS
ZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9wYWdlOworICAgIFdlYWtPYmpDUHRyPGlkIDxf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+PiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOwor
ICAgIE9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBs
ZXRpb25Gb3JUZXN0aW5nOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKKyAgICBS
ZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gX2NvbnRlbnRWaWV3OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcj4gX2dlc3R1cmVDb250cm9sbGVyOworICAg
IFZlY3RvcjxCbG9ja1B0cjx2b2lkICgpPj4gX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxi
YWNrczsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBSZXRhaW5QdHI8V0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcj4gX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworI2Vu
ZGlmCisKKyAgICBDR1JlY3QgX2lucHV0Vmlld0JvdW5kczsKKyNlbmRpZgogfQogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg3LDYgKzExNiw4IEBAIHN0cnVjdCBQcmludEluZm87CiAt
ICh2b2lkKV9wcm9jZXNzV2lsbFN3YXA7CiAtICh2b2lkKV9kaWRSZWxhdW5jaFByb2Nlc3M7CiAK
Ky0gKFVJVmlldyAqKV9jdXJyZW50Q29udGVudFZpZXc7CisKIC0gKHZvaWQpX2RpZENvbW1pdExv
YWRGb3JNYWluRnJhbWU7CiAtICh2b2lkKV9kaWRDb21taXRMYXllclRyZWU6KGNvbnN0IFdlYktp
dDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9uOwogLSAo
dm9pZClfbGF5ZXJUcmVlQ29tbWl0Q29tcGxldGU7CkBAIC05OSw4ICsxMzAsMTAgQEAgc3RydWN0
IFByaW50SW5mbzsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50U2Nyb2xsUG9zaXRpb246KFdl
YkNvcmU6OkZsb2F0UG9pbnQpc2Nyb2xsUG9zaXRpb24gc2Nyb2xsT3JpZ2luOihXZWJDb3JlOjpJ
bnRQb2ludClzY3JvbGxPcmlnaW47CiAtIChCT09MKV9zY3JvbGxUb1JlY3Q6KFdlYkNvcmU6OkZs
b2F0UmVjdCl0YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gbWlu
aW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7CisKIC0gKGRv
dWJsZSlfaW5pdGlhbFNjYWxlRmFjdG9yOwogLSAoZG91YmxlKV9jb250ZW50Wm9vbVNjYWxlOwor
CiAtIChkb3VibGUpX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JSZWN0Oihjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKXRhcmdldFJlY3QgY3VycmVudFNjYWxlOihkb3VibGUpY3VycmVudFNjYWxl
IGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSlt
aW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlOwogLSAodm9pZClf
em9vbVRvRm9jdXNSZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKWZvY3VzZWRFbGVtZW50
UmVjdCBzZWxlY3Rpb25SZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXNlbGVjdGlvblJl
Y3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgaW5zaWRlRml4ZWQ6KEJPT0wpaW5zaWRlRml4ZWQgZm9u
dFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBt
YXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgYWxsb3dTY2FsaW5nOihCT09MKWFsbG93
U2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3JjZVNjcm9sbDsKIC0gKEJPT0wpX3pvb21Ub1Jl
Y3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IHdpdGhPcmlnaW46KFdlYkNvcmU6OkZs
b2F0UG9pbnQpb3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVt
U2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNj
YWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOwpA
QCAtMTU2LDEzICsxODksMTAgQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX3Jlc2V0Rm9j
dXNQcmVzZXJ2YXRpb25Db3VudDsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBX
S1Bhc3N3b3JkVmlldyAqX3Bhc3N3b3JkVmlldzsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIF9pc0JhY2tncm91bmQ7Ci0KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkgKl9jb250ZW50UHJvdmlkZXJS
ZWdpc3RyeTsKLQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1NlbGVjdGlvbkdy
YW51bGFyaXR5IF9zZWxlY3Rpb25HcmFudWxhcml0eTsKIAorQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIF9pc0JhY2tncm91bmQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIEJPT0wgX2FsbG93c0RvdWJsZVRhcEdlc3R1cmVzOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBCT09MIF9zdHlsdXNUYXBHZXN0dXJlU2hvdWxkQ3JlYXRlRWRpdGFibGVJ
bWFnZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGF2ZVNldE9ic2N1
cmVkSW5zZXRzOwpAQCAtMTcyLDYgKzIwMiw3IEBAIHN0cnVjdCBQcmludEluZm87CiAKIC0gKEJP
T0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJc0Rhcms7CiAtIChCT09MKV9lZmZlY3RpdmVVc2VySW50
ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkOworCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0xODAsNiArMjExLDggQEAgc3Ry
dWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX2RpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudDoo
QVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50OwogI2VuZGlmCiAKKy0gKHZvaWQpX2ludGVybmFs
RG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2Nr
IHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWludGlu
ZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5nRm9y
QW5pbWF0ZWRSZXNpemU7CisKIC0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25z
dCBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmcmKXdhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCwgVVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpX2NsZWFyU2FmZUJyb3dz
aW5nV2FybmluZzsKIC0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZ0lmRm9yTWFpbkZy
YW1lTmF2aWdhdGlvbjsKQEAgLTE5MCw3ICsyMjMsMTYgQEAgc3RydWN0IFByaW50SW5mbzsKIC0g
KFdlYktpdDo6V2ViUGFnZVByb3h5KilfcGFnZTsKIAogI2lmIFBMQVRGT1JNKE1BQykKKworLSAo
dm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
biBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2NvbXBsZXRlSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwor
CistICh2b2lkKV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICop
ZXZlbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQpaW5zZXJ0
VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5n
ZTsKIC0gKHZvaWQpX3dlYl9ncmFudERPTVBhc3RlQWNjZXNzOworCiAjZW5kaWYKIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgKaW5kZXggNzg0YjZiMWUyMTBiYWMzN2Y5ZTBjYWFlNWU2MzIzNDk0NWM0OTE3ZC4uOTNi
ZGQxMWZjODk3MjY2Njg5YTIxZTg2Yzc3Mzk1YzI4ZTY1ODRjYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCkBAIC0yMTIs
NiArMjEyLDEyIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkg
ewogLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3RyaW5nICop
dGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0
cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlv
bkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0g
KHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTDooTlNVUkwgKil1cmwgdGl0bGU6
KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5T
QXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9P
TCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9z
KDEyLjIpKTsKIAorLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQg
KF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3Mo
MTAuMCkpOworLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2Fp
dGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOworI2lmIFRBUkdFVF9PU19JUEhPTkUKKy0g
KHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9ibG9j
a190KXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKyNlbmRpZgorCiAt
ICh2b2lkKV9pc0pJVEVuYWJsZWQ6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX3JlbW92
ZURhdGFEZXRlY3RlZExpbmtzOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24gV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIApAQCAtMjc3LDYgKzI4Myw4IEBA
IHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQHByb3BlcnR5
IChub25hdG9taWMsIHNldHRlcj1fc2V0RHJhZ0ludGVyYWN0aW9uUG9saWN5OikgX1dLRHJhZ0lu
dGVyYWN0aW9uUG9saWN5IF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3kgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTEuMCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zaG91bGRB
dm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0NoYW5nZSBXS19BUElfQVZBSUxBQkxFKGlv
cygxMy4wKSk7CiAKKy0gKHZvaWQpX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjoo
Q0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRlZEVs
ZW1lbnRJbmZvICopKWJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKKwogLSAodm9p
ZClfYmVnaW5JbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlOwogLSAodm9pZClfZW5kSW50
ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZTsKIC0gKHZvaWQpX2hpZGVDb250ZW50VW50aWxO
ZXh0VXBkYXRlOwpAQCAtMzEwLDcgKzMxOCwxMSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50
ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlEaWRHZXRTcGVha1Nl
bGVjdGlvbkNvbnRlbnQ6KE5TU3RyaW5nICopY29udGVudCBXS19BUElfQVZBSUxBQkxFKGlvcygx
MS4wKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlWaWV3ICpfc2FmZUJy
b3dzaW5nV2FybmluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikp
OworCistIChVSVZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxB
QkxFKGlvcygxMi4wKSk7CisKICNlbHNlCisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNWaWV3ICpfc2FmZUJyb3dzaW5nV2FybmluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjE0LjQpLCBpb3MoMTIuMikpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9X
S1JlY3RFZGdlIF9waW5uZWRTdGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
QEAgLTM1Niw2ICszNjgsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVj
dEVkZ2UpIHsKIAogLSAodm9pZClfcHJlcGFyZUZvck1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil0
YXJnZXRXaW5kb3cgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykpOwogCitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KSBCT09MIF91
c2VTeXN0ZW1BcHBlYXJhbmNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTopIF9XS092
ZXJsYXlTY3JvbGxiYXJTdHlsZSBfb3ZlcmxheVNjcm9sbGJhclN0eWxlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOwogQHByb3BlcnR5IChzdHJvbmcsIG5vbmF0b21pYywgc2V0dGVy
PV9zZXRJbnNwZWN0b3JBdHRhY2htZW50VmlldzopIE5TVmlldyAqX2luc3BlY3RvckF0dGFjaG1l
bnRWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogCkBAIC00NTEsMTQwICs0
NjQsNCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIEBp
bnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxVSVJlc3BvbmRlclN0YW5kYXJkRWRpdEFjdGlvbnM+CiBA
ZW5kCiAKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0aW5nKQotCi0tICh2
b2lkKV9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09MKWVu
YWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKLS0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3Ry
aW5nICopdXNlckludGVyZmFjZUl0ZW0gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwg
aW9zKDEwLjMpKTsKLQotI2lmIFRBUkdFVF9PU19JUEhPTkUKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBDR1JlY3QgX2NvbnRlbnRWaXNpYmxlUmVjdCBXS19BUElfQVZBSUxBQkxF
KGlvcygxMC4wKSk7Ci0tIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6
KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAoQ0dQb2ludClf
Y29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEwLjApKTsKLQotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQgV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhclBy
ZXZpb3VzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKLS0gKHZvaWQpZGlzbWlzc0Zvcm1B
Y2Nlc3NvcnlWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKHZvaWQpX2Rpc21p
c3NGaWxlUGlja2VyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjApKTsKLS0gKHZvaWQpc2VsZWN0
Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4IFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEwLjMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnRleHRD
b250ZW50VHlwZUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqc2VsZWN0Rm9ybVBvcG92ZXJUaXRs
ZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TU3RyaW5nICpmb3JtSW5wdXRMYWJlbCBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4w
KSk7Ci0tICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWlu
dXRlOihOU0ludGVnZXIpbWludXRlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLQotLSAo
dm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0b1N0cmluZzoo
TlNTdHJpbmcgKilvbGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0KLS0gKHZv
aWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbiBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4zKSk7Ci0KLS0gKHZvaWQpX2RpZFNob3dDb250ZXh0TWVudSBXS19BUElfQVZB
SUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnUgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50
YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTAuMykpOwotLSAodm9pZClfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6
KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEp
KTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PE5TVmFsdWUgKj4g
Kl91aVRleHRTZWxlY3Rpb25SZWN0cyBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfdWlUZXh0Q2FyZXRSZWN0IFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Q0dSZWN0IF9pbnB1dFZpZXdCb3VuZHMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpfc2Nyb2xsaW5nVHJlZUFz
VGV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgTlNOdW1iZXIgKl9zdGFibGVTdGF0ZU92ZXJyaWRlIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEwLjMpKTsKLQotLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0
aElEOih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRCBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7Ci0tICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENHUG9pbnQp
bG9jYXRpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotLSAodm9pZClfc2ltdWxhdGVU
ZXh0RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsK
LQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2RyYWdDYXJldFJlY3Qg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotCi0tICh2b2lkKV9kb0FmdGVyUmVjZWl2aW5n
RWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEzLjApKTsKLQotLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1l
bnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXiko
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEu
MCkpOwotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNl
dDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Ci0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5
U3RvcmVTZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOwotLSAodm9pZClfYWNj
ZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKLS0g
KFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEyLjApKTsKLQotLSAodm9pZClfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25PbkVsZW1lbnQ6
KHVpbnQ2NF90KWVsZW1lbnRJRCBkb2N1bWVudDoodWludDY0X3QpZG9jdW1lbnRJRCBwYWdlOih1
aW50NjRfdClwYWdlSUQgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3Bv
bmRlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7Ci0jZWxzZQotLSAodm9pZClfZGlzbWlz
c0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLS0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXpl
KW9mZnNldCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2JlZ2lu
RGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5k
b3dDaGFuZ2VzU3luYyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQp
X2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudCBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmll
d3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCkpOwotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxv
YXQpdG9wQ29udGVudEluc2V0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAo
TlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7Ci0tIChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9lbmFibGVGcmFtZVNp
emVVcGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfcHJl
cGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpKTsKLS0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAoQk9PTClf
Y2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChCT09MKV90cnlUb1N3aXBlV2l0aEV2ZW50
OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bpbm5l
ZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0RGlk
TW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9pZCheKShDR1JlY3QpKWNhbGxiYWNrIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6KSBDR0Zsb2F0IF90b3RhbEhlaWdodE9mQmFubmVy
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5LCBzZXR0ZXI9X3NldFVuZGVybGF5Q29sb3I6KSBOU0NvbG9yICpfdW5kZXJsYXlDb2xv
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkd3JpdGUsIHNldHRlcj1fc2V0SWdub3Jlc05vbldoZWVsRXZlbnRzOikgQk9PTCBfaWdu
b3Jlc05vbldoZWVsRXZlbnRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWZGb3JUcmFuc2l0
aW9uVG9XS1dlYlZpZXcgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xz
TWFuYWdlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSk7Ci0tICh2b2lkKV9yZXF1ZXN0
Q29udHJvbGxlZEVsZW1lbnRJRCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0g
KHZvaWQpX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZTooTlNTdHJpbmcgKilpZGVu
dGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfaGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9mb3Jj
ZVJlcXVlc3RDYW5kaWRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAo
dm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCBfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMi4zKSk7Ci0tICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRS
YW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTIuMykpOwotLSAoTlNSZWN0KV9jYW5kaWRhdGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0VXNl
U3lzdGVtQXBwZWFyYW5jZTopIEJPT0wgX3VzZVN5c3RlbUFwcGVhcmFuY2UgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU01l
bnUgKl9hY3RpdmVNZW51IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOwotCi0t
ICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludClo
ZWlnaHQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9kb0FmdGVy
UHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24g
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSk7Ci0jZW5kaWYKLQotLSAodm9pZClfcmVx
dWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0
cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7Ci0KLS0gKHZvaWQpX3NldFBhZ2VTY2FsZToo
Q0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbiBXS19BUElfQVZBSUxBQkxF
KGlvcygxMC4zKSk7Ci0tIChDR0Zsb2F0KV9wYWdlU2NhbGUgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMykpOwotCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAo
Xikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygx
MC4wKSk7Ci0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0
aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9j
ayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKLS0gKHZvaWQpX2Rv
QWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9p
ZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwg
aW9zKDEwLjMpKTsKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
KSwgaW9zKDExLjApKTsKLQotLSAodm9pZClfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNob3RWb2xh
dGlsaXR5Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAu
MykpOwotLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJn
dW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29t
cGxldGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwotCi0t
ICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNCksIGlvcygxMi4wKSk7Ci0KLS0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZzsK
LS0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZzsKLS0gKHZvaWQpX3NldERlZmVy
c0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRpbmc7Ci0KLS0gKHZvaWQpX3NldFNo
YXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzooQk9P
TClyZXNvbHZlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwot
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0luc3BlY3RvckZyb250
ZW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0luc3BlY3RvciAqX2luc3BlY3RvciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZSBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgd2Vh
aywgc2V0dGVyPV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KSBpZCA8X1dLVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlPiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25m
aWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNj
ZXNzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRT
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5nVXBkYXRl
c0Rpc2FibGVkRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEz
LjApKTsKLQotLSAodm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7
Ci0tICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZzsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBfaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZv
clRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2VydmljZVdv
cmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3NldEFzc2VydGlvblN0YXRl
Rm9yVGVzdGluZzooaW50KXN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBlbmQKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVz
dGluZy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3Rp
bmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNmVjYmVjMDZlNjFiYTY2YTdmMmM0NWVlNWJhYzMyNGQxN2I5NjQ4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld1Rlc3RpbmcuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmdJT1MuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdU
ZXN0aW5nTWFjLmg+CisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmcpCisKKy0gKHZv
aWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdp
bjsKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZTsKKworLSAodm9pZClfc2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistIChOU0RpY3Rpb25hcnkgKilf
Y29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVt
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7CisKKy0gKHZvaWQp
X3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9PTCwg
TlNTdHJpbmcqLCBkb3VibGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjayBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOworCistICh2b2lkKV9kb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0
aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjE0KSwgaW9zKDEyLjApKTsKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEzKSwgaW9zKDExLjApKTsKKworLSAodm9pZClfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNo
b3RWb2xhdGlsaXR5Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBp
b3MoMTAuMykpOworLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1h
bmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9P
TCkpY29tcGxldGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykp
OworCistICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNCksIGlvcygxMi4wKSk7CisKKy0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVz
dGluZzsKKy0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZzsKKy0gKHZvaWQpX3Nl
dERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRpbmc7CisKKy0gKHZvaWQp
X3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGlu
ZzooQk9PTClyZXNvbHZlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIu
MikpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0luc3BlY3Rv
ckZyb250ZW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0luc3BlY3RvciAqX2luc3BlY3RvciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOworCitAcHJvcGVydHkgKG5vbmF0b21p
Yywgd2Vhaywgc2V0dGVyPV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KSBpZCA8X1dLVGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlPiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9z
dGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRp
b25Db25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9P
TCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVy
PV9zZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5n
VXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwg
aW9zKDEzLjApKTsKKworLSAodm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3Rpbmc7CistICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZzsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3NldEFzc2VydGlv
blN0YXRlRm9yVGVzdGluZzooaW50KXN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg2
ZjI0MmU0Mjc0ZThmNjFiZTY2MTFjYjgyMzE3NDlhM2YzODI5NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCkBA
IC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgor
I2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKKyNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFu
aXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oIgor
I2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5oIgorI2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCIKKyNp
bXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNp
bXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgorI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0
aW9uQnViYmxlLmg+CisKKworQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nKQor
CistICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjooQ0dQb2lu
dClvcmlnaW4KK3sKKyAgICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBXZWJDb3JlOjpyb3VuZGVk
SW50UG9pbnQob3JpZ2luKSk7Cit9CisKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZQoreworICAgIHJl
dHVybiBfcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKKy0gKHZvaWQpX3NldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZAoreworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgW19jb250ZW50VmlldyBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQ6ZW5hYmxlZF07CisjZWxzZQorICAgIF9pbXBsLT5zZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCk7CisjZW5kaWYKK30KKworLSAoTlNEaWN0aW9u
YXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJm
YWNlSXRlbQoreworICAgIGlmIChbdXNlckludGVyZmFjZUl0ZW0gaXNFcXVhbFRvU3RyaW5nOkAi
dmFsaWRhdGlvbkJ1YmJsZSJdKSB7CisgICAgICAgIGF1dG8qIHZhbGlkYXRpb25CdWJibGUgPSBf
cGFnZS0+dmFsaWRhdGlvbkJ1YmJsZSgpOworICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbGlk
YXRpb25CdWJibGUgPyB2YWxpZGF0aW9uQnViYmxlLT5tZXNzYWdlKCkgOiBlbXB0eVN0cmluZygp
OworICAgICAgICBkb3VibGUgZm9udFNpemUgPSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlv
bkJ1YmJsZS0+Zm9udFNpemUoKSA6IDA7CisgICAgICAgIHJldHVybiBAeyB1c2VySW50ZXJmYWNl
SXRlbTogQHsgQCJtZXNzYWdlIjogKE5TU3RyaW5nICopbWVzc2FnZSwgQCJmb250U2l6ZSI6IFtO
U051bWJlciBudW1iZXJXaXRoRG91YmxlOmZvbnRTaXplXSB9IH07CisgICAgfQorCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtXTsKKyNlbHNlCisg
ICAgcmV0dXJuIG5pbDsKKyNlbmRpZgorfQorCistICh2b2lkKV9yZXF1ZXN0QWN0aXZlTm93UGxh
eWluZ1Nlc3Npb25JbmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwgZG91YmxlLCBk
b3VibGUsIE5TSW50ZWdlcikpY2FsbGJhY2sKK3sKKyAgICBpZiAoIV9wYWdlKSB7CisgICAgICAg
IGNhbGxiYWNrKE5PLCBOTywgQCIiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpLCAwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaGFuZGxlciA9IG1ha2VCbG9ja1B0cihj
YWxsYmFjayk7CisgICAgYXV0byBsb2NhbENhbGxiYWNrID0gV2ViS2l0OjpOb3dQbGF5aW5nSW5m
b0NhbGxiYWNrOjpjcmVhdGUoW2hhbmRsZXJdKGJvb2wgYWN0aXZlLCBib29sIHJlZ2lzdGVyZWRB
c05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgU3RyaW5nIHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRv
dWJsZSBlbGFwc2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRlbnRpZmllciwgV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgIGhhbmRsZXIoYWN0aXZlLCByZWdpc3RlcmVkQXNO
b3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVuaXF1
ZUlkZW50aWZpZXIpOworICAgIH0pOworCisgICAgX3BhZ2UtPnJlcXVlc3RBY3RpdmVOb3dQbGF5
aW5nU2Vzc2lvbkluZm8oV1RGTW92ZShsb2NhbENhbGxiYWNrKSk7Cit9CisKKy0gKEJPT0wpX3Nj
cm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3Nl
cyB0byBvdmVycmlkZTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpX3NldFNjcm9sbGlu
Z1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KEJPT0wpZGlzYWJsZWQKK3sKK30KKworLSAodm9p
ZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplRm9yVGVzdGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBbc2Vs
ZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRo
b3V0V2FpdGluZ0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6
WUVTXTsKK30KKworLSAodm9pZClfZG9BZnRlck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU6
KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzLmFwcGVuZChtYWtlQmxvY2tQ
dHIodXBkYXRlQmxvY2spKTsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGVdOworI2Vsc2UKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCB1cGRhdGVCbG9jayk7CisjZW5kaWYKK30KKworLSAodm9pZClfZGlzYWJsZUJhY2tGb3J3
YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZworeworICAgIFdlYktpdDo6Vmlld1NuYXBz
aG90U3RvcmU6OnNpbmdsZXRvbigpLnNldERpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0
aW5nKHRydWUpOworfQorCistICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICop
Y29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkIChe
KShCT09MKSljb21wbGV0aW9uCit7CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChjb21t
YW5kLCBhcmd1bWVudCwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb24pXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAg
aWYgKGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKQorICAgICAgICAgICAgY2FwdHVyZWRDb21wbGV0
aW9uQmxvY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKKyAg
ICB9KTsKK30KKworLSAoaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZQoreworICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
LmdldEF1dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGU6KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAg
X3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistICh2b2lkKV9zdGFy
dFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25D
b25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxl
dGlvbkhhbmRsZXIKK3sKKyAgICB1c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7CisKKyAgICBpZiAoIV90ZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUgfHwgIV9wYWdlKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IGV4Y2x1c2lvblJ1bGVzOworICAg
IGlmIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvbkV4
Y2x1c2lvblJ1bGUgKndrUnVsZSBpbiBjb25maWd1cmF0aW9uLmV4Y2x1c2lvblJ1bGVzKSB7Cisg
ICAgICAgICAgICBhdXRvIHR5cGUgPSB3a1J1bGUuaXNFeGNsdXNpb24gPyBFeGNsdXNpb25SdWxl
OjpUeXBlOjpFeGNsdWRlIDogRXhjbHVzaW9uUnVsZTo6VHlwZTo6SW5jbHVkZTsKKyAgICAgICAg
ICAgIGlmICh3a1J1bGUuYXR0cmlidXRlTmFtZSkKKyAgICAgICAgICAgICAgICBleGNsdXNpb25S
dWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGUgeyB3a1J1bGUu
YXR0cmlidXRlTmFtZSwgd2tSdWxlLmF0dHJpYnV0ZVZhbHVlIH0gfSk7CisgICAgICAgICAgICBl
bHNlIGlmICh3a1J1bGUuY2xhc3NOYW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVz
LmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6Q2xhc3NSdWxlIHsgd2tSdWxlLmNsYXNzTmFt
ZSB9IH0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVz
LmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGUgeyB3a1J1bGUuZWxlbWVu
dE5hbWUgfSB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9wYWdlLT5zdGFydFRleHRNYW5p
cHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZp
ZXc+KHNlbGYpXSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVu
dGlmaWVyIGl0ZW1JRCwKKyAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBp
ZiAoIXdlYWtTZWxmKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWlu
ZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0YWlu
ZWRTZWxmIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOworICAgICAgICBpZiAoIWRlbGVnYXRl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2Vu
cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKKyAg
ICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAgYXV0byB3a1Rv
a2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwor
ICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5p
ZGVudGlmaWVyLnRvVUludDY0KCkpXTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6
dG9rZW4uY29udGVudF07CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5p
c0V4Y2x1ZGVkXTsKKyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQo
KV07CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihp
dGVtSUQudG9VSW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7CisgICAgICAgIFtkZWxlZ2F0ZSBf
d2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtOml0
ZW0uZ2V0KCldOworICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildICgpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxv
Y2soKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1
Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVzdWx0
ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3Vs
dDsKKworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaXRlbUlE
ID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikudG9VSW50NjQo
KSk7CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAgICAgYXV0byB0b2tlbklEID0gbWFr
ZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OlRv
a2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLnRvVUludDY0KCkp
OworICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4uY29udGVudCB9KTsKKyAg
ICB9CisKKyAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5z
LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSAoTWFuaXB1bGF0aW9uUmVzdWx0IHJlc3VsdCkgeworICAgICAgICBjYXB0dXJlZENvbXBs
ZXRpb25CbG9jayhyZXN1bHQgPT0gTWFuaXB1bGF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKyAgICB9
KTsKK30KKworLSAoQk9PTClfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nCit7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHJldHVybiBfaW1wbC0+YmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKCk7Cisj
ZWxzZQorICAgIGlmICghX2dlc3R1cmVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gTk87Cisg
ICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0
aW9uRm9yVGVzdGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rp
b246OkJhY2spOworI2VuZGlmCit9CisKKy0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVz
dGluZworeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPmNvbXBsZXRlQmFj
a1N3aXBlRm9yVGVzdGluZygpOworI2Vsc2UKKyAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmNvbXBs
ZXRlU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKKyNlbmRpZgorfQorCistICh2b2lk
KV9zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZlcnNMb2FkaW5nCit7CisgICAg
X3BhZ2UtPnNldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nKGRlZmVyc0xvYWRpbmcpOworfQorCist
ICh2b2lkKV9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZv
clRlc3Rpbmc6KEJPT0wpcmVzb2x2ZWQKK3sKKyAgICBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJ
bW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZyA9IHJlc29sdmVkOworfQorCistIChCT09MKV9o
YXNJbnNwZWN0b3JGcm9udGVuZAoreworICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+aGFzSW5z
cGVjdG9yRnJvbnRlbmQoKTsKK30KKworLSAoX1dLSW5zcGVjdG9yICopX2luc3BlY3Rvcgorewor
ICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIHJl
dHVybiB3cmFwcGVyKCppbnNwZWN0b3IpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKF9XS0Zy
YW1lSGFuZGxlICopX21haW5GcmFtZQoreworICAgIGlmIChhdXRvKiBmcmFtZSA9IF9wYWdlLT5t
YWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpGcmFtZUhhbmRsZTo6Y3Jl
YXRlKGZyYW1lLT5mcmFtZUlEKCkpKTsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9w
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZworeworICAgIGlmIChfcGFnZSkK
KyAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChXZWJLaXQ6Oklz
U3VzcGVuc2lvbkltbWluZW50OjpZZXMsIFtdIHsgfSk7Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NE
aWRSZXN1bWVGb3JUZXN0aW5nCit7CisgICAgaWYgKF9wYWdlKQorICAgICAgICBfcGFnZS0+cHJv
Y2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3NldEFzc2VydGlv
blN0YXRlRm9yVGVzdGluZzooaW50KXZhbHVlCit7CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX3BhZ2UtPnByb2Nlc3MoKS5zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rp
bmcoc3RhdGljX2Nhc3Q8V2ViS2l0OjpBc3NlcnRpb25TdGF0ZT4odmFsdWUpKTsKK30KKworLSAo
Qk9PTClfaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcKK3sKKyNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgcmV0dXJuIF9wYWdlID8gX3BhZ2UtPnByb2Nl
c3MoKS5wcm9jZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgOiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
Ky0gKEJPT0wpX2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nCit7
CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIHJldHVybiBfcGFnZSA/IF9wYWdlLT5w
cm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5
Rm9yVGVzdGluZygpIDogZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCistICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QKK3sKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorICAgIFdlYktpdDo6VXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRv
bigpLmRlbnlOZXh0VXNlck1lZGlhUmVxdWVzdCgpOworI2VuZGlmCit9CisKK0BlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lP
Uy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9T
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDI0ZWI5Y2VhOTgyZTEzNGY1ZDNmMjg3YzliMDAxNjM5ZjIxZDUzZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJW
aWV3VGVzdGluZ0lPUy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJX
S1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCisKKyNpZiBU
QVJHRVRfT1NfSVBIT05FCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdJT1MpCisK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9jb250ZW50VmlzaWJsZVJl
Y3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU1N0cmluZyAqdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZyBXS19BUElfQVZBSUxB
QkxFKGlvcygxMi4wKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5n
ICpzZWxlY3RGb3JtUG9wb3ZlclRpdGxlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNBcnJheTxOU1ZhbHVlICo+ICpfdWlUZXh0U2VsZWN0aW9uUmVjdHMgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMykpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3Qg
X3VpVGV4dENhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfaW5wdXRWaWV3Qm91bmRzIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEwLjMpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJp
bmcgKl9zY3JvbGxpbmdUcmVlQXNUZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNOdW1iZXIgKl9zdGFibGVTdGF0ZU92ZXJy
aWRlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgQ0dSZWN0IF9kcmFnQ2FyZXRSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjAp
KTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY29udGVudFZpZXdJc0Zp
cnN0UmVzcG9uZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKworLSAoQ0dQb2ludClf
Y29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEwLjApKTsKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250
ZW50czooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CisKKy0gKHZv
aWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsK
Ky0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91cyBXS19BUElfQVZBSUxBQkxFKGlv
cygxMC4wKSk7CistICh2b2lkKWRpc21pc3NGb3JtQWNjZXNzb3J5VmlldyBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4zKSk7CistICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlciBXS19BUElfQVZBSUxB
QkxFKGlvcygxMy4wKSk7CistICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6KGlu
dClyb3dJbmRleCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CisKKy0gKHZvaWQpc2V0VGlt
ZVBpY2tlclZhbHVlVG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51
dGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOworCistICh2b2lkKWFwcGx5QXV0b2NvcnJl
Y3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5nIHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmlu
ZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKKworLSAodm9pZClkaWRTdGFydEZvcm1Db250
cm9sSW50ZXJhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworLSAodm9pZClkaWRF
bmRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKwor
LSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsK
Ky0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4z
KSk7CistICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hf
YmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOworCistIChO
U0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9u
ZylsYXllcklEIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKKy0gKHZvaWQpX3NpbXVsYXRl
TG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbiBXS19BUElfQVZBSUxB
QkxFKGlvcygxMS4wKSk7CistICh2b2lkKV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAq
KXRleHQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOworCistICh2b2lkKV9kb0FmdGVyUmVj
ZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9u
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjApKTsKKworLSAodm9pZClfYWNjZXNzaWJpbGl0eVJl
dHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDoo
TlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFs
dWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4z
KSk7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTEuMykpOworLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKKworLSAodm9pZClfdHJpZ2dlclN5c3RlbVByZXZpZXdB
Y3Rpb25PbkVsZW1lbnQ6KHVpbnQ2NF90KWVsZW1lbnRJRCBkb2N1bWVudDoodWludDY0X3QpZG9j
dW1lbnRJRCBwYWdlOih1aW50NjRfdClwYWdlSUQgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9T
X1RCQSkpOworCitAZW5kCisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzhiNTQ2MjBjZjhhMTZjZTUwN2M0NmZkYTQxZmE1ZTA5NDc3Y2NhZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3
VGVzdGluZ0lPUy5tbQpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
LmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0
ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCisjaW1wb3J0ICJfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mb0ludGVybmFsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdL
VGVzdGluZ0lPUykKKworLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVj
dGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21w
bGV0aW9uSGFuZGxlcgoreworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2
ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhh
bmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rp
b25SZWN0cykgeworICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCld
KTsKKyAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCisg
ICAgICAgICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0
OnNlbGVjdGlvblJlY3QucmVjdCgpXV07CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRs
ZXIocmVjdFZhbHVlcy5nZXQoKSk7CisgICAgfV07Cit9CisKKy0gKHZvaWQpX2FjY2Vzc2liaWxp
dHlTdG9yZVNlbGVjdGlvbgoreworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9y
ZVNlbGVjdGlvbl07Cit9CisKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbgor
eworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07Cit9CisK
Ky0gKENHUmVjdClfY29udGVudFZpc2libGVSZWN0Cit7CisgICAgcmV0dXJuIFtzZWxmIGNvbnZl
cnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Cit9
CisKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClw
b2ludAoreworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6c2Vs
Zi5fY3VycmVudENvbnRlbnRWaWV3XTsKK30KKworLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJv
bVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzZWxmIGNvbnZl
cnRQb2ludDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKK30KKworLSAo
dm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vz
c29yeVRhYjpZRVNdOworfQorCistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMK
K3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107Cit9CisKKy0gKHZvaWQpYXBw
bHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJpbmc6KE5TU3RyaW5n
ICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246bmV3
U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVk
Q29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVUlX
S0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICB9XTsKK30KKworLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29yeVZp
ZXcKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURvbmVdOworfQorCistICh2b2lkKV9k
aXNtaXNzRmlsZVBpY2tlcgoreworICAgIFtfY29udGVudFZpZXcgZGlzbWlzc0ZpbGVQaWNrZXJd
OworfQorCistICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIg
bWludXRlOihOU0ludGVnZXIpbWludXRlCit7CisgICAgW19jb250ZW50VmlldyBzZXRUaW1lUGlj
a2VyVmFsdWVUb0hvdXI6aG91ciBtaW51dGU6bWludXRlXTsKK30KKworLSAodm9pZClzZWxlY3RG
b3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgKK3sKKyAgICBbX2NvbnRlbnRWaWV3
IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5kZXhdOworfQorCistIChOU1N0cmlu
ZyAqKXNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUKK3sKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBz
ZWxlY3RGb3JtUG9wb3ZlclRpdGxlXTsKK30KKworLSAoTlNTdHJpbmcgKil0ZXh0Q29udGVudFR5
cGVGb3JUZXN0aW5nCit7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgdGV4dENvbnRlbnRUeXBl
Rm9yVGVzdGluZ107Cit9CisKKy0gKE5TU3RyaW5nICopZm9ybUlucHV0TGFiZWwKK3sKKyAgICBy
ZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07Cit9CisKKy0gKHZvaWQpZGlkU3Rh
cnRGb3JtQ29udHJvbEludGVyYWN0aW9uCit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3Zl
cnJpZGUuCit9CisKKy0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbgoreworICAg
IC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQorCistICh2b2lkKV9kaWRTaG93Q29u
dGV4dE1lbnUKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KK30KKworLSAo
dm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51Cit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8g
b3ZlcnJpZGUuCit9CisKKy0gKENHUmVjdClfdWlUZXh0Q2FyZXRSZWN0Cit7CisgICAgLy8gRm9y
Y2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCisgICAgW19jb250ZW50
VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4gW1tfY29udGVudFZp
ZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQuc2VsZWN0aW9uVmlldy5z
ZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOworfQorCistIChDR1JlY3QpX2lucHV0
Vmlld0JvdW5kcworeworICAgIHJldHVybiBfaW5wdXRWaWV3Qm91bmRzOworfQorCistIChOU0Fy
cmF5PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVjdHMKK3sKKyAgICAvLyBGb3JjZSB0
aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KKyAgICBbX2NvbnRlbnRWaWV3
IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKKworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF91
aVRleHRTZWxlY3Rpb25SZWN0c107Cit9CisKKy0gKE5TU3RyaW5nICopX3Njcm9sbGluZ1RyZWVB
c1RleHQKK3sKKyAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNv
b3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKKyAgICBpZiAo
IWNvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm4gQCIiOworCisgICAgcmV0dXJuIGNvb3JkaW5h
dG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Cit9CisKKy0gKE5TTnVtYmVyICopX3N0YWJsZVN0
YXRlT3ZlcnJpZGUKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKyAgICBy
ZXR1cm4gbmlsOworfQorCistIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRo
SUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklECit7CisgICAgQ0FMYXllciogbGF5ZXIgPSBk
b3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+
ZHJhd2luZ0FyZWEoKSkubGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxheWVySUQpOworICAgIGlmICgh
bGF5ZXIpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gQHsKKyAgICAgICAgQCJi
b3VuZHMiIDogQHsKKyAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmJvdW5kcy5vcmlnaW4ueCks
CisgICAgICAgICAgICBAInkiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAorICAgICAgICAg
ICAgQCJ3aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLndpZHRoKSwKKyAgICAgICAgICAgIEAi
aGVpZ2h0IiA6IEAobGF5ZXIuYm91bmRzLnNpemUuaGVpZ2h0KSwKKworICAgICAgICB9LAorICAg
ICAgICBAInBvc2l0aW9uIiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5wb3NpdGlv
bi54KSwKKyAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLnBvc2l0aW9uLnkpLAorICAgICAgICB9
LAorICAgICAgICBAInpQb3NpdGlvbiIgOiBAKGxheWVyLnpQb3NpdGlvbiksCisgICAgICAgIEAi
YW5jaG9yUG9pbnQiIDogQHsKKyAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmFuY2hvclBvaW50
LngpLAorICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYW5jaG9yUG9pbnQueSksCisgICAgICAg
IH0sCisgICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IEAobGF5ZXIuYW5jaG9yUG9pbnRaKSwKKyAg
ICAgICAgQCJ0cmFuc2Zvcm0iIDogQHsKKyAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIudHJh
bnNmb3JtLm0xMSksCisgICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTIp
LAorICAgICAgICAgICAgQCJtMTMiIDogQChsYXllci50cmFuc2Zvcm0ubTEzKSwKKyAgICAgICAg
ICAgIEAibTE0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xNCksCisKKyAgICAgICAgICAgIEAibTIx
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMSksCisgICAgICAgICAgICBAIm0yMiIgOiBAKGxheWVy
LnRyYW5zZm9ybS5tMjIpLAorICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci50cmFuc2Zvcm0u
bTIzKSwKKyAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yNCksCisKKyAg
ICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMSksCisgICAgICAgICAgICBA
Im0zMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzIpLAorICAgICAgICAgICAgQCJtMzMiIDogQChs
YXllci50cmFuc2Zvcm0ubTMzKSwKKyAgICAgICAgICAgIEAibTM0IiA6IEAobGF5ZXIudHJhbnNm
b3JtLm0zNCksCisKKyAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MSks
CisgICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDIpLAorICAgICAgICAg
ICAgQCJtNDMiIDogQChsYXllci50cmFuc2Zvcm0ubTQzKSwKKyAgICAgICAgICAgIEAibTQ0IiA6
IEAobGF5ZXIudHJhbnNmb3JtLm00NCksCisgICAgICAgIH0sCisgICAgICAgIEAic3VibGF5ZXJU
cmFuc2Zvcm0iIDogQHsKKyAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFu
c2Zvcm0ubTExKSwKKyAgICAgICAgICAgIEAibTEyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zv
cm0ubTEyKSwKKyAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTEzKSwKKyAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTE0
KSwKKworICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjEp
LAorICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjIpLAor
ICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjMpLAorICAg
ICAgICAgICAgQCJtMjQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjQpLAorCisgICAg
ICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMSksCisgICAgICAg
ICAgICBAIm0zMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMiksCisgICAgICAgICAg
ICBAIm0zMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMyksCisgICAgICAgICAgICBA
Im0zNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zNCksCisKKyAgICAgICAgICAgIEAi
bTQxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQxKSwKKyAgICAgICAgICAgIEAibTQy
IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQyKSwKKyAgICAgICAgICAgIEAibTQzIiA6
IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQzKSwKKyAgICAgICAgICAgIEAibTQ0IiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwKKyAgICAgICAgfSwKKworICAgICAgICBAImhp
ZGRlbiIgOiBAKGxheWVyLmhpZGRlbiksCisgICAgICAgIEAiZG91YmxlU2lkZWQiIDogQChsYXll
ci5kb3VibGVTaWRlZCksCisgICAgICAgIEAibWFza3NUb0JvdW5kcyIgOiBAKGxheWVyLm1hc2tz
VG9Cb3VuZHMpLAorICAgICAgICBAImNvbnRlbnRzU2NhbGUiIDogQChsYXllci5jb250ZW50c1Nj
YWxlKSwKKyAgICAgICAgQCJyYXN0ZXJpemF0aW9uU2NhbGUiIDogQChsYXllci5yYXN0ZXJpemF0
aW9uU2NhbGUpLAorICAgICAgICBAIm9wYXF1ZSIgOiBAKGxheWVyLm9wYXF1ZSksCisgICAgICAg
IEAib3BhY2l0eSIgOiBAKGxheWVyLm9wYWNpdHkpLAorICAgIH07Cit9CisKKy0gKHZvaWQpX2Rv
QWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgor
eworICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOmFj
dGlvbl07Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9y
VGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9k
b0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6YWN0aW9uXTsKK30KKwor
LSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0Cit7CisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAg
ICByZXR1cm4gX3BhZ2UtPmN1cnJlbnREcmFnQ2FyZXRSZWN0KCk7CisjZWxzZQorICAgIHJldHVy
biBDR1JlY3RaZXJvOworI2VuZGlmCit9CisKKy0gKEJPT0wpX2NvbnRlbnRWaWV3SXNGaXJzdFJl
c3BvbmRlcgoreworICAgIHJldHVybiBzZWxmLl9jdXJyZW50Q29udGVudFZpZXcuaXNGaXJzdFJl
c3BvbmRlcjsKK30KKworLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9u
OihDR1BvaW50KWxvY2F0aW9uCit7CisgICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVMb25nUHJl
c3NBY3Rpb25BdExvY2F0aW9uOmxvY2F0aW9uXTsKK30KKworLSAodm9pZClfc2ltdWxhdGVUZXh0
RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0Cit7CisgICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVU
ZXh0RW50ZXJlZDp0ZXh0XTsKK30KKworLSAodm9pZClfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFp
dERpZENoYW5nZQoreworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBfcGFn
ZS0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOworICAgIFtzZWxmIF91cGRhdGVTY3Jv
bGxWaWV3QmFja2dyb3VuZF07Cit9CisKKy0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0
aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2NF90KWRvY3Vt
ZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlECit7CisjaWYgVVNFKFNZU1RFTV9QUkVWSUVXKQor
ICAgIGlmIChfcGFnZSkgeworICAgICAgICBpZiAoYXV0byogcHJldmlld0NvbnRyb2xsZXIgPSBf
cGFnZS0+c3lzdGVtUHJldmlld0NvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgIHByZXZpZXdDb250
cm9sbGVyLT50cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbldpdGhUYXJnZXRGb3JUZXN0aW5nKGVs
ZW1lbnRJRCwgZG9jdW1lbnRJRCwgcGFnZUlEKTsKKyAgICB9CisjZW5kaWYKK30KKworQGVuZAor
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJj
YjUzMjFjZTRiMDc4NjYwYTlkZjYyNmQ0YjZlMTJiMjk2NTIxMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5oCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXcuaD4KKworI2lmICFUQVJHRVRfT1NfSVBIT05FCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChX
S1Rlc3RpbmdNYWMpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFRvdGFsSGVp
Z2h0T2ZCYW5uZXJzOikgQ0dGbG9hdCBfdG90YWxIZWlnaHRPZkJhbm5lcnMgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVy
PV9zZXRVbmRlcmxheUNvbG9yOikgTlNDb2xvciAqX3VuZGVybGF5Q29sb3IgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBz
ZXR0ZXI9X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czopIEJPT0wgX2lnbm9yZXNOb25XaGVlbEV2
ZW50cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgV0tQYWdlUmVmIF9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3
ICBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQk9PTCBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMikpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBCT09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEyLjMpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNNZW51ICpfYWN0aXZl
TWVudSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpKTsKKworLSAodm9pZClfc2V0
RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9lbmFibGVGcmFtZVNp
emVVcGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistICh2b2lkKV9k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTMuNCkpOworCistICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9lbmREZWZlcnJpbmdW
aWV3SW5XaW5kb3dDaGFuZ2VzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAo
dm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJy
YXkgKiljdXN0b21Td2lwZVZpZXdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwor
LSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29u
dGVudEluc2V0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAoQk9PTClfdHJ5
VG9Td2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJP
T0wpaWdub3JpbmdQaW5uZWRTdGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
Ky0gKHZvaWQpX3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0
KSljYWxsYmFjayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAoTlNWaWV3
ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7CistIChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCkpOworCistIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJh
bWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
KworLSAodm9pZClfcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMi4zKSk7CistICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9u
c2U6KE5TU3RyaW5nICopaWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMp
KTsKKworLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVz
dWx0ICopY2FuZGlkYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworLSAodm9p
ZClfZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
Mi4zKSk7CisKKy0gKHZvaWQpX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMi4zKSk7CistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJp
bGl0eTooQk9PTCl2aXNpYmxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworCist
ICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSly
ZXBsYWNlbWVudFJhbmdlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworLSAoTlNS
ZWN0KV9jYW5kaWRhdGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpKTsKKworLSAo
dm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTIuMykpOworLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVp
Z2h0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworLSAodm9pZClfZG9BZnRlclBy
b2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCkpOworCitAZW5kCisKKyNlbmRpZiAvLyAhVEFS
R0VUX09TX0lQSE9ORQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21h
Yy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21h
Yy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3YTU4MDU4MjQ3ODcyODdmNjRi
NmY3ZGFlOWMxYmUyMjE1ZDU0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KQEAgLTAsMCArMSwyMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZ01hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJXS1dlYlZpZXdJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgorCitAaW1wbGVt
ZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCisKKy0gKFdLUGFnZVJlZilfcGFnZVJl
ZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlldworeworICAgIHJldHVybiB0b0FQSShfcGFnZS5nZXQo
KSk7Cit9CisKKy0gKHZvaWQpX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MKK3sK
KyAgICBfaW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c0Zyb21WaWV3T25s
eSgpOworfQorCistICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJlY3QgYW5kU2Nyb2xsQnk6KE5T
U2l6ZSlvZmZzZXQKK3sKKyAgICBfaW1wbC0+c2V0RnJhbWVBbmRTY3JvbGxCeShOU1JlY3RUb0NH
UmVjdChyZWN0KSwgTlNTaXplVG9DR1NpemUob2Zmc2V0KSk7Cit9CisKKy0gKHZvaWQpX3NldFRv
dGFsSGVpZ2h0T2ZCYW5uZXJzOihDR0Zsb2F0KXRvdGFsSGVpZ2h0T2ZCYW5uZXJzCit7CisgICAg
X2ltcGwtPnNldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzKHRvdGFsSGVpZ2h0T2ZCYW5uZXJzKTsKK30K
KworLSAoQ0dGbG9hdClfdG90YWxIZWlnaHRPZkJhbm5lcnMKK3sKKyAgICByZXR1cm4gX2ltcGwt
PnRvdGFsSGVpZ2h0T2ZCYW5uZXJzKCk7Cit9CisKKy0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmll
d0luV2luZG93Q2hhbmdlcworeworICAgIF9pbXBsLT5iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRv
d0NoYW5nZXMoKTsKK30KKworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdl
cworeworICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Cit9CisK
Ky0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jCit7CisgICAgX2lt
cGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jKCk7Cit9CisKKy0gKHZvaWQp
X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKK3sK
KyAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50
cyk7Cit9CisKKy0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cworeworICAgIHJldHVybiBf
aW1wbC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Cit9CisKKy0gKHZvaWQpX3NldEN1c3RvbVN3
aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCit7CisgICAgX2ltcGwtPnNldEN1
c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Cit9CisKKy0gKHZvaWQpX3NldEN1c3Rv
bVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldAoreworICAg
IF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENvbnRlbnRJbnNl
dCk7Cit9CisKKy0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBp
Z25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKK3sKKyAgICByZXR1
cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVkU3RhdGUp
OworfQorCistICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4p
KENHUmVjdCkpY2FsbGJhY2sKK3sKKyAgICBfaW1wbC0+c2V0RGlkTW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjayhjYWxsYmFjayk7Cit9CisKKy0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xk
ZXJWaWV3Cit7CisgICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7
Cit9CisKKy0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKK3sKKyAgICByZXR1cm4gX2lt
cGwtPmZ1bGxTY3JlZW5XaW5kb3coKTsKK30KKworLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVw
ZGF0ZXMKK3sKKyAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKK30KKworLSAo
dm9pZClfZW5hYmxlRnJhbWVTaXplVXBkYXRlcworeworICAgIF9pbXBsLT5lbmFibGVGcmFtZVNp
emVVcGRhdGVzKCk7Cit9CisKKy0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFt
ZUhhbmRsZSAqKWZyYW1lSGFuZGxlCit7CisgICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBf
cGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChm
cmFtZUhhbmRsZS5fZnJhbWVJRCkpKQorICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZy
YW1lTGF5b3V0KCp3ZWJGcmFtZVByb3h5KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy0gKE5T
Q29sb3IgKilfdW5kZXJsYXlDb2xvcgoreworICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xv
cigpOworfQorCistICh2b2lkKV9zZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5kZXJsYXlD
b2xvcgoreworICAgIF9pbXBsLT5zZXRVbmRlcmxheUNvbG9yKHVuZGVybGF5Q29sb3IpOworfQor
CistIChCT09MKV9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgoreworICAgIHJldHVy
biBfcGFnZSAmJiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKK30K
KworLSAodm9pZClfcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQKK3sKKyAgICBpZiAoX3BhZ2Up
CisgICAgICAgIF9wYWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworfQorCistICh2
b2lkKV9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRp
ZmllcgoreworICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KK30KKworLSAodm9pZClf
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRl
Cit7CisgICAgX2ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Cit9CisK
Ky0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlCit7CisgICAgLy8gT3ZlcnJpZGRl
biBieSBzdWJjbGFzc2VzLgorfQorCistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0Vmlz
aWJpbGl0eTooQk9PTCl2aXNpYmxlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2Vz
LgorfQorCistICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgX2ltcGwtPmZv
cmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nKCk7Cit9CisKKy0gKEJPT0wpX3Nob3VsZFJl
cXVlc3RDYW5kaWRhdGVzCit7CisgICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlk
YXRlcygpOworfQorCistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRS
YW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCit7CisgICAgW3NlbGYgaW5zZXJ0VGV4dDpz
dHJpbmcgcmVwbGFjZW1lbnRSYW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKK30KKworLSAoTlNSZWN0
KV9jYW5kaWRhdGVSZWN0Cit7CisgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RM
YXlvdXREYXRhKCkuZm9jdXNlZEVsZW1lbnRSZWN0OworfQorCistICh2b2lkKXZpZXdEaWRDaGFu
Z2VFZmZlY3RpdmVBcHBlYXJhbmNlCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmlu
ZyBbc3VwZXIgaW5pdFdpdGhDb2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdpdGhGcmFtZTpdLgorICAg
IC8vIFRoYXQgaXMgYmVmb3JlIF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVzZWQsIHNvIGNoZWNrLiA8
cmRhcjovL3Byb2JsZW0vMzk2MTEyMzY+CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgX2ltcGwtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKK30KKworLSAo
dm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNl
dEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfc2V0
Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNldEZvb3RlckJh
bm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfZG9BZnRlclByb2Nl
c3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCit7Cisg
ICAgX2ltcGwtPmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzKGFjdGlvbik7
Cit9CisKKy0gKE5TTWVudSAqKV9hY3RpdmVNZW51Cit7CisgICAgLy8gRklYTUU6IE9ubHkgdGhl
IERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVy
ZSwgaXQgY291bGQgYmUKKyAgICAvLyBleHRlbmRlZCB0byByZWNvZ25pemUgdGhlIHJlZ3VsYXIg
Y29udGV4dCBtZW51IGFzIHdlbGwuCisgICAgcmV0dXJuIF9pbXBsLT5kb21QYXN0ZU1lbnUoKTsK
K30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KaW5kZXggZjU4OWU5
ZDMzNjFmYTFmYjYwMzVkYWExMzkyMTUyMjAxNjZiY2UxMC4uN2Q4OTAyZWViOTY2ZGZkYmFkNzg3
ZDgyYmIyZDhlZGZjOWJiN2NmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBv
cnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tCmluZGV4IGRjOWY3NGM0OWE2YmVhOWVkYzE1MDZjNWFiOTU3ZTAwNmEyMDdhNWUuLjBj
NWUwZjdmNmM2MGY3YTRjM2Y2ODFlMjlkZDQzMGQ1M2QxYzA5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ5LDYgKzQ5LDcg
QEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAi
V0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKICNpbXBvcnQgIldLV2ViVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJDb250
ZXh0TWVudVByb3h5LmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25J
T1MuaCIKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4
IDAxZjY4NzhlODVhNDJkNjhmMGI5Y2ViMDBlNWJkMTkzZDhhOGNmOWMuLjdkOGQ0ZGE0OTFiNTcw
OTQ1NWFjMmY3ZmEwOGIyMDcwYWZjMjIwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNzEsNiArNzEs
NyBAQAogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKICNpbXBvcnQg
IldLV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXZWJBdXRvY29ycmVjdGlvbkNv
bnRleHQuaCIKICNpbXBvcnQgIldlYkF1dG9jb3JyZWN0aW9uRGF0YS5oIgogI2ltcG9ydCAiV2Vi
RGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duSU9TLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNTYyOGNm
MzViOGNjYjJkMWZiOTE5ZDFjMmE3MDg0M2Y3Njg3ODg3ZC4uNDQxMGI3ZDEzZjA2YzEyYzZhYmVh
ZDhhMzY3NTIwMDZkNjlkMjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAj
aWYgSEFWRShIT1ZFUl9HRVNUVVJFX1JFQ09HTklaRVIpCiAKKyNpbXBvcnQgPFVJS2l0L1VJR2Vz
dHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKIAogQGlu
dGVyZmFjZSBXS01vdXNlR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQppbmRleCAxYTJi
ZmQ4NzUyZTc3NjEyZDM4MDlhZjIyZTkwNWVkZTY5MzFlN2NkLi4zOGI3YzRmMGY2YmJhZTZiMzg5
OTZkZWIxY2I2MzY0NDc3ZGNhOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXJJT1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKICNpbXBvcnQgIldLRnVsbHNjcmVl
blN0YWNrVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJW
aWV3VGVzdGluZy5oIgogI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQpp
bmRleCAyMjY1M2Q3NDM5ODg2ZGJmNWVjZGNkZGFmZTcyZDAyZDdiODMxZDAwLi4wMmRlZDE4N2Qz
MmJkNjJhNDNhMTBkMmU5YTYzNjgyYTMzYTc0OTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCkBAIC00OCw2ICs0OCw3IEBACiAjaW1w
b3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdNYWMuaCIKICNp
bXBvcnQgIldlYkNvbG9yUGlja2VyTWFjLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5
TWFjLmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlci5oCmluZGV4IDRkZWRjMGE2YWEyYTIyMzg5NjE1NjFlZjA5NjM2ZmJmMWU3
ZDUxMTUuLjAxZDdhMmFiNzUxOGU2Mzc5OGVmYWYyNmQzOWM2OTU1ODAxYzdjYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIuaApAQCAtMjMsOCArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgPEFwcEtpdC9BcHBL
aXQuaD4KICNpbXBvcnQgIkdlbmVyaWNDYWxsYmFjay5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBmNzlkZGMxMjA0MGYyYmY3OTI0MGNjYTU1ZWY5ODkzMGI1MDA3NTM0Li4zOTlkOTNh
Y2Y2YzM3YTU5MWRkYjZlNWQwYWU3Nzk0ZmE1MTUxM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4LDYgKzk4LDkgQEAKIAkJMEYw
OENGNTQxRDYzQzE0MDAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBvcG92ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDhDRjUzMUQ2M0MxNDAwMEI0
OERGMSAvKiBXS0Zvcm1TZWxlY3RQb3BvdmVyLmggKi87IH07CiAJCTBGMTc0QUEzMTQyQTRDQjcw
MDM5MjUwRiAvKiBBUElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5Lmgg
Ki87IH07CiAJCTBGM0M3MjVCMTk2RjYwNEUwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdo
dFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0M3MjU5MTk2RjVGNjgwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAqLzsg
fTsKKwkJMEY0NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzJGMjM5
RDg5QTAwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0NUEzMzUyMzlEODlBRjAwMjk0QUJG
IC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDVBMzMzMjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0
aW5nTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY0NUEzM0QyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzNCMjM5RDhDQzQw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCAqLzsgfTsKIAkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTk0Nzk1MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmggKi87IH07CiAJCTBGNTk0NzlEMTg3QjNCNjAwMDQzNzg1
NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xs
aW5nVHJlZS5oICovOyB9OwpAQCAtMjAyNSw2ICsyMDI4LDEyIEBACiAJCTBGMTc0QUE2MTQyQUFD
NjEwMDM5MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdLR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjNDNzI1NzE5NkY1RjUwMDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0b3JIaWdobGln
aHRWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNDNzI1OTE5NkY1RjY4
MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVz
dGluZ0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdUZXN0
aW5nSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzMwMjM5RDg5QTEw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ0lPUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3Rp
bmdNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3VGVzdGlu
Z01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMzNDIzOUQ4OUFGMDAy
OTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzM0MyMzlEOENDNDAwMjk0QUJGIC8q
IFdLV2ViVmlld1Rlc3RpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS1dlYlZpZXdUZXN0aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OEUxODdCM0IzQTAwNDM3
ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RjE4N0IzQjNBMDA0Mzc4NTcgLyogUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUwNjksNiArNTA3OCwxNSBAQAogCQkJdGFiV2lkdGggPSA4OwogCQkJ
dXNlc1RhYnMgPSAwOwogCQl9OworCQkwRjQ1QTMyRTIzOUQ4OTYwMDAyOTRBQkYgLyogaW9zICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjQ1QTMyRjIz
OUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oICovLAorCQkJCTBGNDVBMzMw
MjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovLAorCQkJKTsKKwkJ
CXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxMDU4QzdC
MEZFQTU1ODVFMTFDQTJDQkIgLyogTGlua2VkIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjc0OSw2ICs2NzY3LDggQEAKIAkJCQkxQUMx
NDE1MDE4QUM0N0VFMDA2QzYwMkMgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCAq
LywKIAkJCQkxQTY2QkY4RTE4QTA1MkVEMDAyMDcxQjQgLyogV0tXZWJWaWV3SW50ZXJuYWwuaCAq
LywKIAkJCQkyNkY5QTgzQTE4QTM0NjNGMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0ZS5oICov
LAorCQkJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggKi8s
CisJCQkJMEY0NUEzM0MyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcubW0gKi8s
CiAJCQkJMUFENjBGNUMxOEUyMEY0QzAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXMuaCAqLywK
IAkJCQkxQUQ2MEY1QjE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5tbSAqLywK
IAkJCQkxQUQ2MEY1RjE4RTIwRjc0MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlc0ludGVybmFs
LmggKi8sCkBAIC04MTc4LDYgKzgxOTgsNyBAQAogCQkJCUJDMEMzNzY2MTBGODA3NjYwMDc2RDdD
QiAvKiBDICovLAogCQkJCTM3QzRDMDgzMTgxNDlDMkEwMDM2ODhCOSAvKiBDb2NvYSAqLywKIAkJ
CQlCQzhBNTAxMzExNzY1RjQ1MDA3NTc1NzMgLyogY3BwICovLAorCQkJCTBGNDVBMzJFMjM5RDg5
NjAwMDI5NEFCRiAvKiBpb3MgKi8sCiAJCQkJQkMxMTFCNDcxMTJGNjE2OTAwMzM3QkFCIC8qIG1h
YyAqLywKIAkJCQk2MzQ4NDI0RjFGQjI2RTcxMDA5NDZFM0MgLyogQVBJQXBwbGljYXRpb25NYW5p
ZmVzdC5oICovLAogCQkJCTJFNUM3NzBEMUZBN0Q0MjkwMDU5MzJDMyAvKiBBUElBdHRhY2htZW50
LmNwcCAqLywKQEAgLTg0NjEsNiArODQ4Miw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCQzg2
OTlCMzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICovLAogCQkJCUJDODY5OUI0MTE2QUFE
QUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oICovLAorCQkJCTBGNDVBMzMzMjM5RDg5QUYw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggKi8sCisJCQkJMEY0NUEzMzQyMzlEODlB
RjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDczNSw2ICsxMDc1OCw5IEBA
CiAJCQkJMkRDNkQ5QzMxOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY2QkY4RjE4QTA1MkVEMDAyMDcxQjQg
LyogV0tXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2RjlBODNCMThBMzQ2
ODEwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQ1
QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY0NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNDVBMzM1MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdU
ZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ2MEY1RTE4RTIwRjRDMDAyMEMwMzQg
LyogV0tXaW5kb3dGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFENjBGNjAxOEUyMEY3
NDAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA4YjljYmI5YmY3MzExMGZkZDYwZWMwYWM5OWJlYjYzMDU0ZjczMDc1Li4yMmFl
YTNjMmNlZjRmNTMzNDU2MDkzNTAzMzM4ZmUyNzZlMDY0YjZlIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTktMTIt
MDkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBXS1dlYlZpZXcgY29kZSByZWxhdGVkIHRvIHRlc3RpbmcgdG8gbmV3IGZpbGVzLCB3aXRoIHRo
ZWlyIG93biBoZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDUwMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIFdJUAorCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dz
ZXJXaW5kb3dDb250cm9sbGVyLm06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVz
dEhhcm5lc3MubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9u
c2l2ZW5lc3NUaW1lckNyYXNoLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW06
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmlu
Z1BvbGljeS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05v
d1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0dXJlRGVsZWdhdGUubW06CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVm
ZmVyaW5nLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWls
ZWRTYW5kYm94Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VmlkZW9Db250cm9sc01hbmFnZXIubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRl
VGVzdHMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdFZGl0QWN0aW9ucy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW06CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5tbToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbToKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2Eu
bW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1t
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5t
bToKKwogMjAxOS0xMi0wNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIE1ha2UgQ29sb3JTcGFjZSBhbiBlbnVtIGNsYXNzCmRpZmYgLS1naXQg
YS9Ub29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubSBiL1Rv
b2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCmluZGV4IDAw
NjMyNjZlZDMzZTdkYTdhMmFiOTE0MmEyYWYwYTEyYzU5MGQwZDkuLmIxYzkzNWQzNjE0MTkzNWFk
NmE1MmQxMDliZTc4OWFhM2M3M2Y2MWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL21h
Yy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL21h
Yy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNVUkxF
eHRyYXMuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tJY29uTG9hZGluZ0RlbGVnYXRlLmg+CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0VkaXRpbmdUZXN0SGFybmVzcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tCmluZGV4IGYwOTZmYjc1NmYwMDQz
ZTYzNjZkZWM0ZjAxYTkwYmMxZDA3MzdjM2IuLmU0ZDA3MzJjYzljMjE1YmI4NjMzOWFjNmM3NGI1
OTlhM2RmNTU1MWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RI
YXJuZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1t
CkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1Rlc3RIYXJuZXNzLmgiCiAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KIAogQGltcGxlbWVu
dGF0aW9uIEVkaXRpbmdUZXN0SGFybmVzcwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0KaW5kZXgg
MjcxMmM1ZjA0MGFkZTFhYmVlNjI0NTE5MjhkZTdkNzM4YjdhMTFjZC4uOTY0NjJlYTZlNmVlMzli
NTFlZGJmMzYyZDA0ODYxZjQ0ZDQ0ZGYxZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbQpAQCAt
MzAsNyArMzAsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRlTWFjLmg+Ci0jaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1Rlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvQW5pbWF0ZWRSZXNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0FuaW1hdGVkUmVzaXplLm1tCmluZGV4IDMxMTljM2MzOTkwMzAyNWMxZDI3MTBjMWJlZGJk
YjQ2NzYyMzMwNTUuLjJiMTczZDc3MTAwY2IwN2ZjMmY1ODhjYzUxMjMxZTIwZjUwMmU3NjUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRS
ZXNpemUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bbmlt
YXRlZFJlc2l6ZS5tbQpAQCAtMzMsNyArMzMsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0
IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbQppbmRleCA2NGRjNDZiNGY3NzcyYmRj
ZmU4NzFlMmY4NWVlMjllNjEzNGEwZGM4Li4zOGYyZGRiNDY5OGE0NjMzZTU5MzgxNmU1ZTAzNjhm
NWE0MWRlZGRmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tCkBAIC0zMSw3ICszMSw3IEBACiAj
aW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tB
ZnRlckNyYXNoLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRl
cmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbQppbmRleCBkNDMyNGE4ZjZjNmE5ZGYyM2RlODg0
YmY1OWE2NDYxMTVkMjg5MTBjLi5kYmNiZWE2MTM4Zjc2NTc1YzM1NmUyNWMyY2I3YzA2YmQxYTkw
YTk4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
dGVyYWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0KQEAgLTMw
LDcgKzMwLDcgQEAKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQg
IlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFCdWZmZXJpbmdQb2xpY3kubW0KaW5kZXgg
NmMyZDdiNmY0ZTAwZWNmMDUyZDEwNTkzODEzOGQ3YzA2YmUxMjU5YS4uMDZmZjBiNGUyMmQwYTNm
ZTMwODBlYmY5ZjJlOTJmZGUwNzNiYWZjZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tCkBA
IC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAKICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAK
IHN0YXRpYyB2b2lkIHdhaXRVbnRpbEJ1ZmZlcmluZ1BvbGljeUlzRXF1YWxUbyhXS1dlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IGNoYXIqIGV4cGVjdGVkKQogewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWluZ0NvbnRyb2xz
VGVzdHMubW0KaW5kZXggNTAwMTJmMGYxOWRmZTVlY2Q4ZWRkNWFjYjMzZjdiNTdlMmIxMDBmOC4u
MTc5YzMxYzdlNDcxOGMzMjU4ZWJmN2NlMzBlYjAzZTcxYzY0NmYyNiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlp
bmdDb250cm9sc1Rlc3RzLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJW
aWV3LmgiCiAKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5o
PgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdUZXN0aW5nLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250
ZW50Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVk
Q29udGVudC5tbQppbmRleCA1Yjk4MGVlYTMxMTBlZmI5NmM2MGY2YmU1NDE3YTU0NjA0MTU3YzAx
Li45ZDRlY2VjNGRiM2JhNGE2YTNkM2MyNWQ4MWEyOGExMjkyNTkwZDk5IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENv
bnRlbnQubW0KQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVm
ZXJlbmNlc1JlZlByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVn
YXRlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5Q
aWN0dXJlRGVsZWdhdGUubW0KaW5kZXggNWRjMWExOTc4OTg0NDMxOWQyNjE5YTVjN2ExZjhmYzky
ZjZlODkzOC4uOTY3ZjY4MTAyOWM1NmE0ZDQ2ZWFiMDIzNTM4Zjc4ZWM1OGMxYjk2NiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0
dXJlRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9QaWN0dXJlSW5QaWN0dXJlRGVsZWdhdGUubW0KQEAgLTM4LDcgKzM4LDcgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxDRi5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLVmlldy5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVmlld1ByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFC
dWZmZXJpbmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nl
c3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0KaW5kZXggODQ3YmZiNjdlZTZmMGI4MGQ5Mjc2YTQz
NjliMTRkZjc3NjM0MDBiZS4uNmIxM2NlMjExMTI2YmIyYzE1N2JhYTBhYzM2MzM3Zjk2OGRkZTNi
YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9j
ZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbQpAQCAtMzEsNyAr
MzEsNyBAQAogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogCiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogCiBURVNUKFdl
YktpdCwgUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZykKIHsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uLm1tCmluZGV4IDExNTc3N2U3NGQ5YmJmZGZjNGNlM2UwM2FjNjMyMjE4NmY4MzIx
ZTguLjQ1NTQzODZhMjcxMTk5ZWI0ZDFlZmEyNjFkZDFiMTZiZGUxMjRkMjUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLVVJMU2NoZW1lSGFuZGxlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1By
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5o
PgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYktpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCA1YjY2OWVhYjAy
Mzg5ZjIxM2EwNTE3Zjc1ZGQ2YjhjNTQ2OGI5MTA5Li5hYTZhNTA5YTlkMTgyMTI0NmE1MjkwNzMx
NDViMzUwMTIyNDdkM2FhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtMzYsNyArMzYsNyBA
QAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lSGFuZGxlci5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tCmluZGV4IDZj
MmY4NDMyZThhYWE2NjY3Njk5MWFhN2ZiYWUxZmMwNjBjNTdlNTUuLjQ3ZDQ5Y2M1NzI3ODM2OTIw
NWU4ZTNhNmUyMmQ4Mzc2OTI1NThjNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUubW0KQEAgLTM2LDcgKzM2LDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1BhZ2UuaD4KICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogc3RhdGljIGJvb2wgZGlkRm9yY2VSZXBhaW50OwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2
aWV3Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2
aWV3Lm1tCmluZGV4IGQ5YWRlZjQ0MzJkOTgzZTRiNDcxMDIwNzQwNjlhNjJkYTljMWI3YzMuLjZl
NTg3Y2JhNTMxNzM0NTJmMGVjYTI1NTdkNGE3YjcwZTllYTJmNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0KQEAg
LTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIlV0aWxpdGllcy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLVmlld1ByaXZhdGUuaD4K
LSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogCiBzdGF0aWMgYm9v
bCBoYXNUcmlnZ2VySW5mbzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCBkNzA3NTk4ZmRjN2U4ODIy
YmNmMzE0Zjk4YTFkMzlmOTk1NTA0Yzc1Li4zN2FmZGQwNDJlNmMzMzY1NjZmYzFhOGNkM2E2YmY3
ZGRmNGY0YTg1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0
ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFdL
V2ViVmlldy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlw
dWxhdGlvbkNvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVz
aW9uUnVsZS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9VSURlbGVnYXRlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9VSURlbGVnYXRlLm1tCmluZGV4IDc5MTdiOGY5ZDJmNjc5YTExOTk4MmI4ZTUwMTIyY2FlZTEy
ZGYzZWMuLjUyNzIwYjM4NzQ5NzY2MDhmMzQzZGUyMGVjMDkwZjI5ZmUzYTUwOGIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0K
QEAgLTM2LDcgKzM2LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURl
bGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSGl0
VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0luc3BlY3Rvci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Vc2VyTWVkaWFTaW11bGF0ZUZhaWxlZFNhbmRib3gubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJv
eC5tbQppbmRleCAzYjg4MzdjMWRmMzM0NWIyZTc4ZGM5MjExZWM0NGE4NTNmMmI1ZGRlLi5jYTky
OTY1NGVmYTI4ZWYyOWFkN2IzM2UxMjU5ZWIzNzcyMjVhYzgyIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2Fu
ZGJveC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJN
ZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0KaW5kZXggN2Ew
ODk2M2YxMDY2MTE2YzAwNmUyOGJkMmE4NjZiZmNiYjA2MjU0Ni4uNDdmMzU3Y2JlNDljYmUyNjIx
M2NmZWZlMjFiN2U2NTliZDk4ZDFlOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAKICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0
cy5tbQppbmRleCBiNmZjZDkzNTg1MGViZDY3YjJiMTg2MTBlNDg4OTA2NjVlMzE5MmFiLi40OWE0
NWI3OTU5MTg3NzIyZmZhNDA0YTQxNTU2NmZlNzMwMDhjYjRlIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMu
bW0KQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQgPENvbnRhY3RzL0NvbnRhY3RzLmg+CiAjaW1w
b3J0IDxNYXBLaXQvTWFwS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlBy
aXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFyY2hpdmUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
UmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQppbmRleCA5OTNm
MGJiZmYzYWY1MmMzM2QzZWU2NzMxZWExNzVjMTY0NTAwYmM0Li5kODE0NjNjMjk4MTQ4ODM2MmY3
MTFhMTZkMjczZjFkM2NjMGY3MzIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxl
bWVudEluZm8ubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQg
IlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0
aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0KaW5kZXggODE2NTAw
MWYzZTgzNGVkNjIyNDhkNDU1ZTM5ZDA3M2NhZjUyYjYyMy4uNzMwODRlYjlkZWM5NGJmN2QwMmMw
M2RjMjdhMjFkMWMwMWE3NDk2NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tCkBA
IC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAKICNpbXBvcnQgPENh
cmJvbi9DYXJib24uaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0UHJpdmF0ZS5oPgogCiBzdGF0aWMgTlNTdHJpbmcgKkdldElucHV0
VmFsdWVKU0V4cHJlc3Npb24gPSBAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFs
dWUiOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S1dlYlZpZXdFZGl0QWN0aW9ucy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0KaW5kZXggOWQxYjdjNjI1NDk4NGFmYTAxNGQy
OTJlZmExNThiOGI4YTMxYjk5OC4uZTZmMTQyYTVkNTYxYmYxNmEyOTk4ODliNDA3MTYyMTAyOTJl
NTdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S1dlYlZpZXdFZGl0QWN0aW9ucy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0j
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1Rlc3RpbmcuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tCmluZGV4IDdk
MjU3ZmQ3MzJjNDc3ZTdjYWQ1ZGY5YjZjMmIwOWU2NjMwYmQ5NjAuLmFmZDE5MWRiMmYyZTY4MmU3
MjNkOThjNWY5MTY3NmU2MGYwN2ExMDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9u
ZGVyVGVzdHMubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJUZXN0SW5wdXREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmll
dy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJ
T1MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJ
T1MubW0KaW5kZXggMWY2YTA5MzdiNzA2ODhkYmM3MzUxNWI5MDE5NTQzZWYyZjhiZjM0ZS4uZGJm
MjJlZTI1YmE3YjI2NGQyM2IwMWY0NmNkMDA4ZTEyMTU5ZGQ2ZSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQpAQCAt
MzEsNyArMzEsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIK
LSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVjdEludGVyZmFj
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lmg+CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tCmluZGV4
IGU4MWYxMDJlZjZjMWIzMmFlN2QzMTkxYTVjNDU4YTg1YzBhYzk1Y2MuLmE4YzRkYTg3YTU0M2Rj
NDlmZTEzNWYzNjYxYThiZTliZjgzYWIyM2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9y
dCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2Vy
dmljZXMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rl
c3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS0VsZW1lbnRBY3Rpb24uaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5o
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rp
b25UZXN0c0lPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0
aW9uVGVzdHNJT1MubW0KaW5kZXggZjA5MjlmODdjMmFjMTQ3ODhhMTk4MjViNzM1MGQyYzE4MTc1
NGMyMC4uZWFkMDM5OTM4OGZkY2NlOWEwN2Y1N2UyYjFmN2E3NjM3ODg5OGM4ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3Rz
SU9TLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJUZXN0SW5wdXREZWxlZ2F0ZS5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVz
dGluZy5oPgogCiBAaW50ZXJmYWNlIFRlc3RXS1dlYlZpZXcgKEF1dG9jb3JyZWN0aW9uVGVzdHMp
CiAtIChVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqKWF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJp
bmc6KE5TU3RyaW5nICopc3RyaW5nOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW0KaW5kZXggNDk1NjIwYzQzZWRlNzc0
YTljOWUzNmI3MzAwYTE4NWJjM2ZmNGJkMi4uZDk3MDAyMWRkYWJkM2EzMDJhMWFmMGY0ZGVhOGFi
MmU4ODhkZDdjMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9j
dXNQcmVzZXJ2YXRpb25UZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lv
cy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJU
ZXN0SW5wdXREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAi
VUlLaXRTUEkuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0lucHV0RGVs
ZWdhdGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KaW5kZXggOTY3NmEzM2Ji
MjZjYWY5OWViN2JjMTkyZDI4MDlmZDg2NmZlZmQyZC4uODgyNTg4YzAxNGFlYTllM2E4MjFlOWEx
OTM1YzYxNjRiYzU1OTMyYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiVGVz
dE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
IEBpbXBsZW1lbnRhdGlvbiBUZXN0TmF2aWdhdGlvbkRlbGVnYXRlCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCmluZGV4IDY5Y2Q0OTdk
YzE2NmJiYTYyYTJlZTIwMmY5NGFjMGY5NmM3ZDY3ZjIuLjgxOWZmODdlZjI2YTBhY2Q4NDdlYjc0
ZjUzZDViZmMyOGJkNDllN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0Ry
YWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0Ry
YWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0IDxVSUtp
dC9VSURyYWdJdGVtLmg+CiAjaW1wb3J0IDxVSUtpdC9VSURyb3BJbnRlcmFjdGlvbi5oPgogI2lt
cG9ydCA8VUlLaXQvVUlJbnRlcmFjdGlvbi5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLRm9jdXNlZEVsZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLRm9ybUlu
cHV0U2Vzc2lvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQppbmRleCAxMDA1ZWU0
NzhiNTdkZmZlYzg3ZjQ1M2Q0MjI0NDk0NDEzYTkzZjRkLi42MzJjY2ViMzc0MTM4ZjI3YjU4N2M1
MDZiZGM2ODZlNjFjZDJjZTEzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9E
cmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9E
cmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3REcmFnZ2luZ0luZm8uaCIKICNpbXBvcnQg
IlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAj
aW1wb3J0IDxjbWF0aD4KICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXgg
ZTkyM2I4NTFhM2U5ZGQ2NGMyZDYzYTRlMjYxNDM1NDE2ZGM2YmJkYy4uY2FiZmU2NWRlNjkxMjE1
MGZmNjQ5YjZlNjdhOWI4ODJkMTQ5N2VhMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVJlY29yZFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmg+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rl
c3RSdW5uZXJXS1dlYlZpZXcubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RS
dW5uZXJXS1dlYlZpZXcubW0KaW5kZXggZWNhMDA2YzY4OTM0ZjhmN2MzYmZlMzMzMTM3OTc1Mjc2
MWMyNThmMi4uMTNjOGE1MGU5ODgxOTcwM2Q1ZjIzYzNhN2Y3YmI4MzU3ODMxMmYzMCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5t
bQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJ
bmZvLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9PcHRpb25hbC5oPgpAQCAtMzYs
NiArMzcsNyBAQAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJVSUtpdFNQSS5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKwogQGludGVyZmFjZSBXS1dl
YlZpZXcgKCkKIAogLy8gRklYTUU6IG1vdmUgdGhlc2UgdG8gV0tXZWJWaWV3X1ByaXZhdGUuaApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EubW0KaW5kZXggYmVlMDQ5N2JmNTZkMjM2MDA2YTM4MWJhMTE2MWE3MGI5MzBlZmNm
My4uN2E1ZWQ2ZmUxNjk1ZTY5MTYzNjNjNTM5YmEwMDM4Nzg1NmEzYTczOSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29h
Lm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJVSVNjcmlwdENvbnRleHQuaCIKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KIAog
bmFtZXNwYWNlIFdUUiB7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENv
bnRyb2xsZXJJT1MubW0KaW5kZXggYWUyYTk0YTE1YjAwOTkyYjFlODk1Zjk0ODc2NjI1YTE4YzFh
NDlmZi4uMGYyMGY2NmRjMTZiY2FkZTY1YTliZjY2MWU1MjRlM2E0NzVlOGNhMyAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KQEAgLTQyLDYg
KzQyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkv
aW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
bW0KaW5kZXggMDZmMDUzNGIxZTkxZjJlYjY2MTdlZjE5YWI1YWUwNTU5N2FmMmE3MS4uNTZiNmE3
ZWU4YzYyNzM0M2FiNTUxZjQyYjRhMTljZDViNWEyMmY0NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtNDMsNiArNDMs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAj
aW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2Ny
aXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0
Q29udHJvbGxlck1hYy5tbQppbmRleCBjNmUxNDViMDQ4MDE1NzRhZGQ4ZGJiODk1NmM1ZDVhYmY0
MWQ1MTM1Li5kZTc5MGQxYzQ0ZDA2OTJlN2UyNTk2NzkwOGJjZjY3MTNkODQ0ZGI3IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1t
CkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVz
dGluZy5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385169</attachid>
            <date>2019-12-09 10:55:54 -0800</date>
            <delta_ts>2019-12-09 22:15:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191209105553.patch</filename>
            <type>text/plain</type>
            <size>150664</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkYmJiYjlmZDRmOGEzNzgx
ZDc1ZDE1ZGNhOGNhNmJiMGU4Mzk5NzUuLmZhNjg5ODk1NGM0MmJiNGE4OTQwNmY4MmY0ZTBmMTM1
OTlmOTc5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQwIEBACisyMDE5LTEyLTA5ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgV0tXZWJWaWV3
IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5nIHRvIG5ldyBmaWxlcywgd2l0aCB0aGVpciBvd24gaGVh
ZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
MDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBXSVAKKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfaW50ZXJuYWxE
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOndp
dGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
cHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF91c2VTeXN0ZW1BcHBlYXJhbmNlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0VXNlU3lzdGVtQXBwZWFyYW5jZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mdWxsU2Ny
ZWVuUGxhY2Vob2xkZXJWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdEFjdGl2
YXRlZEVsZW1lbnRBdFBvc2l0aW9uOmNvbXBsZXRpb25CbG9jazpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlck5leHRTdGFibGVQcmVzZW50
YXRpb25VcGRhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZmlyZVByZXNlbnRhdGlvblVw
ZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZv
clRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vz
c2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6d2l0aFRleHQ6Y29tcGxldGlv
bkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0
eVN0b3JlU2VsZWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNz
aWJpbGl0eUNsZWFyU2VsZWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
Y29udGVudFZpc2libGVSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29u
dmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dF0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcga2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91c10pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0cmluZzp3aXRo
Q29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBkaXNt
aXNzRm9ybUFjY2Vzc29yeVZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aXNtaXNzRmlsZVBpY2tlcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0VGlt
ZVBpY2tlclZhbHVlVG9Ib3VyOm1pbnV0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBmb3JtSW5wdXRMYWJlbF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2hvd0NvbnRleHRNZW51XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZGlkRGlzbWlzc0NvbnRleHRNZW51XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfdWlUZXh0Q2FyZXRSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5wdXRWaWV3Qm91bmRzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfdWlUZXh0U2VsZWN0aW9uUmVjdHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zY3JvbGxpbmdUcmVlQXNUZXh0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfc3RhYmxlU3RhdGVPdmVycmlkZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGlu
ZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlUmVmRm9yVHJhbnNpdGlv
blRvV0tXZWJWaWV3XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0Nv
bnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldEZyYW1lOmFuZFNjcm9sbEJ5Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc10pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5n
ZXNTeW5jXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SWdub3Jlc05vbldo
ZWVsRXZlbnRzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lnbm9yZXNOb25X
aGVlbEV2ZW50c10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3
aXBlVmlld3M6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Q3VzdG9tU3dp
cGVWaWV3c1RvcENvbnRlbnRJbnNldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF90cnlUb1N3aXBlV2l0aEV2ZW50Omlnbm9yaW5nUGlubmVkU3RhdGU6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mdWxsU2NyZWVuV2luZG93XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmFibGVGcmFtZVNpemVVcGRhdGVzXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdW5kZXJsYXlDb2xvcl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVuZGVybGF5Q29sb3I6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXJdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRF0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRIYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rp
ZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2luc2VydFRleHQ6cmVwbGFjZW1lbnRSYW5nZTpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jYW5kaWRhdGVSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyB2aWV3RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZV0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhlYWRlckJhbm5lckhlaWdodDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VF
dmVudHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlTWVudV0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vz
c2lvbkluZm86XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZVNjYWxl
OndpdGhPcmlnaW46XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVNjYWxl
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2Fi
bGVkRm9yVGVzdGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNjcm9s
bGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFu
aW1hdGVkUmVzaXplRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9kb0FmdGVyTmV4dFZpc2libGVDb250ZW50UmVjdFVwZGF0ZTpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JU
ZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZXhlY3V0ZUVkaXRDb21t
YW5kOmFyZ3VtZW50OmNvbXBsZXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpjb21w
bGV0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvbjpjb21wbGV0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2RyYWdDYXJldFJlY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0
ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2ltdWxhdGVUZXh0RW50ZXJlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9keW5hbWljVXNlckludGVyZmFjZVRyYWl0RGlkQ2hhbmdlXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hhcmVTaGVldENvbXBsZXRlc0lt
bWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5zcGVjdG9yXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
bWFpbkZyYW1lXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VXb3JrZXJG
b3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25PbkVsZW1lbnQ6ZG9jdW1lbnQ6cGFn
ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0lu
dGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbTog
QWRkZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZVNjYWxlOndpdGhPcmlnaW46XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVNjYWxlXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVz
dGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVw
ZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0
eUZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6
YXJndW1lbnQ6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0
aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfaW5zcGVjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWFpbkZy
YW1lXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eUZvclRlc3RpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9y
VGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVz
dGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VX
b3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OndpdGhUZXh0OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlT
dG9yZVNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlDbGVh
clNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRWaXNpYmxlUmVjdF0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBrZXlib2FyZEFjY2Vzc29yeUJhck5leHRdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXNdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlzbWlzc0Zvcm1BY2Nlc3NvcnlW
aWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0ZpbGVQaWNrZXJdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjptaW51dGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
Zm9ybUlucHV0TGFiZWxdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRpZFN0YXJ0Rm9ybUNvbnRy
b2xJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlkRW5kRm9ybUNvbnRyb2xJ
bnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZFNob3dDb250ZXh0TWVudV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZERpc21pc3NDb250ZXh0TWVudV0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3VpVGV4dENhcmV0UmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2lucHV0Vmlld0JvdW5kc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VpVGV4dFNlbGVjdGlv
blJlY3RzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5nVHJlZUFzVGV4dF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3N0YWJsZVN0YXRlT3ZlcnJpZGVdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfZHJhZ0NhcmV0UmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zaW11bGF0ZVRleHRFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2R5bmFt
aWNVc2VySW50ZXJmYWNlVHJhaXREaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90
cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDpkb2N1bWVudDpwYWdlOl0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbTogQWRkZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlld10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRv
d3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGcmFtZTphbmRTY3JvbGxCeTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUb3RhbEhlaWdodE9mQmFubmVyczpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF90b3RhbEhlaWdodE9mQmFubmVyc10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luY10pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NldElnbm9yZXNOb25XaGVlbEV2ZW50czpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9pZ25vcmVzTm9uV2hlZWxFdmVudHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRDdXN0b21Td2lwZVZpZXdzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3
aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdHJ5VG9T
d2lwZVdpdGhFdmVudDppZ25vcmluZ1Bpbm5lZFN0YXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2Z1bGxTY3JlZW5XaW5kb3ddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxlRnJhbWVT
aXplVXBkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuYWJsZUZyYW1lU2l6ZVVwZGF0
ZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5DaGFuZ2VGcmFtZUxheW91dDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF91bmRlcmxheUNvbG9yXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0VW5kZXJsYXlDb2xvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYXNBY3RpdmVW
aWRlb0ZvckNvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RD
b250cm9sbGVkRWxlbWVudElEXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlQ29udHJv
bGxlZEVsZW1lbnRJRFJlc3BvbnNlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRl
TGlzdFZpc2liaWxpdHk6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZm9yY2VSZXF1ZXN0Q2Fu
ZGlkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVz
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5zZXJ0VGV4dDpyZXBsYWNlbWVudFJhbmdlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbmRpZGF0ZVJlY3RdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IHZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0SGVhZGVyQmFubmVySGVpZ2h0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldEZvb3RlckJhbm5lckhlaWdodDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVy
UHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9hY3RpdmVNZW51XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBs
Q29jb2EubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06Cisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMTItMDkg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgZml4IHRoZSBtYWNDYXRhbHlzdCBidWlsZCBhZnRlciByMjUzMjY3CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQKaW5kZXggOWQyNDJlMmEwNjRkZmY3MmY0OWM0MmY1NGQ5NzgxM2NhZDk0ZDkyYy4u
MWIyNWE3YjlkMDllYTM2NWI3MjRkMDVhOTdkYmZjNjMwZmRhYzcwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzIyLDExICszMjIsMTUgQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJT
Y3JpcHQubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbQogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCitVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0K
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbQogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dpbmRvd0ZlYXR1cmVzLm1tCiAKK1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJ
T1MubW0KKwogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCitVSVByb2Nlc3MvQVBJL21hYy9X
S1dlYlZpZXdUZXN0aW5nTWFjLm1tCiAKIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Q29jb2EubW0KIFVJUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9jb2NvYS9TZWNLZXlQcm94eVN0b3JlLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAppbmRleCA1MzYyYjE4
ZTg1M2ZhNTQ4MzE2OWVmNGUyMjFlZTE5ZjI4YzQ4ZWIyLi5lMDViNzk2ZTg3ZjM2YmYwYjI2ZWUy
MmNlZTNlNzkzN2VlOGRlYzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgKQEAgLTE4Miw2ICsxODIsNyBAQCBz
dHJ1Y3QgVUlFZGdlSW5zZXRzOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBkYXRhSW50ZXJhY3Rpb246KGlkKWludGVyYWN0aW9uIHNlc3Npb246KGlkKXNlc3Npb24gZGlk
RW5kV2l0aE9wZXJhdGlvbjooTlNVSW50ZWdlcilvcGVyYXRpb24gV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTEuMCkpOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50
ZXJhY3Rpb25PcGVyYXRpb25XYXNIYW5kbGVkOihCT09MKWhhbmRsZWQgZm9yU2Vzc2lvbjooaWQp
c2Vzc2lvbiBpdGVtUHJvdmlkZXJzOihOU0FycmF5ICopaXRlbVByb3ZpZGVycyBXS19BUElfQVZB
SUxBQkxFKGlvcygxMS4wKSk7CiAtIChOU1VJbnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IHdpbGxVcGRhdGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjooTlNV
SW50ZWdlcilvcGVyYXRpb24gZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxF
KGlvcygxMS4wKSk7CisKICNpZiBUQVJHRVRfT1NfSU9TCiAtIChVSURyb3BQcm9wb3NhbCAqKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxVcGRhdGVEcm9wUHJvcG9zYWxUb1Byb3Bv
c2FsOihVSURyb3BQcm9wb3NhbCAqKXByb3Bvc2FsIGZvclNlc3Npb246KGlkIDxVSURyb3BTZXNz
aW9uPilzZXNzaW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKIC0gKFVJVGFyZ2V0ZWRE
cmFnUHJldmlldyAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHByZXZpZXdGb3JMaWZ0
aW5nSXRlbTooVUlEcmFnSXRlbSAqKWl0ZW0gc2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Npb24+KXNl
c3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwpAQCAtMTkwLDYgKzE5MSw3IEBAIHN0
cnVjdCBVSUVkZ2VJbnNldHM7CiAtIChOU0ludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgZGF0YU93bmVyRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9u
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKE5TSW50ZWdlcilfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBkYXRhT3duZXJGb3JEcmFnU2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Np
b24+KXNlc3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogI2VuZGlmCisKIC0gKHZv
aWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQ2hhbmdlU2FmZUFyZWFTaG91bGRB
ZmZlY3RPYnNjdXJlZEluc2V0czooQk9PTClzYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5z
ZXRzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGlkUHJlc2VudEZvY3VzZWRFbGVtZW50Vmlld0NvbnRyb2xsZXI6KFVJ
Vmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsK
IC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRGlzbWlzc0ZvY3VzZWRF
bGVtZW50Vmlld0NvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKQEAgLTIwNCw2ICsyMDYsNyBAQCBzdHJ1Y3QgVUlFZGdl
SW5zZXRzOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzaG91bGRBbGxv
d0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTooV0tGcmFt
ZUluZm8gKilyZXF1ZXN0aW5nRnJhbWUgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShCT09MKSlk
ZWNpc2lvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwogCiAjZWxzZSAvLyAh
VEFSR0VUX09TX0lQSE9ORQorCiAtICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uRm9yV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzLjQpKTsKIC0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZv
cldlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7CiAtICh2b2lkKV9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
CkBAIC0yMzcsNiArMjQwLDcgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKICAgICBAcGFyYW0gaW5z
cGVjdG9yIFRoZSBXZWIgSW5zcGVjdG9yIGluc3RhbmNlIGF0dGFjaGVkIHRvIHRoaXMgV0tXZWJW
aWV3LgogKi8KIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQXR0YWNo
SW5zcGVjdG9yOihfV0tJbnNwZWN0b3IgKilpbnNwZWN0b3IgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSk7CisKICNlbmRpZiAvLyAhVEFSR0VUX09TX0lQSE9ORQogCiBAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCAz
NTA5Nzk5ZGNlZTBhOTM4MGYzMGQyZWZlYTVjMjM3MTgyMTgxNWY1Li5mY2RhNWRkNzAyZmIzODg2
MGEyZDg4YTQwZDY2ZmI2ZDRiN2M2NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTUyLDcgKzUyLDYgQEAKICNpbXBvcnQgIlRleHRD
aGVja2VyLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW1wb3J0ICJVSURlbGVn
YXRlLmgiCi0jaW1wb3J0ICJVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oIgogI2ltcG9ydCAiVmVy
c2lvbkNoZWNrcy5oIgogI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAj
aW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKQEAgLTgwLDYgKzc5LDcgQEAKICNpbXBv
cnQgIldLVXNlckNvbnRlbnRDb250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmll
d0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3Zp
ZGVyLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXS1dlYnBh
Z2VQcmVmZXJlbmNlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhU3RvcmVJbnRl
cm5hbC5oIgogI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC05OSwxNSArOTksOSBA
QAogI2ltcG9ydCAiX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJfV0tIaXRUZXN0
UmVzdWx0SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0lucHV0RGVsZWdhdGUuaCIKLSNpbXBvcnQg
Il9XS0luc3BlY3RvckludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3Ry
eUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tTZXNzaW9uU3RhdGVJbnRlcm5hbC5oIgogI2ltcG9y
dCAiX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tUZXh0TWFuaXB1
bGF0aW9uQ29uZmlndXJhdGlvbi5oIgotI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlLmgiCi0jaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oIgotI2lt
cG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKLSNpbXBvcnQgIl9XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAj
aW1wb3J0ICJfV0tXZWJzaXRlUG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9F
bGVtZW50Q29udGV4dC5oPgpAQCAtMTI0LDcgKzExOCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRpZXMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLmg+CkBAIC0yODIsMjkgKzI3NSwxOCBAQCBAaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IHsKIAogICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRl
Pj4gX2lucHV0RGVsZWdhdGU7CiAKLSAgICBPcHRpb25hbDxCT09MPiBfcmVzb2x1dGlvbkZvclNo
YXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKICAgICBSZXRhaW5QdHI8V0tT
YWZlQnJvd3NpbmdXYXJuaW5nPiBfc2FmZUJyb3dzaW5nV2FybmluZzsKIAogICAgIEJPT0wgX3Vz
ZVBsYXRmb3JtRmluZFVJOwogCi0gICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7Ci0KICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVPYmplY3RSZWdpc3RyeT4gX3JlbW90
ZU9iamVjdFJlZ2lzdHJ5OwogCi0gICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZp
ZXc7Ci0gICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKLQotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcj4gX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotI2VuZGlmCi0KICAgICBPcHRp
b25hbDxDR1NpemU+IF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNv
cmU6OkZsb2F0U2l6ZT4gX2xhc3RTZW50Vmlld0xheW91dFNpemU7CiAgICAgT3B0aW9uYWw8Q0dT
aXplPiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6RmxvYXRTaXplPiBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemU7CiAKLSAgICBDR1Jl
Y3QgX2lucHV0Vmlld0JvdW5kczsKICAgICBDR0Zsb2F0IF92aWV3cG9ydE1ldGFUYWdXaWR0aDsK
ICAgICBCT09MIF92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0OwogICAgIEJPT0wgX3Zp
ZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudDsKQEAgLTM0OSw3ICszMzEsNiBAQCBA
aW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IHsKICAgICBPcHRpb25hbDxXZWJLaXQ6OlRyYW5zYWN0
aW9uSUQ+IF9maXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlOwogICAgIGRvdWJsZSBf
c2NhbGVUb1Jlc3RvcmU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI+IF9nZXN0dXJlQ29udHJvbGxlcjsKICAgICBCT09MIF9hbGxvd3NCYWNrRm9y
d2FyZE5hdmlnYXRpb25HZXN0dXJlczsKIAogICAgIFJldGFpblB0cjxVSVZpZXcgPFdLV2ViVmll
d0NvbnRlbnRQcm92aWRlcj4+IF9jdXN0b21Db250ZW50VmlldzsKQEAgLTM4MSw3ICszNjIsNiBA
QCBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IHsKIAogICAgIEJPT0wgX2hhc1NjaGVkdWxlZFZp
c2libGVSZWN0VXBkYXRlOwogICAgIEJPT0wgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVk
dWxlZEZyb21TY3JvbGxWaWV3SW5TdGFibGVTdGF0ZTsKLSAgICBWZWN0b3I8QmxvY2tQdHI8dm9p
ZCAoKT4+IF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3M7CiAKICAgICBfV0tEcmFn
SW50ZXJhY3Rpb25Qb2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKIApAQCAtMzk3LDcgKzM3
Nyw2IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgewogICAgIEJPT0wgX2hhc0VudGVyZWRE
ZWFsbG9jOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKICAgICBSZXRhaW5QdHI8V0tUZXh0RmluZGVyQ2xp
ZW50PiBfdGV4dEZpbmRlckNsaWVudDsKICNlbmRpZgogICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0
ZXMgX3NlbGVjdGlvbkF0dHJpYnV0ZXM7CkBAIC0xNDMwLDYgKzE0MDksNDEgQEAgLSAodm9pZClf
Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uCiAgICAgICAg
IFtzZWxmIF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOwogfQogCistICh2b2lkKV9pbnRlcm5h
bERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9j
ayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRp
bmcgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0Zv
ckFuaW1hdGVkUmVzaXplCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtz
ZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIGlmICh3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nKQorICAg
ICAgICBfcGFnZS0+c2V0U2hvdWxkU2tpcFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRN
b3ZlVG9XaW5kb3codHJ1ZSk7CisKKyAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9j
a1B0cih1cGRhdGVCbG9jayk7CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxm
ID0gc2VsZjsKKyAgICBfcGFnZS0+Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbdXBk
YXRlQmxvY2tDb3B5LCB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplLCBzdHJvbmdTZWxm
XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKCF1cGRh
dGVCbG9ja0NvcHkpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICBpZiAoIXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUgJiYgc3Ry
b25nU2VsZi0+X2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmll
d3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykgeworICAgICAgICAgICAgc3Ryb25nU2VsZi0+
X2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbdXBkYXRlQmxvY2tDb3B5XSB7
CisgICAgICAgICAgICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZWxzZQorICAgICAg
ICBVTlVTRURfUEFSQU0od2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSk7CisjZW5kaWYK
KworICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsKKyAgICB9KTsKK30KKwogI2lmIEVOQUJMRShB
VFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZvaWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6
QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAt
MTQ1OSwxMSArMTQ3Myw2IEBAIC0gKHZvaWQpX2RpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVu
dDooQVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogCi0tIChCT09MKV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4g
c2VsZi5fY3VycmVudENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Ci19Ci0KIC0gKEJPT0wp
X3Nob3VsZEF2b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlCiB7CiAgICAgcmV0
dXJuIFtfY29udGVudFZpZXcgX3Nob3VsZEF2b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRz
Q2hhbmdlXTsKQEAgLTM2NzUsNiArMzY4NCwyMyBAQCAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0
ZUFjY2VzcwogICAgIF9pbXBsLT5oYW5kbGVET01QYXN0ZVJlcXVlc3RXaXRoUmVzdWx0KFdlYkNv
cmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2U6OkdyYW50ZWRGb3JHZXN0dXJlKTsKIH0KIAorLSAo
dm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoreworfQorCistICh2b2lk
KV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfY29tcGxl
dGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfZ2VzdHVyZUV2ZW50
V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPmdl
c3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmlld09ubHkoZXZlbnQpOworfQor
CiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgogLSAodm9pZClyZW5ld0dT
dGF0ZQogQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECkBAIC00ODMwLDYgKzQ4
NTYsMTYgQEAgLSAodm9pZClfY2hhbmdlTGlzdFR5cGU6KGlkKXNlbmRlcgogICAgIF9wYWdlLT5j
aGFuZ2VMaXN0VHlwZSgpOwogfQogCistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCit7Cisg
ICAgcmV0dXJuIF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Cit9CisKKy0gKHZvaWQpX3Nl
dFVzZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQoreworICAgIF9p
bXBsLT5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOworfQorCiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ4
NjQsNiArNDkwMCwyNSBAQCAtIChVSVZpZXcgKilpbnB1dFZpZXcKICAgICByZXR1cm4gW19jb250
ZW50VmlldyBpbnB1dFZpZXdGb3JXZWJWaWV3XTsKIH0KIAorLSAoVUlWaWV3ICopX2Z1bGxTY3Jl
ZW5QbGFjZWhvbGRlclZpZXcKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYg
KFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0
dXJuIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNlaG9sZGVyXTsKKyNl
bmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
dm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9u
IGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxv
Y2sKK3sKKyAgICBhdXRvIGluZm9SZXF1ZXN0ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0
aW9uUmVxdWVzdChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pKTsKKyAgICBpbmZv
UmVxdWVzdC5pbmNsdWRlU25hcHNob3QgPSB0cnVlOworCisgICAgW19jb250ZW50VmlldyBkb0Fm
dGVyUG9zaXRpb25JbmZvcm1hdGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0
cihibG9jayldIChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9y
bWF0aW9uKSB7CisgICAgICAgIGNhcHR1cmVkQmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZv
IGFjdGl2YXRlZEVsZW1lbnRJbmZvV2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OmluZm9ybWF0aW9uIHVzZXJJbmZvOm5pbF0pOworICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVz
dF07Cit9CisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChCT09MKV9pc0Vk
aXRhYmxlCkBAIC02MTQzLDYgKzYxOTgsMzYgQEAgLSAodm9pZClfcmVtb3ZlRGF0YURldGVjdGVk
TGlua3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgogI2VuZGlmCiB9CiAKKy8vIEV4ZWN1
dGUgdGhlIHN1cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20gdGhl
IFdlYlByb2Nlc3MuCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9p
ZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5n
Ok5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworfQorCistICh2b2lkKV9k
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZv
aWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCit7CisgICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGlu
ZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107Cit9CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25V
cGRhdGU6KGRpc3BhdGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sKK3sKKyAgICBpZiAoIVtzZWxmIHVz
ZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7
CisKKyAgICBpZiAoX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzKQorICAg
ICAgICBbX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGFkZE9iamVjdDp1
cGRhdGVCbG9ja0NvcHkuZ2V0KCldOworICAgIGVsc2UgeworICAgICAgICBfc3RhYmxlU3RhdGVQ
cmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czp1cGRhdGVCbG9ja0NvcHkuZ2V0KCksIG5pbF0pOworICAgICAg
ICBbc2VsZiBfZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNl
bnRhdGlvbkNhbGxiYWNrc107CisgICAgfQorfQorI2VuZGlmCisKICNwcmFnbWEgbWFyayBpT1Mt
c3BlY2lmaWMgbWV0aG9kcwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTY0NzAsNiAr
NjU1NSwxNyBAQCAtICh2b2lkKV9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczoo
dm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKICAgICB9CiB9CiAKKy0gKHZvaWQpX2ZpcmVQcmVz
ZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3MK
K3sKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKKyAgICBbc2Vs
ZiBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZdIHsKKyAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1NlbGZdIHsK
KyAgICAgICAgICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBk
YXRlQ2FsbGJhY2tzIGNvdW50XSkKKyAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfZmlyZVBy
ZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNr
c107CisgICAgICAgIH0pOworICAgIH1dOworfQorCiAtICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vz
c29yeVZpZXdzSW5zZXQ6KENHU2l6ZSlpbnNldAogewogICAgIFtfY3VzdG9tQ29udGVudFZpZXcg
d2ViX3NldE92ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07CkBAIC02OTIzLDg2MyAr
NzAxOSw2IEBAIEBlbmQKIAogI3VuZGVmIEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcK
IAotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nKQotCi0tICh2b2lkKV9zZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09MKWVuYWJsZWQKLXsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFtfY29udGVudFZpZXcgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOwotI2Vsc2UKLSAgICBfaW1wbC0+c2V0Q29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLS0gKE5T
RGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNl
ckludGVyZmFjZUl0ZW0KLXsKLSAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0
cmluZzpAInZhbGlkYXRpb25CdWJibGUiXSkgewotICAgICAgICBhdXRvKiB2YWxpZGF0aW9uQnVi
YmxlID0gX3BhZ2UtPnZhbGlkYXRpb25CdWJibGUoKTsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2Ug
PSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgpIDogZW1wdHlT
dHJpbmcoKTsKLSAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZh
bGlkYXRpb25CdWJibGUtPmZvbnRTaXplKCkgOiAwOwotICAgICAgICByZXR1cm4gQHsgdXNlcklu
dGVyZmFjZUl0ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2UsIEAiZm9udFNp
emUiOiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9OwotICAgIH0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2NvbnRl
bnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbV07Ci0j
ZWxzZQotICAgIHJldHVybiBuaWw7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQp
cG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
byAqKSlibG9jawotewotICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9u
SW5mb3JtYXRpb25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOwot
ICAgIGluZm9SZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7Ci0KLSAgICBbX2NvbnRlbnRW
aWV3IGRvQWZ0ZXJQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlOltjYXB0dXJlZEJsb2NrID0gbWFr
ZUJsb2NrUHRyKGJsb2NrKV0gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24gaW5mb3JtYXRpb24pIHsKLSAgICAgICAgY2FwdHVyZWRCbG9jayhbX1dLQWN0aXZhdGVkRWxl
bWVudEluZm8gYWN0aXZhdGVkRWxlbWVudEluZm9XaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb246aW5mb3JtYXRpb24gdXNlckluZm86bmlsXSk7Ci0gICAgfSBmb3JSZXF1ZXN0Omlu
Zm9SZXF1ZXN0XTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNl
bGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSlj
b21wbGV0aW9uSGFuZGxlcgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRy
aWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlv
bkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxl
Y3Rpb25SZWN0cykgewotICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXpl
KCldKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMp
Ci0gICAgICAgICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dS
ZWN0OnNlbGVjdGlvblJlY3QucmVjdCgpXV07Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhh
bmRsZXIocmVjdFZhbHVlcy5nZXQoKSk7Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlTdG9yZVNlbGVjdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlT
dG9yZVNlbGVjdGlvbl07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlv
bgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07Ci19
Ci0KLS0gKFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Ci17Ci0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlz
RnVsbFNjcmVlbl0pCi0gICAgICAgIHJldHVybiBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IHdlYlZpZXdQbGFjZWhvbGRlcl07Ci0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKENHUmVjdClfY29udGVudFZpc2libGVSZWN0Ci17Ci0g
ICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1
cnJlbnRDb250ZW50Vmlld107Ci19Ci0KLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250
ZW50c1RvVmlldzooQ0dQb2ludClwb2ludAotewotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9p
bnQ6cG9pbnQgZnJvbVZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLX0KLQotLSAoQ0dQ
b2ludClfY29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50Ci17Ci0g
ICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENv
bnRlbnRWaWV3XTsKLX0KLQotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQKLXsKLSAg
ICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpZRVNdOwotfQotCi0tICh2b2lkKWtleWJvYXJk
QWNjZXNzb3J5QmFyUHJldmlvdXMKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpO
T107Ci19Ci0KLS0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJp
bmcgdG9TdHJpbmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFw
cGx5QXV0b2NvcnJlY3Rpb246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3aXRoQ29tcGxl
dGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7Ci0gICAg
ICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClk
aXNtaXNzRm9ybUFjY2Vzc29yeVZpZXcKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURv
bmVdOwotfQotCi0tICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgotewotICAgIFtfY29udGVudFZp
ZXcgZGlzbWlzc0ZpbGVQaWNrZXJdOwotfQotCi0tICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRv
SG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlCi17Ci0gICAgW19j
b250ZW50VmlldyBzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6aG91ciBtaW51dGU6bWludXRlXTsK
LX0KLQotLSAodm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgK
LXsKLSAgICBbX2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5k
ZXhdOwotfQotCi0tIChOU1N0cmluZyAqKXNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUKLXsKLSAgICBy
ZXR1cm4gW19jb250ZW50VmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXTsKLX0KLQotLSAoTlNT
dHJpbmcgKil0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIFtfY29udGVu
dFZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopZm9y
bUlucHV0TGFiZWwKLXsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07
Ci19Ci0KLS0gKHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uCi17Ci0gICAgLy8g
Rm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRy
b2xJbnRlcmFjdGlvbgotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotfQot
Ci0tICh2b2lkKV9kaWRTaG93Q29udGV4dE1lbnUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0
byBvdmVycmlkZS4KLX0KLQotLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51Ci17Ci0gICAg
Ly8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKENHUmVjdClfdWlUZXh0Q2Fy
ZXRSZWN0Ci17Ci0gICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBu
ZWVkZWQuCi0gICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07Ci0KLSAg
ICByZXR1cm4gW1tfY29udGVudFZpZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Np
c3RhbnQuc2VsZWN0aW9uVmlldy5zZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwot
fQotCi0tIChDR1JlY3QpX2lucHV0Vmlld0JvdW5kcwotewotICAgIHJldHVybiBfaW5wdXRWaWV3
Qm91bmRzOwotfQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVj
dHMKLXsKLSAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRl
ZC4KLSAgICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKLQotICAgIHJl
dHVybiBbX2NvbnRlbnRWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c107Ci19Ci0KLS0gKE5TU3Ry
aW5nICopX3Njcm9sbGluZ1RyZWVBc1RleHQKLXsKLSAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkoKTsKLSAgICBpZiAoIWNvb3JkaW5hdG9yKQotICAgICAgICByZXR1cm4gQCIiOwot
Ci0gICAgcmV0dXJuIGNvb3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Ci19Ci0KLS0g
KE5TTnVtYmVyICopX3N0YWJsZVN0YXRlT3ZlcnJpZGUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3Nl
cyB0byBvdmVycmlkZS4KLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4
dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jawot
ewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJs
b2NrUHRyKHVwZGF0ZUJsb2NrKTsKLQotICAgIGlmIChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25V
cGRhdGVDYWxsYmFja3MpCi0gICAgICAgIFtfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVD
YWxsYmFja3MgYWRkT2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5nZXQoKV07Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5n
ZXQoKSwgbmlsXSk7Ci0gICAgICAgIFtzZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVu
ZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKLSAgICB9Ci19Ci0KLS0gKHZv
aWQpX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRp
b25DYWxsYmFja3MKLXsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2Vs
ZjsKLSAgICBbc2VsZiBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZd
IHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0
cm9uZ1NlbGZdIHsKLSAgICAgICAgICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJl
c2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkKLSAgICAgICAgICAgICAgICBbc3Ryb25n
U2VsZiBfZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRh
dGlvbkNhbGxiYWNrc107Ci0gICAgICAgIH0pOwotICAgIH1dOwotfQotCi0tIChOU0RpY3Rpb25h
cnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklE
Ci17Ci0gICAgQ0FMYXllciogbGF5ZXIgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubGF5ZXJXaXRoSURGb3JU
ZXN0aW5nKGxheWVySUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICByZXR1cm4gQHsKLSAgICAgICAgQCJib3VuZHMiIDogQHsKLSAgICAgICAgICAgIEAieCIg
OiBAKGxheWVyLmJvdW5kcy5vcmlnaW4ueCksCi0gICAgICAgICAgICBAInkiIDogQChsYXllci5i
b3VuZHMub3JpZ2luLngpLAotICAgICAgICAgICAgQCJ3aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5z
aXplLndpZHRoKSwKLSAgICAgICAgICAgIEAiaGVpZ2h0IiA6IEAobGF5ZXIuYm91bmRzLnNpemUu
aGVpZ2h0KSwKLQotICAgICAgICB9LAotICAgICAgICBAInBvc2l0aW9uIiA6IEB7Ci0gICAgICAg
ICAgICBAIngiIDogQChsYXllci5wb3NpdGlvbi54KSwKLSAgICAgICAgICAgIEAieSIgOiBAKGxh
eWVyLnBvc2l0aW9uLnkpLAotICAgICAgICB9LAotICAgICAgICBAInpQb3NpdGlvbiIgOiBAKGxh
eWVyLnpQb3NpdGlvbiksCi0gICAgICAgIEAiYW5jaG9yUG9pbnQiIDogQHsKLSAgICAgICAgICAg
IEAieCIgOiBAKGxheWVyLmFuY2hvclBvaW50LngpLAotICAgICAgICAgICAgQCJ5IiA6IEAobGF5
ZXIuYW5jaG9yUG9pbnQueSksCi0gICAgICAgIH0sCi0gICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6
IEAobGF5ZXIuYW5jaG9yUG9pbnRaKSwKLSAgICAgICAgQCJ0cmFuc2Zvcm0iIDogQHsKLSAgICAg
ICAgICAgIEAibTExIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMSksCi0gICAgICAgICAgICBAIm0x
MiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTIpLAotICAgICAgICAgICAgQCJtMTMiIDogQChsYXll
ci50cmFuc2Zvcm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIudHJhbnNmb3Jt
Lm0xNCksCi0KLSAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMSksCi0g
ICAgICAgICAgICBAIm0yMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAg
QCJtMjMiIDogQChsYXllci50cmFuc2Zvcm0ubTIzKSwKLSAgICAgICAgICAgIEAibTI0IiA6IEAo
bGF5ZXIudHJhbnNmb3JtLm0yNCksCi0KLSAgICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIudHJh
bnNmb3JtLm0zMSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzIp
LAotICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci50cmFuc2Zvcm0ubTMzKSwKLSAgICAgICAg
ICAgIEAibTM0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zNCksCi0KLSAgICAgICAgICAgIEAibTQx
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MSksCi0gICAgICAgICAgICBAIm00MiIgOiBAKGxheWVy
LnRyYW5zZm9ybS5tNDIpLAotICAgICAgICAgICAgQCJtNDMiIDogQChsYXllci50cmFuc2Zvcm0u
bTQzKSwKLSAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm00NCksCi0gICAg
ICAgIH0sCi0gICAgICAgIEAic3VibGF5ZXJUcmFuc2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAi
bTExIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTExKSwKLSAgICAgICAgICAgIEAibTEy
IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEyKSwKLSAgICAgICAgICAgIEAibTEzIiA6
IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTE0KSwKLQotICAgICAgICAgICAgQCJtMjEiIDogQChs
YXllci5zdWJsYXllclRyYW5zZm9ybS5tMjEpLAotICAgICAgICAgICAgQCJtMjIiIDogQChsYXll
ci5zdWJsYXllclRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci5z
dWJsYXllclRyYW5zZm9ybS5tMjMpLAotICAgICAgICAgICAgQCJtMjQiIDogQChsYXllci5zdWJs
YXllclRyYW5zZm9ybS5tMjQpLAotCi0gICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnN1Ymxh
eWVyVHJhbnNmb3JtLm0zMSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm0zMiksCi0gICAgICAgICAgICBAIm0zMyIgOiBAKGxheWVyLnN1YmxheWVyVHJh
bnNmb3JtLm0zMyksCi0gICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm0zNCksCi0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zv
cm0ubTQxKSwKLSAgICAgICAgICAgIEAibTQyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTQyKSwKLSAgICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQz
KSwKLSAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwK
LSAgICAgICAgfSwKLQotICAgICAgICBAImhpZGRlbiIgOiBAKGxheWVyLmhpZGRlbiksCi0gICAg
ICAgIEAiZG91YmxlU2lkZWQiIDogQChsYXllci5kb3VibGVTaWRlZCksCi0gICAgICAgIEAibWFz
a3NUb0JvdW5kcyIgOiBAKGxheWVyLm1hc2tzVG9Cb3VuZHMpLAotICAgICAgICBAImNvbnRlbnRz
U2NhbGUiIDogQChsYXllci5jb250ZW50c1NjYWxlKSwKLSAgICAgICAgQCJyYXN0ZXJpemF0aW9u
U2NhbGUiIDogQChsYXllci5yYXN0ZXJpemF0aW9uU2NhbGUpLAotICAgICAgICBAIm9wYXF1ZSIg
OiBAKGxheWVyLm9wYXF1ZSksCi0gICAgICAgIEAib3BhY2l0eSIgOiBAKGxheWVyLm9wYWNpdHkp
LAotICAgIH07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJl
OihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJS
ZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOmFjdGlvbl07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJS
ZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rp
b24KLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hv
dEZvclRlc3Rpbmc6YWN0aW9uXTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0tIChXS1BhZ2VSZWYpX3BhZ2VSZWZGb3JUcmFuc2l0aW9u
VG9XS1dlYlZpZXcKLXsKLSAgICByZXR1cm4gdG9BUEkoX3BhZ2UuZ2V0KCkpOwotfQotCi0tICh2
b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzCi17Ci0gICAgX2ltcGwtPmRp
c21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKLX0KLQotLSAo
dm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0Ci17
Ci0gICAgX2ltcGwtPnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNSZWN0VG9DR1JlY3QocmVjdCksIE5T
U2l6ZVRvQ0dTaXplKG9mZnNldCkpOwotfQotCi0tICh2b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFu
bmVyczooQ0dGbG9hdCl0b3RhbEhlaWdodE9mQmFubmVycwotewotICAgIF9pbXBsLT5zZXRUb3Rh
bEhlaWdodE9mQmFubmVycyh0b3RhbEhlaWdodE9mQmFubmVycyk7Ci19Ci0KLS0gKENHRmxvYXQp
X3RvdGFsSGVpZ2h0T2ZCYW5uZXJzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT50b3RhbEhlaWdodE9m
QmFubmVycygpOwotfQotCi0tICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5n
ZXMKLXsKLSAgICBfaW1wbC0+YmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19
Ci0KLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKLXsKLSAgICBfaW1w
bC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwotfQotCi0tICh2b2lkKV9lbmRE
ZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYwotewotICAgIF9pbXBsLT5lbmREZWZlcnJp
bmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYygpOwotfQotCi0tICh2b2lkKV9nZXN0dXJlRXZlbnRX
YXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+Z2Vz
dHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZUZyb21WaWV3T25seShldmVudCk7Ci19Ci0K
LS0gKHZvaWQpX3NldElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxF
dmVudHMKLXsKLSAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25X
aGVlbEV2ZW50cyk7Ci19Ci0KLS0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cwotewotICAg
IHJldHVybiBfaW1wbC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Ci19Ci0KLS0gKHZvaWQpX3Nl
dEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCi17Ci0gICAgX2lt
cGwtPnNldEN1c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Ci19Ci0KLS0gKHZvaWQp
X3NldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNl
dAotewotICAgIF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENv
bnRlbnRJbnNldCk7Ci19Ci0KLS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQg
KilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKLXsK
LSAgICByZXR1cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlu
bmVkU3RhdGUpOwotfQotCi0tICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNr
Oih2b2lkKF4pKENHUmVjdCkpY2FsbGJhY2sKLXsKLSAgICBfaW1wbC0+c2V0RGlkTW92ZVN3aXBl
U25hcHNob3RDYWxsYmFjayhjYWxsYmFjayk7Ci19Ci0KLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xk
ZXJWaWV3KCk7Ci19Ci0KLS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3coKTsKLX0KLQotLSAodm9pZClfZGlzYWJsZUZy
YW1lU2l6ZVVwZGF0ZXMKLXsKLSAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsK
LX0KLQotLSAodm9pZClfZW5hYmxlRnJhbWVTaXplVXBkYXRlcwotewotICAgIF9pbXBsLT5lbmFi
bGVGcmFtZVNpemVVcGRhdGVzKCk7Ci19Ci0KLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb24KLXsKLX0KLQotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uCi17Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Ci17Ci19Ci0KLS0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAq
KWZyYW1lSGFuZGxlCi17Ci0gICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJv
Y2VzcygpLndlYkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRs
ZS5fZnJhbWVJRCkpKQotICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZyYW1lTGF5b3V0
KCp3ZWJGcmFtZVByb3h5KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS0gKE5TQ29sb3IgKilf
dW5kZXJsYXlDb2xvcgotewotICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xvcigpOwotfQot
Ci0tICh2b2lkKV9zZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5kZXJsYXlDb2xvcgotewot
ICAgIF9pbXBsLT5zZXRVbmRlcmxheUNvbG9yKHVuZGVybGF5Q29sb3IpOwotfQotCi0tIChCT09M
KV9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgotewotICAgIHJldHVybiBfcGFnZSAm
JiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKLX0KLQotLSAodm9p
ZClfcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAg
IF9wYWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOwotfQotCi0tICh2b2lkKV9oYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcgotewot
ICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0KLQotLSAodm9pZClfaGFuZGxlQWNj
ZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCi17Ci0gICAg
X2ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci19Ci0KLS0gKHZvaWQp
X2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJj
bGFzc2VzLgotfQotCi0tICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eToo
Qk9PTCl2aXNpYmxlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQotCi0t
ICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzCi17Ci0gICAgX2ltcGwtPmZvcmNlUmVxdWVz
dENhbmRpZGF0ZXNGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZFJlcXVlc3RDYW5k
aWRhdGVzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOwot
fQotCi0tICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNS
YW5nZSlyZXBsYWNlbWVudFJhbmdlCi17Ci0gICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVw
bGFjZW1lbnRSYW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKLX0KLQotLSAoTlNSZWN0KV9jYW5kaWRh
dGVSZWN0Ci17Ci0gICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRh
KCkuZm9jdXNlZEVsZW1lbnRSZWN0OwotfQotCi0tIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNl
Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Ci19Ci0KLS0gKHZv
aWQpX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQotewot
ICAgIF9pbXBsLT5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOwot
fQotCi0tICh2b2lkKXZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlCi17Ci0gICAgLy8g
VGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyBbc3VwZXIgaW5pdFdpdGhDb2RlcjpdIGFuZCBbc3Vw
ZXIgaW5pdFdpdGhGcmFtZTpdLgotICAgIC8vIFRoYXQgaXMgYmVmb3JlIF9pbXBsIGlzIHJlYWR5
IHRvIGJlIHVzZWQsIHNvIGNoZWNrLiA8cmRhcjovL3Byb2JsZW0vMzk2MTEyMzY+Ci0gICAgaWYg
KCFfaW1wbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2ltcGwtPmVmZmVjdGl2ZUFwcGVhcmFu
Y2VEaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQp
aGVpZ2h0Ci17Ci0gICAgX3BhZ2UtPnNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVp
Z2h0KTsKLX0KLQotLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Ci17
Ci0gICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKLX0K
LQotLSAodm9pZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3Bh
dGNoX2Jsb2NrX3QpYWN0aW9uCi17Ci0gICAgX2ltcGwtPmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVu
ZGluZ01vdXNlRXZlbnRzKGFjdGlvbik7Ci19Ci0KLS0gKE5TTWVudSAqKV9hY3RpdmVNZW51Ci17
Ci0gICAgLy8gRklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0
ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKLSAgICAvLyBleHRlbmRlZCB0
byByZWNvZ25pemUgdGhlIHJlZ3VsYXIgY29udGV4dCBtZW51IGFzIHdlbGwuCi0gICAgcmV0dXJu
IF9pbXBsLT5kb21QYXN0ZU1lbnUoKTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQot
LSAodm9pZClfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09M
LCBCT09MLCBOU1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCi17
Ci0gICAgaWYgKCFfcGFnZSkgewotICAgICAgICBjYWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjpxdWlldF9OYU4oKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY2FsbGJhY2spOwotICAgIGF1dG8gbG9jYWxDYWxs
YmFjayA9IFdlYktpdDo6Tm93UGxheWluZ0luZm9DYWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShi
b29sIGFjdGl2ZSwgYm9vbCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmlu
ZyB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVu
aXF1ZUlkZW50aWZpZXIsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBo
YW5kbGVyKGFjdGl2ZSwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwg
ZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB9KTsKLQotICAg
IF9wYWdlLT5yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxD
YWxsYmFjaykpOwotfQotCi0tICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0
aE9yaWdpbjooQ0dQb2ludClvcmlnaW4KLXsKLSAgICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBX
ZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQob3JpZ2luKSk7Ci19Ci0KLS0gKENHRmxvYXQpX3BhZ2VT
Y2FsZQotewotICAgIHJldHVybiBfcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLS0gKHZv
aWQpX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQp
KXVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91dFdhaXRp
bmdGb3JQYWludGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09MKXdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmcpCi0gICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBhaW50QWZ0ZXJO
ZXh0Vmlld0RpZE1vdmVUb1dpbmRvdyh0cnVlKTsKLQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5
ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKLQotICAgIFJldGFpblB0cjxXS1dlYlZpZXc+
IHN0cm9uZ1NlbGYgPSBzZWxmOwotICAgIF9wYWdlLT5jYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9u
VXBkYXRlKFt1cGRhdGVCbG9ja0NvcHksIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUs
IHN0cm9uZ1NlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAg
ICBpZiAoIXVwZGF0ZUJsb2NrQ29weSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmICghd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJl
c2l6ZSAmJiBzdHJvbmdTZWxmLT5fZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6
OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgICAgICBz
dHJvbmdTZWxmLT5fY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFt1cGRhdGVC
bG9ja0NvcHldIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNl
bHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
KTsKLSNlbmRpZgotCi0gICAgICAgIHVwZGF0ZUJsb2NrQ29weSgpOwotICAgIH0pOwotfQotCi0t
IChCT09MKV9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCi17Ci0gICAgLy8gRm9y
IHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGU7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9z
ZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRpc2FibGVkCi17Ci19
Ci0KLS8vIEV4ZWN1dGUgdGhlIHN1cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0
aW9uIGZyb20gdGhlIFdlYlByb2Nlc3MuCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlv
blVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKLXsKLSAgICBbc2VsZiBfaW50ZXJu
YWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGlu
Z0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwotfQot
Ci0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9y
QW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewot
ICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJs
b2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRl
ZFJlc2l6ZTpZRVNdOwotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCi17
Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRl
QmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JBbmlt
YXRlZFJlc2l6ZTpOT107Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5hcHBlbmQo
bWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKSk7Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlXTsKLSNlbHNlCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2Rpc2Fi
bGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKLXsKLSAgICBXZWJLaXQ6
OlZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25hcHNob3RWb2xhdGls
aXR5Rm9yVGVzdGluZyh0cnVlKTsKLX0KLQotLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihO
U1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlv
bjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbgotewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENv
bW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7
Ci0gICAgICAgIGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAgICAgICAgIGNhcHR1
cmVkQ29tcGxldGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6
Tm9uZSk7Ci0gICAgfSk7Ci19Ci0KLS0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+
KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0KLQotLSAodm9pZClfc2V0VGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0
ZQotewotICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotLSAo
dm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZChe
KSgpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOwotCi0gICAgaWYg
KCFfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBleGNsdXNpb25S
dWxlczsKLSAgICBpZiAoY29uZmlndXJhdGlvbikgewotICAgICAgICBmb3IgKF9XS1RleHRNYW5p
cHVsYXRpb25FeGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlvbi5leGNsdXNpb25S
dWxlcykgewotICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhjbHVzaW9uID8gRXhj
bHVzaW9uUnVsZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGU7
Ci0gICAgICAgICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICAgICAg
ZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxl
IHsgd2tSdWxlLmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1ZSB9IH0pOwotICAg
ICAgICAgICAgZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKLSAgICAgICAgICAgICAgICBleGNs
dXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNzUnVsZSB7IHdrUnVs
ZS5jbGFzc05hbWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleGNs
dXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsgd2tS
dWxlLmVsZW1lbnROYW1lIH0gfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfcGFnZS0+c3Rh
cnRUZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQ
dHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCi0gICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsK
LSAgICAgICAgaWYgKCF3ZWFrU2VsZikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBh
dXRvIHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOwotICAgICAgICBhdXRvIGRlbGVnYXRl
ID0gW3JldGFpbmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsKLSAgICAgICAgaWYg
KCFkZWxlZ2F0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBOU011dGFibGVBcnJh
eSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNp
emUoKV07Ci0gICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKLSAgICAgICAgICAg
IGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2Nd
IGluaXRdKTsKLSAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1i
ZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICBbd2tUb2tlbiBz
ZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVk
ZWQ6dG9rZW4uaXNFeGNsdWRlZF07Ci0gICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0Ondr
VG9rZW4uZ2V0KCldOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhb
W19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5n
OjpudW1iZXIoaXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOwotICAgICAgICBb
ZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0
aW9uSXRlbTppdGVtLmdldCgpXTsKLSAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7Ci0gICAgICAgIGNhcHR1cmVkQ29t
cGxldGlvbkJsb2NrKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQo
XikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIHVzaW5nIE1hbmlwdWxh
dGlvblJlc3VsdCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25SZXN1bHQ7Ci0KLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGl0ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIp
LnRvVUludDY0KCkpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwotICAgIGZvciAoX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7Ci0gICAgICAgIGF1dG8gdG9r
ZW5JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50
b1VJbnQ2NCgpKTsKLSAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRl
bnQgfSk7Ci0gICAgfQotCi0gICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVt
SUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKLSAgICAgICAgY2Fw
dHVyZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vz
cyk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChDR1JlY3Qp
X2RyYWdDYXJldFJlY3QKLXsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHJldHVybiBf
cGFnZS0+Y3VycmVudERyYWdDYXJldFJlY3QoKTsKLSNlbHNlCi0gICAgcmV0dXJuIENHUmVjdFpl
cm87Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0
aW9uOihDR1BvaW50KWxvY2F0aW9uCi17Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVMb25n
UHJlc3NBY3Rpb25BdExvY2F0aW9uOmxvY2F0aW9uXTsKLX0KLQotLSAodm9pZClfc2ltdWxhdGVU
ZXh0RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0Ci17Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxh
dGVUZXh0RW50ZXJlZDp0ZXh0XTsKLX0KLQotLSAodm9pZClfZHluYW1pY1VzZXJJbnRlcmZhY2VU
cmFpdERpZENoYW5nZQotewotICAgIGlmICghX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBf
cGFnZS0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOwotICAgIFtzZWxmIF91cGRhdGVT
Y3JvbGxWaWV3QmFja2dyb3VuZF07Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZ
KQotCi0tIChCT09MKV9iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcKLXsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgcmV0dXJuIF9pbXBsLT5iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcoKTsKLSNlbHNl
Ci0gICAgaWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBy
ZXR1cm4gX2dlc3R1cmVDb250cm9sbGVyLT5iZWdpblNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25G
b3JUZXN0aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6
QmFjayk7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5n
Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBfaW1wbC0+Y29tcGxldGVCYWNrU3dp
cGVGb3JUZXN0aW5nKCk7Ci0jZWxzZQotICAgIGlmICghX2dlc3R1cmVDb250cm9sbGVyKQotICAg
ICAgICByZXR1cm4gTk87Ci0gICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+Y29tcGxldGVT
aW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2spOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3Nl
dERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRpbmcKLXsKLSAgICBfcGFn
ZS0+c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3RpbmcoZGVmZXJzTG9hZGluZyk7Ci19Ci0KLS0gKHZv
aWQpX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVz
dGluZzooQk9PTClyZXNvbHZlZAotewotICAgIF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVk
aWF0ZUNvbXBsZXRpb25Gb3JUZXN0aW5nID0gcmVzb2x2ZWQ7Ci19Ci0KLS0gKEJPT0wpX2hhc0lu
c3BlY3RvckZyb250ZW5kCi17Ci0gICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5oYXNJbnNwZWN0
b3JGcm9udGVuZCgpOwotfQotCi0tIChfV0tJbnNwZWN0b3IgKilfaW5zcGVjdG9yCi17Ci0gICAg
aWYgKGF1dG8qIGluc3BlY3RvciA9IF9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgcmV0dXJu
IHdyYXBwZXIoKmluc3BlY3Rvcik7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoX1dLRnJhbWVI
YW5kbGUgKilfbWFpbkZyYW1lCi17Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5G
cmFtZSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUo
ZnJhbWUtPmZyYW1lSUQoKSkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX3Byb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nCi17Ci0gICAgaWYgKF9wYWdlKQotICAg
ICAgICBfcGFnZS0+cHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKFdlYktpdDo6SXNTdXNw
ZW5zaW9uSW1taW5lbnQ6OlllcywgW10geyB9KTsKLX0KLQotLSAodm9pZClfcHJvY2Vzc0RpZFJl
c3VtZUZvclRlc3RpbmcKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdlLT5wcm9jZXNz
KCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3Rh
dGVGb3JUZXN0aW5nOihpbnQpdmFsdWUKLXsKLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBfcGFnZS0+cHJvY2VzcygpLnNldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZyhz
dGF0aWNfY2FzdDxXZWJLaXQ6OkFzc2VydGlvblN0YXRlPih2YWx1ZSkpOwotfQotCi0tIChCT09M
KV9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwotewotI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKLSAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2Vzcygp
LnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3Rp
bmcoKSA6IGZhbHNlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAo
Qk9PTClfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcKLXsKLSNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcmV0dXJuIF9wYWdlID8gX3BhZ2UtPnByb2Nl
c3MoKS5wcm9jZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nKCkgOiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0K
LS0gKHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdAotewotI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0gICAgV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCku
ZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0KCk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0tICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoo
dWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVp
bnQ2NF90KXBhZ2VJRAotewotI2lmIFVTRShTWVNURU1fUFJFVklFVykKLSAgICBpZiAoX3BhZ2Up
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3BhZ2UtPnN5c3RlbVBy
ZXZpZXdDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBwcmV2aWV3Q29udHJvbGxlci0+dHJpZ2dl
clN5c3RlbVByZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVtZW50SUQsIGRvY3Vt
ZW50SUQsIHBhZ2VJRCk7Ci0gICAgfQotI2VuZGlmCi19Ci0jZW5kaWYKLQotQGVuZAotCiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBAaW1wbGVt
ZW50YXRpb24gV0tXZWJWaWV3IChGdWxsU2NyZWVuQVBJX1ByaXZhdGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4
IDQzNTA4MGYzMjQ0NWNlOGU3ZjU2ZWU1ZGMwMDQzOTRiY2YxYWE1ZDkuLjAwY2MzMTUzMTAyMjE4
OWU0MmVlN2ZhYzkwNjcxNDVjY2FiNjVjMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1w
b3J0IDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJS2l0U1BJLmgiCkBAIC02OCwxOCArNjks
NDYgQEAgY2xhc3MgU2FmZUJyb3dzaW5nV2FybmluZzsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNs
YXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CisjaWYgUExBVEZPUk0oTUFDKQor
Y2xhc3MgV2ViVmlld0ltcGw7CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY2xh
c3MgVmlld0dlc3R1cmVDb250cm9sbGVyOworI2VuZGlmCiB9CiAKIEBjbGFzcyBXS1dlYlZpZXdD
b250ZW50UHJvdmlkZXJSZWdpc3RyeTsKIEBjbGFzcyBXS1Bhc3N3b3JkVmlldzsKIEBjbGFzcyBf
V0tGcmFtZUhhbmRsZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorQGNsYXNzIFdLU2Nyb2xs
VmlldzsKK0BjbGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworI2VuZGlmCiAKIEBp
bnRlcmZhY2UgV0tXZWJWaWV3ICgpIFdLX1dFQl9WSUVXX1BST1RPQ09MUyB7CiAKIEBwYWNrYWdl
CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IF9jb25maWd1cmF0aW9uOwot
CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFnZTsKKyAgICBXZWFrT2JqQ1B0
cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPj4gX3RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZTsKKyAgICBPcHRpb25hbDxCT09MPiBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlh
dGVDb21wbGV0aW9uRm9yVGVzdGluZzsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViS2l0OjpXZWJWaWV3SW1wbD4gX2ltcGw7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7
CisgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IF9nZXN0dXJlQ29udHJvbGxl
cjsKKyAgICBWZWN0b3I8QmxvY2tQdHI8dm9pZCAoKT4+IF92aXNpYmxlQ29udGVudFJlY3RVcGRh
dGVDYWxsYmFja3M7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgUmV0YWluUHRy
PFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI+IF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cjsKKyNlbmRpZgorCisgICAgQ0dSZWN0IF9pbnB1dFZpZXdCb3VuZHM7CisjZW5kaWYKIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04Nyw2ICsxMTYsOCBAQCBzdHJ1Y3QgUHJpbnRJ
bmZvOwogLSAodm9pZClfcHJvY2Vzc1dpbGxTd2FwOwogLSAodm9pZClfZGlkUmVsYXVuY2hQcm9j
ZXNzOwogCistIChVSVZpZXcgKilfY3VycmVudENvbnRlbnRWaWV3OworCiAtICh2b2lkKV9kaWRD
b21taXRMb2FkRm9yTWFpbkZyYW1lOwogLSAodm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25z
dCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlv
bjsKIC0gKHZvaWQpX2xheWVyVHJlZUNvbW1pdENvbXBsZXRlOwpAQCAtOTksOCArMTMwLDEwIEBA
IHN0cnVjdCBQcmludEluZm87CiAKIC0gKHZvaWQpX3Njcm9sbFRvQ29udGVudFNjcm9sbFBvc2l0
aW9uOihXZWJDb3JlOjpGbG9hdFBvaW50KXNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjooV2Vi
Q29yZTo6SW50UG9pbnQpc2Nyb2xsT3JpZ2luOwogLSAoQk9PTClfc2Nyb2xsVG9SZWN0OihXZWJD
b3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3Jp
Z2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOwor
CiAtIChkb3VibGUpX2luaXRpYWxTY2FsZUZhY3RvcjsKIC0gKGRvdWJsZSlfY29udGVudFpvb21T
Y2FsZTsKKwogLSAoZG91YmxlKV90YXJnZXRDb250ZW50Wm9vbVNjYWxlRm9yUmVjdDooY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jil0YXJnZXRSZWN0IGN1cnJlbnRTY2FsZTooZG91YmxlKWN1cnJl
bnRTY2FsZSBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihk
b3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZTsKIC0g
KHZvaWQpX3pvb21Ub0ZvY3VzUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jilmb2N1c2Vk
RWxlbWVudFJlY3Qgc2VsZWN0aW9uUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JilzZWxl
Y3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZpeGVkOihCT09MKWluc2lkZUZp
eGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVt
U2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93U2NhbGluZzooQk9P
TClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VTY3JvbGw7CiAtIChCT09MKV96
b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3Qg
bWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1h
eGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0
YW5jZTsKQEAgLTE1NiwxMyArMTg5LDEwIEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9y
ZXNldEZvY3VzUHJlc2VydmF0aW9uQ291bnQ7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgV0tQYXNzd29yZFZpZXcgKl9wYXNzd29yZFZpZXc7Ci0KLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBfaXNCYWNrZ3JvdW5kOwotCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5ICpfY29udGVudFBy
b3ZpZGVyUmVnaXN0cnk7Ci0KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tTZWxl
Y3Rpb25HcmFudWxhcml0eSBfc2VsZWN0aW9uR3JhbnVsYXJpdHk7CiAKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNCYWNrZ3JvdW5kOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBCT09MIF9hbGxvd3NEb3VibGVUYXBHZXN0dXJlczsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc3R5bHVzVGFwR2VzdHVyZVNob3VsZENyZWF0ZUVk
aXRhYmxlSW1hZ2U7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhdmVT
ZXRPYnNjdXJlZEluc2V0czsKQEAgLTE3Miw2ICsyMDIsNyBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwog
CiAtIChCT09MKV9lZmZlY3RpdmVBcHBlYXJhbmNlSXNEYXJrOwogLSAoQk9PTClfZWZmZWN0aXZl
VXNlckludGVyZmFjZUxldmVsSXNFbGV2YXRlZDsKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpAQCAtMTgwLDYgKzIxMSw4
IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnZhbGlkYXRlRGF0YUZvckF0dGFj
aG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudDsKICNlbmRpZgogCistICh2b2lkKV9p
bnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRh
dGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9y
UGFpbnRpbmcgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2Fp
dGluZ0ZvckFuaW1hdGVkUmVzaXplOworCiAtICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2Fybmlu
ZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nJil3YXJuaW5nIGNvbXBsZXRpb25I
YW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVu
c2FmZUxvYWQsIFVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKV9jbGVhclNh
ZmVCcm93c2luZ1dhcm5pbmc7CiAtICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmdJZkZv
ck1haW5GcmFtZU5hdmlnYXRpb247CkBAIC0xOTAsNyArMjIzLDE2IEBAIHN0cnVjdCBQcmludElu
Zm87CiAtIChXZWJLaXQ6OldlYlBhZ2VQcm94eSopX3BhZ2U7CiAKICNpZiBQTEFURk9STShNQUMp
CisKKy0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9jb21w
bGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKKworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNF
dmVudCAqKWV2ZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistICh2b2lk
KWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2Vt
ZW50UmFuZ2U7CiAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2VzczsKKwogI2VuZGlmCiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oCmluZGV4IDc4NGI2YjFlMjEwYmFjMzdmOWUwY2FhZTVlNjMyMzQ5NDVjNDkx
N2QuLjkzYmRkMTFmYzg5NzI2NjY4OWEyMWU4NmM3NzM5NWMyOGU2NTg0Y2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApA
QCAtMjEyLDYgKzIxMiwxMiBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVj
dEVkZ2UpIHsKIC0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0
cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4y
KSk7CiAtICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6KE5TVVJMICopdXJs
IHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRh
aWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
KF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQu
NCksIGlvcygxMi4yKSk7CiAKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRl
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
KSwgaW9zKDEwLjApKTsKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0
aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwgaW9zKDEwLjMpKTsKKyNpZiBUQVJHRVRfT1NfSVBI
T05FCistICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0
Y2hfYmxvY2tfdCl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CisjZW5k
aWYKKwogLSAodm9pZClfaXNKSVRFbmFibGVkOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5k
bGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAtICh2b2lk
KV9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAKQEAgLTI3Nyw2ICsy
ODMsOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldERyYWdJbnRlcmFjdGlvblBvbGljeTopIF9X
S0RyYWdJbnRlcmFjdGlvblBvbGljeSBfZHJhZ0ludGVyYWN0aW9uUG9saWN5IFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDExLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBf
c2hvdWxkQXZvaWRSZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2UgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTMuMCkpOwogCistICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9z
aXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3Rp
dmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CisK
IC0gKHZvaWQpX2JlZ2luSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZTsKIC0gKHZvaWQp
X2VuZEludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2U7CiAtICh2b2lkKV9oaWRlQ29udGVu
dFVudGlsTmV4dFVwZGF0ZTsKQEAgLTMxMCw3ICszMTgsMTEgQEAgdHlwZWRlZiBOU19PUFRJT05T
KE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0
U3BlYWtTZWxlY3Rpb25Db250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTEuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlldyAq
X3NhZmVCcm93c2luZ1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9z
KDEyLjIpKTsKKworLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTIuMCkpOworCiAjZWxzZQorCiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TVmlldyAqX3NhZmVCcm93c2luZ1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBfV0tSZWN0RWRnZSBfcGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7CkBAIC0zNTYsNiArMzY4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIs
IF9XS1JlY3RFZGdlKSB7CiAKIC0gKHZvaWQpX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5TV2lu
ZG93ICopdGFyZ2V0V2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpKTsKIAorQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOikg
Qk9PTCBfdXNlU3lzdGVtQXBwZWFyYW5jZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6
KSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUgX292ZXJsYXlTY3JvbGxiYXJTdHlsZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIEBwcm9wZXJ0eSAoc3Ryb25nLCBub25hdG9taWMs
IHNldHRlcj1fc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6KSBOU1ZpZXcgKl9pbnNwZWN0b3JB
dHRhY2htZW50VmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIApAQCAtNDUx
LDE0MCArNDY0LDQgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdl
KSB7CiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8VUlSZXNwb25kZXJTdGFuZGFyZEVkaXRBY3Rp
b25zPgogQGVuZAogCi0jZW5kaWYKLQotQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZykK
LQotLSAodm9pZClfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzoo
Qk9PTCllbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7Ci0tIChOU0RpY3Rpb25hcnkgKilfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVt
OihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTIuMyksIGlvcygxMC4zKSk7Ci0KLSNpZiBUQVJHRVRfT1NfSVBIT05FCi0KLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9jb250ZW50VmlzaWJsZVJlY3QgV0tfQVBJX0FW
QUlMQUJMRShpb3MoMTAuMCkpOwotLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbUNvbnRlbnRz
VG9WaWV3OihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKLS0gKENH
UG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludCBXS19B
UElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0KLS0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJO
ZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKLS0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3Nv
cnlCYXJQcmV2aW91cyBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0tICh2b2lkKWRpc21p
c3NGb3JtQWNjZXNzb3J5VmlldyBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lk
KV9kaXNtaXNzRmlsZVBpY2tlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7Ci0tICh2b2lk
KXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6KGludClyb3dJbmRleCBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4zKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5n
ICp0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnNlbGVjdEZvcm1Qb3Bv
dmVyVGl0bGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqZm9ybUlucHV0TGFiZWwgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTIuMCkpOwotLSAodm9pZClzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6KE5TSW50ZWdlcilo
b3VyIG1pbnV0ZTooTlNJbnRlZ2VyKW1pbnV0ZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7
Ci0KLS0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9T
dHJpbmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwot
Ci0tICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbiBXS19BUElfQVZBSUxBQkxF
KGlvcygxMC4zKSk7Ci0tICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi0tICh2b2lkKV9kaWRTaG93Q29udGV4dE1lbnUgV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxl
UHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9ibG9ja190KXVwZGF0ZUJsb2NrIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBH
ZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19J
T1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxOU1Zh
bHVlICo+ICpfdWlUZXh0U2VsZWN0aW9uUmVjdHMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX3VpVGV4dENhcmV0UmVj
dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIENHUmVjdCBfaW5wdXRWaWV3Qm91bmRzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMp
KTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqX3Njcm9sbGlu
Z1RyZWVBc1RleHQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TTnVtYmVyICpfc3RhYmxlU3RhdGVPdmVycmlkZSBXS19BUElf
QVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9wcm9wZXJ0aWVzT2ZM
YXllcldpdGhJRDoodW5zaWduZWQgbG9uZyBsb25nKWxheWVySUQgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTEuMCkpOwotLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihD
R1BvaW50KWxvY2F0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLS0gKHZvaWQpX3Np
bXVsYXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygx
Mi4wKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9kcmFnQ2Fy
ZXRSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLQotLSAodm9pZClfZG9BZnRlclJl
Y2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOihkaXNwYXRjaF9ibG9ja190KWFjdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7Ci0KLS0gKHZvaWQpX3JlcXVlc3RBY3RpdmF0
ZWRFbGVtZW50QXRQb3NpdGlvbjooQ0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZv
aWQgKF4pKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopKWJsb2NrIFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDExLjApKTsKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rp
b25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxl
dGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOwotLSAodm9pZClfYWNjZXNz
aWJpbGl0eVN0b3JlU2VsZWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKLS0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4z
KSk7Ci0tIChVSVZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxB
QkxFKGlvcygxMi4wKSk7Ci0KLS0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uT25F
bGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2NF90KWRvY3VtZW50SUQg
cGFnZToodWludDY0X3QpcGFnZUlEIFdLX0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsK
LQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9jb250ZW50Vmlld0lzRmly
c3RSZXNwb25kZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMikpOwotI2Vsc2UKLS0gKHZvaWQp
X2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJlY3QgYW5kU2Nyb2xsQnk6
KE5TU2l6ZSlvZmZzZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lk
KV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7Ci0tICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZW5kRGVmZXJyaW5nVmll
d0luV2luZG93Q2hhbmdlc1N5bmMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0t
ICh2b2lkKV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZl
bnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXRDdXN0b21T
d2lwZVZpZXdzOihOU0FycmF5ICopY3VzdG9tU3dpcGVWaWV3cyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5z
ZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOwotLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdyBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2Rpc2FibGVGcmFtZVNpemVV
cGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZW5hYmxl
RnJhbWVTaXplVXBkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZv
aWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24g
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9jb21wbGV0ZUltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0g
KEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxl
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAoQk9PTClfdHJ5VG9Td2lwZVdp
dGhFdmVudDooTlNFdmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3Jp
bmdQaW5uZWRTdGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQp
X3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0KSljYWxsYmFj
ayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOikgQ0dGbG9hdCBfdG90YWxIZWlnaHRP
ZkJhbm5lcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRVbmRlcmxheUNvbG9yOikgTlNDb2xvciAqX3VuZGVy
bGF5Q29sb3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czopIEJP
T0wgX2lnbm9yZXNOb25XaGVlbEV2ZW50cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tQYWdlUmVmIF9wYWdlUmVmRm9y
VHJhbnNpdGlvblRvV0tXZWJWaWV3ICBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzQWN0aXZlVmlkZW9Gb3JD
b250cm9sc01hbmFnZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMikpOwotLSAodm9pZClf
cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4z
KSk7Ci0tICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQp
X2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOihOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2RpZEhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9p
ZClfZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMp
KTsKLS0gKHZvaWQpX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKXZpc2li
bGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxh
Y2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5nZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEyLjMpKTsKLS0gKE5TUmVjdClfY2FuZGlkYXRlUmVjdCBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9
X3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KSBCT09MIF91c2VTeXN0ZW1BcHBlYXJhbmNlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNNZW51ICpfYWN0aXZlTWVudSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
KTsKLQotLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0
OihpbnQpaGVpZ2h0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClf
ZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3Qp
YWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCkpOwotI2VuZGlmCi0KLS0gKHZv
aWQpX3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9P
TCwgTlNTdHJpbmcqLCBkb3VibGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjayBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwotCi0tICh2b2lkKV9zZXRQYWdl
U2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW4gV0tfQVBJX0FW
QUlMQUJMRShpb3MoMTAuMykpOwotLSAoQ0dGbG9hdClfcGFnZVNjYWxlIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEwLjMpKTsKLQotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6
KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIp
LCBpb3MoMTAuMCkpOwotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRo
b3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplRm9yVGVzdGluZzoodm9pZCAoXikodm9pZCkpdXBk
YXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7Ci0tICh2
b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRp
bmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTIuMyksIGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyTmV4dFZpc2libGVDb250ZW50UmVj
dFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMyksIGlvcygxMS4wKSk7Ci0KLS0gKHZvaWQpX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBz
aG90Vm9sYXRpbGl0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwg
aW9zKDEwLjMpKTsKLS0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21t
YW5kIGFyZ3VtZW50OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJP
T0wpKWNvbXBsZXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMp
KTsKLQotLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotCi0tIChCT09MKV9iZWdpbkJhY2tTd2lwZUZvclRl
c3Rpbmc7Ci0tIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3Rpbmc7Ci0tICh2b2lkKV9z
ZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZlcnNMb2FkaW5nOwotCi0tICh2b2lk
KV9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRlc3Rp
bmc6KEJPT0wpcmVzb2x2ZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNJbnNwZWN0
b3JGcm9udGVuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tJbnNwZWN0b3IgKl9pbnNwZWN0b3Ig
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgX1dLRnJhbWVIYW5kbGUgKl9tYWluRnJhbWUgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOikgaWQgPF9XS1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
c3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0
aW9uQ29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lk
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRp
b246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJP
T0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzopIEJPT0wgX3Njcm9sbGlu
Z1VwZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7Ci0KLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JU
ZXN0aW5nOwotLSAodm9pZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3Rpbmc7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0
aXZpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc1Nl
cnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zZXRBc3NlcnRp
b25TdGF0ZUZvclRlc3Rpbmc6KGludClzdGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotCi1AZW5kCisjZW5kaWYgLy8gVEFSR0VUX09TX0lQ
SE9ORQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld1Rlc3RpbmcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdUZXN0aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZlY2JlYzA2ZTYxYmE2NmE3ZjJjNDVlZTViYWMzMjRk
MTdiOTY0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdUZXN0aW5nLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nSU9TLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3VGVzdGluZ01hYy5oPgorCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0aW5nKQor
CistICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjooQ0dQb2lu
dClvcmlnaW47CistIChDR0Zsb2F0KV9wYWdlU2NhbGU7CisKKy0gKHZvaWQpX3NldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZCBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAoTlNEaWN0aW9u
YXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJm
YWNlSXRlbSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOworCist
ICh2b2lkKV9yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvOih2b2lkKF4pKEJPT0ws
IEJPT0wsIE5TU3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5TSW50ZWdlcikpY2FsbGJhY2sgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKKworLSAodm9pZClfZG9B
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
Rm9yVGVzdGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNCksIGlvcygxMi4wKSk7CistICh2b2lkKV9kb0FmdGVyTmV4dFZpc2libGVDb250
ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CisKKy0gKHZvaWQpX2Rpc2FibGVCYWNrRm9yd2Fy
ZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
Mi4zKSwgaW9zKDEwLjMpKTsKKy0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcg
Kiljb21tYW5kIGFyZ3VtZW50OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQg
KF4pKEJPT0wpKWNvbXBsZXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9z
KDExLjMpKTsKKworLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOworCistIChCT09MKV9iZWdpbkJhY2tTd2lw
ZUZvclRlc3Rpbmc7CistIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3Rpbmc7CistICh2
b2lkKV9zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZlcnNMb2FkaW5nOworCist
ICh2b2lkKV9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZv
clRlc3Rpbmc6KEJPT0wpcmVzb2x2ZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwg
aW9zKDEyLjIpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNJ
bnNwZWN0b3JGcm9udGVuZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIu
MikpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tJbnNwZWN0b3IgKl9pbnNw
ZWN0b3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLRnJhbWVIYW5kbGUgKl9tYWluRnJhbWUgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKKworQHByb3BlcnR5IChu
b25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOikgaWQg
PF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAo
dm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uQ29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9u
Oih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5p
cHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lk
KF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQHByb3BlcnR5IChub25hdG9taWMs
IHNldHRlcj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzopIEJPT0wgX3Nj
cm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNSksIGlvcygxMy4wKSk7CisKKy0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nOworLSAodm9pZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3Rpbmc7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wg
X2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zZXRB
c3NlcnRpb25TdGF0ZUZvclRlc3Rpbmc6KGludClzdGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCitAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU4NmYyNDJlNDI3NGU4ZjYxYmU2NjExY2I4MjMxNzQ5YTNmMzgyOTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGlu
Zy5tbQpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJXZWJQYWdlUHJv
eHkuaCIKKyNpbXBvcnQgIldlYlZpZXdJbXBsLmgiCisjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUlu
dGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dL
VGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1
bGUuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgiCisjaW1wb3J0ICJfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKKyNpbXBvcnQgIlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2Vy
LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5
LmgiCisjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
VmFsaWRhdGlvbkJ1YmJsZS5oPgorCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVGVz
dGluZykKKworLSAodm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0KXNjYWxlIHdpdGhPcmlnaW46
KENHUG9pbnQpb3JpZ2luCit7CisgICAgX3BhZ2UtPnNjYWxlUGFnZShzY2FsZSwgV2ViQ29yZTo6
cm91bmRlZEludFBvaW50KG9yaWdpbikpOworfQorCistIChDR0Zsb2F0KV9wYWdlU2NhbGUKK3sK
KyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOworfQorCistICh2b2lkKV9zZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09MKWVuYWJsZWQKK3sK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFtfY29udGVudFZpZXcgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOworI2Vsc2UKKyAgICBfaW1wbC0+c2V0Q29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOworI2VuZGlmCit9CisKKy0gKE5T
RGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNl
ckludGVyZmFjZUl0ZW0KK3sKKyAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0
cmluZzpAInZhbGlkYXRpb25CdWJibGUiXSkgeworICAgICAgICBhdXRvKiB2YWxpZGF0aW9uQnVi
YmxlID0gX3BhZ2UtPnZhbGlkYXRpb25CdWJibGUoKTsKKyAgICAgICAgU3RyaW5nIG1lc3NhZ2Ug
PSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgpIDogZW1wdHlT
dHJpbmcoKTsKKyAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZh
bGlkYXRpb25CdWJibGUtPmZvbnRTaXplKCkgOiAwOworICAgICAgICByZXR1cm4gQHsgdXNlcklu
dGVyZmFjZUl0ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2UsIEAiZm9udFNp
emUiOiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9OworICAgIH0KKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2NvbnRl
bnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbV07Cisj
ZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKworLSAodm9pZClfcmVxdWVzdEFjdGl2
ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0cmluZyosIGRv
dWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCit7CisgICAgaWYgKCFfcGFnZSkgewor
ICAgICAgICBjYWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSwg
MCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY2FsbGJhY2spOworICAgIGF1dG8gbG9jYWxDYWxsYmFjayA9IFdlYktpdDo6Tm93UGxh
eWluZ0luZm9DYWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShib29sIGFjdGl2ZSwgYm9vbCByZWdp
c3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmluZyB0aXRsZSwgZG91YmxlIGR1cmF0
aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlkZW50aWZpZXIsIFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAgICBoYW5kbGVyKGFjdGl2ZSwgcmVnaXN0
ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1l
LCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB9KTsKKworICAgIF9wYWdlLT5yZXF1ZXN0QWN0aXZl
Tm93UGxheWluZ1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxDYWxsYmFjaykpOworfQorCistIChC
T09MKV9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCit7CisgICAgLy8gRm9yIHN1
YmNsYXNzZXMgdG8gb3ZlcnJpZGU7CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKV9zZXRT
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRpc2FibGVkCit7Cit9CisK
Ky0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JB
bmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCit7Cisg
ICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxv
Y2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplOllFU107Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworeworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5hcHBlbmQobWFr
ZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKSk7CisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlXTsKKyNlbHNlCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOworI2VuZGlmCit9CisKKy0gKHZvaWQpX2Rpc2FibGVC
YWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKK3sKKyAgICBXZWJLaXQ6OlZp
ZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5
Rm9yVGVzdGluZyh0cnVlKTsKK30KKworLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0
cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoo
dm9pZCAoXikoQk9PTCkpY29tcGxldGlvbgoreworICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1h
bmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Cisg
ICAgICAgIGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKKyAgICAgICAgICAgIGNhcHR1cmVk
Q29tcGxldGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9u
ZSk7CisgICAgfSk7Cit9CisKKy0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KV90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKK30KKworLSAodm9pZClfc2V0VGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQor
eworICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9p
ZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1
bGF0aW9uQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgp
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOworCisgICAgaWYgKCFf
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgeworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBleGNsdXNpb25SdWxl
czsKKyAgICBpZiAoY29uZmlndXJhdGlvbikgeworICAgICAgICBmb3IgKF9XS1RleHRNYW5pcHVs
YXRpb25FeGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlvbi5leGNsdXNpb25SdWxl
cykgeworICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhjbHVzaW9uID8gRXhjbHVz
aW9uUnVsZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGU7Cisg
ICAgICAgICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCisgICAgICAgICAgICAgICAgZXhj
bHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxlIHsg
d2tSdWxlLmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1ZSB9IH0pOworICAgICAg
ICAgICAgZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKKyAgICAgICAgICAgICAgICBleGNsdXNp
b25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNzUnVsZSB7IHdrUnVsZS5j
bGFzc05hbWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBleGNsdXNp
b25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsgd2tSdWxl
LmVsZW1lbnROYW1lIH0gfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfcGFnZS0+c3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQdHI8
V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAg
ICAgICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
IHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBhdXRvIGRlbGVnYXRlID0g
W3JldGFpbmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsKKyAgICAgICAgaWYgKCFk
ZWxlZ2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOU011dGFibGVBcnJheSAq
d2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUo
KV07CisgICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKKyAgICAgICAgICAgIGF1
dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGlu
aXRdKTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIo
dG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRD
b250ZW50OnRva2VuLmNvbnRlbnRdOworICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6
dG9rZW4uaXNFeGNsdWRlZF07CisgICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9r
ZW4uZ2V0KCldOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpu
dW1iZXIoaXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOworICAgICAgICBbZGVs
ZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9u
SXRlbTppdGVtLmdldCgpXTsKKyAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxl
dGlvbkJsb2NrKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxh
dGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXiko
Qk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIHVzaW5nIE1hbmlwdWxhdGlv
blJlc3VsdCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25SZXN1bHQ7CisKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGl0ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRv
VUludDY0KCkpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8gdG9rZW5J
RCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJ
bnQ2NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQg
fSk7CisgICAgfQorCisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQs
IHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRp
b25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKKyAgICAgICAgY2FwdHVy
ZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7
CisgICAgfSk7Cit9CisKKy0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZworeworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPmJlZ2luQmFja1N3aXBlRm9yVGVzdGlu
ZygpOworI2Vsc2UKKyAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
IE5POworICAgIHJldHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmJlZ2luU2ltdWxhdGVkU3dpcGVJ
bkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBl
RGlyZWN0aW9uOjpCYWNrKTsKKyNlbmRpZgorfQorCistIChCT09MKV9jb21wbGV0ZUJhY2tTd2lw
ZUZvclRlc3RpbmcKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIF9pbXBsLT5jb21w
bGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoKTsKKyNlbHNlCisgICAgaWYgKCFfZ2VzdHVyZUNvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2dlc3R1cmVDb250cm9sbGVy
LT5jb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFdlYktpdDo6Vmll
d0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7CisjZW5kaWYKK30KKwor
LSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZwor
eworICAgIF9wYWdlLT5zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZyhkZWZlcnNMb2FkaW5nKTsK
K30KKworLSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29s
dXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVkCit7CisgICAgX3Jlc29sdXRpb25Gb3JTaGFy
ZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3RpbmcgPSByZXNvbHZlZDsKK30KKworLSAo
Qk9PTClfaGFzSW5zcGVjdG9yRnJvbnRlbmQKK3sKKyAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2Ut
Pmhhc0luc3BlY3RvckZyb250ZW5kKCk7Cit9CisKKy0gKF9XS0luc3BlY3RvciAqKV9pbnNwZWN0
b3IKK3sKKyAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gX3BhZ2UtPmluc3BlY3RvcigpKQorICAg
ICAgICByZXR1cm4gd3JhcHBlcigqaW5zcGVjdG9yKTsKKyAgICByZXR1cm4gbmlsOworfQorCist
IChfV0tGcmFtZUhhbmRsZSAqKV9tYWluRnJhbWUKK3sKKyAgICBpZiAoYXV0byogZnJhbWUgPSBf
cGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6RnJhbWVIYW5k
bGU6OmNyZWF0ZShmcmFtZS0+ZnJhbWVJRCgpKSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
dm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcKK3sKKyAgICBpZiAo
X3BhZ2UpCisgICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoV2Vi
S2l0OjpJc1N1c3BlbnNpb25JbW1pbmVudDo6WWVzLCBbXSB7IH0pOworfQorCistICh2b2lkKV9w
cm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZworeworICAgIGlmIChfcGFnZSkKKyAgICAgICAgX3Bh
Z2UtPnByb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zZXRB
c3NlcnRpb25TdGF0ZUZvclRlc3Rpbmc6KGludCl2YWx1ZQoreworICAgIGlmICghX3BhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIF9wYWdlLT5wcm9jZXNzKCkuc2V0QXNzZXJ0aW9uU3RhdGVG
b3JUZXN0aW5nKHN0YXRpY19jYXN0PFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU+KHZhbHVlKSk7Cit9
CisKKy0gKEJPT0wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5n
Cit7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIHJldHVybiBfcGFnZSA/IF9wYWdl
LT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2
aXR5Rm9yVGVzdGluZygpIDogZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCistIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZworeworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICByZXR1cm4gX3BhZ2UgPyBf
cGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRB
Y3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKworLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0Cit7CisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyAgICBXZWJLaXQ6OlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpz
aW5nbGV0b24oKS5kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QoKTsKKyNlbmRpZgorfQorCitAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rl
c3RpbmdJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVz
dGluZ0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyNGViOWNlYTk4MmUxMzRmNWQzZjI4N2M5YjAwMTYzOWYy
MWQ1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9z
L1dLV2ViVmlld1Rlc3RpbmdJT1MuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgor
CisjaWYgVEFSR0VUX09TX0lQSE9ORQorCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0aW5n
SU9TKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfY29udGVudFZp
c2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNTdHJpbmcgKnRleHRDb250ZW50VHlwZUZvclRlc3RpbmcgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTIuMCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U1N0cmluZyAqc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4w
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpmb3JtSW5wdXRM
YWJlbCBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TQXJyYXk8TlNWYWx1ZSAqPiAqX3VpVGV4dFNlbGVjdGlvblJlY3RzIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Q0dSZWN0IF91aVRleHRDYXJldFJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2lucHV0Vmlld0JvdW5kcyBXS19B
UElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TU3RyaW5nICpfc2Nyb2xsaW5nVHJlZUFzVGV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4z
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTnVtYmVyICpfc3RhYmxlU3Rh
dGVPdmVycmlkZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIENHUmVjdCBfZHJhZ0NhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4wKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2NvbnRlbnRW
aWV3SXNGaXJzdFJlc3BvbmRlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CisKKy0gKENH
UG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludCBXS19B
UElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmll
d1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwor
CistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygx
MC4wKSk7CistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMCkpOworLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXcgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTAuMykpOworLSAodm9pZClfZGlzbWlzc0ZpbGVQaWNrZXIgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTMuMCkpOworLSAodm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2Vy
Um93OihpbnQpcm93SW5kZXggV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworCistICh2b2lk
KXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVn
ZXIpbWludXRlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKKworLSAodm9pZClhcHBseUF1
dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0b1N0cmluZzooTlNTdHJpbmcgKilv
bGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CisKKy0gKHZvaWQpZGlkU3RhcnRG
b3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKy0gKHZv
aWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4z
KSk7CisKKy0gKHZvaWQpX2RpZFNob3dDb250ZXh0TWVudSBXS19BUElfQVZBSUxBQkxFKGlvcygx
MC4zKSk7CistICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnUgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTAuMykpOworLSAodm9pZClfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6KGRp
c3BhdGNoX2Jsb2NrX3QpYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsK
KworLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25lZCBs
b25nIGxvbmcpbGF5ZXJJRCBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CistICh2b2lkKV9z
aW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24gV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTEuMCkpOworLSAodm9pZClfc2ltdWxhdGVUZXh0RW50ZXJlZDooTlNT
dHJpbmcgKil0ZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKKworLSAodm9pZClfZG9B
ZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOihkaXNwYXRjaF9ibG9ja190
KWFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7CisKKy0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJh
eTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTEuMykpOworLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjMpKTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7CisKKy0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1Q
cmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2
NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlEIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KFdLX0lPU19UQkEpKTsKKworQGVuZAorCisjZW5kaWYgLy8gVEFSR0VUX09TX0lQSE9ORQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5n
SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5n
SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM4YjU0NjIwY2Y4YTE2Y2U1MDdjNDZmZGE0MWZhNWUwOTQ3N2Nj
YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dL
V2ViVmlld1Rlc3RpbmdJT1MubW0KQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ0lPUy5oIgorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgor
I2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgorI2ltcG9ydCAiX1dL
QWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIgorCitAaW1wbGVtZW50YXRpb24gV0tXZWJW
aWV3IChXS1Rlc3RpbmdJT1MpCisKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0
cykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5
UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0Om9mZnNldCB3aXRoVGV4dDp0ZXh0IGNvbXBs
ZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYg
c2VsZWN0aW9uUmVjdHMpIHsKKyAgICAgICAgaWYgKCFjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVy
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHJlY3RWYWx1ZXMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VsZWN0aW9uUmVjdHMu
c2l6ZSgpXSk7CisgICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJl
Y3RzKQorICAgICAgICAgICAgW3JlY3RWYWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0
aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV1dOworICAgICAgICBjYXB0dXJlZENvbXBsZXRp
b25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0KCkpOworICAgIH1dOworfQorCistICh2b2lkKV9hY2Nl
c3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmls
aXR5U3RvcmVTZWxlY3Rpb25dOworfQorCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxl
Y3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25d
OworfQorCistIChDR1JlY3QpX2NvbnRlbnRWaXNpYmxlUmVjdAoreworICAgIHJldHVybiBbc2Vs
ZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZp
ZXddOworfQorCistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6KENH
UG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IGZyb21W
aWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Cit9CisKKy0gKENHUG9pbnQpX2NvbnZlcnRQ
b2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludAoreworICAgIHJldHVybiBbc2Vs
ZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Cit9
CisKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0Cit7CisgICAgW19jb250ZW50Vmll
dyBhY2Nlc3NvcnlUYWI6WUVTXTsKK30KKworLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhclBy
ZXZpb3VzCit7CisgICAgW19jb250ZW50VmlldyBhY2Nlc3NvcnlUYWI6Tk9dOworfQorCistICh2
b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5nIHRvU3RyaW5nOihO
U1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW19jb250ZW50VmlldyBhcHBseUF1dG9jb3JyZWN0
aW9uOm5ld1N0cmluZyB0b1N0cmluZzpvbGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOltj
YXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0gKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0cykgeworICAgICAgICBjYXB0dXJlZENv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgfV07Cit9CisKKy0gKHZvaWQpZGlzbWlzc0Zvcm1BY2Nl
c3NvcnlWaWV3Cit7CisgICAgW19jb250ZW50VmlldyBhY2Nlc3NvcnlEb25lXTsKK30KKworLSAo
dm9pZClfZGlzbWlzc0ZpbGVQaWNrZXIKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGRpc21pc3NGaWxl
UGlja2VyXTsKK30KKworLSAodm9pZClzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6KE5TSW50ZWdl
cilob3VyIG1pbnV0ZTooTlNJbnRlZ2VyKW1pbnV0ZQoreworICAgIFtfY29udGVudFZpZXcgc2V0
VGltZVBpY2tlclZhbHVlVG9Ib3VyOmhvdXIgbWludXRlOm1pbnV0ZV07Cit9CisKKy0gKHZvaWQp
c2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4Cit7CisgICAgW19jb250
ZW50VmlldyBzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OnJvd0luZGV4XTsKK30KKworLSAo
TlNTdHJpbmcgKilzZWxlY3RGb3JtUG9wb3ZlclRpdGxlCit7CisgICAgcmV0dXJuIFtfY29udGVu
dFZpZXcgc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZV07Cit9CisKKy0gKE5TU3RyaW5nICopdGV4dENv
bnRlbnRUeXBlRm9yVGVzdGluZworeworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IHRleHRDb250
ZW50VHlwZUZvclRlc3RpbmddOworfQorCistIChOU1N0cmluZyAqKWZvcm1JbnB1dExhYmVsCit7
CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgZm9ybUlucHV0TGFiZWxdOworfQorCistICh2b2lk
KWRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbgoreworICAgIC8vIEZvciBzdWJjbGFzc2Vz
IHRvIG92ZXJyaWRlLgorfQorCistICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb24K
K3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KK30KKworLSAodm9pZClfZGlk
U2hvd0NvbnRleHRNZW51Cit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCit9
CisKKy0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudQoreworICAgIC8vIEZvciBzdWJjbGFz
c2VzIHRvIG92ZXJyaWRlLgorfQorCistIChDR1JlY3QpX3VpVGV4dENhcmV0UmVjdAoreworICAg
IC8vIEZvcmNlIHRoZSBzZWxlY3Rpb24gdmlldyB0byB1cGRhdGUgaWYgbmVlZGVkLgorICAgIFtf
Y29udGVudFZpZXcgX3VwZGF0ZUNoYW5nZWRTZWxlY3Rpb25dOworCisgICAgcmV0dXJuIFtbX2Nv
bnRlbnRWaWV3IHZhbHVlRm9yS2V5UGF0aDpAImludGVyYWN0aW9uQXNzaXN0YW50LnNlbGVjdGlv
blZpZXcuc2VsZWN0aW9uLmNhcmV0UmVjdCJdIENHUmVjdFZhbHVlXTsKK30KKworLSAoQ0dSZWN0
KV9pbnB1dFZpZXdCb3VuZHMKK3sKKyAgICByZXR1cm4gX2lucHV0Vmlld0JvdW5kczsKK30KKwor
LSAoTlNBcnJheTxOU1ZhbHVlICo+ICopX3VpVGV4dFNlbGVjdGlvblJlY3RzCit7CisgICAgLy8g
Rm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCisgICAgW19jb250
ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4gW19jb250ZW50
VmlldyBfdWlUZXh0U2VsZWN0aW9uUmVjdHNdOworfQorCistIChOU1N0cmluZyAqKV9zY3JvbGxp
bmdUcmVlQXNUZXh0Cit7CisgICAgV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7Cisg
ICAgaWYgKCFjb29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuIEAiIjsKKworICAgIHJldHVybiBj
b29yZGluYXRvci0+c2Nyb2xsaW5nVHJlZUFzVGV4dCgpOworfQorCistIChOU051bWJlciAqKV9z
dGFibGVTdGF0ZU92ZXJyaWRlCit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUu
CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxh
eWVyV2l0aElEOih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRAoreworICAgIENBTGF5ZXIqIGxh
eWVyID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Pigq
X3BhZ2UtPmRyYXdpbmdBcmVhKCkpLmxheWVyV2l0aElERm9yVGVzdGluZyhsYXllcklEKTsKKyAg
ICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIEB7CisgICAg
ICAgIEAiYm91bmRzIiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5ib3VuZHMub3Jp
Z2luLngpLAorICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYm91bmRzLm9yaWdpbi54KSwKKyAg
ICAgICAgICAgIEAid2lkdGgiIDogQChsYXllci5ib3VuZHMuc2l6ZS53aWR0aCksCisgICAgICAg
ICAgICBAImhlaWdodCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLmhlaWdodCksCisKKyAgICAgICAg
fSwKKyAgICAgICAgQCJwb3NpdGlvbiIgOiBAeworICAgICAgICAgICAgQCJ4IiA6IEAobGF5ZXIu
cG9zaXRpb24ueCksCisgICAgICAgICAgICBAInkiIDogQChsYXllci5wb3NpdGlvbi55KSwKKyAg
ICAgICAgfSwKKyAgICAgICAgQCJ6UG9zaXRpb24iIDogQChsYXllci56UG9zaXRpb24pLAorICAg
ICAgICBAImFuY2hvclBvaW50IiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5hbmNo
b3JQb2ludC54KSwKKyAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLmFuY2hvclBvaW50LnkpLAor
ICAgICAgICB9LAorICAgICAgICBAImFuY2hvclBvaW50WiIgOiBAKGxheWVyLmFuY2hvclBvaW50
WiksCisgICAgICAgIEAidHJhbnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxh
eWVyLnRyYW5zZm9ybS5tMTEpLAorICAgICAgICAgICAgQCJtMTIiIDogQChsYXllci50cmFuc2Zv
cm0ubTEyKSwKKyAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMyksCisg
ICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTQpLAorCisgICAgICAgICAg
ICBAIm0yMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjEpLAorICAgICAgICAgICAgQCJtMjIiIDog
QChsYXllci50cmFuc2Zvcm0ubTIyKSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIudHJh
bnNmb3JtLm0yMyksCisgICAgICAgICAgICBAIm0yNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjQp
LAorCisgICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzEpLAorICAgICAg
ICAgICAgQCJtMzIiIDogQChsYXllci50cmFuc2Zvcm0ubTMyKSwKKyAgICAgICAgICAgIEAibTMz
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMyksCisgICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVy
LnRyYW5zZm9ybS5tMzQpLAorCisgICAgICAgICAgICBAIm00MSIgOiBAKGxheWVyLnRyYW5zZm9y
bS5tNDEpLAorICAgICAgICAgICAgQCJtNDIiIDogQChsYXllci50cmFuc2Zvcm0ubTQyKSwKKyAg
ICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBA
Im00NCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDQpLAorICAgICAgICB9LAorICAgICAgICBAInN1
YmxheWVyVHJhbnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnN1Ymxh
eWVyVHJhbnNmb3JtLm0xMSksCisgICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm0xMiksCisgICAgICAgICAgICBAIm0xMyIgOiBAKGxheWVyLnN1YmxheWVyVHJh
bnNmb3JtLm0xMyksCisgICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm0xNCksCisKKyAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zv
cm0ubTIxKSwKKyAgICAgICAgICAgIEAibTIyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTIyKSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIz
KSwKKyAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTI0KSwK
KworICAgICAgICAgICAgQCJtMzEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzEpLAor
ICAgICAgICAgICAgQCJtMzIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzIpLAorICAg
ICAgICAgICAgQCJtMzMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzMpLAorICAgICAg
ICAgICAgQCJtMzQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzQpLAorCisgICAgICAg
ICAgICBAIm00MSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MSksCisgICAgICAgICAg
ICBAIm00MiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MiksCisgICAgICAgICAgICBA
Im00MyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBAIm00
NCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00NCksCisgICAgICAgIH0sCisKKyAgICAg
ICAgQCJoaWRkZW4iIDogQChsYXllci5oaWRkZW4pLAorICAgICAgICBAImRvdWJsZVNpZGVkIiA6
IEAobGF5ZXIuZG91YmxlU2lkZWQpLAorICAgICAgICBAIm1hc2tzVG9Cb3VuZHMiIDogQChsYXll
ci5tYXNrc1RvQm91bmRzKSwKKyAgICAgICAgQCJjb250ZW50c1NjYWxlIiA6IEAobGF5ZXIuY29u
dGVudHNTY2FsZSksCisgICAgICAgIEAicmFzdGVyaXphdGlvblNjYWxlIiA6IEAobGF5ZXIucmFz
dGVyaXphdGlvblNjYWxlKSwKKyAgICAgICAgQCJvcGFxdWUiIDogQChsYXllci5vcGFxdWUpLAor
ICAgICAgICBAIm9wYWNpdHkiIDogQChsYXllci5vcGFjaXR5KSwKKyAgICB9OworfQorCistICh2
b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClh
Y3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2Vz
dHVyZTphY3Rpb25dOworfQorCistICh2b2lkKV9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFw
c2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCit7CisgICAgW19jb250ZW50
VmlldyBfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOmFjdGlvbl07
Cit9CisKKy0gKENHUmVjdClfZHJhZ0NhcmV0UmVjdAoreworI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCisgICAgcmV0dXJuIF9wYWdlLT5jdXJyZW50RHJhZ0NhcmV0UmVjdCgpOworI2Vsc2UKKyAg
ICByZXR1cm4gQ0dSZWN0WmVybzsKKyNlbmRpZgorfQorCistIChCT09MKV9jb250ZW50Vmlld0lz
Rmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gc2VsZi5fY3VycmVudENvbnRlbnRWaWV3Lmlz
Rmlyc3RSZXNwb25kZXI7Cit9CisKKy0gKHZvaWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRM
b2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgoreworICAgIFtfY29udGVudFZpZXcgX3NpbXVsYXRl
TG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpsb2NhdGlvbl07Cit9CisKKy0gKHZvaWQpX3NpbXVs
YXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dAoreworICAgIFtfY29udGVudFZpZXcgX3Np
bXVsYXRlVGV4dEVudGVyZWQ6dGV4dF07Cit9CisKKy0gKHZvaWQpX2R5bmFtaWNVc2VySW50ZXJm
YWNlVHJhaXREaWRDaGFuZ2UKK3sKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgX3BhZ2UtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKKyAgICBbc2VsZiBfdXBk
YXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOworfQorCistICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJl
dmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRf
dClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRAoreworI2lmIFVTRShTWVNURU1fUFJF
VklFVykKKyAgICBpZiAoX3BhZ2UpIHsKKyAgICAgICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9s
bGVyID0gX3BhZ2UtPnN5c3RlbVByZXZpZXdDb250cm9sbGVyKCkpCisgICAgICAgICAgICBwcmV2
aWV3Q29udHJvbGxlci0+dHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVz
dGluZyhlbGVtZW50SUQsIGRvY3VtZW50SUQsIHBhZ2VJRCk7CisgICAgfQorI2VuZGlmCit9CisK
K0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRiY2I1MzIxY2U0YjA3ODY2MGE5ZGY2MjZkNGI2ZTEyYjI5NjUyMTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdN
YWMuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Lmg+CisKKyNpZiAhVEFSR0VUX09TX0lQSE9ORQorCitAaW50ZXJmYWNlIFdLV2Vi
VmlldyAoV0tUZXN0aW5nTWFjKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRU
b3RhbEhlaWdodE9mQmFubmVyczopIENHRmxvYXQgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHks
IHNldHRlcj1fc2V0VW5kZXJsYXlDb2xvcjopIE5TQ29sb3IgKl91bmRlcmxheUNvbG9yIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3
cml0ZSwgc2V0dGVyPV9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6KSBCT09MIF9pZ25vcmVzTm9u
V2hlZWxFdmVudHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dL
V2ViVmlldyAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2Vy
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgQk9PTCBfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMi4zKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTWVudSAq
X2FjdGl2ZU1lbnUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSk7CisKKy0gKHZv
aWQpX3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldCBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2Rpc2FibGVGcmFtZVNpemVV
cGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZW5hYmxl
RnJhbWVTaXplVXBkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAo
dm9pZClfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dD
aGFuZ2VzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZW5kRGVm
ZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKKy0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdz
OihOU0FycmF5ICopY3VzdG9tU3dpcGVWaWV3cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0
KXRvcENvbnRlbnRJbnNldCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKEJP
T0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0
YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7CistICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4p
KENHUmVjdCkpY2FsbGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0g
KE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOworLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdyBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6
KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7CisKKy0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElEIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIuMykpOworLSAodm9pZClfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJ
RFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMi4zKSk7CisKKy0gKHZvaWQpX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOihOU1RleHRDaGVj
a2luZ1Jlc3VsdCAqKWNhbmRpZGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsK
Ky0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIuMykpOworCistICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlz
dFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMp
KTsKKworLSAodm9pZClfaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5T
UmFuZ2UpcmVwbGFjZW1lbnRSYW5nZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsK
Ky0gKE5TUmVjdClfY2FuZGlkYXRlUmVjdCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSk7
CisKKy0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhlaWdodCBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKKy0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDoo
aW50KWhlaWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKKy0gKHZvaWQpX2Rv
QWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNwYXRjaF9ibG9ja190KWFj
dGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpKTsKKworQGVuZAorCisjZW5kaWYg
Ly8gIVRBUkdFVF9PU19JUEhPTkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lN2E1ODA1ODI0Nzg3
Mjg3ZjY0YjZmN2RhZTljMWJlMjIxNWQ1NGYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCkBAIC0wLDAgKzEs
MjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldL
V2ViVmlld1Rlc3RpbmdNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKKwor
QGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nTWFjKQorCistIChXS1BhZ2VSZWYp
X3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZpZXcKK3sKKyAgICByZXR1cm4gdG9BUEkoX3Bh
Z2UuZ2V0KCkpOworfQorCistICh2b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5k
b3dzCit7CisgICAgX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9t
Vmlld09ubHkoKTsKK30KKworLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9s
bEJ5OihOU1NpemUpb2Zmc2V0Cit7CisgICAgX2ltcGwtPnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNS
ZWN0VG9DR1JlY3QocmVjdCksIE5TU2l6ZVRvQ0dTaXplKG9mZnNldCkpOworfQorCistICh2b2lk
KV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dGbG9hdCl0b3RhbEhlaWdodE9mQmFubmVycwor
eworICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9mQmFubmVycyh0b3RhbEhlaWdodE9mQmFubmVy
cyk7Cit9CisKKy0gKENHRmxvYXQpX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzCit7CisgICAgcmV0dXJu
IF9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygpOworfQorCistICh2b2lkKV9iZWdpbkRlZmVy
cmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKK3sKKyAgICBfaW1wbC0+YmVnaW5EZWZlcnJpbmdWaWV3
SW5XaW5kb3dDaGFuZ2VzKCk7Cit9CisKKy0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRv
d0NoYW5nZXMKK3sKKyAgICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygp
OworfQorCistICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYworewor
ICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYygpOworfQorCist
ICh2b2lkKV9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6KEJPT0wpaWdub3Jlc05vbldoZWVsRXZl
bnRzCit7CisgICAgX2ltcGwtPnNldElnbm9yZXNOb25XaGVlbEV2ZW50cyhpZ25vcmVzTm9uV2hl
ZWxFdmVudHMpOworfQorCistIChCT09MKV9pZ25vcmVzTm9uV2hlZWxFdmVudHMKK3sKKyAgICBy
ZXR1cm4gX2ltcGwtPmlnbm9yZXNOb25XaGVlbEV2ZW50cygpOworfQorCistICh2b2lkKV9zZXRD
dXN0b21Td2lwZVZpZXdzOihOU0FycmF5ICopY3VzdG9tU3dpcGVWaWV3cworeworICAgIF9pbXBs
LT5zZXRDdXN0b21Td2lwZVZpZXdzKGN1c3RvbVN3aXBlVmlld3MpOworfQorCistICh2b2lkKV9z
ZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQK
K3sKKyAgICBfaW1wbC0+c2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldCh0b3BDb250
ZW50SW5zZXQpOworfQorCistIChCT09MKV90cnlUb1N3aXBlV2l0aEV2ZW50OihOU0V2ZW50ICop
ZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bpbm5lZFN0YXRlCit7Cisg
ICAgcmV0dXJuIF9pbXBsLT50cnlUb1N3aXBlV2l0aEV2ZW50KGV2ZW50LCBpZ25vcmluZ1Bpbm5l
ZFN0YXRlKTsKK30KKworLSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoo
dm9pZCheKShDR1JlY3QpKWNhbGxiYWNrCit7CisgICAgX2ltcGwtPnNldERpZE1vdmVTd2lwZVNu
YXBzaG90Q2FsbGJhY2soY2FsbGJhY2spOworfQorCistIChOU1ZpZXcgKilfZnVsbFNjcmVlblBs
YWNlaG9sZGVyVmlldworeworICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlblBsYWNlaG9sZGVy
VmlldygpOworfQorCistIChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93Cit7CisgICAgcmV0
dXJuIF9pbXBsLT5mdWxsU2NyZWVuV2luZG93KCk7Cit9CisKKy0gKHZvaWQpX2Rpc2FibGVGcmFt
ZVNpemVVcGRhdGVzCit7CisgICAgX2ltcGwtPmRpc2FibGVGcmFtZVNpemVVcGRhdGVzKCk7Cit9
CisKKy0gKHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKK3sKKyAgICBfaW1wbC0+ZW5hYmxl
RnJhbWVTaXplVXBkYXRlcygpOworfQorCistIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDoo
X1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZQoreworICAgIGlmIChhdXRvKiB3ZWJGcmFtZVBy
b3h5ID0gX3BhZ2UtPnByb2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJG
cm9tSUQoZnJhbWVIYW5kbGUuX2ZyYW1lSUQpKSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5jYW5D
aGFuZ2VGcmFtZUxheW91dCgqd2ViRnJhbWVQcm94eSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CistIChOU0NvbG9yICopX3VuZGVybGF5Q29sb3IKK3sKKyAgICByZXR1cm4gX2ltcGwtPnVuZGVy
bGF5Q29sb3IoKTsKK30KKworLSAodm9pZClfc2V0VW5kZXJsYXlDb2xvcjooTlNDb2xvciAqKXVu
ZGVybGF5Q29sb3IKK3sKKyAgICBfaW1wbC0+c2V0VW5kZXJsYXlDb2xvcih1bmRlcmxheUNvbG9y
KTsKK30KKworLSAoQk9PTClfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIKK3sKKyAg
ICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2Vy
KCk7Cit9CisKKy0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElECit7CisgICAgaWYg
KF9wYWdlKQorICAgICAgICBfcGFnZS0+cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKK30K
KworLSAodm9pZClfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOihOU1N0cmluZyAq
KWlkZW50aWZpZXIKK3sKKyAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCit9CisKKy0g
KHZvaWQpX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOihOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNh
bmRpZGF0ZQoreworICAgIF9pbXBsLT5oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShjYW5kaWRhdGUp
OworfQorCistICh2b2lkKV9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZQoreworICAgIC8vIE92
ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KK30KKworLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRl
TGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZQoreworICAgIC8vIE92ZXJyaWRkZW4gYnkgc3Vi
Y2xhc3Nlcy4KK30KKworLSAodm9pZClfZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIF9p
bXBsLT5mb3JjZVJlcXVlc3RDYW5kaWRhdGVzRm9yVGVzdGluZygpOworfQorCistIChCT09MKV9z
aG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworeworICAgIHJldHVybiBfaW1wbC0+c2hvdWxkUmVxdWVz
dENhbmRpZGF0ZXMoKTsKK30KKworLSAodm9pZClfaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxh
Y2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5nZQoreworICAgIFtzZWxmIGluc2Vy
dFRleHQ6c3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6cmVwbGFjZW1lbnRSYW5nZV07Cit9CisKKy0g
KE5TUmVjdClfY2FuZGlkYXRlUmVjdAoreworICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5wb3N0TGF5b3V0RGF0YSgpLmZvY3VzZWRFbGVtZW50UmVjdDsKK30KKworLSAodm9pZCl2aWV3
RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZQoreworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxl
ZCBkdXJpbmcgW3N1cGVyIGluaXRXaXRoQ29kZXI6XSBhbmQgW3N1cGVyIGluaXRXaXRoRnJhbWU6
XS4KKyAgICAvLyBUaGF0IGlzIGJlZm9yZSBfaW1wbCBpcyByZWFkeSB0byBiZSB1c2VkLCBzbyBj
aGVjay4gPHJkYXI6Ly9wcm9ibGVtLzM5NjExMjM2PgorICAgIGlmICghX2ltcGwpCisgICAgICAg
IHJldHVybjsKKworICAgIF9pbXBsLT5lZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCk7Cit9
CisKKy0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhlaWdodAoreworICAgIF9w
YWdlLT5zZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCk7Cit9CisKKy0gKHZv
aWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodAoreworICAgIF9wYWdlLT5zZXRG
b290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCk7Cit9CisKKy0gKHZvaWQpX2RvQWZ0
ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNwYXRjaF9ibG9ja190KWFjdGlv
bgoreworICAgIF9pbXBsLT5kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50cyhh
Y3Rpb24pOworfQorCistIChOU01lbnUgKilfYWN0aXZlTWVudQoreworICAgIC8vIEZJWE1FOiBP
bmx5IHRoZSBET00gcGFzdGUgYWNjZXNzIG1lbnUgaXMgc3VwcG9ydGVkIGZvciBub3cuIEluIHRo
ZSBmdXR1cmUsIGl0IGNvdWxkIGJlCisgICAgLy8gZXh0ZW5kZWQgdG8gcmVjb2duaXplIHRoZSBy
ZWd1bGFyIGNvbnRleHQgbWVudSBhcyB3ZWxsLgorICAgIHJldHVybiBfaW1wbC0+ZG9tUGFzdGVN
ZW51KCk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCmluZGV4
IGY1ODllOWQzMzYxZmExZmI2MDM1ZGFhMTM5MjE1MjIwMTY2YmNlMTAuLjdkODkwMmVlYjk2NmRm
ZGJhZDc4N2Q4MmJiMmQ4ZWRmYzliYjdjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbQppbmRleCBkYzlmNzRjNDlhNmJlYTllZGMxNTA2YzVhYjk1N2UwMDZhMjA3
YTVlLi4wYzVlMGY3ZjZjNjBmN2E0YzNmNjgxZTI5ZGQ0MzBkNTNkMWMwOWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCkBAIC00OSw2
ICs0OSw3IEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJXS1dl
YlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCAi
V2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2ltcG9ydCAiV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ry
b3Bkb3duSU9TLmgiCiAjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQppbmRleCBiYzhhZTAyMjFjNGU2MWI2NGE5N2NlNWQ0MjhmMzE2ZDRlMDc4MGNjLi4wNWI4OGQx
OWQzYWQwMzg5Y2UwN2JhNTNhZTViYTJlZDAxM2M4MWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTcx
LDYgKzcxLDcgQEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAj
aW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ0lPUy5oIgogI2ltcG9ydCAiV2ViQXV0b2NvcnJl
Y3Rpb25Db250ZXh0LmgiCiAjaW1wb3J0ICJXZWJBdXRvY29ycmVjdGlvbkRhdGEuaCIKICNpbXBv
cnQgIldlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oCmluZGV4
IDU2MjhjZjM1YjhjY2IyZDFmYjkxOWQxYzJhNzA4NDNmNzY4Nzg4N2QuLjQ0MTBiN2QxM2YwNmMx
MmM2YWJlYWQ4YTM2NzUyMDA2ZDY5ZDI1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2lmIEhBVkUoSE9WRVJfR0VTVFVSRV9SRUNPR05JWkVSKQogCisjaW1wb3J0IDxVSUtp
dC9VSUdlc3R1cmVSZWNvZ25pemVyLmg+CiAjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50Lmgi
CiAKIEBpbnRlcmZhY2UgV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2du
aXplcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4v
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0KaW5k
ZXggMWEyYmZkODc1MmU3NzYxMmQzODA5YWYyMmU5MDVlZGU2OTMxZTdjZC4uMzhiN2M0ZjBmNmJi
YWU2YjM4OTk2ZGViMWNiNjM2NDQ3N2RjYTkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCkBAIC0zMyw3ICszMyw3IEBACiAjaW1wb3J0ICJXS0Z1
bGxzY3JlZW5TdGFja1ZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQg
IldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHku
aCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMubW0KaW5kZXggMjI2NTNkNzQzOTg4NmRiZjVlY2RjZGRhZmU3MmQwMmQ3YjgzMWQwMC4uMDJk
ZWQxODdkMzJiZDYyYTQzYTEwZDJlOWE2MzY4MmEzM2E3NDkzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQpAQCAtNDgsNiArNDgsNyBA
QAogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFj
LmgiCiAjaW1wb3J0ICJXZWJDb2xvclBpY2tlck1hYy5oIgogI2ltcG9ydCAiV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5oIgogI2ltcG9ydCAiV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFj
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIuaAppbmRleCA0ZGVkYzBhNmFhMmEyMjM4OTYxNTYxZWYwOTYz
NmZiZjFlN2Q1MTE1Li4wMWQ3YTJhYjc1MThlNjM3OThlZmFmMjZkMzljNjk1NTgwMWM3Y2IzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLmgKQEAgLTIzLDggKzIzLDkgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oTUFDKQogCisjaW1wb3J0IDxBcHBL
aXQvQXBwS2l0Lmg+CiAjaW1wb3J0ICJHZW5lcmljQ2FsbGJhY2suaCIKICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZjc5ZGRjMTIwNDBmMmJmNzkyNDBjY2E1NWVmOTg5MzBiNTAwNzUzNC4u
Mzk5ZDkzYWNmNmMzN2E1OTFkZGI2ZTVkMGFlNzc5NGZhNTE1MTNiMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05OCw2ICs5OCw5IEBA
CiAJCTBGMDhDRjU0MUQ2M0MxNDAwMEI0OERGMSAvKiBXS0Zvcm1TZWxlY3RQb3BvdmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA4Q0Y1MzFENjND
MTQwMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UG9wb3Zlci5oICovOyB9OwogCQkwRjE3NEFBMzE0
MkE0Q0I3MDAzOTI1MEYgLyogQVBJR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTc0QUEyMTQyQTRDQjYwMDM5MjUwRiAvKiBBUElHZW9t
ZXRyeS5oICovOyB9OwogCQkwRjNDNzI1QjE5NkY2MDRFMDBBRUREMEMgLyogV0tJbnNwZWN0b3JI
aWdobGlnaHRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
LmggKi87IH07CisJCTBGNDVBMzMxMjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5n
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1
QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDVBMzM1MjM5RDg5QUYw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJW
aWV3VGVzdGluZ01hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNDVBMzNEMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzQjIz
OUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTk0NzkwMTg3QjNCM0EwMDQzNzg1NyAv
KiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1OTQ3OEQxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmggKi87IH07CiAJCTBGNTk0NzlCMTg3QjNCNjAwMDQzNzg1NyAv
KiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU5NDc5NTE4N0IzQjYwMDA0Mzc4NTcgLyogUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oICovOyB9OwogCQkwRjU5NDc5RDE4N0IzQjYw
MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1OTQ3OTcxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ1RyZWUuaCAqLzsgfTsKQEAgLTIwMjUsNiArMjAyOCwxMiBAQAogCQkwRjE3NEFB
NjE0MkFBQzYxMDAzOTI1MEYgLyogV0tHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXS0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmll
dy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzcyNTkx
OTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8qIFdLV2Vi
Vmlld1Rlc3RpbmdJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJW
aWV3VGVzdGluZ0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMzMDIz
OUQ4OUExMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmdJT1MubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzMzMjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZp
ZXdUZXN0aW5nTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmll
d1Rlc3RpbmdNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMzQyMzlE
ODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMzQjIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3
VGVzdGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdUZXN0
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzNDMjM5RDhDQzQwMDI5
NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1OTQ3OEQxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTk0NzhFMTg3QjNC
M0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OEYxODdCM0IzQTAwNDM3ODU3
IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDY5LDYgKzUwNzgsMTUgQEAKIAkJCXRhYldpZHRoID0g
ODsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMEY0NUEzMkUyMzlEODk2MDAwMjk0QUJGIC8q
IGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY0
NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCAqLywKKwkJCQkw
RjQ1QTMzMDIzOUQ4OUExMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5tbSAqLywKKwkJ
CSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
MTA1OEM3QjBGRUE1NTg1RTExQ0EyQ0JCIC8qIExpbmtlZCBGcmFtZXdvcmtzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTY3NDksNiArNjc2Nyw4IEBACiAJ
CQkJMUFDMTQxNTAxOEFDNDdFRTAwNkM2MDJDIC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmggKi8sCiAJCQkJMUE2NkJGOEUxOEEwNTJFRDAwMjA3MUI0IC8qIFdLV2ViVmlld0ludGVy
bmFsLmggKi8sCiAJCQkJMjZGOUE4M0ExOEEzNDYzRjAwQUVCODhBIC8qIFdLV2ViVmlld1ByaXZh
dGUuaCAqLywKKwkJCQkwRjQ1QTMzQjIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGlu
Zy5oICovLAorCQkJCTBGNDVBMzNDMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5n
Lm1tICovLAogCQkJCTFBRDYwRjVDMThFMjBGNEMwMDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVz
LmggKi8sCiAJCQkJMUFENjBGNUIxOEUyMEY0QzAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXMu
bW0gKi8sCiAJCQkJMUFENjBGNUYxOEUyMEY3NDAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXNJ
bnRlcm5hbC5oICovLApAQCAtODE3OCw2ICs4MTk4LDcgQEAKIAkJCQlCQzBDMzc2NjEwRjgwNzY2
MDA3NkQ3Q0IgLyogQyAqLywKIAkJCQkzN0M0QzA4MzE4MTQ5QzJBMDAzNjg4QjkgLyogQ29jb2Eg
Ki8sCiAJCQkJQkM4QTUwMTMxMTc2NUY0NTAwNzU3NTczIC8qIGNwcCAqLywKKwkJCQkwRjQ1QTMy
RTIzOUQ4OTYwMDAyOTRBQkYgLyogaW9zICovLAogCQkJCUJDMTExQjQ3MTEyRjYxNjkwMDMzN0JB
QiAvKiBtYWMgKi8sCiAJCQkJNjM0ODQyNEYxRkIyNkU3MTAwOTQ2RTNDIC8qIEFQSUFwcGxpY2F0
aW9uTWFuaWZlc3QuaCAqLywKIAkJCQkyRTVDNzcwRDFGQTdENDI5MDA1OTMyQzMgLyogQVBJQXR0
YWNobWVudC5jcHAgKi8sCkBAIC04NDYxLDYgKzg0ODIsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQkM4Njk5QjMxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSAqLywKIAkJCQlCQzg2OTlC
NDExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAqLywKKwkJCQkwRjQ1QTMzMzIz
OUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5oICovLAorCQkJCTBGNDVBMzM0
MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLm1tICovLAogCQkJKTsKIAkJ
CXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA3MzUsNiArMTA3
NTgsOSBAQAogCQkJCTJEQzZEOUMzMThDNDRBNjEwMDQzQkFENCAvKiBXS1dlYlZpZXdDb250ZW50
UHJvdmlkZXJSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2NkJGOEYxOEEwNTJFRDAw
MjA3MUI0IC8qIFdLV2ViVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkY5QTgz
QjE4QTM0NjgxMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY0NUEzM0QyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNDVBMzMxMjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5n
SU9TLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQ1QTMzNTIzOUQ4OUFGMDAyOTRBQkYgLyogV0tX
ZWJWaWV3VGVzdGluZ01hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFENjBGNUUxOEUyMEY0QzAw
MjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDYwRjYw
MThFMjBGNzQwMDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVzSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTZBNTA4MEJGMUYwRURBQUEwMEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNDg1ZDFkYjVkMmU2NmM5NWE3MmZkY2FiZDEzZWU2YjUwZjBiM2I5
ZC4uYTJiNDIyMjJkMTViMDFiOTc2ODU0NTE3MWE4ZDMwZTg3OWIwNThkYyAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisy
MDE5LTEyLTA5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgV0tXZWJWaWV3IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5nIHRvIG5ldyBmaWxlcywg
d2l0aCB0aGVpciBvd24gaGVhZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1MDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBXSVAKKworICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9X
SzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvRWRp
dGluZ1Rlc3RIYXJuZXNzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0FuaW1hdGVkUmVzaXplLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNy
YXNoLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFC
dWZmZXJpbmdQb2xpY3kubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRN
ZWRpYUJ1ZmZlcmluZy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW06CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVs
YXRlRmFpbGVkU2FuZGJveC5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5t
bToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0Nh
bmRpZGF0ZVRlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5t
bToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUu
bW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1Mu
bW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMu
bW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29h
Lm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmll
dy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxl
ckNvY29hLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVy
SU9TLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xs
ZXJNYWMubW06CisKIDIwMTktMTItMDkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZS1kaXNhYmxlIFRMUzEuMCBhbmQgVExTMS4xIGJ5IGRl
ZmF1bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93
Q29udHJvbGxlci5tIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250
cm9sbGVyLm0KaW5kZXggMDA2MzI2NmVkMzNlN2RhN2EyYWI5MTQyYTJhZjBhMTJjNTkwZDBkOS4u
YjFjOTM1ZDM2MTQxOTM1YWQ2YTUyZDEwOWJlNzg5YWEzYzczZjYxYiAxMDA2NDQKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KQEAgLTM1LDYg
KzM1LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0ljb25Mb2FkaW5n
RGVsZWdhdGUuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RI
YXJuZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KaW5k
ZXggZjA5NmZiNzU2ZjAwNDNlNjM2NmRlYzRmMDFhOTBiYzFkMDczN2MzYi4uZTRkMDczMmNjOWMy
MTViYjg2MzM5YWM2Yzc0YjU5OWEzZGY1NTUxZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9FZGl0
aW5nVGVzdEhhcm5lc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJFZGl0aW5nVGVz
dEhhcm5lc3MuaCIKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGlu
Zy5oPgogCiBAaW1wbGVtZW50YXRpb24gRWRpdGluZ1Rlc3RIYXJuZXNzCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFz
aC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGlt
ZXJDcmFzaC5tbQppbmRleCAyNzEyYzVmMDQwYWRlMWFiZWU2MjQ1MTkyOGRlN2Q3MzhiN2ExMWNk
Li45NjQ2MmVhNmU2ZWUzOWI1MWVkYmYzNjJkMDQ4NjFmNDRkNDRkZjFkIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NU
aW1lckNyYXNoLm1tCkBAIC0zMCw3ICszMCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGll
cy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZVBy
aXZhdGVNYWMuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0KaW5kZXggMzExOWMzYzM5OTAz
MDI1YzFkMjcxMGMxYmVkYmRiNDY3NjIzMzA1NS4uMmIxNzNkNzcxMDBjYjA3ZmMyZjU4OGNjNTEy
MzFlMjBmNTAyZTc2NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0FuaW1hdGVkUmVzaXplLm1tCkBAIC0zMyw3ICszMyw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rl
c3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tCmluZGV4
IDY0ZGM0NmI0Zjc3NzJiZGNmZTg3MWUyZjg1ZWUyOWU2MTM0YTBkYzguLjM4ZjJkZGI0Njk4YTQ2
MzNlNTkzODE2ZTVlMDM2OGY1YTQxZGVkZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW0KQEAg
LTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQv
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50
ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tCmluZGV4IGQ0MzI0
YThmNmM2YTlkZjIzZGU4ODRiZjU5YTY0NjExNWQyODkxMGMuLmRiY2JlYTYxMzhmNzY1NzVjMzU2
ZTI1YzJjYjdjMDZiZDFhOTBhOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0
ZXJDcmFzaC5tbQpAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxl
Z2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmlu
Z1BvbGljeS5tbQppbmRleCA2YzJkN2I2ZjRlMDBlY2YwNTJkMTA1OTM4MTM4ZDdjMDZiZTEyNTlh
Li4wNmZmMGI0ZTIyZDBhM2ZlMzA4MGViZjlmMmU5MmZkZTA3M2JhZmNkIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFCdWZm
ZXJpbmdQb2xpY3kubW0KQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcu
aCIKIAogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0j
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1Rlc3RpbmcuaD4KIAogc3RhdGljIHZvaWQgd2FpdFVudGlsQnVmZmVyaW5nUG9saWN5SXNF
cXVhbFRvKFdLV2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogZXhwZWN0ZWQpCiB7CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlpbmdD
b250cm9sc1Rlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9O
b3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbQppbmRleCA1MDAxMmYwZjE5ZGZlNWVjZDhlZGQ1YWNi
MzNmN2I1N2UyYjEwMGY4Li4xNzljMzFjN2U0NzE4YzMyNThlYmY3Y2UzMGViMDNlNzFjNjQ2ZjI2
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1Bs
YXlpbmdDb250cm9sc1Rlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNp
bXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKIAogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUGFzdGVNaXhlZENvbnRlbnQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCmluZGV4IDViOTgwZWVhMzExMGVmYjk2YzYwZjZi
ZTU0MTdhNTQ2MDQxNTdjMDEuLjlkNGVjZWM0ZGIzYmE0YTZhM2QzYzI1ZDgxYTI4YTEyOTI1OTBk
OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFz
dGVNaXhlZENvbnRlbnQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQpAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCAiVGVz
dFdLV2ViVmlldy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWYuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0
dXJlSW5QaWN0dXJlRGVsZWdhdGUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbQppbmRleCA1ZGMxYTE5Nzg5ODQ0MzE5
ZDI2MTlhNWM3YTFmOGZjOTJmNmU4OTM4Li45NjdmNjgxMDI5YzU2YTRkNDZlYWIwMjM1MzhmNzhl
YzU4YzFiOTY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbQpAQCAtMzgsNyAr
MzgsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1VSTENGLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tWaWV3Lmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3Rpbmcu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbQppbmRleCA4NDdiZmI2
N2VlNmYwYjgwZDkyNzZhNDM2OWIxNGRmNzc2MzQwMGJlLi42YjEzY2UyMTExMjZiYjJjMTU3YmFh
MGFjMzYzMzdmOTY4ZGRlM2JhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVy
aW5nLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAKICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0
aW5nLmg+CiAKIFRFU1QoV2ViS2l0LCBQcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nKQogewpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXggMTE1Nzc3ZTc0ZDliYmZkZmM0Y2Uz
ZTAzYWM2MzIyMTg2ZjgzMjFlOC4uNDU1NDM4NmEyNzExOTllYjRkMWVmYTI2MWRkMWIxNmJkZTEy
NGQyNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC0zOSw3ICszOSw3IEBA
CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
CmluZGV4IDViNjY5ZWFiMDIzODlmMjEzYTA1MTdmNzVkZDZiOGM1NDY4YjkxMDkuLmFhNmE1MDlh
OWQxODIxMjQ2YTUyOTA3MzE0NWIzNTAxMjI0N2QzYWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
CkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90
U3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90
U3RvcmUubW0KaW5kZXggNmMyZjg0MzJlOGFhYTY2Njc2OTkxYWE3ZmJhZTFmYzA2MGM1N2U1NS4u
NDdkNDljYzU3Mjc4MzY5MjA1ZThlM2E2ZTIyZDgzNzY5MjU1OGM2NiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbQpA
QCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLUGFnZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLSNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
VGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBzdGF0aWMgYm9vbCBkaWRG
b3JjZVJlcGFpbnQ7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1N5c3RlbVByZXZpZXcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1N5c3RlbVByZXZpZXcubW0KaW5kZXggZDlhZGVmNDQzMmQ5ODNlNGI0NzEwMjA3NDA2
OWE2MmRhOWMxYjdjMy4uNmU1ODdjYmE1MzE3MzQ1MmYwZWNhMjU1N2Q0YTdiNzBlOWVhMmY1NSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1Q
cmV2aWV3Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lz
dGVtUHJldmlldy5tbQpAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCiAj
aW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxXZWJLaXQv
V0tWaWV3UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
Lmg+CiAKIHN0YXRpYyBib29sIGhhc1RyaWdnZXJJbmZvOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCmluZGV4
IGQ3MDc1OThmZGM3ZTg4MjJiY2YzMTRmOThhMWQzOWY5OTU1MDRjNzUuLjM3YWZkZDA0MmU2YzMz
NjU2NmZjMWE4Y2QzYTZiZjdkZGY0ZjRhODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KQEAgLTI4LDcg
KzI4LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0Lmgi
CiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1RleHRN
YW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0KaW5kZXggNzkxN2I4ZjlkMmY2NzlhMTE5
OTgyYjhlNTAxMjJjYWVlMTJkZjNlYy4uNTI3MjBiMzg3NDk3NjYwOGYzNDNkZTIwZWMwOTBmMjlm
ZTNhNTA4YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9VSURlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVUlEZWxlZ2F0ZS5tbQpAQCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJl
ZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tIaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSW5zcGVj
dG9yLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJv
eC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2lt
dWxhdGVGYWlsZWRTYW5kYm94Lm1tCmluZGV4IDNiODgzN2MxZGYzMzQ1YjJlNzhkYzkyMTFlYzQ0
YTg1M2YyYjVkZGUuLmNhOTI5NjU0ZWZhMjhlZjI5YWQ3YjMzZTEyNTllYjM3NzIyNWFjODIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlh
U2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFu
YWdlci5tbQppbmRleCA3YTA4OTYzZjEwNjYxMTZjMDA2ZTI4YmQyYTg2NmJmY2JiMDYyNTQ2Li40
N2YzNTdjYmU0OWNiZTI2MjEzY2ZlZmUyMWI3ZTY1OWJkOThkMWU5IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlkZW9Db250cm9s
c01hbmFnZXIubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIK
IAogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1Rlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1B
QykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tB
dHRhY2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLQXR0YWNobWVudFRlc3RzLm1tCmluZGV4IGI2ZmNkOTM1ODUwZWJkNjdiMmIxODYxMGU0ODg5
MDY2NWUzMTkyYWIuLjQ5YTQ1Yjc5NTkxODc3MjJmZmE0MDRhNDE1NTY2ZmU3MzAwOGNiNGUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2ht
ZW50VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0F0dGFjaG1lbnRUZXN0cy5tbQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCA8Q29udGFjdHMv
Q29udGFjdHMuaD4KICNpbXBvcnQgPE1hcEtpdC9NYXBLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViQXJjaGl2ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdFByaXZhdGUuaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEluZm8ubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJ
bmZvLm1tCmluZGV4IDk5M2YwYmJmZjNhZjUyYzMzZDNlZTY3MzFlYTE3NWMxNjQ1MDBiYzQuLmQ4
MTQ2M2MyOTgxNDg4MzYyZjcxMWExNmQyNzNmMWQzY2MwZjczMjAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVu
dEluZm8ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1Jl
cXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAi
VGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVz
dFdLV2ViVmlldy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZv
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0
cy5tbQppbmRleCA4MTY1MDAxZjNlODM0ZWQ2MjI0OGQ0NTVlMzlkMDczY2FmNTJiNjIzLi43MzA4
NGViOWRlYzk0YmY3ZDAyYzAzZGMyN2EyMWQxYzAxYTc0OTY1IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2Fu
ZGlkYXRlVGVzdHMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcu
aCIKIAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1Rlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAKIHN0YXRpYyBO
U1N0cmluZyAqR2V0SW5wdXRWYWx1ZUpTRXhwcmVzc2lvbiA9IEAiZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcignaW5wdXQnKS52YWx1ZSI7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5tbQppbmRleCA5ZDFi
N2M2MjU0OTg0YWZhMDE0ZDI5MmVmYTE1OGI4YjhhMzFiOTk4Li5lNmYxNDJhNWQ1NjFiZjE2YTI5
OTg4OWI0MDcxNjIxMDI5MmU1N2E3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0KQEAgLTI3
LDcgKzI3LDcgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICNpbXBvcnQgIlVJS2l0U1BJLmgiCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVy
VGVzdHMubW0KaW5kZXggN2QyNTdmZDczMmM0NzdlN2NhZDVkZjliNmMyYjA5ZTY2MzBiZDk2MC4u
YWZkMTkxZGIyZjJlNjgyZTcyM2Q5OGM1ZjkxNjc2ZTYwZjA3YTEwMSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRl
clRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tX
ZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAi
UGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRlLmgiCiAjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0Fj
Y2Vzc2liaWxpdHlUZXN0c0lPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0Fj
Y2Vzc2liaWxpdHlUZXN0c0lPUy5tbQppbmRleCAxZjZhMDkzN2I3MDY4OGRiYzczNTE1YjkwMTk1
NDNlZjJmOGJmMzRlLi5kYmYyMmVlMjViYTdiMjY0ZDIzYjAxZjQ2Y2QwMDhlMTIxNTlkZDZlIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVz
dHNJT1MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0
eVRlc3RzSU9TLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGll
cy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmln
dXJhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUmVt
b3RlT2JqZWN0SW50ZXJmYWNlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUmVtb3RlT2JqZWN0UmVn
aXN0cnkuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0
aW9uU2hlZXRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNo
ZWV0VGVzdHMubW0KaW5kZXggZTgxZjEwMmVmNmMxYjMyYWU3ZDMxOTFhNWM0NThhODVjMGFjOTVj
Yy4uYThjNGRhODdhNTQzZGM0OWZlMTM1ZjM2NjFhOGJlOWJmODNhYjIzYiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tCkBAIC0zNyw3
ICszNyw3IEBACiAjaW1wb3J0ICJVSUtpdFNQSS5oIgogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZp
Y2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVBy
aXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0FjdGl2YXRlZEVs
ZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLRWxlbWVudEFjdGlvbi5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5tbQppbmRleCBmMDkyOWY4N2MyYWMxNDc4OGEx
OTgyNWI3MzUwZDJjMTgxNzU0YzIwLi5lYWQwMzk5Mzg4ZmRjY2U5YTA3ZjU3ZTJiMWY3YTc2Mzc4
ODk4YzhkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29y
cmVjdGlvblRlc3RzSU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1
dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0KQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RJ
bnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAKIEBpbnRlcmZhY2UgVGVzdFdLV2ViVmlldyAoQXV0
b2NvcnJlY3Rpb25UZXN0cykKIC0gKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICopYXV0b2NvcnJl
Y3Rpb25SZWN0c0ZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbQppbmRl
eCA0OTU2MjBjNDNlZGU3NzRhOWM5ZTM2YjczMDBhMTg1YmMzZmY0YmQyLi5kOTcwMDIxZGRhYmQz
YTMwMmExYWYwZjRkZWE4YWIyZTg4OGRkN2MwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW0KQEAgLTMyLDcgKzMy
LDcgQEAKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJW
aWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLSW5wdXREZWxlZ2F0ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0
ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5t
bQppbmRleCA5Njc2YTMzYmIyNmNhZjk5ZWI3YmMxOTJkMjgwOWZkODY2ZmVmZDJkLi44ODI1ODhj
MDE0YWVhOWUzYTgyMWU5YTE5MzVjNjE2NGJjNTU5MzJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAKICNpbXBvcnQgIlV0aWxp
dGllcy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KIAogQGltcGxlbWVudGF0aW9uIFRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9y
SU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1Mu
bW0KaW5kZXggNjljZDQ5N2RjMTY2YmJhNjJhMmVlMjAyZjk0YWMwZjk2YzdkNjdmMi4uODE5ZmY4
N2VmMjZhMGFjZDg0N2ViNzRmNTNkNWJmYzI4YmQ0OWU3YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0KQEAgLTM2LDcgKzM2LDcg
QEAKICNpbXBvcnQgPFVJS2l0L1VJRHJhZ0l0ZW0uaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJvcElu
dGVyYWN0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUludGVyYWN0aW9uLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3Rp
bmcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2VkRWxlbWVudEluZm8uaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRv
ck1hYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFj
Lm1tCmluZGV4IDEwMDVlZTQ3OGI1N2RmZmVjODdmNDUzZDQyMjQ0OTQ0MTNhOTNmNGQuLjYzMmNj
ZWIzNzQxMzhmMjdiNTg3YzUwNmJkYzY4NmU2MWNkMmNlMTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tCkBAIC0zMSw2ICszMSw3
IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdERyYWdnaW5n
SW5mby5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPGNtYXRoPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRy
Lmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRy
b2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xs
ZXJDb2NvYS5tbQppbmRleCBlOTIzYjg1MWEzZTlkZDY0YzJkNjNhNGUyNjE0MzU0MTZkYzZiYmRj
Li5jYWJmZTY1ZGU2OTEyMTUwZmY2NDliNmU2N2E5Yjg4MmQxNDk3ZWEwIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCkBAIC00
NCw2ICs0NCw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rl
c3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhUmVjb3JkUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQppbmRleCBlY2EwMDZjNjg5MzRmOGY3
YzNiZmUzMzMxMzc5NzUyNzYxYzI1OGYyLi4xM2M4YTUwZTk4ODE5NzAzZDVmMjNjM2E3ZjdiYjgz
NTc4MzEyZjMwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RS
dW5uZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3Lm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIldlYktpdFRl
c3RSdW5uZXJEcmFnZ2luZ0luZm8uaCIKICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3VGVzdGluZy5oPgogI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL09w
dGlvbmFsLmg+CkBAIC0zNiw2ICszNyw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNp
bXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
CiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKQogCiAvLyBGSVhNRTogbW92ZSB0aGVzZSB0byBXS1dl
YlZpZXdfUHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCBiZWUwNDk3YmY1NmQyMzYwMDZhMzgx
YmExMTYxYTcwYjkzMGVmY2YzLi43YTVlZDZmZTE2OTVlNjkxNjM2M2M1MzliYTAwMzg3ODU2YTNh
NzM5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3Jp
cHRDb250cm9sbGVyQ29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlVJU2NyaXB0
Q29udGV4dC5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3VGVzdGluZy5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQppbmRleCBhZTJhOTRhMTViMDA5OTJiMWU4
OTVmOTQ4NzY2MjVhMThjMWE0OWZmLi4wZjIwZjY2ZGMxNmJjYWRlNjVhOWJmNjYxZTUyNGUzYTQ3
NWU4Y2EzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJv
bGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxl
cklPUy5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRD
b250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgog
I2ltcG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNlc1NQSS5oPgogI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbQppbmRleCA5OTljYTg3MWVjYTFlZGJhMThiNTU4Y2EyMGU4NWI4
NTFlNzEwN2NlLi5jNjRkNjU5OTRlOTM3Nzk5MTM3MGNiNjIzOTkyYTM4NzMyNTFlOGM1IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1Rlc3RpbmcuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEku
aD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCmluZGV4IDZiZGUyNjE1ZWVmMDgyZDJk
OTdmNTg0ZWI5NzE4MDE5ODc2MjUzYTMuLjc3MmUxMWUyMjZmY2Q1NWEyYzMxZGJmMDU5MGMwNTky
M2QzZjhjNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0
Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlw
dENvbnRyb2xsZXJNYWMubW0KQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0
cmluZy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385240</attachid>
            <date>2019-12-09 22:15:30 -0800</date>
            <delta_ts>2019-12-10 08:23:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191209221529.patch</filename>
            <type>text/plain</type>
            <size>141713</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggOWQy
NDJlMmEwNjRkZmY3MmY0OWM0MmY1NGQ5NzgxM2NhZDk0ZDkyYy4uMWIyNWE3YjlkMDllYTM2NWI3
MjRkMDVhOTdkYmZjNjMwZmRhYzcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMzIyLDEx
ICszMjIsMTUgQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQubW0KIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCitV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBh
Z2VQcmVmZXJlbmNlcy5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dpbmRvd0ZlYXR1cmVzLm1t
CiAKK1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KKwogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCitVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFj
Lm1tCiAKIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5Q29jb2EubW0KIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9TZWNLZXlQ
cm94eVN0b3JlLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAppbmRleCA1MzYyYjE4ZTg1M2ZhNTQ4MzE2OWVmNGUy
MjFlZTE5ZjI4YzQ4ZWIyLi4yNTkwNzhmZjVjMTQxZDRjMGRmZTJhODI2YWE0ODhhMmI5YTVkZjI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVn
YXRlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJ
RGVsZWdhdGVQcml2YXRlLmgKQEAgLTM5LDYgKzM5LDcgQEAKIEBjbGFzcyBfV0tBY3RpdmF0ZWRF
bGVtZW50SW5mbzsKIEBjbGFzcyBfV0tFbGVtZW50QWN0aW9uOwogQGNsYXNzIF9XS0ZyYW1lSGFu
ZGxlOworQGNsYXNzIF9XS0luc3BlY3RvcjsKIAogI2lmIFRBUkdFVF9PU19JT1MKIEBjbGFzcyBV
SUNvbnRleHRNZW51Q29uZmlndXJhdGlvbjsKQEAgLTE4Miw2ICsxODMsNyBAQCBzdHJ1Y3QgVUlF
ZGdlSW5zZXRzOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50
ZXJhY3Rpb246KGlkKWludGVyYWN0aW9uIHNlc3Npb246KGlkKXNlc3Npb24gZGlkRW5kV2l0aE9w
ZXJhdGlvbjooTlNVSW50ZWdlcilvcGVyYXRpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkp
OwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50ZXJhY3Rpb25P
cGVyYXRpb25XYXNIYW5kbGVkOihCT09MKWhhbmRsZWQgZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBp
dGVtUHJvdmlkZXJzOihOU0FycmF5ICopaXRlbVByb3ZpZGVycyBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4wKSk7CiAtIChOU1VJbnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdp
bGxVcGRhdGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjooTlNVSW50ZWdlcilv
cGVyYXRpb24gZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CisKICNpZiBUQVJHRVRfT1NfSU9TCiAtIChVSURyb3BQcm9wb3NhbCAqKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxVcGRhdGVEcm9wUHJvcG9zYWxUb1Byb3Bvc2FsOihVSURy
b3BQcm9wb3NhbCAqKXByb3Bvc2FsIGZvclNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNz
aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKIC0gKFVJVGFyZ2V0ZWREcmFnUHJldmll
dyAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHByZXZpZXdGb3JMaWZ0aW5nSXRlbToo
VUlEcmFnSXRlbSAqKWl0ZW0gc2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Npb24+KXNlc3Npb24gV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwpAQCAtMTkwLDYgKzE5Miw3IEBAIHN0cnVjdCBVSUVk
Z2VJbnNldHM7CiAtIChOU0ludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0
YU93bmVyRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKE5TSW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkYXRhT3duZXJGb3JEcmFnU2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Npb24+KXNlc3Np
b24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogI2VuZGlmCisKIC0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQ2hhbmdlU2FmZUFyZWFTaG91bGRBZmZlY3RPYnNj
dXJlZEluc2V0czooQk9PTClzYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgZGlkUHJlc2VudEZvY3VzZWRFbGVtZW50Vmlld0NvbnRyb2xsZXI6KFVJVmlld0NvbnRy
b2xsZXIgKiljb250cm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKIC0gKHZvaWQp
X3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRGlzbWlzc0ZvY3VzZWRFbGVtZW50Vmll
d0NvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEyLjApKTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwog
LSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzaG91bGRBbGxvd0RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKily
ZXF1ZXN0aW5nRnJhbWUgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShCT09MKSlkZWNpc2lvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwogCiAjZWxzZSAvLyAhVEFSR0VUX09T
X0lQSE9ORQorCiAtICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9y
V2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKIC0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAt
ICh2b2lkKV9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CkBAIC0yMzcs
NiArMjQxLDcgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKICAgICBAcGFyYW0gaW5zcGVjdG9yIFRo
ZSBXZWIgSW5zcGVjdG9yIGluc3RhbmNlIGF0dGFjaGVkIHRvIHRoaXMgV0tXZWJWaWV3LgogKi8K
IC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQXR0YWNoSW5zcGVjdG9y
OihfV0tJbnNwZWN0b3IgKilpbnNwZWN0b3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSk7CisKICNlbmRpZiAvLyAhVEFSR0VUX09TX0lQSE9ORQogCiBAZW5kCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCAzNTA5Nzk5ZGNl
ZTBhOTM4MGYzMGQyZWZlYTVjMjM3MTgyMTgxNWY1Li5mY2RhNWRkNzAyZmIzODg2MGEyZDg4YTQw
ZDY2ZmI2ZDRiN2M2NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KQEAgLTUyLDcgKzUyLDYgQEAKICNpbXBvcnQgIlRleHRDaGVja2VyLmgi
CiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW1wb3J0ICJVSURlbGVnYXRlLmgiCi0j
aW1wb3J0ICJVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oIgogI2ltcG9ydCAiVmVyc2lvbkNoZWNr
cy5oIgogI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJW
aWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKQEAgLTgwLDYgKzc5LDcgQEAKICNpbXBvcnQgIldLVXNl
ckNvbnRlbnRDb250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3Vy
YXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXS1dlYnBhZ2VQcmVmZXJl
bmNlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC05OSwxNSArOTksOSBAQAogI2ltcG9y
dCAiX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0lucHV0RGVsZWdhdGUuaCIKLSNpbXBvcnQgIl9XS0luc3Bl
Y3RvckludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tTZXNzaW9uU3RhdGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVGV4
dElucHV0Q29udGV4dEludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uQ29u
ZmlndXJhdGlvbi5oIgotI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgiCi0j
aW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oIgotI2ltcG9ydCAiX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKLSNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJf
V0tXZWJzaXRlUG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Q29u
dGV4dC5oPgpAQCAtMTI0LDcgKzExOCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRpZXMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVmFsaWRh
dGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uLmg+CkBAIC0yODIsMjkgKzI3NSwxOCBAQCBAaW1wbGVtZW50YXRpb24gV0tX
ZWJWaWV3IHsKIAogICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0
RGVsZWdhdGU7CiAKLSAgICBPcHRpb25hbDxCT09MPiBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJ
bW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKICAgICBSZXRhaW5QdHI8V0tTYWZlQnJvd3Np
bmdXYXJuaW5nPiBfc2FmZUJyb3dzaW5nV2FybmluZzsKIAogICAgIEJPT0wgX3VzZVBsYXRmb3Jt
RmluZFVJOwogCi0gICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVPYmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJl
Z2lzdHJ5OwogCi0gICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7Ci0gICAg
UmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKLQotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4g
X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotI2VuZGlmCi0KICAgICBPcHRpb25hbDxDR1Np
emU+IF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0
U2l6ZT4gX2xhc3RTZW50Vmlld0xheW91dFNpemU7CiAgICAgT3B0aW9uYWw8Q0dTaXplPiBfbWF4
aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRT
aXplPiBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemU7CiAKLSAgICBDR1JlY3QgX2lucHV0
Vmlld0JvdW5kczsKICAgICBDR0Zsb2F0IF92aWV3cG9ydE1ldGFUYWdXaWR0aDsKICAgICBCT09M
IF92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0OwogICAgIEJPT0wgX3ZpZXdwb3J0TWV0
YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudDsKQEAgLTM0OSw3ICszMzEsNiBAQCBAaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IHsKICAgICBPcHRpb25hbDxXZWJLaXQ6OlRyYW5zYWN0aW9uSUQ+IF9m
aXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlOwogICAgIGRvdWJsZSBfc2NhbGVUb1Jl
c3RvcmU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI+IF9nZXN0dXJlQ29udHJvbGxlcjsKICAgICBCT09MIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmln
YXRpb25HZXN0dXJlczsKIAogICAgIFJldGFpblB0cjxVSVZpZXcgPFdLV2ViVmlld0NvbnRlbnRQ
cm92aWRlcj4+IF9jdXN0b21Db250ZW50VmlldzsKQEAgLTM4MSw3ICszNjIsNiBAQCBAaW1wbGVt
ZW50YXRpb24gV0tXZWJWaWV3IHsKIAogICAgIEJPT0wgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0
VXBkYXRlOwogICAgIEJPT0wgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxlZEZyb21T
Y3JvbGxWaWV3SW5TdGFibGVTdGF0ZTsKLSAgICBWZWN0b3I8QmxvY2tQdHI8dm9pZCAoKT4+IF92
aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3M7CiAKICAgICBfV0tEcmFnSW50ZXJhY3Rp
b25Qb2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKIApAQCAtMzk3LDcgKzM3Nyw2IEBAIEBp
bXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgewogICAgIEJPT0wgX2hhc0VudGVyZWREZWFsbG9jOwog
I2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Oldl
YlZpZXdJbXBsPiBfaW1wbDsKICAgICBSZXRhaW5QdHI8V0tUZXh0RmluZGVyQ2xpZW50PiBfdGV4
dEZpbmRlckNsaWVudDsKICNlbmRpZgogICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgX3NlbGVj
dGlvbkF0dHJpYnV0ZXM7CkBAIC0xNDMwLDYgKzE0MDksNDEgQEAgLSAodm9pZClfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uCiAgICAgICAgIFtzZWxmIF9j
bGVhclNhZmVCcm93c2luZ1dhcm5pbmddOwogfQogCistICh2b2lkKV9pbnRlcm5hbERvQWZ0ZXJO
ZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayB3aXRob3V0
V2FpdGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcgd2l0aG91
dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNT
dGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGlmICh3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nKQorICAgICAgICBfcGFn
ZS0+c2V0U2hvdWxkU2tpcFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRNb3ZlVG9XaW5k
b3codHJ1ZSk7CisKKyAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRh
dGVCbG9jayk7CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsK
KyAgICBfcGFnZS0+Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbdXBkYXRlQmxvY2tD
b3B5LCB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplLCBzdHJvbmdTZWxmXShXZWJLaXQ6
OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVCbG9ja0Nv
cHkpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
ICAgICBpZiAoIXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUgJiYgc3Ryb25nU2VsZi0+
X2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlOjpOb3RSZXNpemluZykgeworICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2NhbGxiYWNr
c0RlZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbdXBkYXRlQmxvY2tDb3B5XSB7CisgICAgICAg
ICAgICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZWxzZQorICAgICAgICBVTlVTRURf
UEFSQU0od2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSk7CisjZW5kaWYKKworICAgICAg
ICB1cGRhdGVCbG9ja0NvcHkoKTsKKyAgICB9KTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5U
X0VMRU1FTlQpCiAKIC0gKHZvaWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVu
dCYpYXR0YWNobWVudCB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTQ1OSwxMSAr
MTQ3Myw2IEBAIC0gKHZvaWQpX2RpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudDooQVBJOjpB
dHRhY2htZW50JilhdHRhY2htZW50CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0tIChC
T09MKV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gc2VsZi5fY3Vy
cmVudENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Ci19Ci0KIC0gKEJPT0wpX3Nob3VsZEF2
b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlCiB7CiAgICAgcmV0dXJuIFtfY29u
dGVudFZpZXcgX3Nob3VsZEF2b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlXTsK
QEAgLTM2NzUsNiArMzY4NCwyMyBAQCAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2Vzcwog
ICAgIF9pbXBsLT5oYW5kbGVET01QYXN0ZVJlcXVlc3RXaXRoUmVzdWx0KFdlYkNvcmU6OkRPTVBh
c3RlQWNjZXNzUmVzcG9uc2U6OkdyYW50ZWRGb3JHZXN0dXJlKTsKIH0KIAorLSAodm9pZClfcHJl
cGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoreworfQorCistICh2b2lkKV9jYW5jZWxJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfY29tcGxldGVJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFu
ZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPmdlc3R1cmVFdmVu
dFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmlld09ubHkoZXZlbnQpOworfQorCiBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgogLSAodm9pZClyZW5ld0dTdGF0ZQogQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECkBAIC00ODMwLDYgKzQ4NTYsMTYgQEAg
LSAodm9pZClfY2hhbmdlTGlzdFR5cGU6KGlkKXNlbmRlcgogICAgIF9wYWdlLT5jaGFuZ2VMaXN0
VHlwZSgpOwogfQogCistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCit7CisgICAgcmV0dXJu
IF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Cit9CisKKy0gKHZvaWQpX3NldFVzZVN5c3Rl
bUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQoreworICAgIF9pbXBsLT5zZXRV
c2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOworfQorCiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ4NjQsNiArNDkw
MCwyNSBAQCAtIChVSVZpZXcgKilpbnB1dFZpZXcKICAgICByZXR1cm4gW19jb250ZW50VmlldyBp
bnB1dFZpZXdGb3JXZWJWaWV3XTsKIH0KIAorLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKFtfZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0dXJuIFtfZnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNlaG9sZGVyXTsKKyNlbmRpZiAvLyBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcmVx
dWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRp
b25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sKK3sKKyAg
ICBhdXRvIGluZm9SZXF1ZXN0ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVz
dChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pKTsKKyAgICBpbmZvUmVxdWVzdC5p
bmNsdWRlU25hcHNob3QgPSB0cnVlOworCisgICAgW19jb250ZW50VmlldyBkb0FmdGVyUG9zaXRp
b25JbmZvcm1hdGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihibG9jayld
IChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKSB7
CisgICAgICAgIGNhcHR1cmVkQmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFjdGl2YXRl
ZEVsZW1lbnRJbmZvV2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmluZm9ybWF0
aW9uIHVzZXJJbmZvOm5pbF0pOworICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07Cit9CisK
ICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChCT09MKV9pc0VkaXRhYmxlCkBA
IC02MTQzLDYgKzYxOTgsMzYgQEAgLSAodm9pZClfcmVtb3ZlRGF0YURldGVjdGVkTGlua3M6KGRp
c3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgogI2VuZGlmCiB9CiAKKy8vIEV4ZWN1dGUgdGhlIHN1
cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20gdGhlIFdlYlByb2Nl
c3MuCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRh
dGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOk5PIHdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworfQorCistICh2b2lkKV9kb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZv
aWQpKXVwZGF0ZUJsb2NrCit7CisgICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50
YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpZRVMgd2l0
aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107Cit9CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRp
c3BhdGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7CisKKyAgICBp
ZiAoX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzKQorICAgICAgICBbX3N0
YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGFkZE9iamVjdDp1cGRhdGVCbG9j
a0NvcHkuZ2V0KCldOworICAgIGVsc2UgeworICAgICAgICBfc3RhYmxlU3RhdGVQcmVzZW50YXRp
b25VcGRhdGVDYWxsYmFja3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czp1cGRhdGVCbG9ja0NvcHkuZ2V0KCksIG5pbF0pOworICAgICAgICBbc2VsZiBf
ZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNh
bGxiYWNrc107CisgICAgfQorfQorI2VuZGlmCisKICNwcmFnbWEgbWFyayBpT1Mtc3BlY2lmaWMg
bWV0aG9kcwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTY0NzAsNiArNjU1NSwxNyBA
QCAtICh2b2lkKV9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczoodm9pZCAoXiko
dm9pZCkpdXBkYXRlQmxvY2sKICAgICB9CiB9CiAKKy0gKHZvaWQpX2ZpcmVQcmVzZW50YXRpb25V
cGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3MKK3sKKyAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKKyAgICBbc2VsZiBfZG9BZnRl
ck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZdIHsKKyAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1NlbGZdIHsKKyAgICAgICAg
ICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJh
Y2tzIGNvdW50XSkKKyAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfZmlyZVByZXNlbnRhdGlv
blVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc107CisgICAg
ICAgIH0pOworICAgIH1dOworfQorCiAtICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdz
SW5zZXQ6KENHU2l6ZSlpbnNldAogewogICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3NldE92
ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07CkBAIC02OTIzLDg2MyArNzAxOSw2IEBA
IEBlbmQKIAogI3VuZGVmIEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcKIAotQGltcGxl
bWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nKQotCi0tICh2b2lkKV9zZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09MKWVuYWJsZWQKLXsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFtfY29udGVudFZpZXcgc2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOmVuYWJsZWRdOwotI2Vsc2UKLSAgICBfaW1wbC0+c2V0Q29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLS0gKE5TRGljdGlvbmFy
eSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFj
ZUl0ZW0KLXsKLSAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAInZh
bGlkYXRpb25CdWJibGUiXSkgewotICAgICAgICBhdXRvKiB2YWxpZGF0aW9uQnViYmxlID0gX3Bh
Z2UtPnZhbGlkYXRpb25CdWJibGUoKTsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0
aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgpIDogZW1wdHlTdHJpbmcoKTsK
LSAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25C
dWJibGUtPmZvbnRTaXplKCkgOiAwOwotICAgICAgICByZXR1cm4gQHsgdXNlckludGVyZmFjZUl0
ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2UsIEAiZm9udFNpemUiOiBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9OwotICAgIH0KLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2Vy
SW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbV07Ci0jZWxzZQotICAg
IHJldHVybiBuaWw7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0tICh2
b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24g
Y29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9j
awotewotICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRp
b25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOwotICAgIGluZm9S
ZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7Ci0KLSAgICBbX2NvbnRlbnRWaWV3IGRvQWZ0
ZXJQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlOltjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRy
KGJsb2NrKV0gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3Jt
YXRpb24pIHsKLSAgICAgICAgY2FwdHVyZWRCbG9jayhbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8g
YWN0aXZhdGVkRWxlbWVudEluZm9XaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246
aW5mb3JtYXRpb24gdXNlckluZm86bmlsXSk7Ci0gICAgfSBmb3JSZXF1ZXN0OmluZm9SZXF1ZXN0
XTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9m
ZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9u
SGFuZGxlcgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRsZXI6
W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25SZWN0
cykgewotICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCi0gICAgICAg
ICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNlbGVj
dGlvblJlY3QucmVjdCgpXV07Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIocmVj
dFZhbHVlcy5nZXQoKSk7Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9y
ZVNlbGVjdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVj
dGlvbl07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbgotewotICAg
IFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07Ci19Ci0KLS0gKFVJ
VmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Ci17Ci0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVl
bl0pCi0gICAgICAgIHJldHVybiBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQ
bGFjZWhvbGRlcl07Ci0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHJldHVy
biBuaWw7Ci19Ci0KLS0gKENHUmVjdClfY29udGVudFZpc2libGVSZWN0Ci17Ci0gICAgcmV0dXJu
IFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250
ZW50Vmlld107Ci19Ci0KLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmll
dzooQ0dQb2ludClwb2ludAotewotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQg
ZnJvbVZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLX0KLQotLSAoQ0dQb2ludClfY29u
dmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJu
IFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3
XTsKLX0KLQotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQKLXsKLSAgICBbX2NvbnRl
bnRWaWV3IGFjY2Vzc29yeVRhYjpZRVNdOwotfQotCi0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5
QmFyUHJldmlvdXMKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107Ci19Ci0K
LS0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJp
bmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFwcGx5QXV0b2Nv
cnJlY3Rpb246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRs
ZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhh
bmRsZXIpXSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7Ci0gICAgICAgIGNhcHR1
cmVkQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClkaXNtaXNzRm9y
bUFjY2Vzc29yeVZpZXcKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURvbmVdOwotfQot
Ci0tICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgotewotICAgIFtfY29udGVudFZpZXcgZGlzbWlz
c0ZpbGVQaWNrZXJdOwotfQotCi0tICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJ
bnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlCi17Ci0gICAgW19jb250ZW50Vmll
dyBzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6aG91ciBtaW51dGU6bWludXRlXTsKLX0KLQotLSAo
dm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgKLXsKLSAgICBb
X2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5kZXhdOwotfQot
Ci0tIChOU1N0cmluZyAqKXNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUKLXsKLSAgICByZXR1cm4gW19j
b250ZW50VmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXTsKLX0KLQotLSAoTlNTdHJpbmcgKil0
ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgdGV4
dENvbnRlbnRUeXBlRm9yVGVzdGluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopZm9ybUlucHV0TGFi
ZWwKLXsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07Ci19Ci0KLS0g
KHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uCi17Ci0gICAgLy8gRm9yIHN1YmNs
YXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFj
dGlvbgotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotfQotCi0tICh2b2lk
KV9kaWRTaG93Q29udGV4dE1lbnUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlk
ZS4KLX0KLQotLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51Ci17Ci0gICAgLy8gRm9yIHN1
YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKENHUmVjdClfdWlUZXh0Q2FyZXRSZWN0Ci17
Ci0gICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCi0g
ICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07Ci0KLSAgICByZXR1cm4g
W1tfY29udGVudFZpZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQuc2Vs
ZWN0aW9uVmlldy5zZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwotfQotCi0tIChD
R1JlY3QpX2lucHV0Vmlld0JvdW5kcwotewotICAgIHJldHVybiBfaW5wdXRWaWV3Qm91bmRzOwot
fQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVjdHMKLXsKLSAg
ICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KLSAgICBb
X2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKLQotICAgIHJldHVybiBbX2Nv
bnRlbnRWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c107Ci19Ci0KLS0gKE5TU3RyaW5nICopX3Nj
cm9sbGluZ1RyZWVBc1RleHQKLXsKLSAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHko
KTsKLSAgICBpZiAoIWNvb3JkaW5hdG9yKQotICAgICAgICByZXR1cm4gQCIiOwotCi0gICAgcmV0
dXJuIGNvb3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Ci19Ci0KLS0gKE5TTnVtYmVy
ICopX3N0YWJsZVN0YXRlT3ZlcnJpZGUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVy
cmlkZS4KLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVBy
ZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jawotewotICAgIGlm
ICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVw
ZGF0ZUJsb2NrKTsKLQotICAgIGlmIChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxs
YmFja3MpCi0gICAgICAgIFtfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3Mg
YWRkT2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5nZXQoKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIF9z
dGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmls
XSk7Ci0gICAgICAgIFtzZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJs
ZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX2ZpcmVQ
cmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFj
a3MKLXsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKLSAgICBb
c2VsZiBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZdIHsKLSAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1NlbGZd
IHsKLSAgICAgICAgICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9u
VXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkKLSAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfZmly
ZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxi
YWNrc107Ci0gICAgICAgIH0pOwotICAgIH1dOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfcHJv
cGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklECi17Ci0gICAg
Q0FMYXllciogbGF5ZXIgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxh
eWVySUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gQHsKLSAgICAgICAgQCJib3VuZHMiIDogQHsKLSAgICAgICAgICAgIEAieCIgOiBAKGxheWVy
LmJvdW5kcy5vcmlnaW4ueCksCi0gICAgICAgICAgICBAInkiIDogQChsYXllci5ib3VuZHMub3Jp
Z2luLngpLAotICAgICAgICAgICAgQCJ3aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLndpZHRo
KSwKLSAgICAgICAgICAgIEAiaGVpZ2h0IiA6IEAobGF5ZXIuYm91bmRzLnNpemUuaGVpZ2h0KSwK
LQotICAgICAgICB9LAotICAgICAgICBAInBvc2l0aW9uIiA6IEB7Ci0gICAgICAgICAgICBAIngi
IDogQChsYXllci5wb3NpdGlvbi54KSwKLSAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLnBvc2l0
aW9uLnkpLAotICAgICAgICB9LAotICAgICAgICBAInpQb3NpdGlvbiIgOiBAKGxheWVyLnpQb3Np
dGlvbiksCi0gICAgICAgIEAiYW5jaG9yUG9pbnQiIDogQHsKLSAgICAgICAgICAgIEAieCIgOiBA
KGxheWVyLmFuY2hvclBvaW50LngpLAotICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYW5jaG9y
UG9pbnQueSksCi0gICAgICAgIH0sCi0gICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IEAobGF5ZXIu
YW5jaG9yUG9pbnRaKSwKLSAgICAgICAgQCJ0cmFuc2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAi
bTExIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMSksCi0gICAgICAgICAgICBAIm0xMiIgOiBAKGxh
eWVyLnRyYW5zZm9ybS5tMTIpLAotICAgICAgICAgICAgQCJtMTMiIDogQChsYXllci50cmFuc2Zv
cm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xNCksCi0K
LSAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMSksCi0gICAgICAgICAg
ICBAIm0yMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJtMjMiIDog
QChsYXllci50cmFuc2Zvcm0ubTIzKSwKLSAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIudHJh
bnNmb3JtLm0yNCksCi0KLSAgICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0z
MSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzIpLAotICAgICAg
ICAgICAgQCJtMzMiIDogQChsYXllci50cmFuc2Zvcm0ubTMzKSwKLSAgICAgICAgICAgIEAibTM0
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zNCksCi0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5
ZXIudHJhbnNmb3JtLm00MSksCi0gICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnRyYW5zZm9y
bS5tNDIpLAotICAgICAgICAgICAgQCJtNDMiIDogQChsYXllci50cmFuc2Zvcm0ubTQzKSwKLSAg
ICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm00NCksCi0gICAgICAgIH0sCi0g
ICAgICAgIEAic3VibGF5ZXJUcmFuc2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAibTExIiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTExKSwKLSAgICAgICAgICAgIEAibTEyIiA6IEAobGF5
ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEyKSwKLSAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIu
c3VibGF5ZXJUcmFuc2Zvcm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIuc3Vi
bGF5ZXJUcmFuc2Zvcm0ubTE0KSwKLQotICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci5zdWJs
YXllclRyYW5zZm9ybS5tMjEpLAotICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci5zdWJsYXll
clRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci5zdWJsYXllclRy
YW5zZm9ybS5tMjMpLAotICAgICAgICAgICAgQCJtMjQiIDogQChsYXllci5zdWJsYXllclRyYW5z
Zm9ybS5tMjQpLAotCi0gICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm0zMSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3Jt
Lm0zMiksCi0gICAgICAgICAgICBAIm0zMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0z
MyksCi0gICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zNCks
Ci0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQxKSwK
LSAgICAgICAgICAgIEAibTQyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQyKSwKLSAg
ICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQzKSwKLSAgICAg
ICAgICAgIEAibTQ0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwKLSAgICAgICAg
fSwKLQotICAgICAgICBAImhpZGRlbiIgOiBAKGxheWVyLmhpZGRlbiksCi0gICAgICAgIEAiZG91
YmxlU2lkZWQiIDogQChsYXllci5kb3VibGVTaWRlZCksCi0gICAgICAgIEAibWFza3NUb0JvdW5k
cyIgOiBAKGxheWVyLm1hc2tzVG9Cb3VuZHMpLAotICAgICAgICBAImNvbnRlbnRzU2NhbGUiIDog
QChsYXllci5jb250ZW50c1NjYWxlKSwKLSAgICAgICAgQCJyYXN0ZXJpemF0aW9uU2NhbGUiIDog
QChsYXllci5yYXN0ZXJpemF0aW9uU2NhbGUpLAotICAgICAgICBAIm9wYXF1ZSIgOiBAKGxheWVy
Lm9wYXF1ZSksCi0gICAgICAgIEAib3BhY2l0eSIgOiBAKGxheWVyLm9wYWNpdHkpLAotICAgIH07
Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihkaXNwYXRj
aF9ibG9ja190KWFjdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNldHRpbmdT
aW5nbGVUYXBHZXN0dXJlOmFjdGlvbl07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdF
ZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KLXsKLSAg
ICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rp
bmc6YWN0aW9uXTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpZiBQ
TEFURk9STShNQUMpCi0tIChXS1BhZ2VSZWYpX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZp
ZXcKLXsKLSAgICByZXR1cm4gdG9BUEkoX3BhZ2UuZ2V0KCkpOwotfQotCi0tICh2b2lkKV9kaXNt
aXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzCi17Ci0gICAgX2ltcGwtPmRpc21pc3NDb250
ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKLX0KLQotLSAodm9pZClfc2V0
RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0Ci17Ci0gICAgX2lt
cGwtPnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNSZWN0VG9DR1JlY3QocmVjdCksIE5TU2l6ZVRvQ0dT
aXplKG9mZnNldCkpOwotfQotCi0tICh2b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dG
bG9hdCl0b3RhbEhlaWdodE9mQmFubmVycwotewotICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9m
QmFubmVycyh0b3RhbEhlaWdodE9mQmFubmVycyk7Ci19Ci0KLS0gKENHRmxvYXQpX3RvdGFsSGVp
Z2h0T2ZCYW5uZXJzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygp
OwotfQotCi0tICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKLXsKLSAg
ICBfaW1wbC0+YmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19Ci0KLS0gKHZv
aWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKLXsKLSAgICBfaW1wbC0+ZW5kRGVm
ZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwotfQotCi0tICh2b2lkKV9lbmREZWZlcnJpbmdW
aWV3SW5XaW5kb3dDaGFuZ2VzU3luYwotewotICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5X
aW5kb3dDaGFuZ2VzU3luYygpOwotfQotCi0tICh2b2lkKV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5k
bGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+Z2VzdHVyZUV2ZW50
V2FzTm90SGFuZGxlZEJ5V2ViQ29yZUZyb21WaWV3T25seShldmVudCk7Ci19Ci0KLS0gKHZvaWQp
X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKLXsK
LSAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50
cyk7Ci19Ci0KLS0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cwotewotICAgIHJldHVybiBf
aW1wbC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3RvbVN3
aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCi17Ci0gICAgX2ltcGwtPnNldEN1
c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3Rv
bVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldAotewotICAg
IF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENvbnRlbnRJbnNl
dCk7Ci19Ci0KLS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBp
Z25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKLXsKLSAgICByZXR1
cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVkU3RhdGUp
OwotfQotCi0tICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4p
KENHUmVjdCkpY2FsbGJhY2sKLXsKLSAgICBfaW1wbC0+c2V0RGlkTW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjayhjYWxsYmFjayk7Ci19Ci0KLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xk
ZXJWaWV3Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7
Ci19Ci0KLS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gX2lt
cGwtPmZ1bGxTY3JlZW5XaW5kb3coKTsKLX0KLQotLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVw
ZGF0ZXMKLXsKLSAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKLX0KLQotLSAo
dm9pZClfZW5hYmxlRnJhbWVTaXplVXBkYXRlcwotewotICAgIF9pbXBsLT5lbmFibGVGcmFtZVNp
emVVcGRhdGVzKCk7Ci19Ci0KLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb24KLXsKLX0KLQotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17
Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0K
LS0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFu
ZGxlCi17Ci0gICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJvY2VzcygpLndl
YkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRsZS5fZnJhbWVJ
RCkpKQotICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZyYW1lTGF5b3V0KCp3ZWJGcmFt
ZVByb3h5KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS0gKE5TQ29sb3IgKilfdW5kZXJsYXlD
b2xvcgotewotICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xvcigpOwotfQotCi0tICh2b2lk
KV9zZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5kZXJsYXlDb2xvcgotewotICAgIF9pbXBs
LT5zZXRVbmRlcmxheUNvbG9yKHVuZGVybGF5Q29sb3IpOwotfQotCi0tIChCT09MKV9oYXNBY3Rp
dmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgotewotICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+
aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKLX0KLQotLSAodm9pZClfcmVxdWVz
dENvbnRyb2xsZWRFbGVtZW50SUQKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdlLT5y
ZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOwotfQotCi0tICh2b2lkKV9oYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcgotewotICAgIC8vIE92
ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0KLQotLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCi17Ci0gICAgX2ltcGwtPmhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci19Ci0KLS0gKHZvaWQpX2RpZEhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgot
fQotCi0tICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTCl2aXNp
YmxlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQotCi0tICh2b2lkKV9m
b3JjZVJlcXVlc3RDYW5kaWRhdGVzCi17Ci0gICAgX2ltcGwtPmZvcmNlUmVxdWVzdENhbmRpZGF0
ZXNGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVzCi17
Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOwotfQotCi0tICh2
b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBs
YWNlbWVudFJhbmdlCi17Ci0gICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVwbGFjZW1lbnRS
YW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKLX0KLQotLSAoTlNSZWN0KV9jYW5kaWRhdGVSZWN0Ci17
Ci0gICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZm9jdXNl
ZEVsZW1lbnRSZWN0OwotfQotCi0tIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCi17Ci0gICAg
cmV0dXJuIF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Ci19Ci0KLS0gKHZvaWQpX3NldFVz
ZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQotewotICAgIF9pbXBs
LT5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOwotfQotCi0tICh2
b2lkKXZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlCi17Ci0gICAgLy8gVGhpcyBjYW4g
YmUgY2FsbGVkIGR1cmluZyBbc3VwZXIgaW5pdFdpdGhDb2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdp
dGhGcmFtZTpdLgotICAgIC8vIFRoYXQgaXMgYmVmb3JlIF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVz
ZWQsIHNvIGNoZWNrLiA8cmRhcjovL3Byb2JsZW0vMzk2MTEyMzY+Ci0gICAgaWYgKCFfaW1wbCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgX2ltcGwtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFu
Z2UoKTsKLX0KLQotLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Ci17
Ci0gICAgX3BhZ2UtPnNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKLX0K
LQotLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Ci17Ci0gICAgX3Bh
Z2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKLX0KLQotLSAodm9p
ZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2Nr
X3QpYWN0aW9uCi17Ci0gICAgX2ltcGwtPmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNl
RXZlbnRzKGFjdGlvbik7Ci19Ci0KLS0gKE5TTWVudSAqKV9hY3RpdmVNZW51Ci17Ci0gICAgLy8g
RklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5v
dy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKLSAgICAvLyBleHRlbmRlZCB0byByZWNvZ25p
emUgdGhlIHJlZ3VsYXIgY29udGV4dCBtZW51IGFzIHdlbGwuCi0gICAgcmV0dXJuIF9pbXBsLT5k
b21QYXN0ZU1lbnUoKTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotLSAodm9pZClf
cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBO
U1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCi17Ci0gICAgaWYg
KCFfcGFnZSkgewotICAgICAgICBjYWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY2FsbGJhY2spOwotICAgIGF1dG8gbG9jYWxDYWxsYmFjayA9IFdl
YktpdDo6Tm93UGxheWluZ0luZm9DYWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShib29sIGFjdGl2
ZSwgYm9vbCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmluZyB0aXRsZSwg
ZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlkZW50
aWZpZXIsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBoYW5kbGVyKGFj
dGl2ZSwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24s
IGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB9KTsKLQotICAgIF9wYWdlLT5y
ZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxDYWxsYmFjaykp
OwotfQotCi0tICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjoo
Q0dQb2ludClvcmlnaW4KLXsKLSAgICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBXZWJDb3JlOjpy
b3VuZGVkSW50UG9pbnQob3JpZ2luKSk7Ci19Ci0KLS0gKENHRmxvYXQpX3BhZ2VTY2FsZQotewot
ICAgIHJldHVybiBfcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLS0gKHZvaWQpX2ludGVy
bmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJs
b2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWlu
dGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5n
Rm9yQW5pbWF0ZWRSZXNpemUKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmICgh
W3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcpCi0g
ICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBhaW50QWZ0ZXJOZXh0Vmlld0Rp
ZE1vdmVUb1dpbmRvdyh0cnVlKTsKLQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJs
b2NrUHRyKHVwZGF0ZUJsb2NrKTsKLQotICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1Nl
bGYgPSBzZWxmOwotICAgIF9wYWdlLT5jYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlKFt1
cGRhdGVCbG9ja0NvcHksIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUsIHN0cm9uZ1Nl
bGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBpZiAoIXVw
ZGF0ZUJsb2NrQ29weSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIGlmICghd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSAmJiBz
dHJvbmdTZWxmLT5fZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgICAgICBzdHJvbmdTZWxm
LT5fY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFt1cGRhdGVCbG9ja0NvcHld
IHsKLSAgICAgICAgICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTSh3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplKTsKLSNlbmRp
ZgotCi0gICAgICAgIHVwZGF0ZUJsb2NrQ29weSgpOwotICAgIH0pOwotfQotCi0tIChCT09MKV9z
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCi17Ci0gICAgLy8gRm9yIHN1YmNsYXNz
ZXMgdG8gb3ZlcnJpZGU7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9zZXRTY3JvbGxp
bmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRpc2FibGVkCi17Ci19Ci0KLS8vIEV4
ZWN1dGUgdGhlIHN1cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20g
dGhlIFdlYlByb2Nlc3MuCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToo
dm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKLXsKLSAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVy
TmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50
aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwotfQotCi0tICh2b2lk
KV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRS
ZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotICAgIFtzZWxm
IF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhv
dXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpZ
RVNdOwotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRX
YWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCi17Ci0gICAgW3Nl
bGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0
aG91dFdhaXRpbmdGb3JQYWludGluZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6
ZTpOT107Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5hcHBlbmQobWFrZUJsb2Nr
UHRyKHVwZGF0ZUJsb2NrKSk7Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlXTsKLSNlbHNlCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgdXBkYXRlQmxvY2spOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2Rpc2FibGVCYWNrRm9y
d2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKLXsKLSAgICBXZWJLaXQ6OlZpZXdTbmFw
c2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVz
dGluZyh0cnVlKTsKLX0KLQotLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAq
KWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAo
XikoQk9PTCkpY29tcGxldGlvbgotewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29t
bWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAg
IGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxl
dGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7Ci0g
ICAgfSk7Ci19Ci0KLS0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0KLQotLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAg
IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotLSAodm9pZClfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9u
Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBs
ZXRpb25IYW5kbGVyCi17Ci0gICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOwotCi0gICAgaWYgKCFfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBleGNsdXNpb25SdWxlczsKLSAg
ICBpZiAoY29uZmlndXJhdGlvbikgewotICAgICAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlvbi5leGNsdXNpb25SdWxlcykgewot
ICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhjbHVzaW9uID8gRXhjbHVzaW9uUnVs
ZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGU7Ci0gICAgICAg
ICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9u
UnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxlIHsgd2tSdWxl
LmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1ZSB9IH0pOwotICAgICAgICAgICAg
ZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKLSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxl
cy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNzUnVsZSB7IHdrUnVsZS5jbGFzc05h
bWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxl
cy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsgd2tSdWxlLmVsZW1l
bnROYW1lIH0gfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfcGFnZS0+c3RhcnRUZXh0TWFu
aXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJW
aWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRl
bnRpZmllciBpdGVtSUQsCi0gICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKLSAgICAgICAg
aWYgKCF3ZWFrU2VsZikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIHJldGFp
bmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOwotICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFp
bmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsKLSAgICAgICAgaWYgKCFkZWxlZ2F0
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tl
bnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUoKV07Ci0g
ICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKLSAgICAgICAgICAgIGF1dG8gd2tU
b2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsK
LSAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4u
aWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50
OnRva2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4u
aXNFeGNsdWRlZF07Ci0gICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0
KCldOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRN
YW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIo
aXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOwotICAgICAgICBbZGVsZWdhdGUg
X3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTpp
dGVtLmdldCgpXTsKLSAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJs
b2NrKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBz
dWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIHVzaW5nIE1hbmlwdWxhdGlvblJlc3Vs
dCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1
bHQ7Ci0KLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGl0ZW1J
RCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUludDY0
KCkpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwotICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7Ci0gICAgICAgIGF1dG8gdG9rZW5JRCA9IG1h
a2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpU
b2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2NCgp
KTsKLSAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7Ci0g
ICAgfQotCi0gICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vu
cywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKLSAgICAgICAgY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7Ci0gICAg
fSk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChDR1JlY3QpX2RyYWdDYXJl
dFJlY3QKLXsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHJldHVybiBfcGFnZS0+Y3Vy
cmVudERyYWdDYXJldFJlY3QoKTsKLSNlbHNlCi0gICAgcmV0dXJuIENHUmVjdFplcm87Ci0jZW5k
aWYKLX0KLQotLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1Bv
aW50KWxvY2F0aW9uCi17Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVMb25nUHJlc3NBY3Rp
b25BdExvY2F0aW9uOmxvY2F0aW9uXTsKLX0KLQotLSAodm9pZClfc2ltdWxhdGVUZXh0RW50ZXJl
ZDooTlNTdHJpbmcgKil0ZXh0Ci17Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVUZXh0RW50
ZXJlZDp0ZXh0XTsKLX0KLQotLSAodm9pZClfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFpdERpZENo
YW5nZQotewotICAgIGlmICghX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBfcGFnZS0+ZWZm
ZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOwotICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3
QmFja2dyb3VuZF07Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChC
T09MKV9iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
cmV0dXJuIF9pbXBsLT5iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcoKTsKLSNlbHNlCi0gICAgaWYg
KCFfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gX2dl
c3R1cmVDb250cm9sbGVyLT5iZWdpblNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5n
KFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7Ci0j
ZW5kaWYKLX0KLQotLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nCi17Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIHJldHVybiBfaW1wbC0+Y29tcGxldGVCYWNrU3dpcGVGb3JUZXN0
aW5nKCk7Ci0jZWxzZQotICAgIGlmICghX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+Y29tcGxldGVTaW11bGF0ZWRT
d2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U3dpcGVEaXJlY3Rpb246OkJhY2spOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3NldERlZmVyc0xv
YWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRpbmcKLXsKLSAgICBfcGFnZS0+c2V0RGVm
ZXJzTG9hZGluZ0ZvclRlc3RpbmcoZGVmZXJzTG9hZGluZyk7Ci19Ci0KLS0gKHZvaWQpX3NldFNo
YXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzooQk9P
TClyZXNvbHZlZAotewotICAgIF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBs
ZXRpb25Gb3JUZXN0aW5nID0gcmVzb2x2ZWQ7Ci19Ci0KLS0gKEJPT0wpX2hhc0luc3BlY3RvckZy
b250ZW5kCi17Ci0gICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5oYXNJbnNwZWN0b3JGcm9udGVu
ZCgpOwotfQotCi0tIChfV0tJbnNwZWN0b3IgKilfaW5zcGVjdG9yCi17Ci0gICAgaWYgKGF1dG8q
IGluc3BlY3RvciA9IF9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIo
Kmluc3BlY3Rvcik7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoX1dLRnJhbWVIYW5kbGUgKilf
bWFpbkZyYW1lCi17Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUoZnJhbWUtPmZy
YW1lSUQoKSkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHlGb3JUZXN0aW5nCi17Ci0gICAgaWYgKF9wYWdlKQotICAgICAgICBfcGFn
ZS0+cHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKFdlYktpdDo6SXNTdXNwZW5zaW9uSW1t
aW5lbnQ6OlllcywgW10geyB9KTsKLX0KLQotLSAodm9pZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRl
c3RpbmcKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuc2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0
aW5nOihpbnQpdmFsdWUKLXsKLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBfcGFnZS0+cHJvY2VzcygpLnNldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZyhzdGF0aWNfY2Fz
dDxXZWJLaXQ6OkFzc2VydGlvblN0YXRlPih2YWx1ZSkpOwotfQotCi0tIChCT09MKV9oYXNTZXJ2
aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwotewotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZh
bHNlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTClfaGFz
U2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcKLXsKLSNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCi0gICAgcmV0dXJuIF9wYWdlID8gX3BhZ2UtPnByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkg
OiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQp
X2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdAotewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0g
ICAgV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZGVueU5leHRV
c2VyTWVkaWFSZXF1ZXN0KCk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0tICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3Qp
ZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBh
Z2VJRAotewotI2lmIFVTRShTWVNURU1fUFJFVklFVykKLSAgICBpZiAoX3BhZ2UpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3BhZ2UtPnN5c3RlbVByZXZpZXdDb250
cm9sbGVyKCkpCi0gICAgICAgICAgICBwcmV2aWV3Q29udHJvbGxlci0+dHJpZ2dlclN5c3RlbVBy
ZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVtZW50SUQsIGRvY3VtZW50SUQsIHBh
Z2VJRCk7Ci0gICAgfQotI2VuZGlmCi19Ci0jZW5kaWYKLQotQGVuZAotCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBAaW1wbGVtZW50YXRpb24g
V0tXZWJWaWV3IChGdWxsU2NyZWVuQVBJX1ByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDQzNTA4MGYz
MjQ0NWNlOGU3ZjU2ZWU1ZGMwMDQzOTRiY2YxYWE1ZDkuLmEwNDhiMDcxNjg4Y2UyOTFmZjhkNTZm
MmM5NzBjOGFkYzU0Zjg0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJS2l0U1BJLmgiCkBAIC02OCwxOCArNjksNDcgQEAgY2xh
c3MgU2FmZUJyb3dzaW5nV2FybmluZzsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CisjaWYgUExBVEZPUk0oTUFDKQorY2xhc3MgV2Vi
Vmlld0ltcGw7CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY2xhc3MgVmlld0dl
c3R1cmVDb250cm9sbGVyOworI2VuZGlmCiB9CiAKIEBjbGFzcyBXS1dlYlZpZXdDb250ZW50UHJv
dmlkZXJSZWdpc3RyeTsKIEBjbGFzcyBXS1Bhc3N3b3JkVmlldzsKIEBjbGFzcyBfV0tGcmFtZUhh
bmRsZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorQGNsYXNzIFdLU2Nyb2xsVmlldzsKK0Bj
bGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworI2VuZGlmCitAcHJvdG9jb2wgX1dL
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOwogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSBXS19X
RUJfVklFV19QUk9UT0NPTFMgewogCiBAcGFja2FnZQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBfY29uZmlndXJhdGlvbjsKLQogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBh
Z2VQcm94eT4gX3BhZ2U7CisgICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisgICAgT3B0aW9uYWw8Qk9PTD4g
X3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rpbmc7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0lt
cGw+IF9pbXBsOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFJldGFp
blB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OworICAgIFJldGFpblB0cjxXS0NvbnRlbnRW
aWV3PiBfY29udGVudFZpZXc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyPiBfZ2VzdHVyZUNvbnRyb2xsZXI7CisgICAgVmVjdG9yPEJsb2NrUHRyPHZv
aWQgKCk+PiBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzOworCisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyPiBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKKworICAgIENHUmVjdCBf
aW5wdXRWaWV3Qm91bmRzOworI2VuZGlmCiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtODcsNiArMTE3LDggQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX3Byb2Nlc3NXaWxs
U3dhcDsKIC0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzczsKIAorLSAoVUlWaWV3ICopX2N1cnJl
bnRDb250ZW50VmlldzsKKwogLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKIC0g
KHZvaWQpX2RpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb247CiAtICh2b2lkKV9sYXllclRyZWVDb21t
aXRDb21wbGV0ZTsKQEAgLTk5LDggKzEzMSwxMCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogCiAtICh2
b2lkKV9zY3JvbGxUb0NvbnRlbnRTY3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClz
Y3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdp
bjsKIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qg
b3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6
KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKKwogLSAoZG91YmxlKV9pbml0aWFsU2NhbGVG
YWN0b3I7CiAtIChkb3VibGUpX2NvbnRlbnRab29tU2NhbGU7CisKIC0gKGRvdWJsZSlfdGFyZ2V0
Q29udGVudFpvb21TY2FsZUZvclJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpdGFyZ2V0
UmVjdCBjdXJyZW50U2NhbGU6KGRvdWJsZSljdXJyZW50U2NhbGUgZml0RW50aXJlUmVjdDooQk9P
TClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVt
U2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGU7CiAtICh2b2lkKV96b29tVG9Gb2N1c1JlY3Q6KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpZm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGlu
YXRlcyBpbnNpZGVGaXhlZDooQk9PTClpbnNpZGVGaXhlZCBmb250U2l6ZTooZmxvYXQpZm9udFNp
emUgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91Ymxl
KW1heGltdW1TY2FsZSBhbGxvd1NjYWxpbmc6KEJPT0wpYWxsb3dTY2FsaW5nIGZvcmNlU2Nyb2xs
OihCT09MKWZvcmNlU2Nyb2xsOwogLSAoQk9PTClfem9vbVRvUmVjdDooV2ViQ29yZTo6RmxvYXRS
ZWN0KXRhcmdldFJlY3Qgd2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gZml0
RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmlt
dW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgbWluaW11bVNjcm9sbERp
c3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7CkBAIC0xNTYsMTMgKzE5MCwxMCBA
QCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAodm9pZClfcmVzZXRGb2N1c1ByZXNlcnZhdGlvbkNvdW50
OwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFzc3dvcmRWaWV3ICpfcGFz
c3dvcmRWaWV3OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzQmFj
a2dyb3VuZDsKLQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXdDb250
ZW50UHJvdmlkZXJSZWdpc3RyeSAqX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5OwotCiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLU2VsZWN0aW9uR3JhbnVsYXJpdHkgX3NlbGVjdGlv
bkdyYW51bGFyaXR5OwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lz
QmFja2dyb3VuZDsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfYWxsb3dz
RG91YmxlVGFwR2VzdHVyZXM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wg
X3N0eWx1c1RhcEdlc3R1cmVTaG91bGRDcmVhdGVFZGl0YWJsZUltYWdlOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXZlU2V0T2JzY3VyZWRJbnNldHM7CkBAIC0xNzIs
NiArMjAzLDcgQEAgc3RydWN0IFByaW50SW5mbzsKIAogLSAoQk9PTClfZWZmZWN0aXZlQXBwZWFy
YW5jZUlzRGFyazsKIC0gKEJPT0wpX2VmZmVjdGl2ZVVzZXJJbnRlcmZhY2VMZXZlbElzRWxldmF0
ZWQ7CisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAjaWYgRU5BQkxFKEFUVEFD
SE1FTlRfRUxFTUVOVCkKQEAgLTE4MCw2ICsyMTIsOCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAo
dm9pZClfZGlkSW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0
dGFjaG1lbnQ7CiAjZW5kaWYKIAorLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRh
dGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQ
YWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0aW5nRm9y
QW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTsKKwog
LSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dz
aW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBVUkw+JiYpPiYmKWNvbXBs
ZXRpb25IYW5kbGVyOwogLSAodm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nOwogLSAodm9p
ZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uOwpAQCAt
MTkwLDcgKzIyNCwxNiBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqKV9wYWdlOwogCiAjaWYgUExBVEZPUk0oTUFDKQorCistICh2b2lkKV9wcmVwYXJlRm9ySW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwor
LSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRp
b24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQpX2dlc3R1cmVF
dmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcgcmVw
bGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlOwogLSAodm9pZClfd2ViX2dy
YW50RE9NUGFzdGVBY2Nlc3M7CisKICNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCA3ODRiNmIx
ZTIxMGJhYzM3ZjllMGNhYWU1ZTYzMjM0OTQ1YzQ5MTdkLi4yNjg4YWM3YWQ5NjYzMDViZjljYTQz
OWRlNWNmMWQ3MmEzZDk1NGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTEwOCwxMyArMTA4LDEwIEBAIHR5cGVk
ZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQGNsYXNzIF9XS0ZyYW1l
SGFuZGxlOwogQGNsYXNzIF9XS0hpdFRlc3RSZXN1bHQ7CiBAY2xhc3MgX1dLSWNvbkxvYWRpbmdE
ZWxlZ2F0ZTsKLUBjbGFzcyBfV0tJbnNwZWN0b3I7CiBAY2xhc3MgX1dLUmVtb3RlT2JqZWN0UmVn
aXN0cnk7CiBAY2xhc3MgX1dLU2FmZUJyb3dzaW5nV2FybmluZzsKIEBjbGFzcyBfV0tTZXNzaW9u
U3RhdGU7CiBAY2xhc3MgX1dLVGV4dElucHV0Q29udGV4dDsKLUBjbGFzcyBfV0tUZXh0TWFuaXB1
bGF0aW9uQ29uZmlndXJhdGlvbjsKLUBjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbTsKIEBj
bGFzcyBfV0tUaHVtYm5haWxWaWV3OwogQGNsYXNzIF9XS1dlYnNpdGVQb2xpY2llczsKIEBjbGFz
cyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CkBAIC0xMjUsNyArMTIyLDYgQEAgdHlwZWRlZiBO
U19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvdG9jb2wgX1dLRnVsbHNj
cmVlbkRlbGVnYXRlOwogQHByb3RvY29sIF9XS0ljb25Mb2FkaW5nRGVsZWdhdGU7CiBAcHJvdG9j
b2wgX1dLSW5wdXREZWxlZ2F0ZTsKLUBwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGU7CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1ByaXZhdGUpCiAKQEAgLTIxMiw2ICsyMDgs
MTIgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAtICh2
b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3
YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICop
ZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxl
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClf
c2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJp
bmcgKil0aXRsZSB3YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1
dGVkU3RyaW5nICopZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikp
OwogCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7
CistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9y
UGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIuMyksIGlvcygxMC4zKSk7CisjaWYgVEFSR0VUX09TX0lQSE9ORQorLSAodm9pZClf
ZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Jsb2NrX3QpdXBk
YXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworI2VuZGlmCisKIC0gKHZvaWQp
X2lzSklURW5hYmxlZDoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfcmVtb3ZlRGF0YURl
dGVjdGVkTGlua3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbiBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogCkBAIC0yNzcsNiArMjc5LDggQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgc2V0dGVyPV9zZXREcmFnSW50ZXJhY3Rpb25Qb2xpY3k6KSBfV0tEcmFnSW50ZXJhY3Rp
b25Qb2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeSBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3Nob3VsZEF2b2lkUmVz
aXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjAp
KTsKIAorLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50
KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudElu
Zm8gKikpYmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOworCiAtICh2b2lkKV9iZWdp
bkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2U7CiAtICh2b2lkKV9lbmRJbnRlcmFjdGl2
ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlOwogLSAodm9pZClfaGlkZUNvbnRlbnRVbnRpbE5leHRVcGRh
dGU7CkBAIC0zMTAsNyArMzE0LDExIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWRnZSkgewogLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0aW9u
Q29udGVudDooTlNTdHJpbmcgKiljb250ZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsK
IAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKl9zYWZlQnJvd3NpbmdX
YXJuaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CisKKy0g
KFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEyLjApKTsKKwogI2Vsc2UKKwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1Zp
ZXcgKl9zYWZlQnJvd3NpbmdXYXJuaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLUmVjdEVk
Z2UgX3Bpbm5lZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwpAQCAtMzU2
LDYgKzM2NCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkg
ewogCiAtICh2b2lkKV9wcmVwYXJlRm9yTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXRhcmdldFdp
bmRvdyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkd3JpdGUsIHNldHRlcj1fc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTopIEJPT0wgX3VzZVN5c3Rl
bUFwcGVhcmFuY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCkpOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlOikgX1dLT3ZlcmxheVNj
cm9sbGJhclN0eWxlIF9vdmVybGF5U2Nyb2xsYmFyU3R5bGUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7CiBAcHJvcGVydHkgKHN0cm9uZywgbm9uYXRvbWljLCBzZXR0ZXI9X3NldElu
c3BlY3RvckF0dGFjaG1lbnRWaWV3OikgTlNWaWV3ICpfaW5zcGVjdG9yQXR0YWNobWVudFZpZXcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAKQEAgLTQ1MSwxNDAgKzQ2MCw0IEBA
IHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQGludGVyZmFj
ZSBXS1dlYlZpZXcgKCkgPFVJUmVzcG9uZGVyU3RhbmRhcmRFZGl0QWN0aW9ucz4KIEBlbmQKIAot
I2VuZGlmCi0KLUBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmcpCi0KLS0gKHZvaWQpX3Nl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAo
TlNEaWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1
c2VySW50ZXJmYWNlSXRlbSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAu
MykpOwotCi0jaWYgVEFSR0VUX09TX0lQSE9ORQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjApKTsKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2lu
dClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0tIChDR1BvaW50KV9jb252ZXJ0
UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTAuMCkpOwotCi0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dCBXS19BUElfQVZB
SUxBQkxFKGlvcygxMC4wKSk7Ci0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29y
eVZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClfZGlzbWlzc0ZpbGVQ
aWNrZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwotLSAodm9pZClzZWxlY3RGb3JtQWNj
ZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXggV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqdGV4dENvbnRlbnRU
eXBlRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpzZWxlY3RGb3JtUG9wb3ZlclRpdGxlIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLS0g
KHZvaWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5T
SW50ZWdlciltaW51dGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi0tICh2b2lkKWFw
cGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5nIHRvU3RyaW5nOihOU1N0cmlu
ZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLQotLSAodm9pZClkaWRT
dGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwot
LSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEwLjMpKTsKLQotLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51IFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDEwLjMpKTsKLS0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudSBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVw
ZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygx
MC4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0
Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwotCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8TlNWYWx1ZSAqPiAqX3VpVGV4
dFNlbGVjdGlvblJlY3RzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF91aVRleHRDYXJldFJlY3QgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMykpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3Qg
X2lucHV0Vmlld0JvdW5kcyBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKl9zY3JvbGxpbmdUcmVlQXNUZXh0IFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU051bWJlciAqX3N0YWJsZVN0YXRlT3ZlcnJpZGUgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMykpOwotCi0tIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVu
c2lnbmVkIGxvbmcgbG9uZylsYXllcklEIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLS0g
KHZvaWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0tICh2b2lkKV9zaW11bGF0ZVRleHRFbnRl
cmVkOihOU1N0cmluZyAqKXRleHQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfZHJhZ0NhcmV0UmVjdCBXS19BUElf
QVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJh
Z1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTMuMCkpOwotCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9z
aXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3Rp
dmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0t
ICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0lu
dGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNl
bGVjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Ci0tICh2b2lkKV9hY2Nlc3NpYmls
aXR5Q2xlYXJTZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOwotLSAoVUlWaWV3
ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkp
OwotCi0tICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0
X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90
KXBhZ2VJRCBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKLSNlbHNlCi0tICh2b2lkKV9kaXNtaXNzQ29udGVu
dFJlbGF0aXZlQ2hpbGRXaW5kb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwot
LSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfYmVnaW5EZWZlcnJp
bmdWaWV3SW5XaW5kb3dDaGFuZ2VzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwot
LSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5n
ZXNTeW5jIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZ2VzdHVy
ZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNB
cnJheSAqKWN1c3RvbVN3aXBlVmlld3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
Ci0tICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0OihmbG9hdCl0b3BD
b250ZW50SW5zZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChOU1ZpZXcg
KilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRlcyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0
ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9wcmVwYXJlRm9y
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkp
OwotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChCT09MKV9jYW5DaGFu
Z2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZl
bnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXREaWRNb3ZlU3dp
cGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVjdCkpY2FsbGJhY2sgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRU
b3RhbEhlaWdodE9mQmFubmVyczopIENHRmxvYXQgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIGNvcHks
IHNldHRlcj1fc2V0VW5kZXJsYXlDb2xvcjopIE5TQ29sb3IgKl91bmRlcmxheUNvbG9yIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3
cml0ZSwgc2V0dGVyPV9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6KSBCT09MIF9pZ25vcmVzTm9u
V2hlZWxFdmVudHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dL
V2ViVmlldyAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2Vy
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpKTsKLS0gKHZvaWQpX3JlcXVlc3RDb250cm9s
bGVkRWxlbWVudElEIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClf
aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9oYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2ZvcmNlUmVxdWVz
dENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9k
aWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTCl2aXNpYmxlIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIuMykpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
LjMpKTsKLS0gKHZvaWQpX2luc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihO
U1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7
Ci0tIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRVc2VTeXN0ZW1B
cHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBwZWFyYW5jZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTWVudSAqX2Fj
dGl2ZU1lbnUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSk7Ci0KLS0gKHZvaWQp
X3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhlaWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEyLjMpKTsKLS0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2RvQWZ0ZXJQcm9jZXNz
aW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbiBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpKTsKLSNlbmRpZgotCi0tICh2b2lkKV9yZXF1ZXN0QWN0
aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwg
ZG91YmxlLCBkb3VibGUsIE5TSW50ZWdlcikpY2FsbGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSwgaW9zKDExLjMpKTsKLQotLSAodm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0
KXNjYWxlIHdpdGhPcmlnaW46KENHUG9pbnQpb3JpZ2luIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKLS0gKENHRmxvYXQpX3BhZ2VTY2FsZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7
Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsK
LS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JB
bmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfZG9BZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2
b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAu
MykpOwotLSAodm9pZClfZG9BZnRlck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU6KHZvaWQg
KF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3Mo
MTEuMCkpOwotCi0tICh2b2lkKV9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlG
b3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7Ci0t
ICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDoo
TlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9u
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7Ci0KLS0gKHZvaWQp
X2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwg
aW9zKDEyLjApKTsKLQotLSAoQk9PTClfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nOwotLSAoQk9P
TClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nOwotLSAodm9pZClfc2V0RGVmZXJzTG9hZGlu
Z0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZzsKLQotLSAodm9pZClfc2V0U2hhcmVTaGVl
dENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29s
dmVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzSW5zcGVjdG9yRnJvbnRlbmQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0
ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRp
b24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwotLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGlu
Z1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJs
ZWRGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
Ci0tICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZzsKLS0gKHZv
aWQpX3Byb2Nlc3NEaWRSZXN1bWVGb3JUZXN0aW5nOwotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyRm9y
ZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0
aW5nOihpbnQpc3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKLQotQGVuZAorI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIxNDVkMGE4MmMyYzI4NzUwZTYxYWM0YTM3M2VlNTU1MjUzNTgyNzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
VGVzdGluZy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXS1dlYlZp
ZXdUZXN0aW5nSU9TLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCisKK0BjbGFz
cyBfV0tGcmFtZUhhbmRsZTsKK0BjbGFzcyBfV0tJbnNwZWN0b3I7CitAY2xhc3MgX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb247CitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW07
CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdL
V2ViVmlldyAoV0tUZXN0aW5nKQorCistICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2Nh
bGUgd2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW47CistIChDR0Zsb2F0KV9wYWdlU2NhbGU7CisK
Ky0gKHZvaWQpX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJP
T0wpZW5hYmxlZDsKKy0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0
ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW07CisKKy0gKHZvaWQpX3JlcXVlc3RBY3Rp
dmVOb3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9PTCwgTlNTdHJpbmcqLCBk
b3VibGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjazsKKworLSAodm9pZClfZG9BZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplRm9yVGVz
dGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2s7CistICh2b2lkKV9kb0FmdGVyTmV4dFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2s7CisKKy0g
KHZvaWQpX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3Rpbmc7Cist
ICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDoo
TlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9u
OworCistICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3Q7CisKKy0gKEJPT0wpX2JlZ2lu
QmFja1N3aXBlRm9yVGVzdGluZzsKKy0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGlu
ZzsKKy0gKHZvaWQpX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRp
bmc7CisKKy0gKHZvaWQpX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNv
bHV0aW9uRm9yVGVzdGluZzooQk9PTClyZXNvbHZlZDsKKworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIF9oYXNJbnNwZWN0b3JGcm9udGVuZDsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZTsKKworQHByb3BlcnR5
IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOikg
aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZTsKKy0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dL
VGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29t
cGxldGlvbjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX2NvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBs
ZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcjsKKworQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVz
dGluZzopIEJPT0wgX3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc7CisKKy0gKHZv
aWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nOworLSAodm9pZClfcHJv
Y2Vzc0RpZFJlc3VtZUZvclRlc3Rpbmc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyRm9yZWdy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZzsKKy0gKHZvaWQpX3NldEFzc2VydGlvblN0YXRlRm9yVGVz
dGluZzooaW50KXN0YXRlOworCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2ODc3ZjU5NWY3
Yzg3NmRiZTcyOWM0MGFhMTMxZTBjYmUzODc2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQpAQCAtMCwwICsx
LDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCisKKyNpbXBvcnQgIlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgi
CisjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94
eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgorI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKKyNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tU
ZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVs
ZS5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKyNpbXBvcnQgIl9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbi5oIgorI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9uQnViYmxl
Lmg+CisKKworQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nKQorCistICh2b2lk
KV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW4K
K3sKKyAgICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQo
b3JpZ2luKSk7Cit9CisKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZQoreworICAgIHJldHVybiBfcGFn
ZS0+cGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKKy0gKHZvaWQpX3NldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZAoreworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgW19jb250ZW50VmlldyBzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQ6ZW5hYmxlZF07CisjZWxzZQorICAgIF9pbXBsLT5zZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoZW5hYmxlZCk7CisjZW5kaWYKK30KKworLSAoTlNEaWN0aW9uYXJ5ICopX2Nv
bnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbQor
eworICAgIGlmIChbdXNlckludGVyZmFjZUl0ZW0gaXNFcXVhbFRvU3RyaW5nOkAidmFsaWRhdGlv
bkJ1YmJsZSJdKSB7CisgICAgICAgIGF1dG8qIHZhbGlkYXRpb25CdWJibGUgPSBfcGFnZS0+dmFs
aWRhdGlvbkJ1YmJsZSgpOworICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbGlkYXRpb25CdWJi
bGUgPyB2YWxpZGF0aW9uQnViYmxlLT5tZXNzYWdlKCkgOiBlbXB0eVN0cmluZygpOworICAgICAg
ICBkb3VibGUgZm9udFNpemUgPSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+
Zm9udFNpemUoKSA6IDA7CisgICAgICAgIHJldHVybiBAeyB1c2VySW50ZXJmYWNlSXRlbTogQHsg
QCJtZXNzYWdlIjogKE5TU3RyaW5nICopbWVzc2FnZSwgQCJmb250U2l6ZSI6IFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOmZvbnRTaXplXSB9IH07CisgICAgfQorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBfY29udGVudHNPZlVzZXJJbnRlcmZh
Y2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtXTsKKyNlbHNlCisgICAgcmV0dXJu
IG5pbDsKKyNlbmRpZgorfQorCistICh2b2lkKV9yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Np
b25JbmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5T
SW50ZWdlcikpY2FsbGJhY2sKK3sKKyAgICBpZiAoIV9wYWdlKSB7CisgICAgICAgIGNhbGxiYWNr
KE5PLCBOTywgQCIiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpLCAwKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gaGFuZGxlciA9IG1ha2VCbG9ja1B0cihjYWxsYmFjayk7
CisgICAgYXV0byBsb2NhbENhbGxiYWNrID0gV2ViS2l0OjpOb3dQbGF5aW5nSW5mb0NhbGxiYWNr
OjpjcmVhdGUoW2hhbmRsZXJdKGJvb2wgYWN0aXZlLCBib29sIHJlZ2lzdGVyZWRBc05vd1BsYXlp
bmdBcHBsaWNhdGlvbiwgU3RyaW5nIHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFw
c2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRlbnRpZmllciwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6
OkVycm9yKSB7CisgICAgICAgIGhhbmRsZXIoYWN0aXZlLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5n
QXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZp
ZXIpOworICAgIH0pOworCisgICAgX3BhZ2UtPnJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lv
bkluZm8oV1RGTW92ZShsb2NhbENhbGxiYWNrKSk7Cit9CisKKy0gKEJPT0wpX3Njcm9sbGluZ1Vw
ZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVy
cmlkZTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpX3NldFNjcm9sbGluZ1VwZGF0ZXNE
aXNhYmxlZEZvclRlc3Rpbmc6KEJPT0wpZGlzYWJsZWQKK3sKK30KKworLSAodm9pZClfZG9BZnRl
ck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplRm9y
VGVzdGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBbc2VsZiBfaW50ZXJu
YWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGlu
Z0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6WUVTXTsKK30K
KworLSAodm9pZClfZG9BZnRlck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU6KHZvaWQgKF4p
KHZvaWQpKXVwZGF0ZUJsb2NrCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBfdmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzLmFwcGVuZChtYWtlQmxvY2tQdHIodXBkYXRl
QmxvY2spKTsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwor
I2Vsc2UKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRh
dGVCbG9jayk7CisjZW5kaWYKK30KKworLSAodm9pZClfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNo
b3RWb2xhdGlsaXR5Rm9yVGVzdGluZworeworICAgIFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6
OnNpbmdsZXRvbigpLnNldERpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKHRydWUp
OworfQorCistICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBh
cmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSlj
b21wbGV0aW9uCit7CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kLCBhcmd1
bWVudCwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24p
XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGNhcHR1
cmVkQ29tcGxldGlvbkJsb2NrKQorICAgICAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2so
ZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKKyAgICB9KTsKK30K
KworLSAoaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZQoreworICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmdldEF1dG9y
ZWxlYXNlZCgpOworfQorCistICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KGlk
IDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistICh2b2lkKV9zdGFydFRleHRNYW5p
cHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0
aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICB1c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7CisKKyAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUgfHwgIV9wYWdlKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IGV4Y2x1c2lvblJ1bGVzOworICAgIGlmIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1
bGUgKndrUnVsZSBpbiBjb25maWd1cmF0aW9uLmV4Y2x1c2lvblJ1bGVzKSB7CisgICAgICAgICAg
ICBhdXRvIHR5cGUgPSB3a1J1bGUuaXNFeGNsdXNpb24gPyBFeGNsdXNpb25SdWxlOjpUeXBlOjpF
eGNsdWRlIDogRXhjbHVzaW9uUnVsZTo6VHlwZTo6SW5jbHVkZTsKKyAgICAgICAgICAgIGlmICh3
a1J1bGUuYXR0cmlidXRlTmFtZSkKKyAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBl
bmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGUgeyB3a1J1bGUuYXR0cmlidXRl
TmFtZSwgd2tSdWxlLmF0dHJpYnV0ZVZhbHVlIH0gfSk7CisgICAgICAgICAgICBlbHNlIGlmICh3
a1J1bGUuY2xhc3NOYW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7
dHlwZSwgRXhjbHVzaW9uUnVsZTo6Q2xhc3NSdWxlIHsgd2tSdWxlLmNsYXNzTmFtZSB9IH0pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7
dHlwZSwgRXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGUgeyB3a1J1bGUuZWxlbWVudE5hbWUgfSB9
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9wYWdlLT5zdGFydFRleHRNYW5pcHVsYXRpb25z
KGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYp
XSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0
ZW1JRCwKKyAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBpZiAoIXdlYWtT
ZWxmKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0g
d2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0YWluZWRTZWxmIF90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOworICAgICAgICBpZiAoIWRlbGVnYXRlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011
dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKKyAgICAgICAgZm9y
IChhdXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAgYXV0byB3a1Rva2VuID0gYWRv
cHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICAg
ICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVy
LnRvVUludDY0KCkpXTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29u
dGVudF07CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVk
XTsKKyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtSUQudG9V
SW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7CisgICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpy
ZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtOml0ZW0uZ2V0KCld
OworICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildICgpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soKTsKKyAg
ICB9KTsKK30KKworLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVzdWx0ID0gV2ViQ29y
ZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3VsdDsKKworICAg
IGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaXRlbUlEID0gbWFrZU9i
amVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1J
ZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikudG9VSW50NjQoKSk7CisKKyAg
ICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VuPiB0b2tlbnM7CisgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKndrVG9r
ZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAgICAgYXV0byB0b2tlbklEID0gbWFrZU9iamVjdElk
ZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OlRva2VuSWRlbnRp
ZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLnRvVUludDY0KCkpOworICAgICAg
ICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5p
cHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4uY29udGVudCB9KTsKKyAgICB9CisKKyAg
ICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zLCBbY2FwdHVy
ZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoTWFu
aXB1bGF0aW9uUmVzdWx0IHJlc3VsdCkgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9j
ayhyZXN1bHQgPT0gTWFuaXB1bGF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKyAgICB9KTsKK30KKwor
LSAoQk9PTClfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nCit7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHJldHVybiBfaW1wbC0+YmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKCk7CisjZWxzZQorICAg
IGlmICghX2dlc3R1cmVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJu
IF9nZXN0dXJlQ29udHJvbGxlci0+YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVz
dGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2sp
OworI2VuZGlmCit9CisKKy0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZworewor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPmNvbXBsZXRlQmFja1N3aXBlRm9y
VGVzdGluZygpOworI2Vsc2UKKyAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuIE5POworICAgIHJldHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmNvbXBsZXRlU2ltdWxh
dGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKKyNlbmRpZgorfQorCistICh2b2lkKV9zZXREZWZl
cnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZlcnNMb2FkaW5nCit7CisgICAgX3BhZ2UtPnNl
dERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nKGRlZmVyc0xvYWRpbmcpOworfQorCistICh2b2lkKV9z
ZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRlc3Rpbmc6
KEJPT0wpcmVzb2x2ZWQKK3sKKyAgICBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVD
b21wbGV0aW9uRm9yVGVzdGluZyA9IHJlc29sdmVkOworfQorCistIChCT09MKV9oYXNJbnNwZWN0
b3JGcm9udGVuZAoreworICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+aGFzSW5zcGVjdG9yRnJv
bnRlbmQoKTsKK30KKworLSAoX1dLSW5zcGVjdG9yICopX2luc3BlY3RvcgoreworICAgIGlmIChh
dXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIHJldHVybiB3cmFw
cGVyKCppbnNwZWN0b3IpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKF9XS0ZyYW1lSGFuZGxl
ICopX21haW5GcmFtZQoreworICAgIGlmIChhdXRvKiBmcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKGZyYW1l
LT5mcmFtZUlEKCkpKTsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9wcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZworeworICAgIGlmIChfcGFnZSkKKyAgICAgICAg
X3BhZ2UtPnByb2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChXZWJLaXQ6OklzU3VzcGVuc2lv
bkltbWluZW50OjpZZXMsIFtdIHsgfSk7Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NEaWRSZXN1bWVG
b3JUZXN0aW5nCit7CisgICAgaWYgKF9wYWdlKQorICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnNl
bmRQcm9jZXNzRGlkUmVzdW1lKCk7Cit9CisKKy0gKHZvaWQpX3NldEFzc2VydGlvblN0YXRlRm9y
VGVzdGluZzooaW50KXZhbHVlCit7CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgX3BhZ2UtPnByb2Nlc3MoKS5zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rpbmcoc3RhdGlj
X2Nhc3Q8V2ViS2l0OjpBc3NlcnRpb25TdGF0ZT4odmFsdWUpKTsKK30KKworLSAoQk9PTClfaGFz
U2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcKK3sKKyNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCisgICAgcmV0dXJuIF9wYWdlID8gX3BhZ2UtPnByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkg
OiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKy0gKEJPT0wp
X2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nCit7CisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIHJldHVybiBfcGFnZSA/IF9wYWdlLT5wcm9jZXNzKCku
cHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZygpIDogZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCistICh2
b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QKK3sKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorICAgIFdlYktpdDo6VXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmRlbnlO
ZXh0VXNlck1lZGlhUmVxdWVzdCgpOworI2VuZGlmCit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjM5Yzc0MDIxOTYxODFlZTA3Y2I4NDY4YTY5YmUxZTgzZTI4MWRkMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGlu
Z0lPUy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Lmg+CisKKyNpZiBUQVJHRVRfT1NfSVBIT05FCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3
IChXS1Rlc3RpbmdJT1MpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0
IF9jb250ZW50VmlzaWJsZVJlY3Q7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
U3RyaW5nICp0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nOworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBOU1N0cmluZyAqc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZTsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PE5TVmFsdWUgKj4gKl91aVRleHRTZWxlY3Rp
b25SZWN0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF91aVRleHRD
YXJldFJlY3Q7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfaW5wdXRW
aWV3Qm91bmRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqX3Nj
cm9sbGluZ1RyZWVBc1RleHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTnVt
YmVyICpfc3RhYmxlU3RhdGVPdmVycmlkZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgQ0dSZWN0IF9kcmFnQ2FyZXRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBCT09MIF9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXI7CisKKy0gKENHUG9pbnQpX2NvbnZl
cnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludDsKKy0gKENHUG9pbnQpX2Nv
bnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludDsKKworLSAodm9pZClr
ZXlib2FyZEFjY2Vzc29yeUJhck5leHQ7CistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJl
dmlvdXM7CistICh2b2lkKWRpc21pc3NGb3JtQWNjZXNzb3J5VmlldzsKKy0gKHZvaWQpX2Rpc21p
c3NGaWxlUGlja2VyOworLSAodm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQp
cm93SW5kZXg7CisKKy0gKHZvaWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOihOU0ludGVnZXIp
aG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGU7CisKKy0gKHZvaWQpYXBwbHlBdXRvY29ycmVj
dGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJpbmc6KE5TU3RyaW5nICopb2xkU3RyaW5n
IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7
CisKKy0gKHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uOworLSAodm9pZClkaWRF
bmRGb3JtQ29udHJvbEludGVyYWN0aW9uOworCistICh2b2lkKV9kaWRTaG93Q29udGV4dE1lbnU7
CistICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnU7CistICh2b2lkKV9kb0FmdGVyUmVzZXR0
aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKKy0gKE5TRGlj
dGlvbmFyeSAqKV9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5zaWduZWQgbG9uZyBsb25nKWxh
eWVySUQ7CistICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENHUG9p
bnQpbG9jYXRpb247CistICh2b2lkKV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAqKXRl
eHQ7CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGlu
ZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRy
aWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVl
ICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3Rv
cmVTZWxlY3Rpb247CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb247CisKKy0g
KHZvaWQpX3RyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVt
ZW50SUQgZG9jdW1lbnQ6KHVpbnQ2NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlE
OworCitAZW5kCisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjQxNzk5YTk0Y2M2MDFiMGY3MDhkMGUwMWI1MDZhOGEwYmI4YjJhMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGlu
Z0lPUy5tbQpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmgi
CisjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCisjaW1wb3J0ICJX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5h
bC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJfV0tBY3RpdmF0ZWRFbGVt
ZW50SW5mb0ludGVybmFsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVGVzdGlu
Z0lPUykKKworLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9m
ZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRsZXI6
W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25SZWN0
cykgeworICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCisgICAgICAg
ICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNlbGVj
dGlvblJlY3QucmVjdCgpXV07CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIocmVj
dFZhbHVlcy5nZXQoKSk7CisgICAgfV07Cit9CisKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9y
ZVNlbGVjdGlvbgoreworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVj
dGlvbl07Cit9CisKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbgoreworICAg
IFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07Cit9CisKKy0gKENH
UmVjdClfY29udGVudFZpc2libGVSZWN0Cit7CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0
OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Cit9CisKKy0g
KENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludAor
eworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6c2VsZi5fY3Vy
cmVudENvbnRlbnRWaWV3XTsKK30KKworLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbVZpZXdU
b0NvbnRlbnRzOihDR1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2lu
dDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKK30KKworLSAodm9pZClr
ZXlib2FyZEFjY2Vzc29yeUJhck5leHQKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRh
YjpZRVNdOworfQorCistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMKK3sKKyAg
ICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107Cit9CisKKy0gKHZvaWQpYXBwbHlBdXRv
Y29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJpbmc6KE5TU3RyaW5nICopb2xk
U3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246bmV3U3RyaW5n
IHRvU3RyaW5nOm9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxl
dGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVUlXS0F1dG9j
b3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9XTsKK30KKworLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXcKK3sK
KyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURvbmVdOworfQorCistICh2b2lkKV9kaXNtaXNz
RmlsZVBpY2tlcgoreworICAgIFtfY29udGVudFZpZXcgZGlzbWlzc0ZpbGVQaWNrZXJdOworfQor
CistICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRl
OihOU0ludGVnZXIpbWludXRlCit7CisgICAgW19jb250ZW50VmlldyBzZXRUaW1lUGlja2VyVmFs
dWVUb0hvdXI6aG91ciBtaW51dGU6bWludXRlXTsKK30KKworLSAodm9pZClzZWxlY3RGb3JtQWNj
ZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgKK3sKKyAgICBbX2NvbnRlbnRWaWV3IHNlbGVj
dEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5kZXhdOworfQorCistIChOU1N0cmluZyAqKXNl
bGVjdEZvcm1Qb3BvdmVyVGl0bGUKK3sKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBzZWxlY3RG
b3JtUG9wb3ZlclRpdGxlXTsKK30KKworLSAoTlNTdHJpbmcgKil0ZXh0Q29udGVudFR5cGVGb3JU
ZXN0aW5nCit7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVz
dGluZ107Cit9CisKKy0gKE5TU3RyaW5nICopZm9ybUlucHV0TGFiZWwKK3sKKyAgICByZXR1cm4g
W19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07Cit9CisKKy0gKHZvaWQpZGlkU3RhcnRGb3Jt
Q29udHJvbEludGVyYWN0aW9uCit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUu
Cit9CisKKy0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbgoreworICAgIC8vIEZv
ciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQorCistICh2b2lkKV9kaWRTaG93Q29udGV4dE1l
bnUKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KK30KKworLSAodm9pZClf
ZGlkRGlzbWlzc0NvbnRleHRNZW51Cit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJp
ZGUuCit9CisKKy0gKENHUmVjdClfdWlUZXh0Q2FyZXRSZWN0Cit7CisgICAgLy8gRm9yY2UgdGhl
IHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCisgICAgW19jb250ZW50VmlldyBf
dXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4gW1tfY29udGVudFZpZXcgdmFs
dWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQuc2VsZWN0aW9uVmlldy5zZWxlY3Rp
b24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOworfQorCistIChDR1JlY3QpX2lucHV0Vmlld0Jv
dW5kcworeworICAgIHJldHVybiBfaW5wdXRWaWV3Qm91bmRzOworfQorCistIChOU0FycmF5PE5T
VmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVjdHMKK3sKKyAgICAvLyBGb3JjZSB0aGUgc2Vs
ZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KKyAgICBbX2NvbnRlbnRWaWV3IF91cGRh
dGVDaGFuZ2VkU2VsZWN0aW9uXTsKKworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF91aVRleHRT
ZWxlY3Rpb25SZWN0c107Cit9CisKKy0gKE5TU3RyaW5nICopX3Njcm9sbGluZ1RyZWVBc1RleHQK
K3sKKyAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNvb3JkaW5h
dG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKKyAgICBpZiAoIWNvb3Jk
aW5hdG9yKQorICAgICAgICByZXR1cm4gQCIiOworCisgICAgcmV0dXJuIGNvb3JkaW5hdG9yLT5z
Y3JvbGxpbmdUcmVlQXNUZXh0KCk7Cit9CisKKy0gKE5TTnVtYmVyICopX3N0YWJsZVN0YXRlT3Zl
cnJpZGUKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKyAgICByZXR1cm4g
bmlsOworfQorCistIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVu
c2lnbmVkIGxvbmcgbG9uZylsYXllcklECit7CisgICAgQ0FMYXllciogbGF5ZXIgPSBkb3duY2Fz
dDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkubGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxheWVySUQpOworICAgIGlmICghbGF5ZXIp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gQHsKKyAgICAgICAgQCJib3VuZHMi
IDogQHsKKyAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmJvdW5kcy5vcmlnaW4ueCksCisgICAg
ICAgICAgICBAInkiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAorICAgICAgICAgICAgQCJ3
aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLndpZHRoKSwKKyAgICAgICAgICAgIEAiaGVpZ2h0
IiA6IEAobGF5ZXIuYm91bmRzLnNpemUuaGVpZ2h0KSwKKworICAgICAgICB9LAorICAgICAgICBA
InBvc2l0aW9uIiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5wb3NpdGlvbi54KSwK
KyAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLnBvc2l0aW9uLnkpLAorICAgICAgICB9LAorICAg
ICAgICBAInpQb3NpdGlvbiIgOiBAKGxheWVyLnpQb3NpdGlvbiksCisgICAgICAgIEAiYW5jaG9y
UG9pbnQiIDogQHsKKyAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmFuY2hvclBvaW50LngpLAor
ICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYW5jaG9yUG9pbnQueSksCisgICAgICAgIH0sCisg
ICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IEAobGF5ZXIuYW5jaG9yUG9pbnRaKSwKKyAgICAgICAg
QCJ0cmFuc2Zvcm0iIDogQHsKKyAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIudHJhbnNmb3Jt
Lm0xMSksCisgICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTIpLAorICAg
ICAgICAgICAgQCJtMTMiIDogQChsYXllci50cmFuc2Zvcm0ubTEzKSwKKyAgICAgICAgICAgIEAi
bTE0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xNCksCisKKyAgICAgICAgICAgIEAibTIxIiA6IEAo
bGF5ZXIudHJhbnNmb3JtLm0yMSksCisgICAgICAgICAgICBAIm0yMiIgOiBAKGxheWVyLnRyYW5z
Zm9ybS5tMjIpLAorICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci50cmFuc2Zvcm0ubTIzKSwK
KyAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yNCksCisKKyAgICAgICAg
ICAgIEAibTMxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMSksCisgICAgICAgICAgICBAIm0zMiIg
OiBAKGxheWVyLnRyYW5zZm9ybS5tMzIpLAorICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci50
cmFuc2Zvcm0ubTMzKSwKKyAgICAgICAgICAgIEAibTM0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0z
NCksCisKKyAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MSksCisgICAg
ICAgICAgICBAIm00MiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDIpLAorICAgICAgICAgICAgQCJt
NDMiIDogQChsYXllci50cmFuc2Zvcm0ubTQzKSwKKyAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5
ZXIudHJhbnNmb3JtLm00NCksCisgICAgICAgIH0sCisgICAgICAgIEAic3VibGF5ZXJUcmFuc2Zv
cm0iIDogQHsKKyAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTExKSwKKyAgICAgICAgICAgIEAibTEyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEy
KSwKKyAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEzKSwK
KyAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTE0KSwKKwor
ICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjEpLAorICAg
ICAgICAgICAgQCJtMjIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjIpLAorICAgICAg
ICAgICAgQCJtMjMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjMpLAorICAgICAgICAg
ICAgQCJtMjQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjQpLAorCisgICAgICAgICAg
ICBAIm0zMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMSksCisgICAgICAgICAgICBA
Im0zMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMiksCisgICAgICAgICAgICBAIm0z
MyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMyksCisgICAgICAgICAgICBAIm0zNCIg
OiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zNCksCisKKyAgICAgICAgICAgIEAibTQxIiA6
IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQxKSwKKyAgICAgICAgICAgIEAibTQyIiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQyKSwKKyAgICAgICAgICAgIEAibTQzIiA6IEAobGF5
ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQzKSwKKyAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIu
c3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwKKyAgICAgICAgfSwKKworICAgICAgICBAImhpZGRlbiIg
OiBAKGxheWVyLmhpZGRlbiksCisgICAgICAgIEAiZG91YmxlU2lkZWQiIDogQChsYXllci5kb3Vi
bGVTaWRlZCksCisgICAgICAgIEAibWFza3NUb0JvdW5kcyIgOiBAKGxheWVyLm1hc2tzVG9Cb3Vu
ZHMpLAorICAgICAgICBAImNvbnRlbnRzU2NhbGUiIDogQChsYXllci5jb250ZW50c1NjYWxlKSwK
KyAgICAgICAgQCJyYXN0ZXJpemF0aW9uU2NhbGUiIDogQChsYXllci5yYXN0ZXJpemF0aW9uU2Nh
bGUpLAorICAgICAgICBAIm9wYXF1ZSIgOiBAKGxheWVyLm9wYXF1ZSksCisgICAgICAgIEAib3Bh
Y2l0eSIgOiBAKGxheWVyLm9wYWNpdHkpLAorICAgIH07Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJS
ZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgoreworICAg
IFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOmFjdGlvbl07
Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGlu
ZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVy
UmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6YWN0aW9uXTsKK30KKworLSAoQ0dS
ZWN0KV9kcmFnQ2FyZXRSZWN0Cit7CisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICByZXR1
cm4gX3BhZ2UtPmN1cnJlbnREcmFnQ2FyZXRSZWN0KCk7CisjZWxzZQorICAgIHJldHVybiBDR1Jl
Y3RaZXJvOworI2VuZGlmCit9CisKKy0gKEJPT0wpX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRl
cgoreworICAgIHJldHVybiBzZWxmLl9jdXJyZW50Q29udGVudFZpZXcuaXNGaXJzdFJlc3BvbmRl
cjsKK30KKworLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1Bv
aW50KWxvY2F0aW9uCit7CisgICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVMb25nUHJlc3NBY3Rp
b25BdExvY2F0aW9uOmxvY2F0aW9uXTsKK30KKworLSAodm9pZClfc2ltdWxhdGVUZXh0RW50ZXJl
ZDooTlNTdHJpbmcgKil0ZXh0Cit7CisgICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVUZXh0RW50
ZXJlZDp0ZXh0XTsKK30KKworLSAodm9pZClfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFpdERpZENo
YW5nZQoreworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBfcGFnZS0+ZWZm
ZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOworICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3
QmFja2dyb3VuZF07Cit9CisKKy0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uT25F
bGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2NF90KWRvY3VtZW50SUQg
cGFnZToodWludDY0X3QpcGFnZUlECit7CisjaWYgVVNFKFNZU1RFTV9QUkVWSUVXKQorICAgIGlm
IChfcGFnZSkgeworICAgICAgICBpZiAoYXV0byogcHJldmlld0NvbnRyb2xsZXIgPSBfcGFnZS0+
c3lzdGVtUHJldmlld0NvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgIHByZXZpZXdDb250cm9sbGVy
LT50cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbldpdGhUYXJnZXRGb3JUZXN0aW5nKGVsZW1lbnRJ
RCwgZG9jdW1lbnRJRCwgcGFnZUlEKTsKKyAgICB9CisjZW5kaWYKK30KKworQGVuZAorCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRmNTVkZTVk
MDg4Mjc5M2JiYjFlMTEwOGE0MzU4NzE3NDg4M2I0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5oCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0Jhc2UuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKworI2lmICFUQVJHRVRfT1NfSVBIT05FCisKK0Bj
bGFzcyBfV0tGcmFtZUhhbmRsZTsKKworQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZ01h
YykKKworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VG90YWxIZWlnaHRPZkJhbm5l
cnM6KSBDR0Zsb2F0IF90b3RhbEhlaWdodE9mQmFubmVyczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5LCBzZXR0ZXI9X3NldFVuZGVybGF5Q29sb3I6KSBOU0NvbG9yICpfdW5kZXJsYXlDb2xv
cjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0SWdub3Jlc05v
bldoZWVsRXZlbnRzOikgQk9PTCBfaWdub3Jlc05vbldoZWVsRXZlbnRzOworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dl
YlZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0FjdGl2ZVZp
ZGVvRm9yQ29udHJvbHNNYW5hZ2VyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNNZW51ICpfYWN0aXZlTWVudTsKKworLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdCly
ZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0OworLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6
ZVVwZGF0ZXM7CistICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzOworCistICh2b2lkKV9k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzOworCistICh2b2lkKV9iZWdpbkRlZmVy
cmluZ1ZpZXdJbldpbmRvd0NoYW5nZXM7CistICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5k
b3dDaGFuZ2VzOworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmM7
CisKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZp
ZXdzOworLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQp
dG9wQ29udGVudEluc2V0OworLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDooTlNFdmVudCAq
KWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRTdGF0ZTsKKy0g
KHZvaWQpX3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0KSlj
YWxsYmFjazsKKworLSAoTlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXc7CistIChO
U1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93OworCistIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxh
eW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZTsKKworLSAodm9pZClfcmVxdWVzdENv
bnRyb2xsZWRFbGVtZW50SUQ7CistICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVz
cG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlOworLSAodm9pZClfZGlk
SGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU7CisKKy0gKHZvaWQpX2ZvcmNlUmVxdWVzdENhbmRpZGF0
ZXM7CistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTCl2aXNp
YmxlOworCistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZToo
TlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlOworLSAoTlNSZWN0KV9jYW5kaWRhdGVSZWN0OworCist
ICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistICh2b2lkKV9zZXRG
b290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistICh2b2lkKV9kb0FmdGVyUHJvY2Vzc2lu
Z0FsbFBlbmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKK0BlbmQK
KworI2VuZGlmIC8vICFUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdh
NTgwNTgyNDc4NzI4N2Y2NGI2ZjdkYWU5YzFiZTIyMTVkNTRmMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQpA
QCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVy
bmFsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVGVzdGluZ01hYykKKworLSAo
V0tQYWdlUmVmKV9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3Cit7CisgICAgcmV0dXJu
IHRvQVBJKF9wYWdlLmdldCgpKTsKK30KKworLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxhdGl2
ZUNoaWxkV2luZG93cworeworICAgIF9pbXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRX
aW5kb3dzRnJvbVZpZXdPbmx5KCk7Cit9CisKKy0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpcmVj
dCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldAoreworICAgIF9pbXBsLT5zZXRGcmFtZUFuZFNj
cm9sbEJ5KE5TUmVjdFRvQ0dSZWN0KHJlY3QpLCBOU1NpemVUb0NHU2l6ZShvZmZzZXQpKTsKK30K
KworLSAodm9pZClfc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6KENHRmxvYXQpdG90YWxIZWlnaHRP
ZkJhbm5lcnMKK3sKKyAgICBfaW1wbC0+c2V0VG90YWxIZWlnaHRPZkJhbm5lcnModG90YWxIZWln
aHRPZkJhbm5lcnMpOworfQorCistIChDR0Zsb2F0KV90b3RhbEhlaWdodE9mQmFubmVycworewor
ICAgIHJldHVybiBfaW1wbC0+dG90YWxIZWlnaHRPZkJhbm5lcnMoKTsKK30KKworLSAodm9pZClf
YmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzCit7CisgICAgX2ltcGwtPmJlZ2luRGVm
ZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOworfQorCistICh2b2lkKV9lbmREZWZlcnJpbmdW
aWV3SW5XaW5kb3dDaGFuZ2VzCit7CisgICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRv
d0NoYW5nZXMoKTsKK30KKworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdl
c1N5bmMKK3sKKyAgICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMo
KTsKK30KKworLSAodm9pZClfc2V0SWdub3Jlc05vbldoZWVsRXZlbnRzOihCT09MKWlnbm9yZXNO
b25XaGVlbEV2ZW50cworeworICAgIF9pbXBsLT5zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHMoaWdu
b3Jlc05vbldoZWVsRXZlbnRzKTsKK30KKworLSAoQk9PTClfaWdub3Jlc05vbldoZWVsRXZlbnRz
Cit7CisgICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzTm9uV2hlZWxFdmVudHMoKTsKK30KKworLSAo
dm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKK3sK
KyAgICBfaW1wbC0+c2V0Q3VzdG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKK30KKwor
LSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29u
dGVudEluc2V0Cit7CisgICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5z
ZXQodG9wQ29udGVudEluc2V0KTsKK30KKworLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRT
dGF0ZQoreworICAgIHJldHVybiBfaW1wbC0+dHJ5VG9Td2lwZVdpdGhFdmVudChldmVudCwgaWdu
b3JpbmdQaW5uZWRTdGF0ZSk7Cit9CisKKy0gKHZvaWQpX3NldERpZE1vdmVTd2lwZVNuYXBzaG90
Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0KSljYWxsYmFjaworeworICAgIF9pbXBsLT5zZXREaWRN
b3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKGNhbGxiYWNrKTsKK30KKworLSAoTlNWaWV3ICopX2Z1
bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcKK3sKKyAgICByZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcoKTsKK30KKworLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdwor
eworICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlbldpbmRvdygpOworfQorCistICh2b2lkKV9k
aXNhYmxlRnJhbWVTaXplVXBkYXRlcworeworICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBk
YXRlcygpOworfQorCistICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzCit7CisgICAgX2lt
cGwtPmVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKK30KKworLSAoQk9PTClfY2FuQ2hhbmdlRnJh
bWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKK3sKKyAgICBpZiAoYXV0byog
d2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJ
ZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCisgICAgICAgIHJldHVybiBf
aW1wbC0+Y2FuQ2hhbmdlRnJhbWVMYXlvdXQoKndlYkZyYW1lUHJveHkpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworLSAoTlNDb2xvciAqKV91bmRlcmxheUNvbG9yCit7CisgICAgcmV0dXJuIF9p
bXBsLT51bmRlcmxheUNvbG9yKCk7Cit9CisKKy0gKHZvaWQpX3NldFVuZGVybGF5Q29sb3I6KE5T
Q29sb3IgKil1bmRlcmxheUNvbG9yCit7CisgICAgX2ltcGwtPnNldFVuZGVybGF5Q29sb3IodW5k
ZXJsYXlDb2xvcik7Cit9CisKKy0gKEJPT0wpX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5h
Z2VyCit7CisgICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRy
b2xzTWFuYWdlcigpOworfQorCistICh2b2lkKV9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRAor
eworICAgIGlmIChfcGFnZSkKKyAgICAgICAgX3BhZ2UtPnJlcXVlc3RDb250cm9sbGVkRWxlbWVu
dElEKCk7Cit9CisKKy0gKHZvaWQpX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZToo
TlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2Vz
LgorfQorCistICh2b2lkKV9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdS
ZXN1bHQgKiljYW5kaWRhdGUKK3sKKyAgICBfaW1wbC0+aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUo
Y2FuZGlkYXRlKTsKK30KKworLSAodm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUKK3sK
KyAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCit9CisKKy0gKHZvaWQpX2RpZFVwZGF0
ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKXZpc2libGUKK3sKKyAgICAvLyBPdmVycmlk
ZGVuIGJ5IHN1YmNsYXNzZXMuCit9CisKKy0gKHZvaWQpX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMK
K3sKKyAgICBfaW1wbC0+Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3RpbmcoKTsKK30KKwor
LSAoQk9PTClfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICByZXR1cm4gX2ltcGwtPnNo
b3VsZFJlcXVlc3RDYW5kaWRhdGVzKCk7Cit9CisKKy0gKHZvaWQpX2luc2VydFRleHQ6KGlkKXN0
cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UKK3sKKyAgICBb
c2VsZiBpbnNlcnRUZXh0OnN0cmluZyByZXBsYWNlbWVudFJhbmdlOnJlcGxhY2VtZW50UmFuZ2Vd
OworfQorCistIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QKK3sKKyAgICByZXR1cm4gX3BhZ2UtPmVk
aXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5mb2N1c2VkRWxlbWVudFJlY3Q7Cit9CisKKy0g
KHZvaWQpdmlld0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2UKK3sKKyAgICAvLyBUaGlzIGNh
biBiZSBjYWxsZWQgZHVyaW5nIFtzdXBlciBpbml0V2l0aENvZGVyOl0gYW5kIFtzdXBlciBpbml0
V2l0aEZyYW1lOl0uCisgICAgLy8gVGhhdCBpcyBiZWZvcmUgX2ltcGwgaXMgcmVhZHkgdG8gYmUg
dXNlZCwgc28gY2hlY2suIDxyZGFyOi8vcHJvYmxlbS8zOTYxMTIzNj4KKyAgICBpZiAoIV9pbXBs
KQorICAgICAgICByZXR1cm47CisKKyAgICBfaW1wbC0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENo
YW5nZSgpOworfQorCistICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQK
K3sKKyAgICBfcGFnZS0+c2V0SGVhZGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOwor
fQorCistICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQKK3sKKyAgICBf
cGFnZS0+c2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpOworfQorCistICh2
b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxv
Y2tfdClhY3Rpb24KK3sKKyAgICBfaW1wbC0+ZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91
c2VFdmVudHMoYWN0aW9uKTsKK30KKworLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUKK3sKKyAgICAv
LyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Ig
bm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQorICAgIC8vIGV4dGVuZGVkIHRvIHJlY29n
bml6ZSB0aGUgcmVndWxhciBjb250ZXh0IG1lbnUgYXMgd2VsbC4KKyAgICByZXR1cm4gX2ltcGwt
PmRvbVBhc3RlTWVudSgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2Nv
YS5tbQppbmRleCBmNTg5ZTlkMzM2MWZhMWZiNjAzNWRhYTEzOTIxNTIyMDE2NmJjZTEwLi43ZDg5
MDJlZWI5NjZkZmRiYWQ3ODdkODJiYjJkOGVkZmM5YmI3Y2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKICNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggZGM5Zjc0YzQ5YTZiZWE5ZWRjMTUwNmM1YWI5
NTdlMDA2YTIwN2E1ZS4uMGM1ZTBmN2Y2YzYwZjdhNGMzZjY4MWUyOWRkNDMwZDUzZDFjMDlkYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5t
bQpAQCAtNDksNiArNDksNyBAQAogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeS5oIgogI2lt
cG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIK
ICNpbXBvcnQgIldlYkNvbnRleHRNZW51UHJveHkuaCIKICNpbXBvcnQgIldlYkRhdGFMaXN0U3Vn
Z2VzdGlvbnNEcm9wZG93bklPUy5oIgogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0KaW5kZXggYmM4YWUwMjIxYzRlNjFiNjRhOTdjZTVkNDI4ZjMxNmQ0ZTA3ODBj
Yy4uMDViODhkMTlkM2FkMDM4OWNlMDdiYTUzYWU1YmEyZWQwMTNjODFjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCkBAIC03MSw2ICs3MSw3IEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmll
d1ByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdJT1MuaCIKICNpbXBvcnQgIldl
YkF1dG9jb3JyZWN0aW9uQ29udGV4dC5oIgogI2ltcG9ydCAiV2ViQXV0b2NvcnJlY3Rpb25EYXRh
LmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6
ZXIuaAppbmRleCA1NjI4Y2YzNWI4Y2NiMmQxZmI5MTlkMWMyYTcwODQzZjc2ODc4ODdkLi40NDEw
YjdkMTNmMDZjMTJjNmFiZWFkOGEzNjc1MjAwNmQ2OWQyNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNpZiBIQVZFKEhPVkVSX0dFU1RVUkVfUkVDT0dOSVpFUikKIAorI2lt
cG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCAiTmF0aXZlV2ViTW91
c2VFdmVudC5oIgogCiBAaW50ZXJmYWNlIFdLTW91c2VHZXN0dXJlUmVjb2duaXplciA6IFVJR2Vz
dHVyZVJlY29nbml6ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9m
dWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLm1tCmluZGV4IDFhMmJmZDg3NTJlNzc2MTJkMzgwOWFmMjJlOTA1ZWRlNjkzMWU3Y2QuLjM4
YjdjNGYwZjZiYmFlNmIzODk5NmRlYjFjYjYzNjQ0NzdkY2E5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4v
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQpAQCAtMzMsNyArMzMsNyBAQAogI2lt
cG9ydCAiV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXcuaCIKICNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tCmluZGV4IDIyNjUzZDc0Mzk4ODZkYmY1ZWNkY2RkYWZlNzJkMDJkN2I4
MzFkMDAuLjAyZGVkMTg3ZDMyYmQ2MmE0M2ExMGQyZTlhNjM2ODJhMzNhNzQ5MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KQEAgLTQ4
LDYgKzQ4LDcgQEAKICNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKICNpbXBvcnQgIldLVmlld0ludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZ01hYy5oIgogI2ltcG9ydCAiV2ViQ29sb3JQaWNrZXJNYWMuaCIKICNpbXBvcnQgIldl
YkNvbnRleHRNZW51UHJveHlNYWMuaCIKICNpbXBvcnQgIldlYkRhdGFMaXN0U3VnZ2VzdGlvbnNE
cm9wZG93bk1hYy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgKaW5kZXggNGRlZGMwYTZhYTJhMjIzODk2
MTU2MWVmMDk2MzZmYmYxZTdkNTExNS4uMDFkN2EyYWI3NTE4ZTYzNzk4ZWZhZjI2ZDM5YzY5NTU4
MDFjN2NiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oCkBAIC0yMyw4ICsyMyw5IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKE1BQykKIAorI2lt
cG9ydCA8QXBwS2l0L0FwcEtpdC5oPgogI2ltcG9ydCAiR2VuZXJpY0NhbGxiYWNrLmgiCiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY3OWRkYzEyMDQwZjJiZjc5MjQwY2NhNTVlZjk4OTMw
YjUwMDc1MzQuLjI3MzI4ZTI0NWMwMDg3NWY0MmQ0OGNmYWU3MGQzNDhhMDdlYmM1M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTgs
NiArOTgsOSBAQAogCQkwRjA4Q0Y1NDFENjNDMTQwMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UG9w
b3Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
OENGNTMxRDYzQzE0MDAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBvcG92ZXIuaCAqLzsgfTsKIAkJ
MEYxNzRBQTMxNDJBNENCNzAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3NEFBMjE0MkE0Q0I2MDAzOTI1MEYg
LyogQVBJR2VvbWV0cnkuaCAqLzsgfTsKIAkJMEYzQzcyNUIxOTZGNjA0RTAwQUVERDBDIC8qIFdL
SW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGln
aGxpZ2h0Vmlldy5oICovOyB9OworCQkwRjQ1QTMzMTIzOUQ4OUExMDAyOTRBQkYgLyogV0tXZWJW
aWV3VGVzdGluZ0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCAq
LzsgfTsKKwkJMEY0NUEzMzUyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzMz
MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggKi87IH07CisJCTBGNDVB
MzNEMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzQjIzOUQ4Q0M0MDAyOTRBQkYg
LyogV0tXZWJWaWV3VGVzdGluZy5oICovOyB9OwogCQkwRjU5NDc5MDE4N0IzQjNBMDA0Mzc4NTcg
LyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5oICovOyB9OwogCQkwRjU5NDc5QjE4N0IzQjYwMDA0Mzc4NTcg
LyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1OTQ3OTUxODdCM0I2MDAwNDM3ODU3IC8qIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCAqLzsgfTsKIAkJMEY1OTQ3OUQxODdCM0I2
MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTk0Nzk3MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1v
dGVTY3JvbGxpbmdUcmVlLmggKi87IH07CkBAIC0xMDksNiArMTEyLDkgQEAKIAkJMEY5MzFDMUMx
OEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMxQzFB
MThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
LmggKi87IH07CiAJCTBGOTMxQzFDMThDNTcxMTkwMERCQjhENCAvKiBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMUMxQTE4QzU3MTE5MDBEQkI4RDQgLyogU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oICovOyB9OwogCQkwRkI2NTkyMzEyMDhCNERCMDA0NDgx
NkMgLyogRHJhd2luZ0FyZWFJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI2NTkyMjEyMDhCNERCMDA0NDgxNkMgLyogRHJhd2luZ0FyZWFJbmZv
LmggKi87IH07CisJCTBGQjk0ODM3MjM5RjMxRDEwMDkyNkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5n
LmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCAqLzsg
fTsKKwkJMEZCOTQ4MzgyMzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBp
biBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oICovOyB9
OworCQkwRkI5NDgzOTIzOUYzMjM4MDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5oIGlu
IENvcHkgVGVzdGluZyBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDVBMzMzMjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggKi87IH07
CiAJCTBGQ0I0RTQ2MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbElPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFMzYxOEJCRTA0
NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLmggKi87IH07CiAJCTBGQ0I0RTQ4MThCQkUw
NDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzODE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25T
aGVldC5oICovOyB9OwogCQkwRkNCNEU0QTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVl
dEFzc2lzdGFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDQjRFM0ExOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCAq
LzsgfTsKQEAgLTE5MjMsNiArMTkyOSwxOSBAQAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LworCQkwRkI5NDgzNjIzOUYzMUI3MDA5MjZBOEYgLyogQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8g
PSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWRzdFBhdGggPSBXZWJLaXRUZXN0U3VwcG9ydDsKKwkJCWRzdFN1
YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCTBGQjk0ODM3MjM5RjMxRDEwMDky
NkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCisJ
CQkJMEZCOTQ4MzgyMzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBpbiBD
b3B5IFRlc3RpbmcgSGVhZGVycyAqLywKKwkJCQkwRkI5NDgzOTIzOUYzMjM4MDA5MjZBOEYgLyog
V0tXZWJWaWV3VGVzdGluZ01hYy5oIGluIENvcHkgVGVzdGluZyBIZWFkZXJzICovLAorCQkJKTsK
KwkJCW5hbWUgPSAiQ29weSBUZXN0aW5nIEhlYWRlcnMiOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCTFBMDdEMkY3MTkxOUIzNjUwMEVDREExNiAv
KiBDb3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRzICovID0gewogCQkJaXNhID0gUEJYQ29w
eUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0y
MDI1LDYgKzIwNDQsMTIgQEAKIAkJMEYxNzRBQTYxNDJBQUM2MTAwMzkyNTBGIC8qIFdLR2VvbWV0
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tHZW9tZXRyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQw
QyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGM0M3MjU5MTk2RjVGNjgwMEFFREQwQyAvKiBXS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVB
MzJGMjM5RDg5QTAwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmdJT1MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMzAyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rl
c3RpbmdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dl
YlZpZXdUZXN0aW5nSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMz
MzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nTWFjLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNDVBMzM0MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0
aW5nTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJW
aWV3VGVzdGluZ01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzM0Iy
MzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjQ1QTMzQzIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1Rlc3Rpbmcu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1
NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjU5NDc4RTE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTk0NzhGMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTA2OSw2
ICs1MDk0LDE1IEBACiAJCQl0YWJXaWR0aCA9IDg7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJ
CTBGNDVBMzJFMjM5RDg5NjAwMDI5NEFCRiAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGNDVBMzJGMjM5RDg5QTAwMDI5NEFCRiAvKiBXS1dl
YlZpZXdUZXN0aW5nSU9TLmggKi8sCisJCQkJMEY0NUEzMzAyMzlEODlBMTAwMjk0QUJGIC8qIFdL
V2ViVmlld1Rlc3RpbmdJT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTEwNThDN0IwRkVBNTU4NUUxMUNBMkNCQiAvKiBM
aW5rZWQgRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC02NzQ5LDYgKzY3ODMsOCBAQAogCQkJCTFBQzE0MTUwMThBQzQ3RUUwMDZDNjAyQyAv
KiBXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oICovLAogCQkJCTFBNjZCRjhFMThBMDUy
RUQwMDIwNzFCNCAvKiBXS1dlYlZpZXdJbnRlcm5hbC5oICovLAogCQkJCTI2RjlBODNBMThBMzQ2
M0YwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmggKi8sCisJCQkJMEY0NUEzM0IyMzlEOEND
NDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCAqLywKKwkJCQkwRjQ1QTMzQzIzOUQ4Q0M0
MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5tbSAqLywKIAkJCQkxQUQ2MEY1QzE4RTIwRjRD
MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5oICovLAogCQkJCTFBRDYwRjVCMThFMjBGNEMw
MDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVzLm1tICovLAogCQkJCTFBRDYwRjVGMThFMjBGNzQw
MDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVzSW50ZXJuYWwuaCAqLywKQEAgLTgxNzgsNiArODIx
NCw3IEBACiAJCQkJQkMwQzM3NjYxMEY4MDc2NjAwNzZEN0NCIC8qIEMgKi8sCiAJCQkJMzdDNEMw
ODMxODE0OUMyQTAwMzY4OEI5IC8qIENvY29hICovLAogCQkJCUJDOEE1MDEzMTE3NjVGNDUwMDc1
NzU3MyAvKiBjcHAgKi8sCisJCQkJMEY0NUEzMkUyMzlEODk2MDAwMjk0QUJGIC8qIGlvcyAqLywK
IAkJCQlCQzExMUI0NzExMkY2MTY5MDAzMzdCQUIgLyogbWFjICovLAogCQkJCTYzNDg0MjRGMUZC
MjZFNzEwMDk0NkUzQyAvKiBBUElBcHBsaWNhdGlvbk1hbmlmZXN0LmggKi8sCiAJCQkJMkU1Qzc3
MEQxRkE3RDQyOTAwNTkzMkMzIC8qIEFQSUF0dGFjaG1lbnQuY3BwICovLApAQCAtODQ2MSw2ICs4
NDk4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDODY5OUIzMTE2QUFEQUEwMDJBOTI1QiAv
KiBXS1ZpZXcubW0gKi8sCiAJCQkJQkM4Njk5QjQxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0lu
dGVybmFsLmggKi8sCisJCQkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rl
c3RpbmdNYWMuaCAqLywKKwkJCQkwRjQ1QTMzNDIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3
VGVzdGluZ01hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTEwNzM1LDYgKzEwNzc0LDkgQEAKIAkJCQkyREM2RDlDMzE4QzQ0QTYx
MDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBNjZCRjhGMThBMDUyRUQwMDIwNzFCNCAvKiBXS1dlYlZpZXdJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4M0IxOEEzNDY4MTAwQUVCODhBIC8qIFdLV2ViVmll
d1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDVBMzNEMjM5RDhDQzQwMDI5NEFCRiAv
KiBXS1dlYlZpZXdUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQ1QTMzMTIzOUQ4OUEx
MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0
NUEzMzUyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBRDYwRjVFMThFMjBGNEMwMDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUQ2MEY2MDE4RTIwRjc0MDAyMEMwMzQgLyogV0tXaW5kb3dG
ZWF0dXJlc0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTUwODBCRjFGMEVEQUFBMDBF
NjE3QzUgLyogV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4
NTIsNiArMTA4OTQsNyBAQAogCQkJCTFBMjE4MDE2MUI1NDU0NjIwMDQ2QUVDNCAvKiBBZGQgU3lt
bGluayBpbiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MgKi8sCiAJCQkJNTM3OUM3
QUMyMUU1Mjg4NTAwRTRBOEY2IC8qIENoZWNrIC54Y2ZpbGVsaXN0cyAqLywKIAkJCQk5MzMxNzAw
NzIyMzQ2NzQ1MDBCMzI1NTQgLyogQ3JlYXRlIHN5bWxpbmtzIHRvIFhQQyBzZXJ2aWNlcyBmb3Ig
ZW5naW5lZXJpbmcgYnVpbGRzICovLAorCQkJCTBGQjk0ODM2MjM5RjMxQjcwMDkyNkE4RiAvKiBD
b3B5IFRlc3RpbmcgSGVhZGVycyAqLywKIAkJCSk7CiAJCQlidWlsZFJ1bGVzID0gKAogCQkJCTUz
NUUwOEM0MjI1NDVCNzIwMERGMDBDQSAvKiBQQlhCdWlsZFJ1bGUgKi8sCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDg1ZDFkYjVkMmU2NmM5NWE3
MmZkY2FiZDEzZWU2YjUwZjBiM2I5ZC4uYTJiNDIyMjJkMTViMDFiOTc2ODU0NTE3MWE4ZDMwZTg3
OWIwNThkYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDUwIEBACisyMDE5LTEyLTA5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFz
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgV0tXZWJWaWV3IGNvZGUgcmVsYXRlZCB0byB0
ZXN0aW5nIHRvIG5ldyBmaWxlcywgd2l0aCB0aGVpciBvd24gaGVhZGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDIxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXSVAKKworICAgICAg
ICAqIE1pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FuaW1hdGVkUmVzaXplLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9h
ZGluZy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVy
YWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTWVkaWFCdWZmZXJpbmdQb2xpY3kubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50
Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUlu
UGljdHVyZURlbGVnYXRlLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2lj
Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RT
dG9yZS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3Rl
bVByZXZpZXcubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9U
ZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMu
bW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RB
Y3RpdmF0ZWRFbGVtZW50SW5mby5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW06CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRl
clRlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxp
dHlUZXN0c0lPUy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25T
aGVldFRlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3Jy
ZWN0aW9uVGVzdHNJT1MubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9j
dXNQcmVzZXJ2YXRpb25UZXN0cy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3ROYXZpZ2F0aW9uRGVsZWdhdGUubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRHJh
Z0FuZERyb3BTaW11bGF0b3JJT1MubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9tYWMvRHJh
Z0FuZERyb3BTaW11bGF0b3JNYWMubW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29j
b2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW06CisKIDIwMTktMTItMDkgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZS1kaXNhYmxlIFRM
UzEuMCBhbmQgVExTMS4xIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcgYi9Ub29scy9NaW5pQnJvd3Nlci9Db25maWd1
cmF0aW9ucy9CYXNlLnhjY29uZmlnCmluZGV4IGZjNjFkNTIyN2M4NjA4NDg4NTE0Y2JkOTJhMjhk
YzdjMWMyZWZhZjQuLjIwZjBlNDVmOTM5NTM3NWNkYWYzMWU3NTJiNGIyNTZmZWRmN2IyNzMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpAQCAt
NzAsNiArNzAsOCBAQCBHQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFu
Zy4xXzA7CiBXQVJOSU5HX0NGTEFHUyA9IC1XYWxsIC1XIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgog
R0NDX05PX0NPTU1PTl9CTE9DS1MgPSBZRVM7CiAKK0hFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvV2ViS2l0VGVzdFN1cHBvcnQ7CisKIFNVUFBPUlRFRF9QTEFURk9S
TVMgPSBpcGhvbmVvcyBpcGhvbmVzaW11bGF0b3IgbWFjb3N4IHR2b3MgdHZzaW11bGF0b3Igd2F0
Y2hvcyB3YXRjaHNpbXVsYXRvcjsKIAogVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IgPSAk
KFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6
c3VmZml4OmlkZW50aWZpZXIpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL21hYy9X
SzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJy
b3dzZXJXaW5kb3dDb250cm9sbGVyLm0KaW5kZXggMDA2MzI2NmVkMzNlN2RhN2EyYWI5MTQyYTJh
ZjBhMTJjNTkwZDBkOS4uNDk2YWM0NzE2ZThjY2YzOThkMTk1NmYwYTlmNDJiZTM5OTgyZGU0YyAx
MDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9s
bGVyLm0KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9s
bGVyLm0KQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiQXBwRGVsZWdhdGUuaCIKICNpbXBv
cnQgIlNldHRpbmdzQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgog
I2ltcG9ydCA8V2ViS2l0L1dLRnJhbWVJbmZvLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0
aW9uQWN0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRl
Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0Jhc2Uu
eGNjb25maWcgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25m
aWcKaW5kZXggZWVjMTNmNmVkOTg2ZDIzYzEwY2M2NzI2YWE5YmQ3NDA3NDEzNDY2NC4uZTk1NmJi
MThjMzY0N2FiMjEwMmQ3NzIxNGUzZWJkMTQyMzJkMWRkZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpAQCAtMzMsNyArMzMsNyBAQCBD
TEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzF6OwogQ0xBTkdfQ1hYX0xJQlJBUlkg
PSBsaWJjKys7CiBDTEFOR19FTkFCTEVfT0JKQ19XRUFLID0gWUVTOwogQ0xBTkdfV0FSTl9DWFgw
WF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJHtCVUlMVF9QUk9EVUNU
U19ESVJ9L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9G
b3J3YXJkaW5nSGVhZGVycyAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViQ29yZVRlc3RTdXBwb3J0
ICR7U1JDUk9PVH07CitIRUFERVJfU0VBUkNIX1BBVEhTID0gJHtCVUlMVF9QUk9EVUNUU19ESVJ9
L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJk
aW5nSGVhZGVycyAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViQ29yZVRlc3RTdXBwb3J0ICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9XZWJLaXRUZXN0U3VwcG9ydCAke1NSQ1JPT1R9OwogCiBHQ0NfTk9f
Q09NTU9OX0JMT0NLUyA9IFlFUzsKIEdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERF
QlVHX0RFRklORVMpICQoRkVBVFVSRV9ERUZJTkVTKSBVX0RJU0FCTEVfUkVOQU1JTkc9MSBVX1NI
T1dfQ1BMVVNQTFVTX0FQST0wICQoR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OU18kKFBMQVRG
T1JNX05BTUUpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RI
YXJuZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KaW5k
ZXggZjA5NmZiNzU2ZjAwNDNlNjM2NmRlYzRmMDFhOTBiYzFkMDczN2MzYi4uMTY2N2Y3MGVkMWMz
MGJhZmRjMWIzOTBhNDk3ZDA1MjAwNDlkZGYwNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9FZGl0
aW5nVGVzdEhhcm5lc3MubW0KQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJFZGl0aW5nVGVz
dEhhcm5lc3MuaCIKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAK
IEBpbXBsZW1lbnRhdGlvbiBFZGl0aW5nVGVzdEhhcm5lc3MKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNo
Lm1tCmluZGV4IDI3MTJjNWYwNDBhZGUxYWJlZTYyNDUxOTI4ZGU3ZDczOGI3YTExY2QuLmYyY2Q0
OTJjNDQ5YjVmYzI3NTE2YzQ4ZTFmNjdiYTI2ODk4MDI3MzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jh
c2gubW0KQEAgLTI5LDggKzI5LDggQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIK
ICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIK
ICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRlTWFjLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0KaW5kZXggMzExOWMzYzM5OTAzMDI1YzFkMjcxMGMx
YmVkYmRiNDY3NjIzMzA1NS4uZTQwNDQwOTVkYTQxOWE2MTU5ZDRjM2I4ZmFkMWMyNTk5Zjg3MzU3
MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bbmlt
YXRlZFJlc2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0FuaW1hdGVkUmVzaXplLm1tCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbXBvcnQgIlRlc3QuaCIK
ICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1By
ZWZlcmVuY2VzLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW0KaW5kZXggNjRkYzQ2YjRmNzc3MmJk
Y2ZlODcxZTJmODVlZTI5ZTYxMzRhMGRjOC4uODAwMmQ4YTYwMDI4NDBhNDYzZTU1MWViZTZiNDU0
MWU3ZDBkMDg4MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbQpAQCAtMjgsMTAgKzI4LDEwIEBA
CiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCiAj
aW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXS1dlYlZp
ZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNy
YXNoLm1tCmluZGV4IGQ0MzI0YThmNmM2YTlkZjIzZGU4ODRiZjU5YTY0NjExNWQyODkxMGMuLmE3
OWRkYTljMWZjYTJjODYzYjRhNTQ3M2Y5ZDkzMWYzY2ZlNTg1MTIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVy
Q3Jhc2gubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRl
cmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbQpAQCAtMjksOCArMjksOCBAQAogI2ltcG9ydCAi
VGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVz
dFdLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTWVkaWFCdWZmZXJpbmdQb2xpY3kubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tCmluZGV4IDZjMmQ3YjZmNGUw
MGVjZjA1MmQxMDU5MzgxMzhkN2MwNmJlMTI1OWEuLmQxNmNhZjE3ZGEzODdkZWQ3ZjZhNGM5NmVm
MGM0MTZkYmNiOWUyZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTWVkaWFCdWZmZXJpbmdQb2xpY3kubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbQpAQCAtMjksOSArMjks
OCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CiAKIHN0YXRpYyB2b2lkIHdhaXRVbnRpbEJ1ZmZlcmluZ1BvbGljeUlzRXF1
YWxUbyhXS1dlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGV4cGVjdGVkKQogewpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29u
dHJvbHNUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93
UGxheWluZ0NvbnRyb2xzVGVzdHMubW0KaW5kZXggNTAwMTJmMGYxOWRmZTVlY2Q4ZWRkNWFjYjMz
ZjdiNTdlMmIxMDBmOC4uOGFjNWVjNTA0NGEyYjE2N2VlMDY0ZmZkYWQxMjNiMzRjNDQwMzNmMyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5
aW5nQ29udHJvbHNUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tCkBAIC0yNyw5ICsyNyw4IEBACiAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0K
KyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCmluZGV4
IDViOTgwZWVhMzExMGVmYjk2YzYwZjZiZTU0MTdhNTQ2MDQxNTdjMDEuLjZjNDY4NzkyM2ViZDVi
MTJhOTc4NjBmODY2ZjkzOTk1NjY5MzU0NDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQpAQCAtMjgs
OSArMjgsOSBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RV
UkxTY2hlbWVIYW5kbGVyLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZi5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9y
dCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0dXJlRGVsZWdhdGUu
bW0KaW5kZXggNWRjMWExOTc4OTg0NDMxOWQyNjE5YTVjN2ExZjhmYzkyZjZlODkzOC4uYmY2ZTNj
ZTRiOWJkZjg4YTNlN2NhOGQyMGMxYmZmOTNkY2QxMWY4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0dXJlRGVsZWdhdGUubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0
dXJlRGVsZWdhdGUubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtV2ViVmll
dy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9y
dCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRlTWFjLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KQEAgLTM4LDcgKzM5LDYgQEAKICNpbXBvcnQg
PFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxDRi5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLVmlldy5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVmlld1ByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbQppbmRleCA4NDdi
ZmI2N2VlNmYwYjgwZDkyNzZhNDM2OWIxNGRmNzc2MzQwMGJlLi43YmY0YWE1NzI5NThlOGIzMzlm
ZDkzMTBjODMyNTkzZTM5ZjkzNGQ0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVm
ZmVyaW5nLm1tCkBAIC0yOSw5ICsyOSw4IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0KKyNpbXBvcnQgIldLV2ViVmlld1Rlc3Rp
bmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgot
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAogVEVTVChXZWJLaXQsIFByb2Nl
c3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcpCiB7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQppbmRleCAxMTU3NzdlNzRkOWJiZmRmYzRjZTNlMDNhYzYzMjIxODZmODMyMWU4Li4zY2EyOTM0
M2M3ODk1NDc0ZDdjMGM2M2NlMzUyYWU0MzVmOGMyYjgwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQg
IlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0JhY2tGb3J3YXJk
TGlzdEl0ZW1Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50UnVsZUxpc3RTdG9y
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oPgpAQCAt
MzksNyArNDAsNiBAQAogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lSGFuZGxlci5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViS2l0Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCmluZGV4IDViNjY5ZWFiMDIzODlmMjEz
YTA1MTdmNzVkZDZiOGM1NDY4YjkxMDkuLmQ3Nzk2NDA1Njg0ZmI3ZmFhNThlNzRhMmRjYzFkZDIy
YzYxNzA3MGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCkBAIC0zMSwxMiArMzEsMTIgQEAKICNp
bXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBv
cnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBv
cnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJLaXQuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbQppbmRleCA2YzJmODQzMmU4YWFhNjY2NzY5OTFh
YTdmYmFlMWZjMDYwYzU3ZTU1Li5iY2MxMDI2YmNhYTU4ODZhYmNlMmIwMTZjZDJmNGE2ZmU1ODIy
Y2RlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Nu
YXBzaG90U3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TbmFwc2hvdFN0b3JlLm1tCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbXBvcnQgIlRlc3QuaCIK
ICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQYWdlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tQYWdlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
dy5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAogc3RhdGljIGJvb2wgZGlkRm9yY2VSZXBhaW50OwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1tCmlu
ZGV4IGQ5YWRlZjQ0MzJkOTgzZTRiNDcxMDIwNzQwNjlhNjJkYTljMWI3YzMuLmVhMjQwMWFjNDIz
N2IwMmRkOGQyZWI1ZTUxNzU2YzliNDg5ZDliM2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0KQEAgLTMwLDggKzMw
LDggQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgog
I2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiV0tXZWJW
aWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLVmlld1ByaXZhdGUuaD4KLSNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAK
IHN0YXRpYyBib29sIGhhc1RyaWdnZXJJbmZvOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCmluZGV4IGQ3MDc1
OThmZGM3ZTg4MjJiY2YzMTRmOThhMWQzOWY5OTU1MDRjNzUuLjNhM2I0YWNmNDQzZjc5YjU3NTkz
YzRhYzdjMzMyNDQ0YzRmM2VmZDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KQEAgLTI4LDcgKzI4LDcg
QEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L19XS1RleHRN
YW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlwdWxhdGlvbkV4
Y2x1c2lvblJ1bGUuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvVUlEZWxlZ2F0ZS5tbQppbmRleCA3OTE3YjhmOWQyZjY3OWExMTk5ODJiOGU1MDEyMmNh
ZWUxMmRmM2VjLi4xNjExODA4MzZkNTc1NjIwMjdlMDYxYzk3NTJmNDcyODEyMWRjZGIxIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVnYXRl
Lm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0
ICJVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIK
KyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHQu
aD4KICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlTWFjLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tHZW9sb2NhdGlvbk1hbmFnZXIuaD4KQEAgLTM2LDcgKzM3LDYgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUmV0YWluUHRy
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tIaXRUZXN0UmVzdWx0
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSW5zcGVjdG9yLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCmluZGV4
IDNiODgzN2MxZGYzMzQ1YjJlNzhkYzkyMTFlYzQ0YTg1M2YyYjVkZGUuLjEwYjIwMjRiMWU1ZjE0
Njc3OTQzNjgyNGMyZGIxN2EzOWIwMDk0NDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxh
dGVGYWlsZWRTYW5kYm94Lm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgot
CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5o
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRl
b0NvbnRyb2xzTWFuYWdlci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0KaW5kZXggN2EwODk2M2YxMDY2MTE2YzAwNmUyOGJk
MmE4NjZiZmNiYjA2MjU0Ni4uNzBkZmZlNzcwYTE3YmMzMWM2NjRhMzgwOTViN2YzZDFkNjFjMmMx
OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRl
b0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0yNyw5ICsyNyw4IEBACiAKICNpbXBv
cnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0KKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVz
dHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVu
dFRlc3RzLm1tCmluZGV4IGI2ZmNkOTM1ODUwZWJkNjdiMmIxODYxMGU0ODg5MDY2NWUzMTkyYWIu
LmZkMzQyMGZlNzkzOGU4ODdhNTJiNWRiYTY5ZGQyZDE2YjNlODhmN2QgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRU
ZXN0cy5tbQpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVn
YXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25m
aWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0
IDxDb250YWN0cy9Db250YWN0cy5oPgogI2ltcG9ydCA8TWFwS2l0L01hcEtpdC5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFyY2hpdmUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFj
dGl2YXRlZEVsZW1lbnRJbmZvLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQppbmRleCA5OTNmMGJiZmYzYWY1
MmMzM2QzZWU2NzMxZWExNzVjMTY0NTAwYmM0Li45NTVlYmUwZTIzZmUxNmMxZGJjZjE0NTUxNmQ2
MDZhZmJhOTU2YTllIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEluZm8u
bW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3ROYXZp
Z2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmll
d0NhbmRpZGF0ZVRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbQppbmRleCA4MTY1MDAxZjNlODM0ZWQ2MjI0OGQ0
NTVlMzlkMDczY2FmNTJiNjIzLi4xMGMxOWNiZjIxMzExNzc3MTJhMDZlMzA5MTg2YWZiZjc5YWJm
ZTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0KQEAgLTI5LDcgKzI5LDcgQEAK
IAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcu
aCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Q2FyYm9uL0NhcmJv
bi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdFByaXZhdGUuaD4KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFj
dGlvbnMubW0KaW5kZXggOWQxYjdjNjI1NDk4NGFmYTAxNGQyOTJlZmExNThiOGI4YTMxYjk5OC4u
NmJhOWI5ZTQ2YjA3NDJiNTMxMjAwYWE5NzRlMDUxZjA4Mjg4ZjgxMiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0Vk
aXRBY3Rpb25zLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0
aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbQpp
bmRleCA3ZDI1N2ZkNzMyYzQ3N2U3Y2FkNWRmOWI2YzJiMDllNjYzMGJkOTYwLi5lYzE5MGM4ZDY0
MjUzYTg1NTRkNmM0OGE2YzFmNGMzMDNmNGNmMzY0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJz
dFJlc3BvbmRlclRlc3RzLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdElucHV0RGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RX
S1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9T
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9T
Lm1tCmluZGV4IDFmNmEwOTM3YjcwNjg4ZGJjNzM1MTViOTAxOTU0M2VmMmY4YmYzNGUuLmRiMDgy
NzMzNDYyOGYwNzM4Zjk1N2IxMGRmZDdjNzViMmRiM2QxMmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW0KQEAgLTMx
LDYgKzMxLDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0
V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVjdEludGVyZmFjZS5oPgogI2lt
cG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lmg+CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbQppbmRleCBlODFmMTAyZWY2
YzFiMzJhZTdkMzE5MWE1YzQ1OGE4NWMwYWM5NWNjLi42MGEwZTAwZmZjNGNhMjY1NTczOTZkMTY3
NTFjNTkyZmVjNTBlNjE1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lv
cy9BY3Rpb25TaGVldFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L0FjdGlvblNoZWV0VGVzdHMubW0KQEAgLTM1LDkgKzM1LDkgQEAKICNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXdDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJV
SUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8TW9iaWxl
Q29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlE
ZWxlZ2F0ZVByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLQWN0aXZhdGVkRWxlbWVudEluZm8uaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tFbGVtZW50QWN0aW9uLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0aW9uVGVzdHNJT1Mu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9T
Lm1tCmluZGV4IGYwOTI5Zjg3YzJhYzE0Nzg4YTE5ODI1YjczNTBkMmMxODE3NTRjMjAuLmUyYWFh
YzA4NzA1ODM5NTdiNzQ3ODBiYjcxN2ViMjdiODFlNTM3NTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdElucHV0RGVsZWdhdGUuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdU
ZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiBAaW50ZXJm
YWNlIFRlc3RXS1dlYlZpZXcgKEF1dG9jb3JyZWN0aW9uVGVzdHMpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbQppbmRl
eCA0OTU2MjBjNDNlZGU3NzRhOWM5ZTM2YjczMDBhMTg1YmMzZmY0YmQyLi4wYjZkOTNmODg4NGVm
NjRmOGZhOTA4Yzc3NTg5NmZmZGNiMTc1OTQ5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW0KQEAgLTMyLDYgKzMy
LDcgQEAKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJW
aWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tJbnB1dERlbGVnYXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbQppbmRleCA5
Njc2YTMzYmIyNmNhZjk5ZWI3YmMxOTJkMjgwOWZkODY2ZmVmZDJkLi4wMzUwNzY2MzM0MTZhZGJi
MzgzODQ1MDFiYjM2NDAxMDdiYmVmOTFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1w
b3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAKICNpbXBvcnQgIlV0aWxpdGllcy5oIgor
I2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
CiBAaW1wbGVtZW50YXRpb24gVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQppbmRleCA2OWNkNDk3
ZGMxNjZiYmE2MmEyZWUyMDJmOTRhYzBmOTZjN2Q2N2YyLi4wZDY1MjFkNjkwNjhjMTNjNjlmOGM1
YTQ5OWEzYmZmMjZhODk5MDQ5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9E
cmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9E
cmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQpAQCAtMzEsMTIgKzMxLDExIEBACiAjaW1wb3J0ICJJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2lt
cG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJhZ0l0
ZW0uaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJvcEludGVyYWN0aW9uLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSUludGVyYWN0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS0ZvY3VzZWRFbGVtZW50SW5mby5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS0Zvcm1JbnB1dFNlc3Npb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0KaW5k
ZXggMTAwNWVlNDc4YjU3ZGZmZWM4N2Y0NTNkNDIyNDQ5NDQxM2E5M2Y0ZC4uODIxZDVkYzAwNzky
MzU0OTdmYzQyNjlmN2I3MDZhZDc3ZWZjOGE2NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0RHJhZ2dpbmdJbmZvLmgi
CiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgi
CiAjaW1wb3J0IDxjbWF0aD4KICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKaW5k
ZXggODVjYjcyOGZkMzJmN2Y2NWVjNmEyNmI4NGVkYWY1MmQxMTA2MjZlOC4uYzMzN2I3YjY4OTkw
Y2Y3N2IwNDk3MGM4YWUwYzNmOGE1MGE4NTk1ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpAQCAtNTMsNyArNTMsNyBAQCBD
TEFOR19BTkFMWVpFUl9MT0NBTElaQUJJTElUWV9OT05MT0NBTElaRUQgPSBZRVM7CiBDTEFOR19X
QVJOX1JBTkdFX0xPT1BfQU5BTFlTSVMgPSBZRVM7CiBDTEFOR19XQVJOX1NVU1BJQ0lPVVNfTU9W
RSA9IFlFUzsKIENMQU5HX1dBUk5fREVQUkVDQVRFRF9PQkpDX0lNUExFTUVOVEFUSU9OUyA9IFlF
UzsKLUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2Fs
L2luY2x1ZGUgJChCVUlMVF9QUk9EVUNUU19ESVIpL1dlYkNvcmVUZXN0U3VwcG9ydCAkKFdFQkNP
UkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChORVhUX1JPT1QpL3Vz
ci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydCAkKFBMQVRGT1JNX0hFQURFUl9TRUFS
Q0hfUEFUSFMpOworSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91
c3IvbG9jYWwvaW5jbHVkZSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViQ29yZVRlc3RTdXBwb3J0
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJLaXRUZXN0U3VwcG9ydCAkKFdFQkNPUkVfUFJJVkFU
RV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9p
bmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydCAkKFBMQVRGT1JNX0hFQURFUl9TRUFSQ0hfUEFUSFMp
OwogUExBVEZPUk1fSEVBREVSX1NFQVJDSF9QQVRIU1tzZGs9aXBob25lKl0gPSAkKFNSQ1JPT1Qp
Ly4uLy4uL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvczsKIEdDQ19OT19DT01NT05fQkxP
Q0tTID0gWUVTOwogR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICQoREVCVUdfREVGSU5F
UykgVV9ESVNBQkxFX1JFTkFNSU5HPTEgVV9TSE9XX0NQTFVTUExVU19BUEk9MDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQppbmRl
eCBlOTIzYjg1MWEzZTlkZDY0YzJkNjNhNGUyNjE0MzU0MTZkYzZiYmRjLi45NWE2ODEzZDY5NDA3
ZTJlZWI0YWQzZWI5Yjc0NWMzYzlkODQ2NWMwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCkBAIC0zMiw2ICszMiw3IEBACiAj
aW1wb3J0ICJUZXN0SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5o
IgogI2ltcG9ydCAiVGVzdFdlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tX
ZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1w
b3J0IDxTZWN1cml0eS9TZWNJdGVtLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZXh0Q29uZmln
dXJhdGlvblJlZi5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9U
ZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4IGVjYTAwNmM2ODkzNGY4ZjdjM2JmZTMzMzEzNzk3NTI3
NjFjMjU4ZjIuLmM0MjkxMmRmYTBkNjgwODA3N2MzZjRkOGQ1ZTcxNWI1NzRmNGU4MTMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5t
bQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcu
bW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiVGVzdFJ1
bm5lcldLV2ViVmlldy5oIgogCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0
ICJXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tVSURl
bGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTM2LDYgKzM3
LDcgQEAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisKIEBpbnRlcmZhY2UgV0tXZWJWaWV3
ICgpCiAKIC8vIEZJWE1FOiBtb3ZlIHRoZXNlIHRvIFdLV2ViVmlld19Qcml2YXRlLmgKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNv
Y29hLm1tCmluZGV4IGJlZTA0OTdiZjU2ZDIzNjAwNmEzODFiYTExNjFhNzBiOTMwZWZjZjMuLjBm
YTE2ZGQ0ODljZGRjZDA2ZTMxM2M1OTQ3MzdhNzg1ZjZmYzhlMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQpA
QCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlRl
c3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJU2NyaXB0Q29udGV4dC5oIgorI2ltcG9y
dCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KaW5kZXggYWUyYTk0
YTE1YjAwOTkyYjFlODk1Zjk0ODc2NjI1YTE4YzFhNDlmZi4uYjYwMDc1MGZhOTc2ODY4M2RlNzUy
ZDU3NDg5MTE1M2YwMjFmNzE5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VGVzdENvbnRyb2xsZXJJT1MubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlRlc3RJbnZv
Y2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggOTk5Y2E4NzFlY2ExZWRiYTE4YjU1
OGNhMjBlODViODUxZTcxMDdjZS4uZTA1MGQ1YjNiY2ExZWNkNTRkMzgxZWZkMjA4MTQ3MzAwNjAx
MTkzOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2Vi
Vmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIlVJU2NyaXB0Q29udGV4dC5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5n
Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCmluZGV4IDZiZGUyNjE1ZWVmMDgyZDJk
OTdmNTg0ZWI5NzE4MDE5ODc2MjUzYTMuLjI1ZWQ4NWNlNmRmOGExYmRiZDkxM2FmZjI3M2U5YzU0
ODUwNzg2YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0
Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlw
dENvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDEzICszMCwxMyBAQAogI2ltcG9ydCAiRXZlbnRTZXJp
YWxpemVyTWFjLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVZpZXdIZWxwZXJzLmgiCiAjaW1wb3J0ICJQ
bGF0Zm9ybVdlYlZpZXcuaCIKLSNpbXBvcnQgIlNoYXJlZEV2ZW50U3RyZWFtc01hYy5oIgotI2lt
cG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtV2ViVmlldy5oIgorI2lt
cG9ydCAiU2hhcmVkRXZlbnRTdHJlYW1zTWFjLmgiCiAjaW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMu
aCIKICNpbXBvcnQgIlRlc3RDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJW
aWV3LmgiCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRleHQuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rl
c3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dC5oPgogI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNWYWx1ZS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385265</attachid>
            <date>2019-12-10 08:23:20 -0800</date>
            <delta_ts>2019-12-10 14:51:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191210082319.patch</filename>
            <type>text/plain</type>
            <size>141744</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggOWQy
NDJlMmEwNjRkZmY3MmY0OWM0MmY1NGQ5NzgxM2NhZDk0ZDkyYy4uMWIyNWE3YjlkMDllYTM2NWI3
MjRkMDVhOTdkYmZjNjMwZmRhYzcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMzIyLDEx
ICszMjIsMTUgQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQubW0KIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCitV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBh
Z2VQcmVmZXJlbmNlcy5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dpbmRvd0ZlYXR1cmVzLm1t
CiAKK1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KKwogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCitVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFj
Lm1tCiAKIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5Q29jb2EubW0KIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9TZWNLZXlQ
cm94eVN0b3JlLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAppbmRleCA1MzYyYjE4ZTg1M2ZhNTQ4MzE2OWVmNGUy
MjFlZTE5ZjI4YzQ4ZWIyLi4yNTkwNzhmZjVjMTQxZDRjMGRmZTJhODI2YWE0ODhhMmI5YTVkZjI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVn
YXRlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJ
RGVsZWdhdGVQcml2YXRlLmgKQEAgLTM5LDYgKzM5LDcgQEAKIEBjbGFzcyBfV0tBY3RpdmF0ZWRF
bGVtZW50SW5mbzsKIEBjbGFzcyBfV0tFbGVtZW50QWN0aW9uOwogQGNsYXNzIF9XS0ZyYW1lSGFu
ZGxlOworQGNsYXNzIF9XS0luc3BlY3RvcjsKIAogI2lmIFRBUkdFVF9PU19JT1MKIEBjbGFzcyBV
SUNvbnRleHRNZW51Q29uZmlndXJhdGlvbjsKQEAgLTE4Miw2ICsxODMsNyBAQCBzdHJ1Y3QgVUlF
ZGdlSW5zZXRzOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50
ZXJhY3Rpb246KGlkKWludGVyYWN0aW9uIHNlc3Npb246KGlkKXNlc3Npb24gZGlkRW5kV2l0aE9w
ZXJhdGlvbjooTlNVSW50ZWdlcilvcGVyYXRpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkp
OwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50ZXJhY3Rpb25P
cGVyYXRpb25XYXNIYW5kbGVkOihCT09MKWhhbmRsZWQgZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBp
dGVtUHJvdmlkZXJzOihOU0FycmF5ICopaXRlbVByb3ZpZGVycyBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4wKSk7CiAtIChOU1VJbnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdp
bGxVcGRhdGVEYXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjooTlNVSW50ZWdlcilv
cGVyYXRpb24gZm9yU2Vzc2lvbjooaWQpc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CisKICNpZiBUQVJHRVRfT1NfSU9TCiAtIChVSURyb3BQcm9wb3NhbCAqKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxVcGRhdGVEcm9wUHJvcG9zYWxUb1Byb3Bvc2FsOihVSURy
b3BQcm9wb3NhbCAqKXByb3Bvc2FsIGZvclNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNz
aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKIC0gKFVJVGFyZ2V0ZWREcmFnUHJldmll
dyAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHByZXZpZXdGb3JMaWZ0aW5nSXRlbToo
VUlEcmFnSXRlbSAqKWl0ZW0gc2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Npb24+KXNlc3Npb24gV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwpAQCAtMTkwLDYgKzE5Miw3IEBAIHN0cnVjdCBVSUVk
Z2VJbnNldHM7CiAtIChOU0ludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0
YU93bmVyRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKE5TSW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkYXRhT3duZXJGb3JEcmFnU2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Npb24+KXNlc3Np
b24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogI2VuZGlmCisKIC0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQ2hhbmdlU2FmZUFyZWFTaG91bGRBZmZlY3RPYnNj
dXJlZEluc2V0czooQk9PTClzYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgZGlkUHJlc2VudEZvY3VzZWRFbGVtZW50Vmlld0NvbnRyb2xsZXI6KFVJVmlld0NvbnRy
b2xsZXIgKiljb250cm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKIC0gKHZvaWQp
X3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRGlzbWlzc0ZvY3VzZWRFbGVtZW50Vmll
d0NvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEyLjApKTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwog
LSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzaG91bGRBbGxvd0RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKily
ZXF1ZXN0aW5nRnJhbWUgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShCT09MKSlkZWNpc2lvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwogCiAjZWxzZSAvLyAhVEFSR0VUX09T
X0lQSE9ORQorCiAtICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9y
V2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKIC0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAt
ICh2b2lkKV9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CkBAIC0yMzcs
NiArMjQxLDcgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKICAgICBAcGFyYW0gaW5zcGVjdG9yIFRo
ZSBXZWIgSW5zcGVjdG9yIGluc3RhbmNlIGF0dGFjaGVkIHRvIHRoaXMgV0tXZWJWaWV3LgogKi8K
IC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQXR0YWNoSW5zcGVjdG9y
OihfV0tJbnNwZWN0b3IgKilpbnNwZWN0b3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSk7CisKICNlbmRpZiAvLyAhVEFSR0VUX09TX0lQSE9ORQogCiBAZW5kCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCAzNTA5Nzk5ZGNl
ZTBhOTM4MGYzMGQyZWZlYTVjMjM3MTgyMTgxNWY1Li5mY2RhNWRkNzAyZmIzODg2MGEyZDg4YTQw
ZDY2ZmI2ZDRiN2M2NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KQEAgLTUyLDcgKzUyLDYgQEAKICNpbXBvcnQgIlRleHRDaGVja2VyLmgi
CiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW1wb3J0ICJVSURlbGVnYXRlLmgiCi0j
aW1wb3J0ICJVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oIgogI2ltcG9ydCAiVmVyc2lvbkNoZWNr
cy5oIgogI2ltcG9ydCAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJW
aWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKQEAgLTgwLDYgKzc5LDcgQEAKICNpbXBvcnQgIldLVXNl
ckNvbnRlbnRDb250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3Vy
YXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXS1dlYnBhZ2VQcmVmZXJl
bmNlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC05OSwxNSArOTksOSBAQAogI2ltcG9y
dCAiX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0lucHV0RGVsZWdhdGUuaCIKLSNpbXBvcnQgIl9XS0luc3Bl
Y3RvckludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tTZXNzaW9uU3RhdGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVGV4
dElucHV0Q29udGV4dEludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uQ29u
ZmlndXJhdGlvbi5oIgotI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgiCi0j
aW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oIgotI2ltcG9ydCAiX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKLSNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJf
V0tXZWJzaXRlUG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Q29u
dGV4dC5oPgpAQCAtMTI0LDcgKzExOCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRpZXMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVmFsaWRh
dGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uLmg+CkBAIC0yODIsMjkgKzI3NSwxOCBAQCBAaW1wbGVtZW50YXRpb24gV0tX
ZWJWaWV3IHsKIAogICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0
RGVsZWdhdGU7CiAKLSAgICBPcHRpb25hbDxCT09MPiBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJ
bW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKICAgICBSZXRhaW5QdHI8V0tTYWZlQnJvd3Np
bmdXYXJuaW5nPiBfc2FmZUJyb3dzaW5nV2FybmluZzsKIAogICAgIEJPT0wgX3VzZVBsYXRmb3Jt
RmluZFVJOwogCi0gICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVPYmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJl
Z2lzdHJ5OwogCi0gICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7Ci0gICAg
UmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKLQotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4g
X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotI2VuZGlmCi0KICAgICBPcHRpb25hbDxDR1Np
emU+IF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0
U2l6ZT4gX2xhc3RTZW50Vmlld0xheW91dFNpemU7CiAgICAgT3B0aW9uYWw8Q0dTaXplPiBfbWF4
aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRT
aXplPiBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemU7CiAKLSAgICBDR1JlY3QgX2lucHV0
Vmlld0JvdW5kczsKICAgICBDR0Zsb2F0IF92aWV3cG9ydE1ldGFUYWdXaWR0aDsKICAgICBCT09M
IF92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0OwogICAgIEJPT0wgX3ZpZXdwb3J0TWV0
YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudDsKQEAgLTM0OSw3ICszMzEsNiBAQCBAaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IHsKICAgICBPcHRpb25hbDxXZWJLaXQ6OlRyYW5zYWN0aW9uSUQ+IF9m
aXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlOwogICAgIGRvdWJsZSBfc2NhbGVUb1Jl
c3RvcmU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI+IF9nZXN0dXJlQ29udHJvbGxlcjsKICAgICBCT09MIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmln
YXRpb25HZXN0dXJlczsKIAogICAgIFJldGFpblB0cjxVSVZpZXcgPFdLV2ViVmlld0NvbnRlbnRQ
cm92aWRlcj4+IF9jdXN0b21Db250ZW50VmlldzsKQEAgLTM4MSw3ICszNjIsNiBAQCBAaW1wbGVt
ZW50YXRpb24gV0tXZWJWaWV3IHsKIAogICAgIEJPT0wgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0
VXBkYXRlOwogICAgIEJPT0wgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxlZEZyb21T
Y3JvbGxWaWV3SW5TdGFibGVTdGF0ZTsKLSAgICBWZWN0b3I8QmxvY2tQdHI8dm9pZCAoKT4+IF92
aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3M7CiAKICAgICBfV0tEcmFnSW50ZXJhY3Rp
b25Qb2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKIApAQCAtMzk3LDcgKzM3Nyw2IEBAIEBp
bXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgewogICAgIEJPT0wgX2hhc0VudGVyZWREZWFsbG9jOwog
I2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Oldl
YlZpZXdJbXBsPiBfaW1wbDsKICAgICBSZXRhaW5QdHI8V0tUZXh0RmluZGVyQ2xpZW50PiBfdGV4
dEZpbmRlckNsaWVudDsKICNlbmRpZgogICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgX3NlbGVj
dGlvbkF0dHJpYnV0ZXM7CkBAIC0xNDMwLDYgKzE0MDksNDEgQEAgLSAodm9pZClfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uCiAgICAgICAgIFtzZWxmIF9j
bGVhclNhZmVCcm93c2luZ1dhcm5pbmddOwogfQogCistICh2b2lkKV9pbnRlcm5hbERvQWZ0ZXJO
ZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayB3aXRob3V0
V2FpdGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcgd2l0aG91
dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNT
dGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGlmICh3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nKQorICAgICAgICBfcGFn
ZS0+c2V0U2hvdWxkU2tpcFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRNb3ZlVG9XaW5k
b3codHJ1ZSk7CisKKyAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRh
dGVCbG9jayk7CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsK
KyAgICBfcGFnZS0+Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbdXBkYXRlQmxvY2tD
b3B5LCB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplLCBzdHJvbmdTZWxmXShXZWJLaXQ6
OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVCbG9ja0Nv
cHkpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
ICAgICBpZiAoIXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUgJiYgc3Ryb25nU2VsZi0+
X2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlOjpOb3RSZXNpemluZykgeworICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2NhbGxiYWNr
c0RlZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbdXBkYXRlQmxvY2tDb3B5XSB7CisgICAgICAg
ICAgICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZWxzZQorICAgICAgICBVTlVTRURf
UEFSQU0od2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSk7CisjZW5kaWYKKworICAgICAg
ICB1cGRhdGVCbG9ja0NvcHkoKTsKKyAgICB9KTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5U
X0VMRU1FTlQpCiAKIC0gKHZvaWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVu
dCYpYXR0YWNobWVudCB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTQ1OSwxMSAr
MTQ3Myw2IEBAIC0gKHZvaWQpX2RpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudDooQVBJOjpB
dHRhY2htZW50JilhdHRhY2htZW50CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0tIChC
T09MKV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gc2VsZi5fY3Vy
cmVudENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Ci19Ci0KIC0gKEJPT0wpX3Nob3VsZEF2
b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlCiB7CiAgICAgcmV0dXJuIFtfY29u
dGVudFZpZXcgX3Nob3VsZEF2b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlXTsK
QEAgLTM2NzUsNiArMzY4NCwyMyBAQCAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2Vzcwog
ICAgIF9pbXBsLT5oYW5kbGVET01QYXN0ZVJlcXVlc3RXaXRoUmVzdWx0KFdlYkNvcmU6OkRPTVBh
c3RlQWNjZXNzUmVzcG9uc2U6OkdyYW50ZWRGb3JHZXN0dXJlKTsKIH0KIAorLSAodm9pZClfcHJl
cGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoreworfQorCistICh2b2lkKV9jYW5jZWxJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfY29tcGxldGVJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFu
ZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPmdlc3R1cmVFdmVu
dFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmlld09ubHkoZXZlbnQpOworfQorCiBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgogLSAodm9pZClyZW5ld0dTdGF0ZQogQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECkBAIC00ODMwLDYgKzQ4NTYsMTYgQEAg
LSAodm9pZClfY2hhbmdlTGlzdFR5cGU6KGlkKXNlbmRlcgogICAgIF9wYWdlLT5jaGFuZ2VMaXN0
VHlwZSgpOwogfQogCistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCit7CisgICAgcmV0dXJu
IF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Cit9CisKKy0gKHZvaWQpX3NldFVzZVN5c3Rl
bUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQoreworICAgIF9pbXBsLT5zZXRV
c2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOworfQorCiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ4NjQsNiArNDkw
MCwyNSBAQCAtIChVSVZpZXcgKilpbnB1dFZpZXcKICAgICByZXR1cm4gW19jb250ZW50VmlldyBp
bnB1dFZpZXdGb3JXZWJWaWV3XTsKIH0KIAorLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKFtfZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0dXJuIFtfZnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNlaG9sZGVyXTsKKyNlbmRpZiAvLyBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcmVx
dWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRp
b25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sKK3sKKyAg
ICBhdXRvIGluZm9SZXF1ZXN0ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVz
dChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pKTsKKyAgICBpbmZvUmVxdWVzdC5p
bmNsdWRlU25hcHNob3QgPSB0cnVlOworCisgICAgW19jb250ZW50VmlldyBkb0FmdGVyUG9zaXRp
b25JbmZvcm1hdGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihibG9jayld
IChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKSB7
CisgICAgICAgIGNhcHR1cmVkQmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFjdGl2YXRl
ZEVsZW1lbnRJbmZvV2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmluZm9ybWF0
aW9uIHVzZXJJbmZvOm5pbF0pOworICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07Cit9CisK
ICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChCT09MKV9pc0VkaXRhYmxlCkBA
IC02MTQzLDYgKzYxOTgsMzYgQEAgLSAodm9pZClfcmVtb3ZlRGF0YURldGVjdGVkTGlua3M6KGRp
c3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgogI2VuZGlmCiB9CiAKKy8vIEV4ZWN1dGUgdGhlIHN1
cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20gdGhlIFdlYlByb2Nl
c3MuCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRh
dGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOk5PIHdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworfQorCistICh2b2lkKV9kb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZv
aWQpKXVwZGF0ZUJsb2NrCit7CisgICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50
YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpZRVMgd2l0
aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107Cit9CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRp
c3BhdGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7CisKKyAgICBp
ZiAoX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzKQorICAgICAgICBbX3N0
YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGFkZE9iamVjdDp1cGRhdGVCbG9j
a0NvcHkuZ2V0KCldOworICAgIGVsc2UgeworICAgICAgICBfc3RhYmxlU3RhdGVQcmVzZW50YXRp
b25VcGRhdGVDYWxsYmFja3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czp1cGRhdGVCbG9ja0NvcHkuZ2V0KCksIG5pbF0pOworICAgICAgICBbc2VsZiBf
ZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNh
bGxiYWNrc107CisgICAgfQorfQorI2VuZGlmCisKICNwcmFnbWEgbWFyayBpT1Mtc3BlY2lmaWMg
bWV0aG9kcwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTY0NzAsNiArNjU1NSwxNyBA
QCAtICh2b2lkKV9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczoodm9pZCAoXiko
dm9pZCkpdXBkYXRlQmxvY2sKICAgICB9CiB9CiAKKy0gKHZvaWQpX2ZpcmVQcmVzZW50YXRpb25V
cGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3MKK3sKKyAgICBS
ZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKKyAgICBbc2VsZiBfZG9BZnRl
ck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZdIHsKKyAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1NlbGZdIHsKKyAgICAgICAg
ICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJh
Y2tzIGNvdW50XSkKKyAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfZmlyZVByZXNlbnRhdGlv
blVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc107CisgICAg
ICAgIH0pOworICAgIH1dOworfQorCiAtICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdz
SW5zZXQ6KENHU2l6ZSlpbnNldAogewogICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3NldE92
ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07CkBAIC02OTIzLDg2MyArNzAxOSw2IEBA
IEBlbmQKIAogI3VuZGVmIEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcKIAotQGltcGxl
bWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nKQotCi0tICh2b2lkKV9zZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09MKWVuYWJsZWQKLXsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFtfY29udGVudFZpZXcgc2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOmVuYWJsZWRdOwotI2Vsc2UKLSAgICBfaW1wbC0+c2V0Q29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLS0gKE5TRGljdGlvbmFy
eSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFj
ZUl0ZW0KLXsKLSAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAInZh
bGlkYXRpb25CdWJibGUiXSkgewotICAgICAgICBhdXRvKiB2YWxpZGF0aW9uQnViYmxlID0gX3Bh
Z2UtPnZhbGlkYXRpb25CdWJibGUoKTsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0
aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgpIDogZW1wdHlTdHJpbmcoKTsK
LSAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25C
dWJibGUtPmZvbnRTaXplKCkgOiAwOwotICAgICAgICByZXR1cm4gQHsgdXNlckludGVyZmFjZUl0
ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2UsIEAiZm9udFNpemUiOiBbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9OwotICAgIH0KLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2Vy
SW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbV07Ci0jZWxzZQotICAg
IHJldHVybiBuaWw7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0tICh2
b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24g
Y29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9j
awotewotICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRp
b25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOwotICAgIGluZm9S
ZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7Ci0KLSAgICBbX2NvbnRlbnRWaWV3IGRvQWZ0
ZXJQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlOltjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRy
KGJsb2NrKV0gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3Jt
YXRpb24pIHsKLSAgICAgICAgY2FwdHVyZWRCbG9jayhbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8g
YWN0aXZhdGVkRWxlbWVudEluZm9XaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246
aW5mb3JtYXRpb24gdXNlckluZm86bmlsXSk7Ci0gICAgfSBmb3JSZXF1ZXN0OmluZm9SZXF1ZXN0
XTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9m
ZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9u
SGFuZGxlcgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRsZXI6
W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25SZWN0
cykgewotICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCi0gICAgICAg
ICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNlbGVj
dGlvblJlY3QucmVjdCgpXV07Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIocmVj
dFZhbHVlcy5nZXQoKSk7Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9y
ZVNlbGVjdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVj
dGlvbl07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbgotewotICAg
IFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07Ci19Ci0KLS0gKFVJ
VmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Ci17Ci0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVl
bl0pCi0gICAgICAgIHJldHVybiBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQ
bGFjZWhvbGRlcl07Ci0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHJldHVy
biBuaWw7Ci19Ci0KLS0gKENHUmVjdClfY29udGVudFZpc2libGVSZWN0Ci17Ci0gICAgcmV0dXJu
IFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250
ZW50Vmlld107Ci19Ci0KLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmll
dzooQ0dQb2ludClwb2ludAotewotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQg
ZnJvbVZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLX0KLQotLSAoQ0dQb2ludClfY29u
dmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJu
IFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3
XTsKLX0KLQotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQKLXsKLSAgICBbX2NvbnRl
bnRWaWV3IGFjY2Vzc29yeVRhYjpZRVNdOwotfQotCi0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5
QmFyUHJldmlvdXMKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107Ci19Ci0K
LS0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJp
bmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFwcGx5QXV0b2Nv
cnJlY3Rpb246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRs
ZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhh
bmRsZXIpXSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7Ci0gICAgICAgIGNhcHR1
cmVkQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClkaXNtaXNzRm9y
bUFjY2Vzc29yeVZpZXcKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURvbmVdOwotfQot
Ci0tICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgotewotICAgIFtfY29udGVudFZpZXcgZGlzbWlz
c0ZpbGVQaWNrZXJdOwotfQotCi0tICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJ
bnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlCi17Ci0gICAgW19jb250ZW50Vmll
dyBzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6aG91ciBtaW51dGU6bWludXRlXTsKLX0KLQotLSAo
dm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgKLXsKLSAgICBb
X2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5kZXhdOwotfQot
Ci0tIChOU1N0cmluZyAqKXNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUKLXsKLSAgICByZXR1cm4gW19j
b250ZW50VmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXTsKLX0KLQotLSAoTlNTdHJpbmcgKil0
ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgdGV4
dENvbnRlbnRUeXBlRm9yVGVzdGluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopZm9ybUlucHV0TGFi
ZWwKLXsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07Ci19Ci0KLS0g
KHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uCi17Ci0gICAgLy8gRm9yIHN1YmNs
YXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFj
dGlvbgotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotfQotCi0tICh2b2lk
KV9kaWRTaG93Q29udGV4dE1lbnUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlk
ZS4KLX0KLQotLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51Ci17Ci0gICAgLy8gRm9yIHN1
YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKENHUmVjdClfdWlUZXh0Q2FyZXRSZWN0Ci17
Ci0gICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCi0g
ICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07Ci0KLSAgICByZXR1cm4g
W1tfY29udGVudFZpZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQuc2Vs
ZWN0aW9uVmlldy5zZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwotfQotCi0tIChD
R1JlY3QpX2lucHV0Vmlld0JvdW5kcwotewotICAgIHJldHVybiBfaW5wdXRWaWV3Qm91bmRzOwot
fQotCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVjdHMKLXsKLSAg
ICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KLSAgICBb
X2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKLQotICAgIHJldHVybiBbX2Nv
bnRlbnRWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c107Ci19Ci0KLS0gKE5TU3RyaW5nICopX3Nj
cm9sbGluZ1RyZWVBc1RleHQKLXsKLSAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHko
KTsKLSAgICBpZiAoIWNvb3JkaW5hdG9yKQotICAgICAgICByZXR1cm4gQCIiOwotCi0gICAgcmV0
dXJuIGNvb3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Ci19Ci0KLS0gKE5TTnVtYmVy
ICopX3N0YWJsZVN0YXRlT3ZlcnJpZGUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVy
cmlkZS4KLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVBy
ZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jawotewotICAgIGlm
ICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVw
ZGF0ZUJsb2NrKTsKLQotICAgIGlmIChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxs
YmFja3MpCi0gICAgICAgIFtfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3Mg
YWRkT2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5nZXQoKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIF9z
dGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmls
XSk7Ci0gICAgICAgIFtzZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJs
ZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX2ZpcmVQ
cmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFj
a3MKLXsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKLSAgICBb
c2VsZiBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZdIHsKLSAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1NlbGZd
IHsKLSAgICAgICAgICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9u
VXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkKLSAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfZmly
ZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxi
YWNrc107Ci0gICAgICAgIH0pOwotICAgIH1dOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfcHJv
cGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklECi17Ci0gICAg
Q0FMYXllciogbGF5ZXIgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxh
eWVySUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gQHsKLSAgICAgICAgQCJib3VuZHMiIDogQHsKLSAgICAgICAgICAgIEAieCIgOiBAKGxheWVy
LmJvdW5kcy5vcmlnaW4ueCksCi0gICAgICAgICAgICBAInkiIDogQChsYXllci5ib3VuZHMub3Jp
Z2luLngpLAotICAgICAgICAgICAgQCJ3aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLndpZHRo
KSwKLSAgICAgICAgICAgIEAiaGVpZ2h0IiA6IEAobGF5ZXIuYm91bmRzLnNpemUuaGVpZ2h0KSwK
LQotICAgICAgICB9LAotICAgICAgICBAInBvc2l0aW9uIiA6IEB7Ci0gICAgICAgICAgICBAIngi
IDogQChsYXllci5wb3NpdGlvbi54KSwKLSAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLnBvc2l0
aW9uLnkpLAotICAgICAgICB9LAotICAgICAgICBAInpQb3NpdGlvbiIgOiBAKGxheWVyLnpQb3Np
dGlvbiksCi0gICAgICAgIEAiYW5jaG9yUG9pbnQiIDogQHsKLSAgICAgICAgICAgIEAieCIgOiBA
KGxheWVyLmFuY2hvclBvaW50LngpLAotICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYW5jaG9y
UG9pbnQueSksCi0gICAgICAgIH0sCi0gICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IEAobGF5ZXIu
YW5jaG9yUG9pbnRaKSwKLSAgICAgICAgQCJ0cmFuc2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAi
bTExIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMSksCi0gICAgICAgICAgICBAIm0xMiIgOiBAKGxh
eWVyLnRyYW5zZm9ybS5tMTIpLAotICAgICAgICAgICAgQCJtMTMiIDogQChsYXllci50cmFuc2Zv
cm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xNCksCi0K
LSAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMSksCi0gICAgICAgICAg
ICBAIm0yMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJtMjMiIDog
QChsYXllci50cmFuc2Zvcm0ubTIzKSwKLSAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIudHJh
bnNmb3JtLm0yNCksCi0KLSAgICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0z
MSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzIpLAotICAgICAg
ICAgICAgQCJtMzMiIDogQChsYXllci50cmFuc2Zvcm0ubTMzKSwKLSAgICAgICAgICAgIEAibTM0
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zNCksCi0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5
ZXIudHJhbnNmb3JtLm00MSksCi0gICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnRyYW5zZm9y
bS5tNDIpLAotICAgICAgICAgICAgQCJtNDMiIDogQChsYXllci50cmFuc2Zvcm0ubTQzKSwKLSAg
ICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm00NCksCi0gICAgICAgIH0sCi0g
ICAgICAgIEAic3VibGF5ZXJUcmFuc2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAibTExIiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTExKSwKLSAgICAgICAgICAgIEAibTEyIiA6IEAobGF5
ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEyKSwKLSAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIu
c3VibGF5ZXJUcmFuc2Zvcm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIuc3Vi
bGF5ZXJUcmFuc2Zvcm0ubTE0KSwKLQotICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci5zdWJs
YXllclRyYW5zZm9ybS5tMjEpLAotICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci5zdWJsYXll
clRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci5zdWJsYXllclRy
YW5zZm9ybS5tMjMpLAotICAgICAgICAgICAgQCJtMjQiIDogQChsYXllci5zdWJsYXllclRyYW5z
Zm9ybS5tMjQpLAotCi0gICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm0zMSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3Jt
Lm0zMiksCi0gICAgICAgICAgICBAIm0zMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0z
MyksCi0gICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zNCks
Ci0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQxKSwK
LSAgICAgICAgICAgIEAibTQyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQyKSwKLSAg
ICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQzKSwKLSAgICAg
ICAgICAgIEAibTQ0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwKLSAgICAgICAg
fSwKLQotICAgICAgICBAImhpZGRlbiIgOiBAKGxheWVyLmhpZGRlbiksCi0gICAgICAgIEAiZG91
YmxlU2lkZWQiIDogQChsYXllci5kb3VibGVTaWRlZCksCi0gICAgICAgIEAibWFza3NUb0JvdW5k
cyIgOiBAKGxheWVyLm1hc2tzVG9Cb3VuZHMpLAotICAgICAgICBAImNvbnRlbnRzU2NhbGUiIDog
QChsYXllci5jb250ZW50c1NjYWxlKSwKLSAgICAgICAgQCJyYXN0ZXJpemF0aW9uU2NhbGUiIDog
QChsYXllci5yYXN0ZXJpemF0aW9uU2NhbGUpLAotICAgICAgICBAIm9wYXF1ZSIgOiBAKGxheWVy
Lm9wYXF1ZSksCi0gICAgICAgIEAib3BhY2l0eSIgOiBAKGxheWVyLm9wYWNpdHkpLAotICAgIH07
Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihkaXNwYXRj
aF9ibG9ja190KWFjdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNldHRpbmdT
aW5nbGVUYXBHZXN0dXJlOmFjdGlvbl07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdF
ZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KLXsKLSAg
ICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rp
bmc6YWN0aW9uXTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpZiBQ
TEFURk9STShNQUMpCi0tIChXS1BhZ2VSZWYpX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZp
ZXcKLXsKLSAgICByZXR1cm4gdG9BUEkoX3BhZ2UuZ2V0KCkpOwotfQotCi0tICh2b2lkKV9kaXNt
aXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzCi17Ci0gICAgX2ltcGwtPmRpc21pc3NDb250
ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKLX0KLQotLSAodm9pZClfc2V0
RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0Ci17Ci0gICAgX2lt
cGwtPnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNSZWN0VG9DR1JlY3QocmVjdCksIE5TU2l6ZVRvQ0dT
aXplKG9mZnNldCkpOwotfQotCi0tICh2b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dG
bG9hdCl0b3RhbEhlaWdodE9mQmFubmVycwotewotICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9m
QmFubmVycyh0b3RhbEhlaWdodE9mQmFubmVycyk7Ci19Ci0KLS0gKENHRmxvYXQpX3RvdGFsSGVp
Z2h0T2ZCYW5uZXJzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygp
OwotfQotCi0tICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKLXsKLSAg
ICBfaW1wbC0+YmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19Ci0KLS0gKHZv
aWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKLXsKLSAgICBfaW1wbC0+ZW5kRGVm
ZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwotfQotCi0tICh2b2lkKV9lbmREZWZlcnJpbmdW
aWV3SW5XaW5kb3dDaGFuZ2VzU3luYwotewotICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5X
aW5kb3dDaGFuZ2VzU3luYygpOwotfQotCi0tICh2b2lkKV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5k
bGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+Z2VzdHVyZUV2ZW50
V2FzTm90SGFuZGxlZEJ5V2ViQ29yZUZyb21WaWV3T25seShldmVudCk7Ci19Ci0KLS0gKHZvaWQp
X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKLXsK
LSAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50
cyk7Ci19Ci0KLS0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cwotewotICAgIHJldHVybiBf
aW1wbC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3RvbVN3
aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCi17Ci0gICAgX2ltcGwtPnNldEN1
c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3Rv
bVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldAotewotICAg
IF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENvbnRlbnRJbnNl
dCk7Ci19Ci0KLS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBp
Z25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKLXsKLSAgICByZXR1
cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVkU3RhdGUp
OwotfQotCi0tICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4p
KENHUmVjdCkpY2FsbGJhY2sKLXsKLSAgICBfaW1wbC0+c2V0RGlkTW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjayhjYWxsYmFjayk7Ci19Ci0KLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xk
ZXJWaWV3Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7
Ci19Ci0KLS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gX2lt
cGwtPmZ1bGxTY3JlZW5XaW5kb3coKTsKLX0KLQotLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVw
ZGF0ZXMKLXsKLSAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKLX0KLQotLSAo
dm9pZClfZW5hYmxlRnJhbWVTaXplVXBkYXRlcwotewotICAgIF9pbXBsLT5lbmFibGVGcmFtZVNp
emVVcGRhdGVzKCk7Ci19Ci0KLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb24KLXsKLX0KLQotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17
Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0K
LS0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFu
ZGxlCi17Ci0gICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJvY2VzcygpLndl
YkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRsZS5fZnJhbWVJ
RCkpKQotICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZyYW1lTGF5b3V0KCp3ZWJGcmFt
ZVByb3h5KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS0gKE5TQ29sb3IgKilfdW5kZXJsYXlD
b2xvcgotewotICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xvcigpOwotfQotCi0tICh2b2lk
KV9zZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5kZXJsYXlDb2xvcgotewotICAgIF9pbXBs
LT5zZXRVbmRlcmxheUNvbG9yKHVuZGVybGF5Q29sb3IpOwotfQotCi0tIChCT09MKV9oYXNBY3Rp
dmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgotewotICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+
aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKLX0KLQotLSAodm9pZClfcmVxdWVz
dENvbnRyb2xsZWRFbGVtZW50SUQKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdlLT5y
ZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOwotfQotCi0tICh2b2lkKV9oYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcgotewotICAgIC8vIE92
ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0KLQotLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCi17Ci0gICAgX2ltcGwtPmhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci19Ci0KLS0gKHZvaWQpX2RpZEhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgot
fQotCi0tICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTCl2aXNp
YmxlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQotCi0tICh2b2lkKV9m
b3JjZVJlcXVlc3RDYW5kaWRhdGVzCi17Ci0gICAgX2ltcGwtPmZvcmNlUmVxdWVzdENhbmRpZGF0
ZXNGb3JUZXN0aW5nKCk7Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVzCi17
Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOwotfQotCi0tICh2
b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBs
YWNlbWVudFJhbmdlCi17Ci0gICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVwbGFjZW1lbnRS
YW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKLX0KLQotLSAoTlNSZWN0KV9jYW5kaWRhdGVSZWN0Ci17
Ci0gICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZm9jdXNl
ZEVsZW1lbnRSZWN0OwotfQotCi0tIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCi17Ci0gICAg
cmV0dXJuIF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Ci19Ci0KLS0gKHZvaWQpX3NldFVz
ZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQotewotICAgIF9pbXBs
LT5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOwotfQotCi0tICh2
b2lkKXZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlCi17Ci0gICAgLy8gVGhpcyBjYW4g
YmUgY2FsbGVkIGR1cmluZyBbc3VwZXIgaW5pdFdpdGhDb2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdp
dGhGcmFtZTpdLgotICAgIC8vIFRoYXQgaXMgYmVmb3JlIF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVz
ZWQsIHNvIGNoZWNrLiA8cmRhcjovL3Byb2JsZW0vMzk2MTEyMzY+Ci0gICAgaWYgKCFfaW1wbCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgX2ltcGwtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFu
Z2UoKTsKLX0KLQotLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Ci17
Ci0gICAgX3BhZ2UtPnNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKLX0K
LQotLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Ci17Ci0gICAgX3Bh
Z2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKLX0KLQotLSAodm9p
ZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2Nr
X3QpYWN0aW9uCi17Ci0gICAgX2ltcGwtPmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNl
RXZlbnRzKGFjdGlvbik7Ci19Ci0KLS0gKE5TTWVudSAqKV9hY3RpdmVNZW51Ci17Ci0gICAgLy8g
RklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5v
dy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKLSAgICAvLyBleHRlbmRlZCB0byByZWNvZ25p
emUgdGhlIHJlZ3VsYXIgY29udGV4dCBtZW51IGFzIHdlbGwuCi0gICAgcmV0dXJuIF9pbXBsLT5k
b21QYXN0ZU1lbnUoKTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotLSAodm9pZClf
cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBO
U1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCi17Ci0gICAgaWYg
KCFfcGFnZSkgewotICAgICAgICBjYWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY2FsbGJhY2spOwotICAgIGF1dG8gbG9jYWxDYWxsYmFjayA9IFdl
YktpdDo6Tm93UGxheWluZ0luZm9DYWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShib29sIGFjdGl2
ZSwgYm9vbCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmluZyB0aXRsZSwg
ZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlkZW50
aWZpZXIsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBoYW5kbGVyKGFj
dGl2ZSwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24s
IGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB9KTsKLQotICAgIF9wYWdlLT5y
ZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxDYWxsYmFjaykp
OwotfQotCi0tICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjoo
Q0dQb2ludClvcmlnaW4KLXsKLSAgICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBXZWJDb3JlOjpy
b3VuZGVkSW50UG9pbnQob3JpZ2luKSk7Ci19Ci0KLS0gKENHRmxvYXQpX3BhZ2VTY2FsZQotewot
ICAgIHJldHVybiBfcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLS0gKHZvaWQpX2ludGVy
bmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJs
b2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWlu
dGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5n
Rm9yQW5pbWF0ZWRSZXNpemUKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmICgh
W3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcpCi0g
ICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBhaW50QWZ0ZXJOZXh0Vmlld0Rp
ZE1vdmVUb1dpbmRvdyh0cnVlKTsKLQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJs
b2NrUHRyKHVwZGF0ZUJsb2NrKTsKLQotICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1Nl
bGYgPSBzZWxmOwotICAgIF9wYWdlLT5jYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlKFt1
cGRhdGVCbG9ja0NvcHksIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUsIHN0cm9uZ1Nl
bGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBpZiAoIXVw
ZGF0ZUJsb2NrQ29weSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIGlmICghd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSAmJiBz
dHJvbmdTZWxmLT5fZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgICAgICBzdHJvbmdTZWxm
LT5fY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFt1cGRhdGVCbG9ja0NvcHld
IHsKLSAgICAgICAgICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTSh3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplKTsKLSNlbmRp
ZgotCi0gICAgICAgIHVwZGF0ZUJsb2NrQ29weSgpOwotICAgIH0pOwotfQotCi0tIChCT09MKV9z
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCi17Ci0gICAgLy8gRm9yIHN1YmNsYXNz
ZXMgdG8gb3ZlcnJpZGU7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9zZXRTY3JvbGxp
bmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRpc2FibGVkCi17Ci19Ci0KLS8vIEV4
ZWN1dGUgdGhlIHN1cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20g
dGhlIFdlYlByb2Nlc3MuCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToo
dm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKLXsKLSAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVy
TmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50
aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwotfQotCi0tICh2b2lk
KV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRS
ZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotICAgIFtzZWxm
IF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhv
dXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpZ
RVNdOwotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRX
YWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCi17Ci0gICAgW3Nl
bGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0
aG91dFdhaXRpbmdGb3JQYWludGluZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6
ZTpOT107Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5hcHBlbmQobWFrZUJsb2Nr
UHRyKHVwZGF0ZUJsb2NrKSk7Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlXTsKLSNlbHNlCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgdXBkYXRlQmxvY2spOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2Rpc2FibGVCYWNrRm9y
d2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKLXsKLSAgICBXZWJLaXQ6OlZpZXdTbmFw
c2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVz
dGluZyh0cnVlKTsKLX0KLQotLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAq
KWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAo
XikoQk9PTCkpY29tcGxldGlvbgotewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29t
bWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAg
IGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxl
dGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7Ci0g
ICAgfSk7Ci19Ci0KLS0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0KLQotLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAg
IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotLSAodm9pZClfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9u
Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBs
ZXRpb25IYW5kbGVyCi17Ci0gICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOwotCi0gICAgaWYgKCFfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBleGNsdXNpb25SdWxlczsKLSAg
ICBpZiAoY29uZmlndXJhdGlvbikgewotICAgICAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlvbi5leGNsdXNpb25SdWxlcykgewot
ICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhjbHVzaW9uID8gRXhjbHVzaW9uUnVs
ZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGU7Ci0gICAgICAg
ICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9u
UnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxlIHsgd2tSdWxl
LmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1ZSB9IH0pOwotICAgICAgICAgICAg
ZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKLSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxl
cy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNzUnVsZSB7IHdrUnVsZS5jbGFzc05h
bWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxl
cy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsgd2tSdWxlLmVsZW1l
bnROYW1lIH0gfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfcGFnZS0+c3RhcnRUZXh0TWFu
aXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJW
aWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRl
bnRpZmllciBpdGVtSUQsCi0gICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKLSAgICAgICAg
aWYgKCF3ZWFrU2VsZikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIHJldGFp
bmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOwotICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFp
bmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsKLSAgICAgICAgaWYgKCFkZWxlZ2F0
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tl
bnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUoKV07Ci0g
ICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKLSAgICAgICAgICAgIGF1dG8gd2tU
b2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsK
LSAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4u
aWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50
OnRva2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4u
aXNFeGNsdWRlZF07Ci0gICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0
KCldOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRN
YW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIo
aXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOwotICAgICAgICBbZGVsZWdhdGUg
X3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTpp
dGVtLmdldCgpXTsKLSAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJs
b2NrKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBz
dWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIHVzaW5nIE1hbmlwdWxhdGlvblJlc3Vs
dCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1
bHQ7Ci0KLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGl0ZW1J
RCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUludDY0
KCkpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwotICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7Ci0gICAgICAgIGF1dG8gdG9rZW5JRCA9IG1h
a2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpU
b2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2NCgp
KTsKLSAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7Ci0g
ICAgfQotCi0gICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vu
cywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKLSAgICAgICAgY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7Ci0gICAg
fSk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChDR1JlY3QpX2RyYWdDYXJl
dFJlY3QKLXsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHJldHVybiBfcGFnZS0+Y3Vy
cmVudERyYWdDYXJldFJlY3QoKTsKLSNlbHNlCi0gICAgcmV0dXJuIENHUmVjdFplcm87Ci0jZW5k
aWYKLX0KLQotLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1Bv
aW50KWxvY2F0aW9uCi17Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVMb25nUHJlc3NBY3Rp
b25BdExvY2F0aW9uOmxvY2F0aW9uXTsKLX0KLQotLSAodm9pZClfc2ltdWxhdGVUZXh0RW50ZXJl
ZDooTlNTdHJpbmcgKil0ZXh0Ci17Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVUZXh0RW50
ZXJlZDp0ZXh0XTsKLX0KLQotLSAodm9pZClfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFpdERpZENo
YW5nZQotewotICAgIGlmICghX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBfcGFnZS0+ZWZm
ZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOwotICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3
QmFja2dyb3VuZF07Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChC
T09MKV9iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
cmV0dXJuIF9pbXBsLT5iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcoKTsKLSNlbHNlCi0gICAgaWYg
KCFfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gX2dl
c3R1cmVDb250cm9sbGVyLT5iZWdpblNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5n
KFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7Ci0j
ZW5kaWYKLX0KLQotLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nCi17Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIHJldHVybiBfaW1wbC0+Y29tcGxldGVCYWNrU3dpcGVGb3JUZXN0
aW5nKCk7Ci0jZWxzZQotICAgIGlmICghX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+Y29tcGxldGVTaW11bGF0ZWRT
d2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U3dpcGVEaXJlY3Rpb246OkJhY2spOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3NldERlZmVyc0xv
YWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRpbmcKLXsKLSAgICBfcGFnZS0+c2V0RGVm
ZXJzTG9hZGluZ0ZvclRlc3RpbmcoZGVmZXJzTG9hZGluZyk7Ci19Ci0KLS0gKHZvaWQpX3NldFNo
YXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzooQk9P
TClyZXNvbHZlZAotewotICAgIF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBs
ZXRpb25Gb3JUZXN0aW5nID0gcmVzb2x2ZWQ7Ci19Ci0KLS0gKEJPT0wpX2hhc0luc3BlY3RvckZy
b250ZW5kCi17Ci0gICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5oYXNJbnNwZWN0b3JGcm9udGVu
ZCgpOwotfQotCi0tIChfV0tJbnNwZWN0b3IgKilfaW5zcGVjdG9yCi17Ci0gICAgaWYgKGF1dG8q
IGluc3BlY3RvciA9IF9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIo
Kmluc3BlY3Rvcik7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoX1dLRnJhbWVIYW5kbGUgKilf
bWFpbkZyYW1lCi17Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUoZnJhbWUtPmZy
YW1lSUQoKSkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHlGb3JUZXN0aW5nCi17Ci0gICAgaWYgKF9wYWdlKQotICAgICAgICBfcGFn
ZS0+cHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKFdlYktpdDo6SXNTdXNwZW5zaW9uSW1t
aW5lbnQ6OlllcywgW10geyB9KTsKLX0KLQotLSAodm9pZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRl
c3RpbmcKLXsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuc2VuZFBy
b2Nlc3NEaWRSZXN1bWUoKTsKLX0KLQotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0
aW5nOihpbnQpdmFsdWUKLXsKLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBfcGFnZS0+cHJvY2VzcygpLnNldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZyhzdGF0aWNfY2Fz
dDxXZWJLaXQ6OkFzc2VydGlvblN0YXRlPih2YWx1ZSkpOwotfQotCi0tIChCT09MKV9oYXNTZXJ2
aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwotewotI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZh
bHNlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTClfaGFz
U2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcKLXsKLSNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCi0gICAgcmV0dXJuIF9wYWdlID8gX3BhZ2UtPnByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkg
OiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQp
X2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdAotewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0g
ICAgV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZGVueU5leHRV
c2VyTWVkaWFSZXF1ZXN0KCk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0tICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3Qp
ZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBh
Z2VJRAotewotI2lmIFVTRShTWVNURU1fUFJFVklFVykKLSAgICBpZiAoX3BhZ2UpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3BhZ2UtPnN5c3RlbVByZXZpZXdDb250
cm9sbGVyKCkpCi0gICAgICAgICAgICBwcmV2aWV3Q29udHJvbGxlci0+dHJpZ2dlclN5c3RlbVBy
ZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVtZW50SUQsIGRvY3VtZW50SUQsIHBh
Z2VJRCk7Ci0gICAgfQotI2VuZGlmCi19Ci0jZW5kaWYKLQotQGVuZAotCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBAaW1wbGVtZW50YXRpb24g
V0tXZWJWaWV3IChGdWxsU2NyZWVuQVBJX1ByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDQzNTA4MGYz
MjQ0NWNlOGU3ZjU2ZWU1ZGMwMDQzOTRiY2YxYWE1ZDkuLmEwNDhiMDcxNjg4Y2UyOTFmZjhkNTZm
MmM5NzBjOGFkYzU0Zjg0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJS2l0U1BJLmgiCkBAIC02OCwxOCArNjksNDcgQEAgY2xh
c3MgU2FmZUJyb3dzaW5nV2FybmluZzsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBh
Z2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CisjaWYgUExBVEZPUk0oTUFDKQorY2xhc3MgV2Vi
Vmlld0ltcGw7CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY2xhc3MgVmlld0dl
c3R1cmVDb250cm9sbGVyOworI2VuZGlmCiB9CiAKIEBjbGFzcyBXS1dlYlZpZXdDb250ZW50UHJv
dmlkZXJSZWdpc3RyeTsKIEBjbGFzcyBXS1Bhc3N3b3JkVmlldzsKIEBjbGFzcyBfV0tGcmFtZUhh
bmRsZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorQGNsYXNzIFdLU2Nyb2xsVmlldzsKK0Bj
bGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworI2VuZGlmCitAcHJvdG9jb2wgX1dL
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOwogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSBXS19X
RUJfVklFV19QUk9UT0NPTFMgewogCiBAcGFja2FnZQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBfY29uZmlndXJhdGlvbjsKLQogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBh
Z2VQcm94eT4gX3BhZ2U7CisgICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisgICAgT3B0aW9uYWw8Qk9PTD4g
X3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rpbmc7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0lt
cGw+IF9pbXBsOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFJldGFp
blB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OworICAgIFJldGFpblB0cjxXS0NvbnRlbnRW
aWV3PiBfY29udGVudFZpZXc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6Vmlld0dlc3R1
cmVDb250cm9sbGVyPiBfZ2VzdHVyZUNvbnRyb2xsZXI7CisgICAgVmVjdG9yPEJsb2NrUHRyPHZv
aWQgKCk+PiBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzOworCisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyPiBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKKworICAgIENHUmVjdCBf
aW5wdXRWaWV3Qm91bmRzOworI2VuZGlmCiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtODcsNiArMTE3LDggQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX3Byb2Nlc3NXaWxs
U3dhcDsKIC0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzczsKIAorLSAoVUlWaWV3ICopX2N1cnJl
bnRDb250ZW50VmlldzsKKwogLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKIC0g
KHZvaWQpX2RpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb247CiAtICh2b2lkKV9sYXllclRyZWVDb21t
aXRDb21wbGV0ZTsKQEAgLTk5LDggKzEzMSwxMCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogCiAtICh2
b2lkKV9zY3JvbGxUb0NvbnRlbnRTY3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClz
Y3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdp
bjsKIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qg
b3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6
KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKKwogLSAoZG91YmxlKV9pbml0aWFsU2NhbGVG
YWN0b3I7CiAtIChkb3VibGUpX2NvbnRlbnRab29tU2NhbGU7CisKIC0gKGRvdWJsZSlfdGFyZ2V0
Q29udGVudFpvb21TY2FsZUZvclJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpdGFyZ2V0
UmVjdCBjdXJyZW50U2NhbGU6KGRvdWJsZSljdXJyZW50U2NhbGUgZml0RW50aXJlUmVjdDooQk9P
TClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVt
U2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGU7CiAtICh2b2lkKV96b29tVG9Gb2N1c1JlY3Q6KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpZm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGlu
YXRlcyBpbnNpZGVGaXhlZDooQk9PTClpbnNpZGVGaXhlZCBmb250U2l6ZTooZmxvYXQpZm9udFNp
emUgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91Ymxl
KW1heGltdW1TY2FsZSBhbGxvd1NjYWxpbmc6KEJPT0wpYWxsb3dTY2FsaW5nIGZvcmNlU2Nyb2xs
OihCT09MKWZvcmNlU2Nyb2xsOwogLSAoQk9PTClfem9vbVRvUmVjdDooV2ViQ29yZTo6RmxvYXRS
ZWN0KXRhcmdldFJlY3Qgd2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gZml0
RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmlt
dW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgbWluaW11bVNjcm9sbERp
c3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7CkBAIC0xNTYsMTMgKzE5MCwxMCBA
QCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAodm9pZClfcmVzZXRGb2N1c1ByZXNlcnZhdGlvbkNvdW50
OwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFzc3dvcmRWaWV3ICpfcGFz
c3dvcmRWaWV3OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzQmFj
a2dyb3VuZDsKLQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXdDb250
ZW50UHJvdmlkZXJSZWdpc3RyeSAqX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5OwotCiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLU2VsZWN0aW9uR3JhbnVsYXJpdHkgX3NlbGVjdGlv
bkdyYW51bGFyaXR5OwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lz
QmFja2dyb3VuZDsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfYWxsb3dz
RG91YmxlVGFwR2VzdHVyZXM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wg
X3N0eWx1c1RhcEdlc3R1cmVTaG91bGRDcmVhdGVFZGl0YWJsZUltYWdlOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXZlU2V0T2JzY3VyZWRJbnNldHM7CkBAIC0xNzIs
NiArMjAzLDcgQEAgc3RydWN0IFByaW50SW5mbzsKIAogLSAoQk9PTClfZWZmZWN0aXZlQXBwZWFy
YW5jZUlzRGFyazsKIC0gKEJPT0wpX2VmZmVjdGl2ZVVzZXJJbnRlcmZhY2VMZXZlbElzRWxldmF0
ZWQ7CisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAjaWYgRU5BQkxFKEFUVEFD
SE1FTlRfRUxFTUVOVCkKQEAgLTE4MCw2ICsyMTIsOCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAo
dm9pZClfZGlkSW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0
dGFjaG1lbnQ7CiAjZW5kaWYKIAorLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRh
dGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQ
YWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0aW5nRm9y
QW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTsKKwog
LSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dz
aW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBVUkw+JiYpPiYmKWNvbXBs
ZXRpb25IYW5kbGVyOwogLSAodm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nOwogLSAodm9p
ZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uOwpAQCAt
MTkwLDcgKzIyNCwxNiBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqKV9wYWdlOwogCiAjaWYgUExBVEZPUk0oTUFDKQorCistICh2b2lkKV9wcmVwYXJlRm9ySW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwor
LSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRp
b24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQpX2dlc3R1cmVF
dmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcgcmVw
bGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlOwogLSAodm9pZClfd2ViX2dy
YW50RE9NUGFzdGVBY2Nlc3M7CisKICNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCA3ODRiNmIx
ZTIxMGJhYzM3ZjllMGNhYWU1ZTYzMjM0OTQ1YzQ5MTdkLi4yNjg4YWM3YWQ5NjYzMDViZjljYTQz
OWRlNWNmMWQ3MmEzZDk1NGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTEwOCwxMyArMTA4LDEwIEBAIHR5cGVk
ZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQGNsYXNzIF9XS0ZyYW1l
SGFuZGxlOwogQGNsYXNzIF9XS0hpdFRlc3RSZXN1bHQ7CiBAY2xhc3MgX1dLSWNvbkxvYWRpbmdE
ZWxlZ2F0ZTsKLUBjbGFzcyBfV0tJbnNwZWN0b3I7CiBAY2xhc3MgX1dLUmVtb3RlT2JqZWN0UmVn
aXN0cnk7CiBAY2xhc3MgX1dLU2FmZUJyb3dzaW5nV2FybmluZzsKIEBjbGFzcyBfV0tTZXNzaW9u
U3RhdGU7CiBAY2xhc3MgX1dLVGV4dElucHV0Q29udGV4dDsKLUBjbGFzcyBfV0tUZXh0TWFuaXB1
bGF0aW9uQ29uZmlndXJhdGlvbjsKLUBjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbTsKIEBj
bGFzcyBfV0tUaHVtYm5haWxWaWV3OwogQGNsYXNzIF9XS1dlYnNpdGVQb2xpY2llczsKIEBjbGFz
cyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CkBAIC0xMjUsNyArMTIyLDYgQEAgdHlwZWRlZiBO
U19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvdG9jb2wgX1dLRnVsbHNj
cmVlbkRlbGVnYXRlOwogQHByb3RvY29sIF9XS0ljb25Mb2FkaW5nRGVsZWdhdGU7CiBAcHJvdG9j
b2wgX1dLSW5wdXREZWxlZ2F0ZTsKLUBwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGU7CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1ByaXZhdGUpCiAKQEAgLTIxMiw2ICsyMDgs
MTIgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAtICh2
b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3
YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICop
ZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxl
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClf
c2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJp
bmcgKil0aXRsZSB3YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1
dGVkU3RyaW5nICopZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikp
OwogCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7
CistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9y
UGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIuMyksIGlvcygxMC4zKSk7CisjaWYgVEFSR0VUX09TX0lQSE9ORQorLSAodm9pZClf
ZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Jsb2NrX3QpdXBk
YXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworI2VuZGlmCisKIC0gKHZvaWQp
X2lzSklURW5hYmxlZDoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClfcmVtb3ZlRGF0YURl
dGVjdGVkTGlua3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbiBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogCkBAIC0yNzcsNiArMjc5LDggQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgc2V0dGVyPV9zZXREcmFnSW50ZXJhY3Rpb25Qb2xpY3k6KSBfV0tEcmFnSW50ZXJhY3Rp
b25Qb2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeSBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3Nob3VsZEF2b2lkUmVz
aXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjAp
KTsKIAorLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50
KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudElu
Zm8gKikpYmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOworCiAtICh2b2lkKV9iZWdp
bkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2U7CiAtICh2b2lkKV9lbmRJbnRlcmFjdGl2
ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlOwogLSAodm9pZClfaGlkZUNvbnRlbnRVbnRpbE5leHRVcGRh
dGU7CkBAIC0zMTAsNyArMzE0LDExIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWRnZSkgewogLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0aW9u
Q29udGVudDooTlNTdHJpbmcgKiljb250ZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsK
IAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKl9zYWZlQnJvd3NpbmdX
YXJuaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CisKKy0g
KFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEyLjApKTsKKwogI2Vsc2UKKwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1Zp
ZXcgKl9zYWZlQnJvd3NpbmdXYXJuaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLUmVjdEVk
Z2UgX3Bpbm5lZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwpAQCAtMzU2
LDYgKzM2NCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkg
ewogCiAtICh2b2lkKV9wcmVwYXJlRm9yTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXRhcmdldFdp
bmRvdyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkd3JpdGUsIHNldHRlcj1fc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTopIEJPT0wgX3VzZVN5c3Rl
bUFwcGVhcmFuY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCkpOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlOikgX1dLT3ZlcmxheVNj
cm9sbGJhclN0eWxlIF9vdmVybGF5U2Nyb2xsYmFyU3R5bGUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7CiBAcHJvcGVydHkgKHN0cm9uZywgbm9uYXRvbWljLCBzZXR0ZXI9X3NldElu
c3BlY3RvckF0dGFjaG1lbnRWaWV3OikgTlNWaWV3ICpfaW5zcGVjdG9yQXR0YWNobWVudFZpZXcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAKQEAgLTQ1MSwxNDAgKzQ2MCw0IEBA
IHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQGludGVyZmFj
ZSBXS1dlYlZpZXcgKCkgPFVJUmVzcG9uZGVyU3RhbmRhcmRFZGl0QWN0aW9ucz4KIEBlbmQKIAot
I2VuZGlmCi0KLUBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmcpCi0KLS0gKHZvaWQpX3Nl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAo
TlNEaWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1
c2VySW50ZXJmYWNlSXRlbSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAu
MykpOwotCi0jaWYgVEFSR0VUX09TX0lQSE9ORQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjApKTsKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2lu
dClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0tIChDR1BvaW50KV9jb252ZXJ0
UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTAuMCkpOwotCi0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dCBXS19BUElfQVZB
SUxBQkxFKGlvcygxMC4wKSk7Ci0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29y
eVZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClfZGlzbWlzc0ZpbGVQ
aWNrZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwotLSAodm9pZClzZWxlY3RGb3JtQWNj
ZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXggV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqdGV4dENvbnRlbnRU
eXBlRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpzZWxlY3RGb3JtUG9wb3ZlclRpdGxlIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLS0g
KHZvaWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5T
SW50ZWdlciltaW51dGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi0tICh2b2lkKWFw
cGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5nIHRvU3RyaW5nOihOU1N0cmlu
ZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLQotLSAodm9pZClkaWRT
dGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwot
LSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEwLjMpKTsKLQotLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51IFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDEwLjMpKTsKLS0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudSBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVw
ZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygx
MC4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0
Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwotCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8TlNWYWx1ZSAqPiAqX3VpVGV4
dFNlbGVjdGlvblJlY3RzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF91aVRleHRDYXJldFJlY3QgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMykpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3Qg
X2lucHV0Vmlld0JvdW5kcyBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKl9zY3JvbGxpbmdUcmVlQXNUZXh0IFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU051bWJlciAqX3N0YWJsZVN0YXRlT3ZlcnJpZGUgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMykpOwotCi0tIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVu
c2lnbmVkIGxvbmcgbG9uZylsYXllcklEIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLS0g
KHZvaWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0tICh2b2lkKV9zaW11bGF0ZVRleHRFbnRl
cmVkOihOU1N0cmluZyAqKXRleHQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfZHJhZ0NhcmV0UmVjdCBXS19BUElf
QVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJh
Z1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTMuMCkpOwotCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9z
aXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3Rp
dmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0t
ICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0lu
dGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNl
bGVjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Ci0tICh2b2lkKV9hY2Nlc3NpYmls
aXR5Q2xlYXJTZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOwotLSAoVUlWaWV3
ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkp
OwotCi0tICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0
X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90
KXBhZ2VJRCBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKLSNlbHNlCi0tICh2b2lkKV9kaXNtaXNzQ29udGVu
dFJlbGF0aXZlQ2hpbGRXaW5kb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwot
LSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfYmVnaW5EZWZlcnJp
bmdWaWV3SW5XaW5kb3dDaGFuZ2VzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwot
LSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5n
ZXNTeW5jIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZ2VzdHVy
ZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNB
cnJheSAqKWN1c3RvbVN3aXBlVmlld3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
Ci0tICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0OihmbG9hdCl0b3BD
b250ZW50SW5zZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChOU1ZpZXcg
KilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRlcyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0
ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9wcmVwYXJlRm9y
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkp
OwotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChCT09MKV9jYW5DaGFu
Z2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZl
bnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXREaWRNb3ZlU3dp
cGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVjdCkpY2FsbGJhY2sgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRU
b3RhbEhlaWdodE9mQmFubmVyczopIENHRmxvYXQgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIGNvcHks
IHNldHRlcj1fc2V0VW5kZXJsYXlDb2xvcjopIE5TQ29sb3IgKl91bmRlcmxheUNvbG9yIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3
cml0ZSwgc2V0dGVyPV9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6KSBCT09MIF9pZ25vcmVzTm9u
V2hlZWxFdmVudHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dL
V2ViVmlldyAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2Vy
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpKTsKLS0gKHZvaWQpX3JlcXVlc3RDb250cm9s
bGVkRWxlbWVudElEIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClf
aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9oYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2ZvcmNlUmVxdWVz
dENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9k
aWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTCl2aXNpYmxlIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIuMykpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
LjMpKTsKLS0gKHZvaWQpX2luc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihO
U1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7
Ci0tIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRVc2VTeXN0ZW1B
cHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBwZWFyYW5jZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTWVudSAqX2Fj
dGl2ZU1lbnUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSk7Ci0KLS0gKHZvaWQp
X3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhlaWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEyLjMpKTsKLS0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2RvQWZ0ZXJQcm9jZXNz
aW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbiBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpKTsKLSNlbmRpZgotCi0tICh2b2lkKV9yZXF1ZXN0QWN0
aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwg
ZG91YmxlLCBkb3VibGUsIE5TSW50ZWdlcikpY2FsbGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSwgaW9zKDExLjMpKTsKLQotLSAodm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0
KXNjYWxlIHdpdGhPcmlnaW46KENHUG9pbnQpb3JpZ2luIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKLS0gKENHRmxvYXQpX3BhZ2VTY2FsZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7
Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsK
LS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JB
bmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfZG9BZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2
b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAu
MykpOwotLSAodm9pZClfZG9BZnRlck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU6KHZvaWQg
KF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3Mo
MTEuMCkpOwotCi0tICh2b2lkKV9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlG
b3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7Ci0t
ICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDoo
TlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9u
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7Ci0KLS0gKHZvaWQp
X2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwg
aW9zKDEyLjApKTsKLQotLSAoQk9PTClfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nOwotLSAoQk9P
TClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nOwotLSAodm9pZClfc2V0RGVmZXJzTG9hZGlu
Z0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZzsKLQotLSAodm9pZClfc2V0U2hhcmVTaGVl
dENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29s
dmVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzSW5zcGVjdG9yRnJvbnRlbmQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0
ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRp
b24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwotLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGlu
Z1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJs
ZWRGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwot
Ci0tICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZzsKLS0gKHZv
aWQpX3Byb2Nlc3NEaWRSZXN1bWVGb3JUZXN0aW5nOwotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyRm9y
ZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0
aW5nOihpbnQpc3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKLQotQGVuZAorI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIxNDVkMGE4MmMyYzI4NzUwZTYxYWM0YTM3M2VlNTU1MjUzNTgyNzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
VGVzdGluZy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXS1dlYlZp
ZXdUZXN0aW5nSU9TLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCisKK0BjbGFz
cyBfV0tGcmFtZUhhbmRsZTsKK0BjbGFzcyBfV0tJbnNwZWN0b3I7CitAY2xhc3MgX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb247CitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW07
CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdL
V2ViVmlldyAoV0tUZXN0aW5nKQorCistICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2Nh
bGUgd2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW47CistIChDR0Zsb2F0KV9wYWdlU2NhbGU7CisK
Ky0gKHZvaWQpX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJP
T0wpZW5hYmxlZDsKKy0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0
ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW07CisKKy0gKHZvaWQpX3JlcXVlc3RBY3Rp
dmVOb3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9PTCwgTlNTdHJpbmcqLCBk
b3VibGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjazsKKworLSAodm9pZClfZG9BZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplRm9yVGVz
dGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2s7CistICh2b2lkKV9kb0FmdGVyTmV4dFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2s7CisKKy0g
KHZvaWQpX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3Rpbmc7Cist
ICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDoo
TlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9u
OworCistICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3Q7CisKKy0gKEJPT0wpX2JlZ2lu
QmFja1N3aXBlRm9yVGVzdGluZzsKKy0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGlu
ZzsKKy0gKHZvaWQpX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xvYWRp
bmc7CisKKy0gKHZvaWQpX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNv
bHV0aW9uRm9yVGVzdGluZzooQk9PTClyZXNvbHZlZDsKKworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIF9oYXNJbnNwZWN0b3JGcm9udGVuZDsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZTsKKworQHByb3BlcnR5
IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOikg
aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZTsKKy0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dL
VGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29t
cGxldGlvbjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX2NvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBs
ZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcjsKKworQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVz
dGluZzopIEJPT0wgX3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc7CisKKy0gKHZv
aWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nOworLSAodm9pZClfcHJv
Y2Vzc0RpZFJlc3VtZUZvclRlc3Rpbmc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyRm9yZWdy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZzsKKy0gKHZvaWQpX3NldEFzc2VydGlvblN0YXRlRm9yVGVz
dGluZzooaW50KXN0YXRlOworCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhZmY2OWEyMjNl
ZmZhMGNiNjNhYmJiODJmNDc1MjM1MDdjYmEwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQpAQCAtMCwwICsx
LDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCisKKyNpbXBvcnQgIlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgi
CisjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQ
b29sLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgIldlYlZpZXdJbXBs
LmgiCisjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNw
ZWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRp
b24uaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAi
X1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5p
cHVsYXRpb25JdGVtLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKKyNp
bXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgorCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1dlYlZpZXcgKFdLVGVzdGluZykKKworLSAodm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0KXNj
YWxlIHdpdGhPcmlnaW46KENHUG9pbnQpb3JpZ2luCit7CisgICAgX3BhZ2UtPnNjYWxlUGFnZShz
Y2FsZSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KG9yaWdpbikpOworfQorCistIChDR0Zsb2F0
KV9wYWdlU2NhbGUKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOworfQor
CistICh2b2lkKV9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihC
T09MKWVuYWJsZWQKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFtfY29udGVudFZp
ZXcgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOworI2Vsc2UKKyAg
ICBfaW1wbC0+c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOworI2Vu
ZGlmCit9CisKKy0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06
KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW0KK3sKKyAgICBpZiAoW3VzZXJJbnRlcmZhY2VJ
dGVtIGlzRXF1YWxUb1N0cmluZzpAInZhbGlkYXRpb25CdWJibGUiXSkgeworICAgICAgICBhdXRv
KiB2YWxpZGF0aW9uQnViYmxlID0gX3BhZ2UtPnZhbGlkYXRpb25CdWJibGUoKTsKKyAgICAgICAg
U3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVz
c2FnZSgpIDogZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRh
dGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25CdWJibGUtPmZvbnRTaXplKCkgOiAwOworICAgICAgICBy
ZXR1cm4gQHsgdXNlckludGVyZmFjZUl0ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1l
c3NhZ2UsIEAiZm9udFNpemUiOiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0g
fSB9OworICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFtfY29u
dGVudFZpZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50
ZXJmYWNlSXRlbV07CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKworLSAodm9p
ZClfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09M
LCBOU1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCit7CisgICAg
aWYgKCFfcGFnZSkgeworICAgICAgICBjYWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY2FsbGJhY2spOworICAgIGF1dG8gbG9jYWxDYWxsYmFjayA9
IFdlYktpdDo6Tm93UGxheWluZ0luZm9DYWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShib29sIGFj
dGl2ZSwgYm9vbCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmluZyB0aXRs
ZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlk
ZW50aWZpZXIsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAgICBoYW5kbGVy
KGFjdGl2ZSwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRp
b24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB9KTsKKworICAgIF9wYWdl
LT5yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxDYWxsYmFj
aykpOworfQorCistIChCT09MKV9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCit7
CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGU7CisgICAgcmV0dXJuIE5POworfQor
CistICh2b2lkKV9zZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRp
c2FibGVkCit7Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0
aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVw
ZGF0ZUJsb2NrCit7CisgICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25V
cGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2Fp
dGluZ0ZvckFuaW1hdGVkUmVzaXplOllFU107Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0Vmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworeworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxi
YWNrcy5hcHBlbmQobWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKSk7CisgICAgW3NlbGYgX3NjaGVk
dWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKKyNlbHNlCisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOworI2VuZGlmCit9CisKKy0g
KHZvaWQpX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKK3sK
KyAgICBXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25h
cHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZyh0cnVlKTsKK30KKworLSAodm9pZClfZXhlY3V0ZUVk
aXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1l
bnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbgoreworICAgIF9wYWdlLT5l
eGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25C
bG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVy
cm9yIGVycm9yKSB7CisgICAgICAgIGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKKyAgICAg
ICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tC
YXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgfSk7Cit9CisKKy0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX3Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKK30KKworLSAodm9pZClf
c2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPilkZWxlZ2F0ZQoreworICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKK30KKworLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9u
OihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxl
dGlvbjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgdXNpbmcgRXhjbHVzaW9u
UnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxl
OworCisgICAgaWYgKCFfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
VmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxl
PiBleGNsdXNpb25SdWxlczsKKyAgICBpZiAoY29uZmlndXJhdGlvbikgeworICAgICAgICBmb3Ig
KF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlv
bi5leGNsdXNpb25SdWxlcykgeworICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhj
bHVzaW9uID8gRXhjbHVzaW9uUnVsZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5
cGU6OkluY2x1ZGU7CisgICAgICAgICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCisgICAg
ICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpB
dHRyaWJ1dGVSdWxlIHsgd2tSdWxlLmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1
ZSB9IH0pOworICAgICAgICAgICAgZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKKyAgICAgICAg
ICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNz
UnVsZSB7IHdrUnVsZS5jbGFzc05hbWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1l
bnRSdWxlIHsgd2tSdWxlLmVsZW1lbnROYW1lIH0gfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBfcGFnZS0+c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxm
ID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgICAgIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+
JiB0b2tlbnMpIHsKKyAgICAgICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBh
dXRvIGRlbGVnYXRlID0gW3JldGFpbmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsK
KyAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBO
U011dGFibGVBcnJheSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6dG9rZW5zLnNpemUoKV07CisgICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsK
KyAgICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6
U3RyaW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07CisgICAgICAgICAg
ICBbd2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOworICAgICAgICAgICAgW3drVG9r
ZW4gc2V0RXhjbHVkZWQ6dG9rZW4uaXNFeGNsdWRlZF07CisgICAgICAgICAgICBbd2tUb2tlbnMg
YWRkT2JqZWN0OndrVG9rZW4uZ2V0KCldOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpdGVt
ID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10p
OworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRU
ZXh0TWFuaXB1bGF0aW9uSXRlbTppdGVtLmdldCgpXTsKKyAgICB9LCBbY2FwdHVyZWRDb21wbGV0
aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7CisgICAgICAg
IGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX2NvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBs
ZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIHVz
aW5nIE1hbmlwdWxhdGlvblJlc3VsdCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25SZXN1bHQ7CisKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGl0ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVt
LmlkZW50aWZpZXIpLnRvVUludDY0KCkpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAo
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAg
ICAgIGF1dG8gdG9rZW5JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5p
ZGVudGlmaWVyKS50b1VJbnQ2NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3
a1Rva2VuLmNvbnRlbnQgfSk7CisgICAgfQorCisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbihpdGVtSUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsK
KyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJl
c3VsdDo6U3VjY2Vzcyk7CisgICAgfSk7Cit9CisKKy0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9y
VGVzdGluZworeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPmJlZ2luQmFj
a1N3aXBlRm9yVGVzdGluZygpOworI2Vsc2UKKyAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmJlZ2lu
U2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKKyNlbmRpZgorfQorCistIChCT09MKV9j
b21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0
dXJuIF9pbXBsLT5jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoKTsKKyNlbHNlCisgICAgaWYg
KCFfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2dl
c3R1cmVDb250cm9sbGVyLT5jb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0
aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7
CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wp
ZGVmZXJzTG9hZGluZworeworICAgIF9wYWdlLT5zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZyhk
ZWZlcnNMb2FkaW5nKTsKK30KKworLSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVk
aWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVkCit7CisgICAgX3Jl
c29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3RpbmcgPSByZXNv
bHZlZDsKK30KKworLSAoQk9PTClfaGFzSW5zcGVjdG9yRnJvbnRlbmQKK3sKKyAgICByZXR1cm4g
X3BhZ2UgJiYgX3BhZ2UtPmhhc0luc3BlY3RvckZyb250ZW5kKCk7Cit9CisKKy0gKF9XS0luc3Bl
Y3RvciAqKV9pbnNwZWN0b3IKK3sKKyAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gX3BhZ2UtPmlu
c3BlY3RvcigpKQorICAgICAgICByZXR1cm4gd3JhcHBlcigqaW5zcGVjdG9yKTsKKyAgICByZXR1
cm4gbmlsOworfQorCistIChfV0tGcmFtZUhhbmRsZSAqKV9tYWluRnJhbWUKK3sKKyAgICBpZiAo
YXV0byogZnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVy
KEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZShmcmFtZS0+ZnJhbWVJRCgpKSk7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAodm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcKK3sKKyAgICBpZiAoX3BhZ2UpCisgICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuc2VuZFByZXBh
cmVUb1N1c3BlbmQoV2ViS2l0OjpJc1N1c3BlbnNpb25JbW1pbmVudDo6WWVzLCBbXSB7IH0pOwor
fQorCistICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZworeworICAgIGlmIChfcGFn
ZSkKKyAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQor
CistICh2b2lkKV9zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rpbmc6KGludCl2YWx1ZQoreworICAg
IGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIF9wYWdlLT5wcm9jZXNzKCkuc2V0
QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nKHN0YXRpY19jYXN0PFdlYktpdDo6QXNzZXJ0aW9uU3Rh
dGU+KHZhbHVlKSk7Cit9CisKKy0gKEJPT0wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0
aXZpdHlGb3JUZXN0aW5nCit7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIHJldHVy
biBfcGFnZSA/IF9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2Vy
QmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIDogZmFsc2U7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCistIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZworeworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBy
ZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdv
cmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1
ZXN0Cit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBXZWJLaXQ6OlVzZXJNZWRpYVBy
b2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QoKTsKKyNl
bmRpZgorfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
aW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzOWM3NDAyMTk2MTgxZWUwN2Ni
ODQ2OGE2OWJlMWU4M2UyODFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MuaApAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorCisjaWYgVEFSR0VUX09T
X0lQSE9ORQorCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0aW5nSU9TKQorCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0OworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqdGV4dENvbnRlbnRUeXBlRm9y
VGVzdGluZzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnNlbGVj
dEZvcm1Qb3BvdmVyVGl0bGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3Ry
aW5nICpmb3JtSW5wdXRMYWJlbDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNB
cnJheTxOU1ZhbHVlICo+ICpfdWlUZXh0U2VsZWN0aW9uUmVjdHM7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIENHUmVjdCBfdWlUZXh0Q2FyZXRSZWN0OworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2lucHV0Vmlld0JvdW5kczsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKl9zY3JvbGxpbmdUcmVlQXNUZXh0OworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU051bWJlciAqX3N0YWJsZVN0YXRlT3ZlcnJpZGU7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfZHJhZ0NhcmV0UmVjdDsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY29udGVudFZpZXdJc0ZpcnN0
UmVzcG9uZGVyOworCistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6
KENHUG9pbnQpcG9pbnQ7CistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVu
dHM6KENHUG9pbnQpcG9pbnQ7CisKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0Owor
LSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhclByZXZpb3VzOworLSAodm9pZClkaXNtaXNzRm9y
bUFjY2Vzc29yeVZpZXc7CistICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcjsKKy0gKHZvaWQpc2Vs
ZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4OworCistICh2b2lkKXNldFRp
bWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWlu
dXRlOworCistICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5n
IHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOworCistICh2b2lkKWRpZFN0YXJ0Rm9ybUNv
bnRyb2xJbnRlcmFjdGlvbjsKKy0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbjsK
KworLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51OworLSAodm9pZClfZGlkRGlzbWlzc0NvbnRl
eHRNZW51OworLSAodm9pZClfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6KGRpc3Bh
dGNoX2Jsb2NrX3QpYWN0aW9uOworCistIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5
ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklEOworLSAodm9pZClfc2ltdWxhdGVM
b25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uOworLSAodm9pZClfc2lt
dWxhdGVUZXh0RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0OworCistICh2b2lkKV9kb0FmdGVyUmVj
ZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9u
OworCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0
OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5k
bGVyOworLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uOworLSAodm9pZClfYWNj
ZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uOworCistICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmll
d0FjdGlvbk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClk
b2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRDsKKworQGVuZAorCisjZW5kaWYgLy8gVEFS
R0VUX09TX0lQSE9ORQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lv
cy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lv
cy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0MTc5OWE5NGNjNjAxYjBmNzA4
ZDBlMDFiNTA2YThhMGJiOGIyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KQEAgLTAsMCArMSwzMTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZ0lPUy5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCAiUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5oIgorI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94
eS5oIgorI2ltcG9ydCAiX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIgorCitAaW1w
bGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmdJT1MpCisKKy0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJh
eTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbX2NvbnRlbnRW
aWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0Om9mZnNldCB3
aXRoVGV4dDp0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKKyAgICAgICAgaWYgKCFjYXB0dXJl
ZENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHJl
Y3RWYWx1ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6c2VsZWN0aW9uUmVjdHMuc2l6ZSgpXSk7CisgICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9u
UmVjdCA6IHNlbGVjdGlvblJlY3RzKQorICAgICAgICAgICAgW3JlY3RWYWx1ZXMgYWRkT2JqZWN0
OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV1dOworICAgICAg
ICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0KCkpOworICAgIH1dOwor
fQorCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24KK3sKKyAgICBbX2NvbnRl
bnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dOworfQorCistICh2b2lkKV9hY2Nl
c3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmls
aXR5Q2xlYXJTZWxlY3Rpb25dOworfQorCistIChDR1JlY3QpX2NvbnRlbnRWaXNpYmxlUmVjdAor
eworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxm
Ll9jdXJyZW50Q29udGVudFZpZXddOworfQorCistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9t
Q29udGVudHNUb1ZpZXc6KENHUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgY29udmVy
dFBvaW50OnBvaW50IGZyb21WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Cit9CisKKy0g
KENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludAor
eworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3OnNlbGYuX2N1cnJl
bnRDb250ZW50Vmlld107Cit9CisKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0Cit7
CisgICAgW19jb250ZW50VmlldyBhY2Nlc3NvcnlUYWI6WUVTXTsKK30KKworLSAodm9pZClrZXli
b2FyZEFjY2Vzc29yeUJhclByZXZpb3VzCit7CisgICAgW19jb250ZW50VmlldyBhY2Nlc3NvcnlU
YWI6Tk9dOworfQorCistICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3
U3RyaW5nIHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW19jb250ZW50Vmll
dyBhcHBseUF1dG9jb3JyZWN0aW9uOm5ld1N0cmluZyB0b1N0cmluZzpvbGRTdHJpbmcgd2l0aENv
bXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0gKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0cykgewor
ICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfV07Cit9CisKKy0gKHZv
aWQpZGlzbWlzc0Zvcm1BY2Nlc3NvcnlWaWV3Cit7CisgICAgW19jb250ZW50VmlldyBhY2Nlc3Nv
cnlEb25lXTsKK30KKworLSAodm9pZClfZGlzbWlzc0ZpbGVQaWNrZXIKK3sKKyAgICBbX2NvbnRl
bnRWaWV3IGRpc21pc3NGaWxlUGlja2VyXTsKK30KKworLSAodm9pZClzZXRUaW1lUGlja2VyVmFs
dWVUb0hvdXI6KE5TSW50ZWdlcilob3VyIG1pbnV0ZTooTlNJbnRlZ2VyKW1pbnV0ZQoreworICAg
IFtfY29udGVudFZpZXcgc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOmhvdXIgbWludXRlOm1pbnV0
ZV07Cit9CisKKy0gKHZvaWQpc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0lu
ZGV4Cit7CisgICAgW19jb250ZW50VmlldyBzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OnJv
d0luZGV4XTsKK30KKworLSAoTlNTdHJpbmcgKilzZWxlY3RGb3JtUG9wb3ZlclRpdGxlCit7Cisg
ICAgcmV0dXJuIFtfY29udGVudFZpZXcgc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZV07Cit9CisKKy0g
KE5TU3RyaW5nICopdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZworeworICAgIHJldHVybiBbX2Nv
bnRlbnRWaWV3IHRleHRDb250ZW50VHlwZUZvclRlc3RpbmddOworfQorCistIChOU1N0cmluZyAq
KWZvcm1JbnB1dExhYmVsCit7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgZm9ybUlucHV0TGFi
ZWxdOworfQorCistICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbgoreworICAg
IC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQorCistICh2b2lkKWRpZEVuZEZvcm1D
b250cm9sSW50ZXJhY3Rpb24KK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4K
K30KKworLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51Cit7CisgICAgLy8gRm9yIHN1YmNsYXNz
ZXMgdG8gb3ZlcnJpZGUuCit9CisKKy0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudQorewor
ICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQorCistIChDR1JlY3QpX3VpVGV4
dENhcmV0UmVjdAoreworICAgIC8vIEZvcmNlIHRoZSBzZWxlY3Rpb24gdmlldyB0byB1cGRhdGUg
aWYgbmVlZGVkLgorICAgIFtfY29udGVudFZpZXcgX3VwZGF0ZUNoYW5nZWRTZWxlY3Rpb25dOwor
CisgICAgcmV0dXJuIFtbX2NvbnRlbnRWaWV3IHZhbHVlRm9yS2V5UGF0aDpAImludGVyYWN0aW9u
QXNzaXN0YW50LnNlbGVjdGlvblZpZXcuc2VsZWN0aW9uLmNhcmV0UmVjdCJdIENHUmVjdFZhbHVl
XTsKK30KKworLSAoQ0dSZWN0KV9pbnB1dFZpZXdCb3VuZHMKK3sKKyAgICByZXR1cm4gX2lucHV0
Vmlld0JvdW5kczsKK30KKworLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopX3VpVGV4dFNlbGVjdGlv
blJlY3RzCit7CisgICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBu
ZWVkZWQuCisgICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisKKyAg
ICByZXR1cm4gW19jb250ZW50VmlldyBfdWlUZXh0U2VsZWN0aW9uUmVjdHNdOworfQorCistIChO
U1N0cmluZyAqKV9zY3JvbGxpbmdUcmVlQXNUZXh0Cit7CisgICAgV2ViS2l0OjpSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5zY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5KCk7CisgICAgaWYgKCFjb29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuIEAi
IjsKKworICAgIHJldHVybiBjb29yZGluYXRvci0+c2Nyb2xsaW5nVHJlZUFzVGV4dCgpOworfQor
CistIChOU051bWJlciAqKV9zdGFibGVTdGF0ZU92ZXJyaWRlCit7CisgICAgLy8gRm9yIHN1YmNs
YXNzZXMgdG8gb3ZlcnJpZGUuCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNEaWN0aW9uYXJ5
ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRAor
eworICAgIENBTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLmxheWVyV2l0aElERm9yVGVz
dGluZyhsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIEB7CisgICAgICAgIEAiYm91bmRzIiA6IEB7CisgICAgICAgICAgICBAIngiIDog
QChsYXllci5ib3VuZHMub3JpZ2luLngpLAorICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYm91
bmRzLm9yaWdpbi54KSwKKyAgICAgICAgICAgIEAid2lkdGgiIDogQChsYXllci5ib3VuZHMuc2l6
ZS53aWR0aCksCisgICAgICAgICAgICBAImhlaWdodCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLmhl
aWdodCksCisKKyAgICAgICAgfSwKKyAgICAgICAgQCJwb3NpdGlvbiIgOiBAeworICAgICAgICAg
ICAgQCJ4IiA6IEAobGF5ZXIucG9zaXRpb24ueCksCisgICAgICAgICAgICBAInkiIDogQChsYXll
ci5wb3NpdGlvbi55KSwKKyAgICAgICAgfSwKKyAgICAgICAgQCJ6UG9zaXRpb24iIDogQChsYXll
ci56UG9zaXRpb24pLAorICAgICAgICBAImFuY2hvclBvaW50IiA6IEB7CisgICAgICAgICAgICBA
IngiIDogQChsYXllci5hbmNob3JQb2ludC54KSwKKyAgICAgICAgICAgIEAieSIgOiBAKGxheWVy
LmFuY2hvclBvaW50LnkpLAorICAgICAgICB9LAorICAgICAgICBAImFuY2hvclBvaW50WiIgOiBA
KGxheWVyLmFuY2hvclBvaW50WiksCisgICAgICAgIEAidHJhbnNmb3JtIiA6IEB7CisgICAgICAg
ICAgICBAIm0xMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTEpLAorICAgICAgICAgICAgQCJtMTIi
IDogQChsYXllci50cmFuc2Zvcm0ubTEyKSwKKyAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIu
dHJhbnNmb3JtLm0xMyksCisgICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5t
MTQpLAorCisgICAgICAgICAgICBAIm0yMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjEpLAorICAg
ICAgICAgICAgQCJtMjIiIDogQChsYXllci50cmFuc2Zvcm0ubTIyKSwKKyAgICAgICAgICAgIEAi
bTIzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMyksCisgICAgICAgICAgICBAIm0yNCIgOiBAKGxh
eWVyLnRyYW5zZm9ybS5tMjQpLAorCisgICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnRyYW5z
Zm9ybS5tMzEpLAorICAgICAgICAgICAgQCJtMzIiIDogQChsYXllci50cmFuc2Zvcm0ubTMyKSwK
KyAgICAgICAgICAgIEAibTMzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMyksCisgICAgICAgICAg
ICBAIm0zNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzQpLAorCisgICAgICAgICAgICBAIm00MSIg
OiBAKGxheWVyLnRyYW5zZm9ybS5tNDEpLAorICAgICAgICAgICAgQCJtNDIiIDogQChsYXllci50
cmFuc2Zvcm0ubTQyKSwKKyAgICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00
MyksCisgICAgICAgICAgICBAIm00NCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDQpLAorICAgICAg
ICB9LAorICAgICAgICBAInN1YmxheWVyVHJhbnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0x
MSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMSksCisgICAgICAgICAgICBAIm0xMiIg
OiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMiksCisgICAgICAgICAgICBAIm0xMyIgOiBA
KGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMyksCisgICAgICAgICAgICBAIm0xNCIgOiBAKGxh
eWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xNCksCisKKyAgICAgICAgICAgIEAibTIxIiA6IEAobGF5
ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIxKSwKKyAgICAgICAgICAgIEAibTIyIiA6IEAobGF5ZXIu
c3VibGF5ZXJUcmFuc2Zvcm0ubTIyKSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIuc3Vi
bGF5ZXJUcmFuc2Zvcm0ubTIzKSwKKyAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIuc3VibGF5
ZXJUcmFuc2Zvcm0ubTI0KSwKKworICAgICAgICAgICAgQCJtMzEiIDogQChsYXllci5zdWJsYXll
clRyYW5zZm9ybS5tMzEpLAorICAgICAgICAgICAgQCJtMzIiIDogQChsYXllci5zdWJsYXllclRy
YW5zZm9ybS5tMzIpLAorICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci5zdWJsYXllclRyYW5z
Zm9ybS5tMzMpLAorICAgICAgICAgICAgQCJtMzQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9y
bS5tMzQpLAorCisgICAgICAgICAgICBAIm00MSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3Jt
Lm00MSksCisgICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00
MiksCisgICAgICAgICAgICBAIm00MyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00Myks
CisgICAgICAgICAgICBAIm00NCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00NCksCisg
ICAgICAgIH0sCisKKyAgICAgICAgQCJoaWRkZW4iIDogQChsYXllci5oaWRkZW4pLAorICAgICAg
ICBAImRvdWJsZVNpZGVkIiA6IEAobGF5ZXIuZG91YmxlU2lkZWQpLAorICAgICAgICBAIm1hc2tz
VG9Cb3VuZHMiIDogQChsYXllci5tYXNrc1RvQm91bmRzKSwKKyAgICAgICAgQCJjb250ZW50c1Nj
YWxlIiA6IEAobGF5ZXIuY29udGVudHNTY2FsZSksCisgICAgICAgIEAicmFzdGVyaXphdGlvblNj
YWxlIiA6IEAobGF5ZXIucmFzdGVyaXphdGlvblNjYWxlKSwKKyAgICAgICAgQCJvcGFxdWUiIDog
QChsYXllci5vcGFxdWUpLAorICAgICAgICBAIm9wYWNpdHkiIDogQChsYXllci5vcGFjaXR5KSwK
KyAgICB9OworfQorCistICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZToo
ZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVz
ZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTphY3Rpb25dOworfQorCistICh2b2lkKV9kb0FmdGVyUmVj
ZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9u
Cit7CisgICAgW19jb250ZW50VmlldyBfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RG
b3JUZXN0aW5nOmFjdGlvbl07Cit9CisKKy0gKENHUmVjdClfZHJhZ0NhcmV0UmVjdAoreworI2lm
IEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgcmV0dXJuIF9wYWdlLT5jdXJyZW50RHJhZ0NhcmV0
UmVjdCgpOworI2Vsc2UKKyAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyNlbmRpZgorfQorCistIChC
T09MKV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gc2VsZi5fY3Vy
cmVudENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Cit9CisKKy0gKHZvaWQpX3NpbXVsYXRl
TG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgoreworICAgIFtfY29u
dGVudFZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpsb2NhdGlvbl07Cit9
CisKKy0gKHZvaWQpX3NpbXVsYXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dAoreworICAg
IFtfY29udGVudFZpZXcgX3NpbXVsYXRlVGV4dEVudGVyZWQ6dGV4dF07Cit9CisKKy0gKHZvaWQp
X2R5bmFtaWNVc2VySW50ZXJmYWNlVHJhaXREaWRDaGFuZ2UKK3sKKyAgICBpZiAoIV9wYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2Uo
KTsKKyAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOworfQorCistICh2b2lk
KV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElE
IGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRAorewor
I2lmIFVTRShTWVNURU1fUFJFVklFVykKKyAgICBpZiAoX3BhZ2UpIHsKKyAgICAgICAgaWYgKGF1
dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3BhZ2UtPnN5c3RlbVByZXZpZXdDb250cm9sbGVyKCkp
CisgICAgICAgICAgICBwcmV2aWV3Q29udHJvbGxlci0+dHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rp
b25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVtZW50SUQsIGRvY3VtZW50SUQsIHBhZ2VJRCk7Cisg
ICAgfQorI2VuZGlmCit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rl
c3RpbmdNYWMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVz
dGluZ01hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkZjU1ZGU1ZDA4ODI3OTNiYmIxZTExMDhhNDM1ODcxNzQ4
ODNiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFj
L1dLV2ViVmlld1Rlc3RpbmdNYWMuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0IDxXZWJLaXQvV0tCYXNlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+
CisKKyNpZiAhVEFSR0VUX09TX0lQSE9ORQorCitAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CisKK0Bp
bnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOikgQ0dGbG9hdCBfdG90YWxIZWlnaHRP
ZkJhbm5lcnM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRVbmRlcmxh
eUNvbG9yOikgTlNDb2xvciAqX3VuZGVybGF5Q29sb3I7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZHdyaXRlLCBzZXR0ZXI9X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czopIEJPT0wgX2lnbm9y
ZXNOb25XaGVlbEV2ZW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tQYWdl
UmVmIF9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3OworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcjsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc2hvdWxkUmVxdWVzdENhbmRpZGF0
ZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTWVudSAqX2FjdGl2ZU1lbnU7
CisKKy0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9m
ZnNldDsKKy0gKHZvaWQpX2Rpc2FibGVGcmFtZVNpemVVcGRhdGVzOworLSAodm9pZClfZW5hYmxl
RnJhbWVTaXplVXBkYXRlczsKKworLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxk
V2luZG93czsKKworLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzOwor
LSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKKy0gKHZvaWQpX2VuZERl
ZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jOworCistICh2b2lkKV9zZXRDdXN0b21Td2lw
ZVZpZXdzOihOU0FycmF5ICopY3VzdG9tU3dpcGVWaWV3czsKKy0gKHZvaWQpX3NldEN1c3RvbVN3
aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldDsKKy0gKEJPT0wp
X3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRl
OihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGU7CistICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFw
c2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVjdCkpY2FsbGJhY2s7CisKKy0gKE5TVmlldyAqKV9m
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3OworLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRv
dzsKKworLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJh
bWVIYW5kbGU7CisKKy0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElEOworLSAodm9p
ZClfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZp
ZXI7CisKKy0gKHZvaWQpX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOihOU1RleHRDaGVja2luZ1Jl
c3VsdCAqKWNhbmRpZGF0ZTsKKy0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOwor
CistICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzOworLSAodm9pZClfZGlkVXBkYXRlQ2Fu
ZGlkYXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZTsKKworLSAodm9pZClfaW5zZXJ0VGV4
dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5nZTsK
Ky0gKE5TUmVjdClfY2FuZGlkYXRlUmVjdDsKKworLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVp
Z2h0OihpbnQpaGVpZ2h0OworLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVp
Z2h0OworLSAodm9pZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRp
c3BhdGNoX2Jsb2NrX3QpYWN0aW9uOworCitAZW5kCisKKyNlbmRpZiAvLyAhVEFSR0VUX09TX0lQ
SE9ORQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdUZXN0aW5nTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdUZXN0aW5nTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3YTU4MDU4MjQ3ODcyODdmNjRiNmY3ZGFlOWMx
YmUyMjE1ZDU0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ01h
Yy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5o
IgorI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgorCitAaW1wbGVtZW50YXRpb24g
V0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCisKKy0gKFdLUGFnZVJlZilfcGFnZVJlZkZvclRyYW5z
aXRpb25Ub1dLV2ViVmlldworeworICAgIHJldHVybiB0b0FQSShfcGFnZS5nZXQoKSk7Cit9CisK
Ky0gKHZvaWQpX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MKK3sKKyAgICBfaW1w
bC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c0Zyb21WaWV3T25seSgpOworfQor
CistICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJlY3QgYW5kU2Nyb2xsQnk6KE5TU2l6ZSlvZmZz
ZXQKK3sKKyAgICBfaW1wbC0+c2V0RnJhbWVBbmRTY3JvbGxCeShOU1JlY3RUb0NHUmVjdChyZWN0
KSwgTlNTaXplVG9DR1NpemUob2Zmc2V0KSk7Cit9CisKKy0gKHZvaWQpX3NldFRvdGFsSGVpZ2h0
T2ZCYW5uZXJzOihDR0Zsb2F0KXRvdGFsSGVpZ2h0T2ZCYW5uZXJzCit7CisgICAgX2ltcGwtPnNl
dFRvdGFsSGVpZ2h0T2ZCYW5uZXJzKHRvdGFsSGVpZ2h0T2ZCYW5uZXJzKTsKK30KKworLSAoQ0dG
bG9hdClfdG90YWxIZWlnaHRPZkJhbm5lcnMKK3sKKyAgICByZXR1cm4gX2ltcGwtPnRvdGFsSGVp
Z2h0T2ZCYW5uZXJzKCk7Cit9CisKKy0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93
Q2hhbmdlcworeworICAgIF9pbXBsLT5iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMo
KTsKK30KKworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcworeworICAg
IF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Cit9CisKKy0gKHZvaWQp
X2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jCit7CisgICAgX2ltcGwtPmVuZERl
ZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jKCk7Cit9CisKKy0gKHZvaWQpX3NldElnbm9y
ZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKK3sKKyAgICBfaW1w
bC0+c2V0SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50cyk7Cit9CisK
Ky0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cworeworICAgIHJldHVybiBfaW1wbC0+aWdu
b3Jlc05vbldoZWVsRXZlbnRzKCk7Cit9CisKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6
KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCit7CisgICAgX2ltcGwtPnNldEN1c3RvbVN3aXBl
Vmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Cit9CisKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmll
d3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldAoreworICAgIF9pbXBsLT5z
ZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENvbnRlbnRJbnNldCk7Cit9CisK
Ky0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bp
bm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKK3sKKyAgICByZXR1cm4gX2ltcGwt
PnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVkU3RhdGUpOworfQorCist
ICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVjdCkp
Y2FsbGJhY2sKK3sKKyAgICBfaW1wbC0+c2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayhj
YWxsYmFjayk7Cit9CisKKy0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Cit7
CisgICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7Cit9CisKKy0g
KE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKK3sKKyAgICByZXR1cm4gX2ltcGwtPmZ1bGxT
Y3JlZW5XaW5kb3coKTsKK30KKworLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKK3sK
KyAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKK30KKworLSAodm9pZClfZW5h
YmxlRnJhbWVTaXplVXBkYXRlcworeworICAgIF9pbXBsLT5lbmFibGVGcmFtZVNpemVVcGRhdGVz
KCk7Cit9CisKKy0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAq
KWZyYW1lSGFuZGxlCit7CisgICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJv
Y2VzcygpLndlYkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRs
ZS5fZnJhbWVJRCkpKQorICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZyYW1lTGF5b3V0
KCp3ZWJGcmFtZVByb3h5KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy0gKE5TQ29sb3IgKilf
dW5kZXJsYXlDb2xvcgoreworICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xvcigpOworfQor
CistICh2b2lkKV9zZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5kZXJsYXlDb2xvcgorewor
ICAgIF9pbXBsLT5zZXRVbmRlcmxheUNvbG9yKHVuZGVybGF5Q29sb3IpOworfQorCistIChCT09M
KV9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgoreworICAgIHJldHVybiBfcGFnZSAm
JiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKK30KKworLSAodm9p
ZClfcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQKK3sKKyAgICBpZiAoX3BhZ2UpCisgICAgICAg
IF9wYWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworfQorCistICh2b2lkKV9oYW5k
bGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcgorewor
ICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KK30KKworLSAodm9pZClfaGFuZGxlQWNj
ZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCit7CisgICAg
X2ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Cit9CisKKy0gKHZvaWQp
X2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJj
bGFzc2VzLgorfQorCistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eToo
Qk9PTCl2aXNpYmxlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorfQorCist
ICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgX2ltcGwtPmZvcmNlUmVxdWVz
dENhbmRpZGF0ZXNGb3JUZXN0aW5nKCk7Cit9CisKKy0gKEJPT0wpX3Nob3VsZFJlcXVlc3RDYW5k
aWRhdGVzCit7CisgICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOwor
fQorCistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNS
YW5nZSlyZXBsYWNlbWVudFJhbmdlCit7CisgICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVw
bGFjZW1lbnRSYW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKK30KKworLSAoTlNSZWN0KV9jYW5kaWRh
dGVSZWN0Cit7CisgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRh
KCkuZm9jdXNlZEVsZW1lbnRSZWN0OworfQorCistICh2b2lkKXZpZXdEaWRDaGFuZ2VFZmZlY3Rp
dmVBcHBlYXJhbmNlCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyBbc3VwZXIg
aW5pdFdpdGhDb2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdpdGhGcmFtZTpdLgorICAgIC8vIFRoYXQg
aXMgYmVmb3JlIF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVzZWQsIHNvIGNoZWNrLiA8cmRhcjovL3By
b2JsZW0vMzk2MTEyMzY+CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
X2ltcGwtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZClfc2V0
SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNldEhlYWRlckJh
bm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfc2V0Rm9vdGVyQmFu
bmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdo
dEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQ
ZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCit7CisgICAgX2ltcGwt
PmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzKGFjdGlvbik7Cit9CisKKy0g
KE5TTWVudSAqKV9hY3RpdmVNZW51Cit7CisgICAgLy8gRklYTUU6IE9ubHkgdGhlIERPTSBwYXN0
ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291
bGQgYmUKKyAgICAvLyBleHRlbmRlZCB0byByZWNvZ25pemUgdGhlIHJlZ3VsYXIgY29udGV4dCBt
ZW51IGFzIHdlbGwuCisgICAgcmV0dXJuIF9pbXBsLT5kb21QYXN0ZU1lbnUoKTsKK30KKworQGVu
ZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KaW5kZXggZjU4OWU5ZDMzNjFmYTFm
YjYwMzVkYWExMzkyMTUyMjAxNjZiY2UxMC4uN2Q4OTAyZWViOTY2ZGZkYmFkNzg3ZDgyYmIyZDhl
ZGZjOWJiN2NmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFn
ZUNsaWVudEltcGxDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIldLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmlu
ZGV4IGRjOWY3NGM0OWE2YmVhOWVkYzE1MDZjNWFiOTU3ZTAwNmEyMDdhNWUuLjBjNWUwZjdmNmM2
MGY3YTRjM2Y2ODFlMjlkZDQzMGQ1M2QxYzA5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbXBv
cnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVBy
b3h5LmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCIKICNp
bXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGJjOGFlMDIy
MWM0ZTYxYjY0YTk3Y2U1ZDQyOGYzMTZkNGUwNzgwY2MuLjA1Yjg4ZDE5ZDNhZDAzODljZTA3YmE1
M2FlNWJhMmVkMDEzYzgxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNzEsNiArNzEsNyBAQAogI2lt
cG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKICNpbXBvcnQgIldLV2ViVmll
d0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dl
YlZpZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQuaCIK
ICNpbXBvcnQgIldlYkF1dG9jb3JyZWN0aW9uRGF0YS5oIgogI2ltcG9ydCAiV2ViRGF0YUxpc3RT
dWdnZXN0aW9uc0Ryb3Bkb3duSU9TLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNTYyOGNmMzViOGNjYjJk
MWZiOTE5ZDFjMmE3MDg0M2Y3Njg3ODg3ZC4uNDQxMGI3ZDEzZjA2YzEyYzZhYmVhZDhhMzY3NTIw
MDZkNjlkMjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLTW91
c2VHZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjaWYgSEFWRShI
T1ZFUl9HRVNUVVJFX1JFQ09HTklaRVIpCiAKKyNpbXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29n
bml6ZXIuaD4KICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKIAogQGludGVyZmFjZSBX
S01vdXNlR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3Jl
ZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQppbmRleCAxYTJiZmQ4NzUyZTc3
NjEyZDM4MDlhZjIyZTkwNWVkZTY5MzFlN2NkLi4zOGI3YzRmMGY2YmJhZTZiMzg5OTZkZWIxY2I2
MzY0NDc3ZGNhOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVs
bHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKICNpbXBvcnQgIldLRnVsbHNjcmVlblN0YWNrVmll
dy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGlu
Zy5oIgogI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV2Vi
UGFnZVByb3h5LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQppbmRleCAyMjY1
M2Q3NDM5ODg2ZGJmNWVjZGNkZGFmZTcyZDAyZDdiODMxZDAwLi4wMmRlZDE4N2QzMmJkNjJhNDNh
MTBkMmU5YTYzNjgyYTMzYTc0OTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJXS1N0
cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdNYWMuaCIKICNpbXBvcnQgIldl
YkNvbG9yUGlja2VyTWFjLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5TWFjLmgiCiAj
aW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlci5oCmluZGV4IDRkZWRjMGE2YWEyYTIyMzg5NjE1NjFlZjA5NjM2ZmJmMWU3ZDUxMTUuLjAx
ZDdhMmFiNzUxOGU2Mzc5OGVmYWYyNmQzOWM2OTU1ODAxYzdjYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIuaApAQCAtMjMsOCArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKSAmJiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNp
bXBvcnQgIkdlbmVyaWNDYWxsYmFjay5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBm
NzlkZGMxMjA0MGYyYmY3OTI0MGNjYTU1ZWY5ODkzMGI1MDA3NTM0Li4yNzMyOGUyNDVjMDA4NzVm
NDJkNDhjZmFlNzBkMzQ4YTA3ZWJjNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4LDYgKzk4LDkgQEAKIAkJMEYwOENGNTQxRDYz
QzE0MDAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBvcG92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDhDRjUzMUQ2M0MxNDAwMEI0OERGMSAvKiBX
S0Zvcm1TZWxlY3RQb3BvdmVyLmggKi87IH07CiAJCTBGMTc0QUEzMTQyQTRDQjcwMDM5MjUwRiAv
KiBBUElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5LmggKi87IH07CiAJ
CTBGM0M3MjVCMTk2RjYwNEUwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0M3MjU5MTk2
RjVGNjgwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAqLzsgfTsKKwkJMEY0
NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzJGMjM5RDg5QTAwMDI5
NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggKi87IH07CisJCTBGNDVBMzM1MjM5RDg5QUYw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJW
aWV3VGVzdGluZ01hYy5oICovOyB9OworCQkwRjQ1QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tX
ZWJWaWV3VGVzdGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCAqLzsg
fTsKIAkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU5
NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLzsg
fTsKIAkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTk0Nzk1MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5LmggKi87IH07CiAJCTBGNTk0NzlEMTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxp
bmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oICovOyB9OwpA
QCAtMTA5LDYgKzExMiw5IEBACiAJCTBGOTMxQzFDMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMUMxQTE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oICovOyB9OwogCQkwRjkzMUMxQzE4QzU3
MTE5MDBEQkI4RDQgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzFDMUExOEM1
NzExOTAwREJCOEQ0IC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCAq
LzsgfTsKIAkJMEZCNjU5MjMxMjA4QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjU5MjIxMjA4
QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oICovOyB9OworCQkwRkI5NDgzNzIzOUYz
MUQxMDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIENvcHkgVGVzdGluZyBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzNCMjM5RDhDQzQwMDI5
NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggKi87IH07CisJCTBGQjk0ODM4MjM5RjMyMzgwMDky
NkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJG
IC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCAqLzsgfTsKKwkJMEZCOTQ4MzkyMzlGMzIzODAwOTI2
QThGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYg
LyogV0tXZWJWaWV3VGVzdGluZ01hYy5oICovOyB9OwogCQkwRkNCNEU0NjE4QkJFMDQ0MDAwRkNG
QzkgLyogUGFnZUNsaWVudEltcGxJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTM2MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1w
bElPUy5oICovOyB9OwogCQkwRkNCNEU0ODE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRF
MzgxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXQuaCAqLzsgfTsKIAkJMEZDQjRFNEEx
OEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNBMThCQkUwNDQwMDBGQ0ZD
OSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggKi87IH07CkBAIC0xOTIzLDYgKzE5MjksMTkg
QEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEZCOTQ4MzYyMzlGMzFCNzAwOTI2
QThGIC8qIENvcHkgVGVzdGluZyBIZWFkZXJzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVz
QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlkc3RQYXRo
ID0gV2ViS2l0VGVzdFN1cHBvcnQ7CisJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTY7CisJCQlmaWxl
cyA9ICgKKwkJCQkwRkI5NDgzNzIzOUYzMUQxMDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZy5o
IGluIENvcHkgVGVzdGluZyBIZWFkZXJzICovLAorCQkJCTBGQjk0ODM4MjM5RjMyMzgwMDkyNkE4
RiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCisJ
CQkJMEZCOTQ4MzkyMzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBD
b3B5IFRlc3RpbmcgSGVhZGVycyAqLywKKwkJCSk7CisJCQluYW1lID0gIkNvcHkgVGVzdGluZyBI
ZWFkZXJzIjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OwogCQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyogQ29weSBNZXNzYWdlIEdlbmVyYXRpb24g
U2NyaXB0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjAyNSw2ICsyMDQ0LDEyIEBACiAJCTBGMTc0
QUE2MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdLR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjNDNzI1NzE5NkY1RjUwMDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0
b3JIaWdobGlnaHRWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNDNzI1
OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tX
ZWJWaWV3VGVzdGluZ0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dl
YlZpZXdUZXN0aW5nSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzMw
MjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ0lPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2Vi
Vmlld1Rlc3RpbmdNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJW
aWV3VGVzdGluZ01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMzNDIz
OUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmdNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZp
ZXdUZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1Rl
c3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzM0MyMzlEOENDNDAw
Mjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OEUxODdC
M0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RjE4N0IzQjNBMDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwNjksNiArNTA5NCwxNSBAQAogCQkJdGFiV2lkdGgg
PSA4OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkwRjQ1QTMyRTIzOUQ4OTYwMDAyOTRBQkYg
LyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkw
RjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oICovLAorCQkJ
CTBGNDVBMzMwMjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovLAor
CQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9Owog
CQkxMDU4QzdCMEZFQTU1ODVFMTFDQTJDQkIgLyogTGlua2VkIEZyYW1ld29ya3MgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjc0OSw2ICs2NzgzLDggQEAK
IAkJCQkxQUMxNDE1MDE4QUM0N0VFMDA2QzYwMkMgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaCAqLywKIAkJCQkxQTY2QkY4RTE4QTA1MkVEMDAyMDcxQjQgLyogV0tXZWJWaWV3SW50
ZXJuYWwuaCAqLywKIAkJCQkyNkY5QTgzQTE4QTM0NjNGMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJp
dmF0ZS5oICovLAorCQkJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0
aW5nLmggKi8sCisJCQkJMEY0NUEzM0MyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3Rp
bmcubW0gKi8sCiAJCQkJMUFENjBGNUMxOEUyMEY0QzAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVy
ZXMuaCAqLywKIAkJCQkxQUQ2MEY1QjE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJl
cy5tbSAqLywKIAkJCQkxQUQ2MEY1RjE4RTIwRjc0MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJl
c0ludGVybmFsLmggKi8sCkBAIC04MTc4LDYgKzgyMTQsNyBAQAogCQkJCUJDMEMzNzY2MTBGODA3
NjYwMDc2RDdDQiAvKiBDICovLAogCQkJCTM3QzRDMDgzMTgxNDlDMkEwMDM2ODhCOSAvKiBDb2Nv
YSAqLywKIAkJCQlCQzhBNTAxMzExNzY1RjQ1MDA3NTc1NzMgLyogY3BwICovLAorCQkJCTBGNDVB
MzJFMjM5RDg5NjAwMDI5NEFCRiAvKiBpb3MgKi8sCiAJCQkJQkMxMTFCNDcxMTJGNjE2OTAwMzM3
QkFCIC8qIG1hYyAqLywKIAkJCQk2MzQ4NDI0RjFGQjI2RTcxMDA5NDZFM0MgLyogQVBJQXBwbGlj
YXRpb25NYW5pZmVzdC5oICovLAogCQkJCTJFNUM3NzBEMUZBN0Q0MjkwMDU5MzJDMyAvKiBBUElB
dHRhY2htZW50LmNwcCAqLywKQEAgLTg0NjEsNiArODQ5OCw4IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlCQzg2OTlCMzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICovLAogCQkJCUJDODY5
OUI0MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oICovLAorCQkJCTBGNDVBMzMz
MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggKi8sCisJCQkJMEY0NUEz
MzQyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMubW0gKi8sCiAJCQkpOwog
CQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDczNSw2ICsx
MDc3NCw5IEBACiAJCQkJMkRDNkQ5QzMxOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRl
bnRQcm92aWRlclJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY2QkY4RjE4QTA1MkVE
MDAyMDcxQjQgLyogV0tXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2RjlB
ODNCMThBMzQ2ODEwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjQ1QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY0NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3Rp
bmdJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDVBMzM1MjM5RDg5QUYwMDI5NEFCRiAvKiBX
S1dlYlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ2MEY1RTE4RTIwRjRD
MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFENjBG
NjAxOEUyMEY3NDAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXNJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODUyLDYgKzEwODk0LDcgQEAKIAkJCQkxQTIx
ODAxNjFCNTQ1NDYyMDA0NkFFQzQgLyogQWRkIFN5bWxpbmsgaW4gL1N5c3RlbS9MaWJyYXJ5L1By
aXZhdGVGcmFtZXdvcmtzICovLAogCQkJCTUzNzlDN0FDMjFFNTI4ODUwMEU0QThGNiAvKiBDaGVj
ayAueGNmaWxlbGlzdHMgKi8sCiAJCQkJOTMzMTcwMDcyMjM0Njc0NTAwQjMyNTU0IC8qIENyZWF0
ZSBzeW1saW5rcyB0byBYUEMgc2VydmljZXMgZm9yIGVuZ2luZWVyaW5nIGJ1aWxkcyAqLywKKwkJ
CQkwRkI5NDgzNjIzOUYzMUI3MDA5MjZBOEYgLyogQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCQk1MzVFMDhDNDIyNTQ1QjcyMDBERjAwQ0EgLyog
UEJYQnVpbGRSdWxlICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDQ4NWQxZGI1ZDJlNjZjOTVhNzJmZGNhYmQxM2VlNmI1MGYwYjNiOWQuLmEy
YjQyMjIyZDE1YjAxYjk3Njg1NDUxNzFhOGQzMGU4NzliMDU4ZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxOS0x
Mi0wOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIFdLV2ViVmlldyBjb2RlIHJlbGF0ZWQgdG8gdGVzdGluZyB0byBuZXcgZmlsZXMsIHdpdGgg
dGhlaXIgb3duIGhlYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNTAyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9tYWMvV0syQnJv
d3NlcldpbmRvd0NvbnRyb2xsZXIubToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0VkaXRpbmdU
ZXN0SGFybmVzcy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9SZXNw
b25zaXZlbmVzc1RpbWVyQ3Jhc2gubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5t
bToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVy
aW5nUG9saWN5Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
Tm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFC
dWZmZXJpbmcubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1tOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW06CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyTWVkaWFTaW11bGF0ZUZh
aWxlZFNhbmRib3gubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEluZm8ubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRh
dGVUZXN0cy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld0VkaXRBY3Rpb25zLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW06CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW06
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2Nv
YS5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5t
bToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
bW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
Lm1tOgorCiAyMDE5LTEyLTA5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmUtZGlzYWJsZSBUTFMxLjAgYW5kIFRMUzEuMSBieSBkZWZhdWx0
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29u
ZmlnIGIvVG9vbHMvTWluaUJyb3dzZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwppbmRl
eCBmYzYxZDUyMjdjODYwODQ4ODUxNGNiZDkyYTI4ZGM3YzFjMmVmYWY0Li4yMGYwZTQ1ZjkzOTUz
NzVjZGFmMzFlNzUyYjRiMjU2ZmVkZjdiMjczIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKQEAgLTcwLDYgKzcwLDggQEAgR0NDX1ZFUlNJT04g
PSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwogV0FSTklOR19DRkxBR1MgPSAt
V2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIKIEdDQ19OT19DT01NT05fQkxPQ0tTID0gWUVT
OwogCitIRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL1dlYktpdFRl
c3RTdXBwb3J0OworCiBTVVBQT1JURURfUExBVEZPUk1TID0gaXBob25lb3MgaXBob25lc2ltdWxh
dG9yIG1hY29zeCB0dm9zIHR2c2ltdWxhdG9yIHdhdGNob3Mgd2F0Y2hzaW11bGF0b3I7CiAKIFRB
UkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9N
QUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7CmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIu
bSBiL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCmlu
ZGV4IDAwNjMyNjZlZDMzZTdkYTdhMmFiOTE0MmEyYWYwYTEyYzU5MGQwZDkuLjQ5NmFjNDcxNmU4
Y2NmMzk4ZDE5NTZmMGE5ZjQyYmUzOTk4MmRlNGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93
c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbXBvcnQgIkFwcERlbGVnYXRlLmgiCiAjaW1wb3J0ICJTZXR0aW5nc0NvbnRyb2xsZXIuaCIK
KyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0ZyYW1lSW5m
by5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCmluZGV4IGVlYzEzZjZlZDk4NmQyM2Mx
MGNjNjcyNmFhOWJkNzQwNzQxMzQ2NjQuLmU5NTZiYjE4YzM2NDdhYjIxMDJkNzcyMTRlM2ViZDE0
MjMyZDFkZGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29uZmlndXJhdGlvbnMv
QmFzZS54Y2NvbmZpZworKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcKQEAgLTMzLDcgKzMzLDcgQEAgQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJE
ID0gZ251KysxejsKIENMQU5HX0NYWF9MSUJSQVJZID0gbGliYysrOwogQ0xBTkdfRU5BQkxFX09C
SkNfV0VBSyA9IFlFUzsKIENMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVS
X1NFQVJDSF9QQVRIUyA9ICR7QlVJTFRfUFJPRFVDVFNfRElSfS91c3IvbG9jYWwvaW5jbHVkZSAk
KFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL1dlYkNvcmVUZXN0U3VwcG9ydCAke1NSQ1JPT1R9OworSEVBREVSX1NFQVJD
SF9QQVRIUyA9ICR7QlVJTFRfUFJPRFVDVFNfRElSfS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNP
UkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChCVUlMVF9QUk9EVUNU
U19ESVIpL1dlYkNvcmVUZXN0U3VwcG9ydCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViS2l0VGVz
dFN1cHBvcnQgJHtTUkNST09UfTsKIAogR0NDX05PX0NPTU1PTl9CTE9DS1MgPSBZRVM7CiBHQ0Nf
UFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSAkKEZFQVRVUkVfREVG
SU5FUykgVV9ESVNBQkxFX1JFTkFNSU5HPTEgVV9TSE9XX0NQTFVTUExVU19BUEk9MCAkKEdDQ19Q
UkVQUk9DRVNTT1JfREVGSU5JVElPTlNfJChQTEFURk9STV9OQU1FKSk7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL0VkaXRpbmdUZXN0SGFybmVzcy5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tCmluZGV4IGYwOTZmYjc1NmYwMDQzZTYzNjZkZWM0
ZjAxYTkwYmMxZDA3MzdjM2IuLjE2NjdmNzBlZDFjMzBiYWZkYzFiMzkwYTQ5N2QwNTIwMDQ5ZGRm
MDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1Rlc3RIYXJuZXNzLmgiCiAKICNpbXBvcnQgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogCiBAaW1wbGVtZW50YXRpb24gRWRpdGluZ1Rl
c3RIYXJuZXNzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbQppbmRleCAyNzEyYzVmMDQwYWRlMWFi
ZWU2MjQ1MTkyOGRlN2Q3MzhiN2ExMWNkLi5mMmNkNDkyYzQ0OWI1ZmMyNzUxNmM0OGUxZjY3YmEy
Njg5ODAyNzM1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9S
ZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tCkBAIC0yOSw4ICsyOSw4IEBACiAK
ICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3Lmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQYWdlUHJp
dmF0ZU1hYy5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FuaW1hdGVkUmVzaXplLm1t
CmluZGV4IDMxMTljM2MzOTkwMzAyNWMxZDI3MTBjMWJlZGJkYjQ2NzYyMzMwNTUuLmU0MDQ0MDk1
ZGE0MTlhNjE1OWQ0YzNiOGZhZDFjMjU5OWY4NzM1NzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbQpAQCAtMjks
MTEgKzI5LDExIEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdU
ZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlcy5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgotI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5n
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNM
b2FkaW5nLm1tCmluZGV4IDY0ZGM0NmI0Zjc3NzJiZGNmZTg3MWUyZjg1ZWUyOWU2MTM0YTBkYzgu
LjgwMDJkOGE2MDAyODQwYTQ2M2U1NTFlYmU2YjQ1NDFlN2QwZDA4ODAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvdWJsZURlZmVy
c0xvYWRpbmcubW0KQEAgLTI4LDEwICsyOCwxMCBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJh
dGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2Vi
S2l0L1dLRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+Ci0jaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9u
RGVhZGxvY2tBZnRlckNyYXNoLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbQppbmRleCBkNDMyNGE4ZjZjNmE5
ZGYyM2RlODg0YmY1OWE2NDYxMTVkMjg5MTBjLi5hNzlkZGE5YzFmY2EyYzg2M2I0YTU0NzNmOWQ5
MzFmM2NmZTU4NTEyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gu
bW0KQEAgLTI5LDggKzI5LDggQEAKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3ROYXZp
Z2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldL
V2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9s
aWN5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZl
cmluZ1BvbGljeS5tbQppbmRleCA2YzJkN2I2ZjRlMDBlY2YwNTJkMTA1OTM4MTM4ZDdjMDZiZTEy
NTlhLi5kMTZjYWYxN2RhMzg3ZGVkN2Y2YTRjOTZlZjBjNDE2ZGJjYjllMmUwIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9s
aWN5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFC
dWZmZXJpbmdQb2xpY3kubW0KQEAgLTI5LDkgKzI5LDggQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1V
dGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLQorI2ltcG9ydCAiV0tXZWJW
aWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiBzdGF0aWMgdm9p
ZCB3YWl0VW50aWxCdWZmZXJpbmdQb2xpY3lJc0VxdWFsVG8oV0tXZWJWaWV3KiB3ZWJWaWV3LCBj
b25zdCBjaGFyKiBleHBlY3RlZCkKIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tCmlu
ZGV4IDUwMDEyZjBmMTlkZmU1ZWNkOGVkZDVhY2IzM2Y3YjU3ZTJiMTAwZjguLjhhYzVlYzUwNDRh
MmIxNjdlZTA2NGZmZGFkMTIzYjM0YzQ0MDMzZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNU
ZXN0cy5tbQpAQCAtMjcsOSArMjcsOCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5n
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Bhc3RlTWl4ZWRDb250ZW50Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQppbmRleCA1Yjk4MGVlYTMxMTBlZmI5NmM2MGY2YmU1
NDE3YTU0NjA0MTU3YzAxLi42YzQ2ODc5MjNlYmQ1YjEyYTk3ODYwZjg2NmY5Mzk5NTY2OTM1NDQ5
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3Rl
TWl4ZWRDb250ZW50Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUGFzdGVNaXhlZENvbnRlbnQubW0KQEAgLTI4LDkgKzI4LDkgQEAKICNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0VVJMU2NoZW1lSGFuZGxlci5oIgogI2ltcG9y
dCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9y
dCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWYuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVu
Y2VzUmVmUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1
cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tCmluZGV4IDVkYzFhMTk3ODk4NDQzMTlk
MjYxOWE1YzdhMWY4ZmM5MmY2ZTg5MzguLmJmNmUzY2U0YjliZGY4OGEzZTdjYThkMjBjMWJmZjkz
ZGNkMTFmOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNp
bXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tQYWdlUHJpdmF0ZU1hYy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRl
Lmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcu
aD4KLSNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQ
cml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJp
bmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNw
ZW5kTWVkaWFCdWZmZXJpbmcubW0KaW5kZXggODQ3YmZiNjdlZTZmMGI4MGQ5Mjc2YTQzNjliMTRk
Zjc3NjM0MDBiZS4uN2JmNGFhNTcyOTU4ZThiMzM5ZmQ5MzEwYzgzMjU5M2UzOWY5MzRkNCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3Vz
cGVuZE1lZGlhQnVmZmVyaW5nLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbQpAQCAtMjksOSArMjksOCBA
QAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmll
dy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQ
cml2YXRlLmg+CiAKIFRFU1QoV2ViS2l0LCBQcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nKQog
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KaW5kZXggMTE1Nzc3ZTc0ZDliYmZkZmM0
Y2UzZTAzYWM2MzIyMTg2ZjgzMjFlOC4uM2NhMjkzNDNjNzg5NTQ3NGQ3YzBjNjNjZTM1MmFlNDM1
ZjhjMmI4MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgi
CiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbXBvcnQgPFdl
YktpdC9XS1VSTFNjaGVtZUhhbmRsZXIuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRh
c2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJC
YXNpYy5tbQppbmRleCA1YjY2OWVhYjAyMzg5ZjIxM2EwNTE3Zjc1ZGQ2YjhjNTQ2OGI5MTA5Li5k
Nzc5NjQwNTY4NGZiN2ZhYTU4ZTc0YTJkY2MxZGQyMmM2MTcwNzBiIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJC
YXNpYy5tbQpAQCAtMzEsMTIgKzMxLDEyIEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJU
ZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1By
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLVVJMU2NoZW1lSGFuZGxlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2No
ZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUu
bW0KaW5kZXggNmMyZjg0MzJlOGFhYTY2Njc2OTkxYWE3ZmJhZTFmYzA2MGM1N2U1NS4uYmNjMTAy
NmJjYWE1ODg2YWJjZTJiMDE2Y2QyZjRhNmZlNTgyMmNkZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbQpAQCAtMzIs
MTEgKzMyLDExIEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdU
ZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZVByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29s
IGRpZEZvcmNlUmVwYWludDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbQppbmRleCBkOWFkZWY0NDMyZDk4M2U0YjQ3MTAy
MDc0MDY5YTYyZGE5YzFiN2MzLi5lYTI0MDFhYzQyMzdiMDJkZDhkMmViNWU1MTc1NmM5YjQ4OWQ5
YjNhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5
c3RlbVByZXZpZXcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TeXN0ZW1QcmV2aWV3Lm1tCkBAIC0zMCw4ICszMCw4IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJW
aWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3Vy
YXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdl
YktpdC9XS1ZpZXdQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogCiBzdGF0aWMgYm9vbCBoYXNUcmlnZ2VySW5m
bzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4
dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCBkNzA3NTk4ZmRjN2U4ODIyYmNmMzE0Zjk4YTFkMzlm
OTk1NTA0Yzc1Li4zYTNiNGFjZjQ0M2Y3OWI1NzU5M2M0YWM3YzMzMjQ0NGM0ZjNlZmQ4IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0
TWFuaXB1bGF0aW9uLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgIldLV2ViVmlld1Rlc3Rp
bmcuaCIKICNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmg+CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0KaW5kZXgg
NzkxN2I4ZjlkMmY2NzlhMTE5OTgyYjhlNTAxMjJjYWVlMTJkZjNlYy4uMTYxMTgwODM2ZDU3NTYy
MDI3ZTA2MWM5NzUyZjQ3MjgxMjFkY2RiMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbQpAQCAtMjksNiArMjksNyBAQAogI2lt
cG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5n
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tDb250
ZXh0UHJpdmF0ZU1hYy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLR2VvbG9jYXRpb25NYW5hZ2VyLmg+
CkBAIC0zNiw3ICszNyw2IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlE
ZWxlZ2F0ZVByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0lu
c3BlY3Rvci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyTWVkaWFTaW11bGF0ZUZhaWxlZFNh
bmRib3gubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRp
YVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbQppbmRleCAzYjg4MzdjMWRmMzM0NWIyZTc4ZGM5MjEx
ZWM0NGE4NTNmMmI1ZGRlLi4xMGIyMDI0YjFlNWYxNDY3Nzk0MzY4MjRjMmRiMTdhMzliMDA5NDQ2
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJN
ZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbQpAQCAtMjgs
NyArMjgsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3Qu
aCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGlu
Zy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1t
CmluZGV4IDdhMDg5NjNmMTA2NjExNmMwMDZlMjhiZDJhODY2YmZjYmIwNjI1NDYuLjcwZGZmZTc3
MGExN2JjMzFjNjY0YTM4MDk1YjdmM2QxZDYxYzJjMTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdl
ci5tbQpAQCAtMjcsOSArMjcsOCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQppbmRleCBiNmZjZDkzNTg1
MGViZDY3YjJiMTg2MTBlNDg4OTA2NjVlMzE5MmFiLi5mZDM0MjBmZTc5MzhlODg3YTUyYjVkYmE2
OWRkMmQxNmIzZTg4ZjdkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KQEAgLTM0LDEwICszNCwxMCBA
QAogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgorI2ltcG9y
dCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Q29udGFjdHMvQ29udGFjdHMuaD4KICNp
bXBvcnQgPE1hcEtpdC9NYXBLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVm
UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJBcmNoaXZlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0UHJpdmF0ZS5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxl
bWVudEluZm8ubW0KaW5kZXggOTkzZjBiYmZmM2FmNTJjMzNkM2VlNjczMWVhMTc1YzE2NDUwMGJj
NC4uOTU1ZWJlMGUyM2ZlMTZjMWRiY2YxNDU1MTZkNjA2YWZiYTk1NmE5ZSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRF
bGVtZW50SW5mby5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1w
b3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0
ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CisjaW1wb3J0
ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJh
dGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5o
PgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMu
bW0KaW5kZXggODE2NTAwMWYzZTgzNGVkNjIyNDhkNDU1ZTM5ZDA3M2NhZjUyYjYyMy4uMTBjMTlj
YmYyMTMxMTc3NzEyYTA2ZTMwOTE4NmFmYmY3OWFiZmU1YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRp
ZGF0ZVRlc3RzLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0KKyNpbXBvcnQgIldLV2ViVmlld1Rl
c3RpbmcuaCIKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJL
aXRQcml2YXRlLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tCmluZGV4IDlkMWI3YzYyNTQ5
ODRhZmEwMTRkMjkyZWZhMTU4YjhiOGEzMWI5OTguLjZiYTliOWU0NmIwNzQyYjUzMTIwMGFhOTc0
ZTA1MWYwODI4OGY4MTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5tbQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGUuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVz
cG9uZGVyVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW0KaW5kZXggN2QyNTdmZDczMmM0NzdlN2NhZDVk
ZjliNmMyYjA5ZTY2MzBiZDk2MC4uZWMxOTBjOGQ2NDI1M2E4NTU0ZDZjNDhhNmMxZjRjMzAzZjRj
ZjM2NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbQpAQCAtMjgs
NiArMjgsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RJ
bnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dl
YlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQppbmRleCAxZjZhMDkzN2I3MDY4OGRi
YzczNTE1YjkwMTk1NDNlZjJmOGJmMzRlLi5kYjA4MjczMzQ2MjhmMDczOGY5NTdiMTBkZmQ3Yzc1
YjJkYjNkMTJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nl
c3NpYmlsaXR5VGVzdHNJT1MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3Mv
QWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tSZW1vdGVPYmplY3RJbnRlcmZhY2UuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tSZW1vdGVPYmpl
Y3RSZWdpc3RyeS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3Mv
QWN0aW9uU2hlZXRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlv
blNoZWV0VGVzdHMubW0KaW5kZXggZTgxZjEwMmVmNmMxYjMyYWU3ZDMxOTFhNWM0NThhODVjMGFj
OTVjYy4uNjBhMGUwMGZmYzRjYTI2NTU3Mzk2ZDE2NzUxYzU5MmZlYzUwZTYxNSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tCkBAIC0z
NSw5ICszNSw5IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJUZXN0V0tX
ZWJWaWV3Q29udHJvbGxlci5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIldLV2Vi
Vmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2Vy
dmljZXMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+Ci0jaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0FjdGl2YXRl
ZEVsZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLRWxlbWVudEFjdGlvbi5oPgogI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5tbQppbmRleCBmMDkyOWY4N2MyYWMxNDc4
OGExOTgyNWI3MzUwZDJjMTgxNzU0YzIwLi5lMmFhYWMwODcwNTgzOTU3Yjc0NzgwYmI3MTdlYjI3
YjgxZTUzNzU3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRv
Y29ycmVjdGlvblRlc3RzSU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L0F1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlRl
c3RJbnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJV
SUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld1ByaXZhdGUuaD4KIAogQGludGVyZmFjZSBUZXN0V0tXZWJWaWV3IChBdXRvY29y
cmVjdGlvblRlc3RzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3Mv
Rm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW0KaW5kZXggNDk1NjIwYzQzZWRlNzc0YTljOWUzNmI3
MzAwYTE4NWJjM2ZmNGJkMi4uMGI2ZDkzZjg4ODRlZjY0ZjhmYTkwOGM3NzU4OTZmZmRjYjE3NTk0
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2
YXRpb25UZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1By
ZXNlcnZhdGlvblRlc3RzLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJUZXN0SW5wdXRE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEku
aCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSW5wdXREZWxlZ2F0ZS5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29h
L1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KaW5kZXggOTY3NmEzM2JiMjZjYWY5OWViN2JjMTkyZDI4
MDlmZDg2NmZlZmQyZC4uMDM1MDc2NjMzNDE2YWRiYjM4Mzg0NTAxYmIzNjQwMTA3YmJlZjkxYyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVn
YXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxl
Z2F0ZS5tbQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0
ZS5oIgogCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3Rpbmcu
aCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGltcGxlbWVudGF0aW9uIFRlc3ROYXZp
Z2F0aW9uRGVsZWdhdGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdB
bmREcm9wU2ltdWxhdG9ySU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERy
b3BTaW11bGF0b3JJT1MubW0KaW5kZXggNjljZDQ5N2RjMTY2YmJhNjJhMmVlMjAyZjk0YWMwZjk2
YzdkNjdmMi4uMGQ2NTIxZDY5MDY4YzEzYzY5ZjhjNWE0OTlhM2JmZjI2YTg5OTA0OSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0K
QEAgLTMxLDEyICszMSwxMSBAQAogI2ltcG9ydCAiSW5zdGFuY2VNZXRob2RTd2l6emxlci5oIgog
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCi0KKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFVJS2l0L1VJRHJhZ0ludGVyYWN0
aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSURyYWdJdGVtLmg+CiAjaW1wb3J0IDxVSUtpdC9VSURy
b3BJbnRlcmFjdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmFjdGlvbi5oPgotI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2Vk
RWxlbWVudEluZm8uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFj
L0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tCmluZGV4IDEwMDVlZTQ3OGI1N2RmZmVjODdmNDUz
ZDQyMjQ0OTQ0MTNhOTNmNGQuLjgyMWQ1ZGMwMDc5MjM1NDk3ZmM0MjY5ZjdiNzA2YWQ3N2VmYzhh
NjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxh
dG9yTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxh
dG9yTWFjLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgogI2ltcG9ydCAiVGVzdERyYWdnaW5nSW5mby5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Y21hdGg+CiAjaW1wb3J0
IDx3dGYvV2Vha09iakNQdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9D
b25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCmluZGV4IDg1Y2I3MjhmZDMyZjdmNjVlYzZhMjZi
ODRlZGFmNTJkMTEwNjI2ZTguLmMzMzdiN2I2ODk5MGNmNzdiMDQ5NzBjOGFlMGMzZjhhNTBhODU5
NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFz
ZS54Y2NvbmZpZworKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcKQEAgLTUzLDcgKzUzLDcgQEAgQ0xBTkdfQU5BTFlaRVJfTE9DQUxJWkFCSUxJ
VFlfTk9OTE9DQUxJWkVEID0gWUVTOwogQ0xBTkdfV0FSTl9SQU5HRV9MT09QX0FOQUxZU0lTID0g
WUVTOwogQ0xBTkdfV0FSTl9TVVNQSUNJT1VTX01PVkUgPSBZRVM7CiBDTEFOR19XQVJOX0RFUFJF
Q0FURURfT0JKQ19JTVBMRU1FTlRBVElPTlMgPSBZRVM7Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0g
JChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9XZWJDb3JlVGVzdFN1cHBvcnQgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0Zv
cndhcmRpbmdIZWFkZXJzICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVz
dFN1cHBvcnQgJChQTEFURk9STV9IRUFERVJfU0VBUkNIX1BBVEhTKTsKK0hFQURFUl9TRUFSQ0hf
UEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUgJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL1dlYkNvcmVUZXN0U3VwcG9ydCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2Vi
S2l0VGVzdFN1cHBvcnQgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRpbmdI
ZWFkZXJzICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQg
JChQTEFURk9STV9IRUFERVJfU0VBUkNIX1BBVEhTKTsKIFBMQVRGT1JNX0hFQURFUl9TRUFSQ0hf
UEFUSFNbc2RrPWlwaG9uZSpdID0gJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3M7CiBHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKIEdDQ19QUkVQUk9DRVNT
T1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIFVfRElTQUJMRV9SRU5BTUlORz0xIFVf
U0hPV19DUExVU1BMVVNfQVBJPTA7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXggZTkyM2I4NTFhM2U5ZGQ2NGMyZDYzYTRl
MjYxNDM1NDE2ZGM2YmJkYy4uOTVhNjgxM2Q2OTQwN2UyZWViNGFkM2ViOWI3NDVjM2M5ZDg0NjVj
MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xs
ZXJDb2NvYS5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiVGVzdEludm9jYXRpb24uaCIK
ICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlRlc3RXZWJzaXRlRGF0
YVN0b3JlRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8U2VjdXJpdHkvU2VjSXRlbS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYuaD4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbSBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQppbmRleCBl
Y2EwMDZjNjg5MzRmOGY3YzNiZmUzMzMxMzc5NzUyNzYxYzI1OGYyLi5jNDI5MTJkZmEwZDY4MDgw
NzdjM2Y0ZDhkNWU3MTViNTc0ZjRlODEzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKIAorI2ltcG9y
dCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCAiV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5n
SW5mby5oIgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0zNiw2ICszNyw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKQogCiAvLyBGSVhNRTogbW92ZSB0aGVz
ZSB0byBXS1dlYlZpZXdfUHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCBiZWUwNDk3YmY1NmQy
MzYwMDZhMzgxYmExMTYxYTcwYjkzMGVmY2YzLi4wZmExNmRkNDg5Y2RkY2QwNmUzMTNjNTk0NzM3
YTc4NWY2ZmM4ZTJjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJ
U2NyaXB0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQg
IlRlc3RDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1w
b3J0ICJVSVNjcmlwdENvbnRleHQuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rl
c3RDb250cm9sbGVySU9TLm1tCmluZGV4IGFlMmE5NGExNWIwMDk5MmIxZTg5NWY5NDg3NjYyNWEx
OGMxYTQ5ZmYuLmI2MDA3NTBmYTk3Njg2ODNkZTc1MmQ1NzQ4OTExNTNmMDIxZjcxOWQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCkBAIC0z
Myw2ICszMyw3IEBACiAjaW1wb3J0ICJUZXN0SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1
bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIldLV2ViVmll
d1Rlc3RpbmcuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8
VUlLaXQvVUlLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCmluZGV4IDk5OWNhODcxZWNhMWVkYmExOGI1NThjYTIwZTg1Yjg1MWU3MTA3Y2UuLmUwNTBk
NWIzYmNhMWVjZDU0ZDM4MWVmZDIwODE0NzMwMDYwMTE5MzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTM3LDYgKzM3
LDcgQEAKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJ
LmgiCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRleHQuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3Rp
bmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQu
aD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJv
bGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxl
ck1hYy5tbQppbmRleCA2YmRlMjYxNWVlZjA4MmQyZDk3ZjU4NGViOTcxODAxOTg3NjI1M2EzLi4y
NWVkODVjZTZkZjhhMWJkYmQ5MTNhZmYyNzNlOWM1NDg1MDc4NmJlIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCkBAIC0zMCwx
MyArMzAsMTMgQEAKICNpbXBvcnQgIkV2ZW50U2VyaWFsaXplck1hYy5oIgogI2ltcG9ydCAiUGxh
dGZvcm1WaWV3SGVscGVycy5oIgogI2ltcG9ydCAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW1wb3J0
ICJTaGFyZWRFdmVudFN0cmVhbXNNYWMuaCIKLSNpbXBvcnQgIlRlc3RDb250cm9sbGVyLmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlZEV2ZW50U3RyZWFtc01h
Yy5oIgogI2ltcG9ydCAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW1wb3J0ICJUZXN0Q29udHJvbGxl
ci5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlTY3JpcHRD
b250ZXh0LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU0NvbnRleHQuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Q0YuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385307</attachid>
            <date>2019-12-10 14:51:32 -0800</date>
            <delta_ts>2019-12-10 15:08:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191210145131.patch</filename>
            <type>text/plain</type>
            <size>305435</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY3YTZhOWY1YzdkNDM2NWM1
ODYyMjg5ZWVkODBhYjdmNTlmMGU2MjIuLmI2OTg2ZmU1NTU2ZjZjY2QwYmVjOGU4M2ZiOWI1MzEw
YWI5MWU0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQwIEBACisyMDE5LTEyLTEwICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgV0tXZWJWaWV3
IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5nIHRvIG5ldyBmaWxlcywgd2l0aCB0aGVpciBvd24gaGVh
ZGVycywgYW5kIHN0b3AgZXhwb3NpbmcgdGVzdC1vbmx5IGZ1bmN0aW9ucyBhcyBTUEkuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwMjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFN0b3Ag
ZXhwb3NpbmcgV0tXZWJWaWV3IChXS1Rlc3RpbmcpIGFzIFNQSSwgYmVjYXVzZSBldmVyeW9uZSBh
ZGRlZCBTUEkgaGVyZSBieSBtaXN0YWtlLCBhbmQKKyAgICAgICAgaW50ZXJuYWwgY2xpZW50cyBr
ZXB0IHVzaW5nIHRlc3RpbmcgU1BJLgorICAgICAgICAKKyAgICAgICAgSW5zdGVhZCwgbW92ZSB0
ZXN0aW5nLW9ubHkgZnVuY3Rpb25zIHRvIGludGVybmFsIGhlYWRlcnMgdGhhdCBhcmUgbm90IHBy
ZXNlbnQgaW4gdGhlIGJ1aWx0IGZyYW1ld29yaywKKyAgICAgICAgYW5kIG1vdmUgdG8gV0tXZWJW
aWV3IChXS1ByaXZhdGUpIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IHdlYmtpdCBjbGll
bnRzIHJlbHkgb24uCisgICAgICAgIAorICAgICAgICBBZGQgV0tXZWJWaWV3VGVzdGluZy9XS1dl
YlZpZXdUZXN0aW5nTWFjL1dLV2ViVmlld1Rlc3RpbmdJT1MgZm9yIHRlc3Qtb25seSBjb2RlLgor
ICAgICAgICAKKyAgICAgICAgV0tXZWJWaWV3VGVzdGluZyogaGVhZGVycyBhcmUgY29waWVkIHRv
IGEgIldlYktpdFRlc3RTdXBwb3J0IiBkaXJlY3RvcnkgaW4gdGhlIFByb2R1Y3RzIGRpcmVjdG9y
eSwgYW5kIFdUUi9EUlQgYW5kIFRlc3RXZWJLaXRBUEkKKyAgICAgICAgZ2V0IGhlYWRlciBzZWFy
Y2ggcGF0aHMgdG8gZmluZCB0aGUgaGVhZGVycyB0aGVyZS4KKworICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dLV2ViVmlldyBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp3
aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOndpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdXNlU3lzdGVtQXBwZWFyYW5jZV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlld10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2NhbkNoYW5nZUZyYW1lTGF5b3V0Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3RyeVRvU3dpcGVXaXRoRXZlbnQ6aWdub3JpbmdQaW5uZWRTdGF0ZTpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9pZ25vcmVzTm9uV2hlZWxFdmVudHNdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9kaXNhYmxlRnJhbWVTaXplVXBkYXRlc10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9i
ZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmNdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZnVsbFNjcmVlbldpbmRvd10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VuZGVybGF5Q29s
b3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVbmRlcmxheUNvbG9yOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3aXBlVmlld3M6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NldEZyYW1lOmFuZFNjcm9sbEJ5Ol0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Rv
dGFsSGVpZ2h0T2ZCYW5uZXJzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udDpzZW5k
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udFNpemU6c2VuZGVyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRDb2xvcjpzZW5kZXI6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBpbnB1dEFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlucHV0
Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQ
b3NpdGlvbjpjb21wbGV0aW9uQmxvY2s6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVu
dFZpc2libGVSZWN0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udmVydFBvaW50RnJvbUNv
bnRlbnRzVG9WaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRQb2ludEZyb21W
aWV3VG9Db250ZW50czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRpZFN0YXJ0Rm9ybUNvbnRy
b2xJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlkRW5kRm9ybUNvbnRyb2xJ
bnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VpVGV4dENhcmV0UmVjdF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rp
b25PZmZzZXQ6d2l0aFRleHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
Y29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5z
cGVjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWFpbkZyYW1lXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaXNFZGl0YWJsZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEVkaXRh
YmxlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2V4ZWN1dGVFZGl0Q29tbWFuZDphcmd1bWVu
dDpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbmZpZ3VyYXRpb246Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21w
bGV0ZVRleHRNYW5pcHVsYXRpb246Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF90YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246XSk6CisgICAgICAgICgrW1dLV2ViVmlldyBf
c3RyaW5nRm9yRmluZF0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX3NldFN0cmluZ0ZvckZpbmQ6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3RlT2JqZWN0UmVnaXN0cnldKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9vYnNlcnZl
ZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlzdG9y
eURlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SGlzdG9yeURlbGVnYXRlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFn
ZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfdG9nZ2xlUGljdHVyZUluUGljdHVyZV0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2Nsb3NlQWxsTWVkaWFQcmVzZW50YXRpb25zXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc3RvcE1lZGlhQ2FwdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N0b3BBbGxN
ZWRpYVBsYXliYWNrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3VzcGVuZEFsbE1lZGlhUGxh
eWJhY2tdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXN1bWVBbGxNZWRpYVBsYXliYWNrXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfdW5yZWFjaGFibGVVUkxdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9tYWluRnJhbWVVUkxdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkQWx0ZXJu
YXRlSFRNTFN0cmluZzpiYXNlVVJMOmZvclVucmVhY2hhYmxlVVJMOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2xvYWREYXRhOk1JTUVUeXBlOmNoYXJhY3RlckVuY29kaW5nTmFtZTpiYXNlVVJM
OnVzZXJEYXRhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2xvYWRSZXF1ZXN0OnNob3VsZE9w
ZW5FeHRlcm5hbFVSTHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2VydGlmaWNhdGVDaGFp
bl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbW1pdHRlZFVSTF0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX01JTUVUeXBlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdXNlckFnZW50XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2N1c3RvbVVzZXJBZ2VudF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3NldEN1c3RvbVVzZXJBZ2VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRV
c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJQ
cm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Byb3Zpc2lvbmFsV2Vi
UHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9raWxsV2ViQ29udGVu
dFByb2Nlc3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2Vyc10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbG9hZEV4cGlyZWRPbmx5XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZV0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3Q29vcmRpbmF0ZXM6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29udmVydFJlY3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZvY3VzVGV4dElucHV0Q29u
dGV4dDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90YWtlUERG
U25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9zZXRTaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlczpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGVdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdG
b3J3YXJkOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NuYXBz
aG90TGF5ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJkTGlzdEl0ZW06XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZGF0YURldGVjdGlvblJlc3VsdHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
Y2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rpb25Db250ZW50Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRBc3Npc3RhbnRJdGVtXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2Vzc2lvblN0YXRlRGF0YV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Np
b25TdGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Npb25TdGF0ZVdpdGhGaWx0ZXI6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVTZXNzaW9uU3RhdGU6YW5kTmF2aWdhdGU6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xvc2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOmNvbnRlbnRUeXBlOmRhdGE6b3B0aW9uczpj
b21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc2VydEF0dGFjaG1lbnRXaXRo
RmlsZVdyYXBwZXI6Y29udGVudFR5cGU6b3B0aW9uczpjb21wbGV0aW9uOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Y29udGVudFR5cGU6
Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hdHRhY2htZW50Rm9ySWRlbnRp
ZmllcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0ZURldmljZU9yaWVudGF0aW9u
Q2hhbmdlV2l0aEFscGhhOmJldGE6Z2FtbWE6XSk6CisgICAgICAgICgrW1dLV2ViVmlldyBfaGFu
ZGxlc1NhZmVCcm93c2luZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3dTYWZlQnJvd3Np
bmdXYXJuaW5nV2l0aFRpdGxlOndhcm5pbmc6ZGV0YWlsczpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6dGl0
bGU6d2FybmluZzpkZXRhaWxzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoK1tXS1dl
YlZpZXcgX2NvbmZpcm1NYWx3YXJlU2VudGluZWxdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF92
aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzSklU
RW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9ldmFsdWF0ZUphdmFTY3JpcHRXaXRo
b3V0VXNlckdlc3R1cmU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93
c1JlbW90ZUluc3BlY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbGxvd3NSZW1v
dGVJbnNwZWN0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW90ZUluc3BlY3Rpb25O
YW1lT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRSZW1vdGVJbnNwZWN0aW9u
TmFtZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZHNWaXNpdGVkTGlua3Nd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBZGRzVmlzaXRlZExpbmtzOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3NdKToKKyAgICAgICAgKGxh
eW91dE1pbGVzdG9uZXMpOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9ic2VydmVkUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZ2V0TWFpblJlc291
cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9n
ZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2dldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nV2l0aENvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dldEFwcGxpY2F0aW9uTWFu
aWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFn
aW5hdGlvbk1vZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRQYWdpbmF0aW9uTW9kZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlTGVuZ3RoXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0UGFnZUxlbmd0aDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nYXBCZXR3ZWVu
UGFnZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRHYXBCZXR3ZWVuUGFnZXM6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZF0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcGFnZUNvdW50XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3VwcG9y
dHNUZXh0Wm9vbV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RleHRab29tRmFjdG9yXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0VGV4dFpvb21GYWN0b3I6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBzZXRQYWdlWm9vbTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBhZ2Vab29tXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVpvb21GYWN0b3JdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRQYWdlWm9vbUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWFn
bm9zdGljTG9nZ2luZ0RlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlhZ25v
c3RpY0xvZ2dpbmdEZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9maW5kRGVsZWdh
dGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGaW5kRGVsZWdhdGU6XSk6CisgICAgICAg
ICh0b0ZpbmRPcHRpb25zKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb3VudFN0cmluZ01hdGNo
ZXM6b3B0aW9uczptYXhDb3VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9maW5kU3RyaW5n
Om9wdGlvbnM6bWF4Q291bnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZUZpbmRVSV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnB1dERlbGVnYXRlXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0SW5wdXREZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rp
c3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2lzRGlzcGxheWluZ1N0YW5kYWxvbmVNZWRpYURvY3VtZW50XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfaXNQbGF5aW5nQXVkaW9dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc1Nob3dpbmdO
YXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbGF5b3V0
TW9kZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldExheW91dE1vZGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZml4ZWRMYXlvdXRTaXplXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0Rml4ZWRMYXlvdXRTaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEJhY2tncm91
bmRFeHRlbmRzQmV5b25kUGFnZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iYWNrZ3JvdW5k
RXh0ZW5kc0JleW9uZFBhZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF92aWV3U2NhbGVdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRWaWV3U2NhbGU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0TWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX21pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aF0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsUGVyZm9ybWFuY2VEYXRhXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYlByb2Nlc3NJc1Jlc3BvbnNpdmVdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZnVsbHNjcmVlbkRlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNJ
bkZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9tZWRpYUNhcHR1cmVTdGF0ZV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfbWVkaWFDYXB0dXJlRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3NldFBhZ2VNdXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVEYXRh
RGV0ZWN0ZWRMaW5rczpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZGV0ZWN0RGF0YVdpdGhUeXBlczpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9taW5pbXVtTGF5b3V0U2l6ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9vYnNjdXJlZEluc2V0c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9ic2N1cmVkSW5z
ZXRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVk
QnlTYWZlQXJlYV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9ic2N1cmVkSW5zZXRFZGdl
c0FmZmVjdGVkQnlTYWZlQXJlYTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91bm9ic2N1cmVk
U2FmZUFyZWFJbnNldHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVbm9ic2N1cmVkU2Fm
ZUFyZWFJbnNldHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2FmZUFyZWFTaG91bGRBZmZl
Y3RPYnNjdXJlZEluc2V0c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NsZWFySW50ZXJmYWNl
T3JpZW50YXRpb25PdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWF4aW11bVVu
b2JzY3VyZWRTaXplT3ZlcnJpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWxsb3dz
Vmlld3BvcnRTaHJpbmtUb0ZpdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbGxvd3NWaWV3
cG9ydFNocmlua1RvRml0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVnaW5JbnRlcmFjdGl2
ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kSW50ZXJh
Y3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hpZGVD
b250ZW50VW50aWxOZXh0VXBkYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVnaW5Bbmlt
YXRlZFJlc2l6ZVdpdGhVcGRhdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuZEFuaW1h
dGVkUmVzaXplXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250
ZW50V2l0aFVwZGF0ZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3ZlcmxhaWRBY2Nl
c3NvcnlWaWV3c0luc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NuYXBzaG90UmVjdDpp
bnRvSW1hZ2VPZldpZHRoOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTptYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhck92
ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc10pOgorICAgICAgICAodmlld3BvcnRBcmd1bWVudHNGcm9t
RGljdGlvbmFyeSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhB
cmd1bWVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdmlld0ZvckZpbmRVSV0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2lzRGlzcGxheWluZ1BERl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2RhdGFGb3JEaXNwbGF5ZWRQREZdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdWdnZXN0
ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYlZp
ZXdQcmludEZvcm1hdHRlcl0pOgorICAgICAgICAodG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kcmF3c0JhY2tncm91bmRdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXREcmF3c0JhY2tncm91bmQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
YmFja2dyb3VuZENvbG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QmFja2dyb3VuZENv
bG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX292ZXJsYXlTY3JvbGxiYXJTdHlsZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3dpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWRdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgc2hhcmVTaGVldERpZERpc21pc3M6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9vdmVycmlkZURldmljZVNjYWxlRmFjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
VG9wQ29udGVudEluc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNl
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Bpbm5lZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcnViYmVyQmFuZGluZ0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRS
dWJiZXJCYW5kaW5nRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDp3aXRoVHlwZTp1c2VyRGF0
YTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRl
bnRJbnNldHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYXV0b21hdGljYWxseUFkanVzdHND
b250ZW50SW5zZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWluaW11bUxheW91dFdpZHRo
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWluaW11bUxheW91dFdpZHRoOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRv
TGF5b3V0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkRXhwYW5kQ29udGVudFRv
Vmlld0hlaWdodEZvckF1dG9MYXlvdXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWx3YXlz
U2hvd3NIb3Jpem9udGFsU2Nyb2xsZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdh
eXNTaG93c0hvcml6b250YWxTY3JvbGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcHJpbnRP
cGVyYXRpb25XaXRoUHJpbnRJbmZvOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaW50T3Bl
cmF0aW9uV2l0aFByaW50SW5mbzpmb3JGcmFtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNl
dFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
d2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jl
bW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9w
cmVwYXJlRm9yTW92ZVRvV2luZG93OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldFRodW1ibmFpbFZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdGh1
bWJuYWlsVmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElnbm9yZXNBbGxFdmVudHM6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc0FsbEV2ZW50c10pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBrZXlib2FyZEFjY2Vzc29yeUJhck5l
eHRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFy
UHJldmlvdXNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGFwcGx5QXV0b2NvcnJl
Y3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgZGlzbWlzc0Zvcm1BY2Nlc3NvcnlWaWV3XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0ZpbGVQaWNrZXJdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjptaW51dGU6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZV0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ10p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZm9ybUlucHV0TGFiZWxdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRTaG93Q29udGV4dE1lbnVdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWREaXNtaXNzQ29udGV4dE1lbnVdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnB1dFZpZXdCb3VuZHNdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c10pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Njcm9sbGluZ1RyZWVBc1RleHRdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9zdGFibGVTdGF0ZU92ZXJyaWRlXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNo
b3RGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RD
b250cm9sbGVkRWxlbWVudElEXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFu
ZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc10pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVzXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaW5zZXJ0VGV4dDpyZXBsYWNlbWVudFJh
bmdlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbmRpZGF0ZVJlY3RdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBl
YXJhbmNlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SGVhZGVyQmFubmVy
SGVpZ2h0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEZvb3RlckJhbm5l
ckhlaWdodDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUHJvY2Vz
c2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9hY3RpdmVNZW51XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVz
dEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRQYWdlU2NhbGU6d2l0aE9yaWdpbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9wYWdlU2NhbGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc2FibGVCYWNrRm9yd2FyZFNu
YXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kcmFnQ2FyZXRSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2lt
dWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NpbXVsYXRlVGV4dEVudGVyZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFpdERpZENoYW5nZV0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZ10pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZ10pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5n
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNoYXJlU2hlZXRDb21wbGV0
ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNJbnNwZWN0b3JGcm9udGVuZF0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3Rp
bmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBc3NlcnRpb25TdGF0ZUZv
clRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFzU2VydmljZVdv
cmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZ10p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVz
dF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RyaWdnZXJTeXN0ZW1QcmV2aWV3
QWN0aW9uT25FbGVtZW50OmRvY3VtZW50OnBhZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3VGVzdGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW06IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldFBhZ2VTY2FsZTp3aXRoT3JpZ2luOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VT
Y2FsZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmVO
b3dQbGF5aW5nU2Vzc2lvbkluZm86XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5n
VXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNj
cm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplRm9yVGVzdGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxl
QmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmddKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZ10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGVueU5leHRVc2Vy
TWVkaWFSZXF1ZXN0XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVz
dGluZ0lPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdU
ZXN0aW5nSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNz
b3J5QmFyTmV4dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5Ym9hcmRBY2Nlc3NvcnlCYXJQ
cmV2aW91c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0
cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkaXNt
aXNzRm9ybUFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNtaXNzRmls
ZVBpY2tlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0VGltZVBpY2tlclZhbHVlVG9Ib3Vy
Om1pbnV0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNr
ZXJSb3c6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBmb3JtSW5wdXRMYWJlbF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2RpZFNob3dDb250ZXh0TWVudV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZERpc21pc3ND
b250ZXh0TWVudV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lucHV0Vmlld0JvdW5kc10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3VpVGV4dFNlbGVjdGlvblJlY3RzXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2Nyb2xsaW5nVHJlZUFzVGV4dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3N0YWJsZVN0YXRlT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9wZXJ0aWVz
T2ZMYXllcldpdGhJRDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUmVzZXR0aW5n
U2luZ2xlVGFwR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUmVjZWl2
aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
ZHJhZ0NhcmV0UmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNz
QWN0aW9uQXRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0ZVRleHRF
bnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2R5bmFtaWNVc2VySW50ZXJmYWNlVHJh
aXREaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90cmlnZ2VyU3lzdGVtUHJldmll
d0FjdGlvbk9uRWxlbWVudDpkb2N1bWVudDpwYWdlOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tOiBBZGRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZV0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXNdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2luc2VydFRleHQ6cmVwbGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jYW5kaWRhdGVSZWN0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkQ2hhbmdlRWZm
ZWN0aXZlQXBwZWFyYW5jZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhlYWRlckJhbm5l
ckhlaWdodDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91
c2VFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlTWVudV0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Z1bGxz
Y3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTEyLTA5ICBUcnVpdHQgU2F2ZWxsICA8dHNhdmVs
bEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1MzI5OS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAppbmRleCA5ZDI0MmUyYTA2NGRmZjcyZjQ5YzQyZjU0ZDk3ODEz
Y2FkOTRkOTJjLi4xYjI1YTdiOWQwOWVhMzY1YjcyNGQwNWE5N2RiZmM2MzBmZGFjNzBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zMjIsMTEgKzMyMiwxNSBAQCBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVXNlclNjcmlwdC5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVj
b3JkLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
VGVzdGluZy5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1t
CiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2luZG93RmVhdHVyZXMubW0KIAorVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJW
aWV3VGVzdGluZ0lPUy5tbQorCiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KK1VJUHJvY2Vz
cy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KIAogVUlQcm9jZXNzL0F1dGhlbnRpY2F0
aW9uL2NvY29hL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbQogVUlQcm9jZXNz
L0F1dGhlbnRpY2F0aW9uL2NvY29hL1NlY0tleVByb3h5U3RvcmUubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCmlu
ZGV4IDUzNjJiMThlODUzZmE1NDgzMTY5ZWY0ZTIyMWVlMTlmMjhjNDhlYjIuLjI1OTA3OGZmNWMx
NDFkNGMwZGZlMmE4MjZhYTQ4OGEyYjlhNWRmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaApAQCAtMzksNiAr
MzksNyBAQAogQGNsYXNzIF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvOwogQGNsYXNzIF9XS0VsZW1l
bnRBY3Rpb247CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CitAY2xhc3MgX1dLSW5zcGVjdG9yOwog
CiAjaWYgVEFSR0VUX09TX0lPUwogQGNsYXNzIFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uOwpA
QCAtMTgyLDYgKzE4Myw3IEBAIHN0cnVjdCBVSUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbjooaWQpaW50ZXJhY3Rpb24gc2Vz
c2lvbjooaWQpc2Vzc2lvbiBkaWRFbmRXaXRoT3BlcmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6KEJPT0wpaGFu
ZGxlZCBmb3JTZXNzaW9uOihpZClzZXNzaW9uIGl0ZW1Qcm92aWRlcnM6KE5TQXJyYXkgKilpdGVt
UHJvdmlkZXJzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKE5TVUludGVnZXIpX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0ZURhdGFJbnRlcmFjdGlvbk9wZXJh
dGlvblRvT3BlcmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlvbiBmb3JTZXNzaW9uOihpZClzZXNz
aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKKwogI2lmIFRBUkdFVF9PU19JT1MKIC0g
KFVJRHJvcFByb3Bvc2FsICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0
ZURyb3BQcm9wb3NhbFRvUHJvcG9zYWw6KFVJRHJvcFByb3Bvc2FsICopcHJvcG9zYWwgZm9yU2Vz
c2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIu
MikpOwogLSAoVUlUYXJnZXRlZERyYWdQcmV2aWV3ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgcHJldmlld0ZvckxpZnRpbmdJdGVtOihVSURyYWdJdGVtICopaXRlbSBzZXNzaW9uOihp
ZCA8VUlEcmFnU2Vzc2lvbj4pc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CkBA
IC0xOTAsNiArMTkyLDcgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIC0gKE5TSW50ZWdlcilfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhT3duZXJGb3JEcm9wU2Vzc2lvbjooaWQgPFVJ
RHJvcFNlc3Npb24+KXNlc3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAoTlNJ
bnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFPd25lckZvckRyYWdTZXNz
aW9uOihpZCA8VUlEcmFnU2Vzc2lvbj4pc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CiAjZW5kaWYKKwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRD
aGFuZ2VTYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzOihCT09MKXNhZmVBcmVhU2hv
dWxkQWZmZWN0T2JzY3VyZWRJbnNldHMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRQcmVzZW50Rm9jdXNlZEVsZW1l
bnRWaWV3Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgV0tfQVBJX0FW
QUlMQUJMRShpb3MoMTIuMCkpOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBkaWREaXNtaXNzRm9jdXNlZEVsZW1lbnRWaWV3Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxl
ciAqKWNvbnRyb2xsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwpAQCAtMjA0LDYgKzIw
Nyw3IEBAIHN0cnVjdCBVSUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IHNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1
ZXN0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKXJlcXVlc3RpbmdGcmFtZSBkZWNpc2lvbkhhbmRs
ZXI6KHZvaWQgKF4pKEJPT0wpKWRlY2lzaW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygx
My4wKSk7CiAKICNlbHNlIC8vICFUQVJHRVRfT1NfSVBIT05FCisKIC0gKHZvaWQpX3ByZXBhcmVG
b3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogLSAodm9pZClfY2FuY2VsSW1tZWRp
YXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIC0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uRm9yV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKQEAgLTIzNyw2ICsyNDEsNyBAQCBzdHJ1Y3QgVUlFZGdlSW5z
ZXRzOwogICAgIEBwYXJhbSBpbnNwZWN0b3IgVGhlIFdlYiBJbnNwZWN0b3IgaW5zdGFuY2UgYXR0
YWNoZWQgdG8gdGhpcyBXS1dlYlZpZXcuCiAqLwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBkaWRBdHRhY2hJbnNwZWN0b3I6KF9XS0luc3BlY3RvciAqKWluc3BlY3RvciBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpKTsKKwogI2VuZGlmIC8vICFUQVJHRVRf
T1NfSVBIT05FCiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCmluZGV4IDM1MDk3OTlkY2VlMGE5MzgwZjMwZDJlZmVhNWMyMzcxODIxODE1
ZjUuLmRkNzZkODY3ZDQ5MGJhNjM5YWMyMjUxNGE0MThlZTA2ZDkyMTIxMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtNTIsNyArNTIs
NiBAQAogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUu
aCIKICNpbXBvcnQgIlVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIlVzZXJNZWRpYVByb2Nlc3NNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgiCiAjaW1wb3J0ICJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgpAQCAt
ODAsNiArNzksNyBAQAogI2ltcG9ydCAiV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJX
S1dlYlZpZXdDb250ZW50UHJvdmlkZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdJT1Mu
aCIKICNpbXBvcnQgIldLV2VicGFnZVByZWZlcmVuY2VzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldL
V2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3Qu
aCIKQEAgLTEyNCw3ICsxMjQsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU3RyaW5nVXRpbGl0aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1ZhbGlkYXRpb25C
dWJibGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvV3JpdGluZ01vZGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS0RyYWdEZXN0aW5hdGlv
bkFjdGlvbi5oPgpAQCAtMjgyLDI5ICsyODEsMTggQEAgQGltcGxlbWVudGF0aW9uIFdLV2ViVmll
dyB7CiAKICAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLSW5wdXREZWxlZ2F0ZT4+IF9pbnB1dERlbGVn
YXRlOwogCi0gICAgT3B0aW9uYWw8Qk9PTD4gX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRp
YXRlQ29tcGxldGlvbkZvclRlc3Rpbmc7CiAgICAgUmV0YWluUHRyPFdLU2FmZUJyb3dzaW5nV2Fy
bmluZz4gX3NhZmVCcm93c2luZ1dhcm5pbmc7CiAKICAgICBCT09MIF91c2VQbGF0Zm9ybUZpbmRV
STsKIAotICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+PiBf
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOwotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBSZXRhaW5QdHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3Ry
eTsKIAotICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwotICAgIFJldGFp
blB0cjxXS0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCi0gICAgUmV0YWluUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI+IF9mdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcjsKLSNlbmRpZgotCiAgICAgT3B0aW9uYWw8Q0dTaXplPiBf
dmlld0xheW91dFNpemVPdmVycmlkZTsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFNpemU+
IF9sYXN0U2VudFZpZXdMYXlvdXRTaXplOwogICAgIE9wdGlvbmFsPENHU2l6ZT4gX21heGltdW1V
bm9ic2N1cmVkU2l6ZU92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0U2l6ZT4g
X2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplOwogCi0gICAgQ0dSZWN0IF9pbnB1dFZpZXdC
b3VuZHM7CiAgICAgQ0dGbG9hdCBfdmlld3BvcnRNZXRhVGFnV2lkdGg7CiAgICAgQk9PTCBfdmll
d3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdDsKICAgICBCT09MIF92aWV3cG9ydE1ldGFUYWdD
YW1lRnJvbUltYWdlRG9jdW1lbnQ7CkBAIC0zNDksNyArMzM3LDYgQEAgQGltcGxlbWVudGF0aW9u
IFdLV2ViVmlldyB7CiAgICAgT3B0aW9uYWw8V2ViS2l0OjpUcmFuc2FjdGlvbklEPiBfZmlyc3RU
cmFuc2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9yZTsKICAgICBkb3VibGUgX3NjYWxlVG9SZXN0b3Jl
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyPiBf
Z2VzdHVyZUNvbnRyb2xsZXI7CiAgICAgQk9PTCBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9u
R2VzdHVyZXM7CiAKICAgICBSZXRhaW5QdHI8VUlWaWV3IDxXS1dlYlZpZXdDb250ZW50UHJvdmlk
ZXI+PiBfY3VzdG9tQ29udGVudFZpZXc7CkBAIC0zODEsNyArMzY4LDYgQEAgQGltcGxlbWVudGF0
aW9uIFdLV2ViVmlldyB7CiAKICAgICBCT09MIF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0
ZTsKICAgICBCT09MIF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVTY2hlZHVsZWRGcm9tU2Nyb2xs
Vmlld0luU3RhYmxlU3RhdGU7Ci0gICAgVmVjdG9yPEJsb2NrUHRyPHZvaWQgKCk+PiBfdmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzOwogCiAgICAgX1dLRHJhZ0ludGVyYWN0aW9uUG9s
aWN5IF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3k7CiAKQEAgLTM5Nyw3ICszODMsNiBAQCBAaW1wbGVt
ZW50YXRpb24gV0tXZWJWaWV3IHsKICAgICBCT09MIF9oYXNFbnRlcmVkRGVhbGxvYzsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpXZWJWaWV3
SW1wbD4gX2ltcGw7CiAgICAgUmV0YWluUHRyPFdLVGV4dEZpbmRlckNsaWVudD4gX3RleHRGaW5k
ZXJDbGllbnQ7CiAjZW5kaWYKICAgICBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVzIF9zZWxlY3Rpb25B
dHRyaWJ1dGVzOwpAQCAtMTQzMCw2ICsxNDE1LDQxIEBAIC0gKHZvaWQpX2NsZWFyU2FmZUJyb3dz
aW5nV2FybmluZ0lmRm9yTWFpbkZyYW1lTmF2aWdhdGlvbgogICAgICAgICBbc2VsZiBfY2xlYXJT
YWZlQnJvd3NpbmdXYXJuaW5nXTsKIH0KIAorLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFBy
ZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRp
bmdGb3JQYWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0
aW5nRm9yQW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6
ZQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRh
cmRDb250ZW50Vmlld10pIHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBpZiAod2l0aG91dFdhaXRpbmdGb3JQYWludGluZykKKyAgICAgICAgX3BhZ2UtPnNl
dFNob3VsZFNraXBXYWl0aW5nRm9yUGFpbnRBZnRlck5leHRWaWV3RGlkTW92ZVRvV2luZG93KHRy
dWUpOworCisgICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIodXBkYXRlQmxv
Y2spOworCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gc3Ryb25nU2VsZiA9IHNlbGY7CisgICAg
X3BhZ2UtPmNhbGxBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUoW3VwZGF0ZUJsb2NrQ29weSwg
d2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSwgc3Ryb25nU2VsZl0oV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIGlmICghdXBkYXRlQmxvY2tDb3B5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAg
aWYgKCF3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplICYmIHN0cm9uZ1NlbGYtPl9keW5h
bWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9k
ZTo6Tm90UmVzaXppbmcpIHsKKyAgICAgICAgICAgIHN0cm9uZ1NlbGYtPl9jYWxsYmFja3NEZWZl
cnJlZER1cmluZ1Jlc2l6ZS5hcHBlbmQoW3VwZGF0ZUJsb2NrQ29weV0geworICAgICAgICAgICAg
ICAgIHVwZGF0ZUJsb2NrQ29weSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUpOworI2VuZGlmCisKKyAgICAgICAgdXBk
YXRlQmxvY2tDb3B5KCk7CisgICAgfSk7Cit9CisKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQogCiAtICh2b2lkKV9kaWRJbnNlcnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0
dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UKQEAgLTE0NTksMTEgKzE0Nzks
NiBAQCAtICh2b2lkKV9kaWRJbnZhbGlkYXRlRGF0YUZvckF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNo
bWVudCYpYXR0YWNobWVudAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotLSAoQk9PTClf
Y29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyCi17Ci0gICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRD
b250ZW50Vmlldy5pc0ZpcnN0UmVzcG9uZGVyOwotfQotCiAtIChCT09MKV9zaG91bGRBdm9pZFJl
c2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0NoYW5nZQogewogICAgIHJldHVybiBbX2NvbnRlbnRW
aWV3IF9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0NoYW5nZV07CkBAIC0z
Njc1LDYgKzM2OTAsMTggQEAgLSAodm9pZClfd2ViX2dyYW50RE9NUGFzdGVBY2Nlc3MKICAgICBf
aW1wbC0+aGFuZGxlRE9NUGFzdGVSZXF1ZXN0V2l0aFJlc3VsdChXZWJDb3JlOjpET01QYXN0ZUFj
Y2Vzc1Jlc3BvbnNlOjpHcmFudGVkRm9yR2VzdHVyZSk7CiB9CiAKKy0gKHZvaWQpX3ByZXBhcmVG
b3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfY2FuY2VsSW1tZWRp
YXRlQWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uCit7Cit9CisKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JF
R0lOCiAtICh2b2lkKXJlbmV3R1N0YXRlCiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKQEAgLTQ4MzAsMjMwNSArNDg1NywxOTc4IEBAIC0gKHZvaWQpX2NoYW5nZUxpc3RUeXBl
OihpZClzZW5kZXIKICAgICBfcGFnZS0+Y2hhbmdlTGlzdFR5cGUoKTsKIH0KIAotI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLUZPUl9FQUNIX1BS
SVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklF
VykKLQotLSAodm9pZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRlcgor
LSAoQk9PTClfdXNlU3lzdGVtQXBwZWFyYW5jZQogewotICAgIGlmIChzZWxmLnVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3KQotICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXRGb250Rm9yV2ViVmlldzpm
b250IHNlbmRlcjpzZW5kZXJdOworICAgIHJldHVybiBfaW1wbC0+dXNlU3lzdGVtQXBwZWFyYW5j
ZSgpOwogfQogCi0tICh2b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250U2l6ZSBzZW5kZXI6
KGlkKXNlbmRlcgorLSAodm9pZClfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTooQk9PTCl1c2VTeXN0
ZW1BcHBlYXJhbmNlCiB7Ci0gICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCi0g
ICAgICAgIFtfY29udGVudFZpZXcgX3NldEZvbnRTaXplRm9yV2ViVmlldzpmb250U2l6ZSBzZW5k
ZXI6c2VuZGVyXTsKKyAgICBfaW1wbC0+c2V0VXNlU3lzdGVtQXBwZWFyYW5jZSh1c2VTeXN0ZW1B
cHBlYXJhbmNlKTsKIH0KIAotLSAodm9pZClfc2V0VGV4dENvbG9yOihVSUNvbG9yICopY29sb3Ig
c2VuZGVyOihpZClzZW5kZXIKKy0gKFdLUGFnZVJlZilfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dL
V2ViVmlldwogewotICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQotICAgICAg
ICBbX2NvbnRlbnRWaWV3IF9zZXRUZXh0Q29sb3JGb3JXZWJWaWV3OmNvbG9yIHNlbmRlcjpzZW5k
ZXJdOworICAgIHJldHVybiB0b0FQSShfcGFnZS5nZXQoKSk7CiB9CiAKLS0gKFVJVmlldyAqKWlu
cHV0QWNjZXNzb3J5VmlldworLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1l
SGFuZGxlICopZnJhbWVIYW5kbGUKIHsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dEFj
Y2Vzc29yeVZpZXdGb3JXZWJWaWV3XTsKKyAgICBpZiAoYXV0byogd2ViRnJhbWVQcm94eSA9IF9w
YWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZy
YW1lSGFuZGxlLl9mcmFtZUlEKSkpCisgICAgICAgIHJldHVybiBfaW1wbC0+Y2FuQ2hhbmdlRnJh
bWVMYXlvdXQoKndlYkZyYW1lUHJveHkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotLSAoVUlW
aWV3ICopaW5wdXRWaWV3CistIChCT09MKV90cnlUb1N3aXBlV2l0aEV2ZW50OihOU0V2ZW50ICop
ZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bpbm5lZFN0YXRlCiB7Ci0g
ICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRWaWV3Rm9yV2ViVmlld107CisgICAgcmV0dXJu
IF9pbXBsLT50cnlUb1N3aXBlV2l0aEV2ZW50KGV2ZW50LCBpZ25vcmluZ1Bpbm5lZFN0YXRlKTsK
IH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS0gKEJPT0wpX2lzRWRpdGFi
bGUKKy0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cwogewotICAgIHJldHVybiBfcGFnZSAm
JiBfcGFnZS0+aXNFZGl0YWJsZSgpOworICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc05vbldoZWVs
RXZlbnRzKCk7CiB9CiAKLS0gKHZvaWQpX3NldEVkaXRhYmxlOihCT09MKWVkaXRhYmxlCistICh2
b2lkKV9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6KEJPT0wpaWdub3Jlc05vbldoZWVsRXZlbnRz
CiB7Ci0gICAgYm9vbCB3YXNFZGl0YWJsZSA9IF9wYWdlLT5pc0VkaXRhYmxlKCk7Ci0gICAgX3Bh
Z2UtPnNldEVkaXRhYmxlKGVkaXRhYmxlKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGVk
aXRhYmxlKQotICAgICAgICBfaW1wbC0+ZGlkQmVjb21lRWRpdGFibGUoKTsKLSNlbmRpZgotCi0g
ICAgaWYgKHdhc0VkaXRhYmxlID09IGVkaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIFtfY29udGVudFZpZXcgX2RpZENoYW5nZVdlYlZpZXdF
ZGl0YWJpbGl0eV07Ci0jZW5kaWYKKyAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldoZWVsRXZlbnRz
KGlnbm9yZXNOb25XaGVlbEV2ZW50cyk7CiB9CiAKLS0gKHZvaWQpX3Rha2VGaW5kU3RyaW5nRnJv
bVNlbGVjdGlvbjooaWQpc2VuZGVyCistIChCT09MKV9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xz
TWFuYWdlcgogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbc2VsZiB0YWtlRmluZFN0cmluZ0Zy
b21TZWxlY3Rpb246c2VuZGVyXTsKLSNlbHNlCi0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFu
ZCgiVGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uIl9zKTsKLSNlbmRpZgorICAgIHJldHVybiBf
cGFnZSAmJiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKIH0KIAot
KyAoTlNTdHJpbmcgKilfc3RyaW5nRm9yRmluZAorLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxh
dGl2ZUNoaWxkV2luZG93cwogewotICAgIHJldHVybiBXZWJLaXQ6OnN0cmluZ0ZvckZpbmQoKTsK
KyAgICBfaW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c0Zyb21WaWV3T25s
eSgpOwogfQogCi0rICh2b2lkKV9zZXRTdHJpbmdGb3JGaW5kOihOU1N0cmluZyAqKWZpbmRTdHJp
bmcKKy0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQg
KilldmVudAogewotICAgIFdlYktpdDo6dXBkYXRlU3RyaW5nRm9yRmluZChmaW5kU3RyaW5nKTsK
KyAgICBfaW1wbC0+Z2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZUZyb21WaWV3T25s
eShldmVudCk7CiB9CiAKLS0gKF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICopX3JlbW90ZU9iamVj
dFJlZ2lzdHJ5CistICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRlcwogewotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICByZXR1cm4gX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCk7Ci0jZWxz
ZQotICAgIGlmICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KSB7Ci0gICAgICAgIF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeSA9IGFkb3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2lu
aXRXaXRoV2ViUGFnZVByb3h5OipfcGFnZV0pOwotICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnBy
b2Nlc3NQb29sKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdp
c3RyeTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBfcGFnZS0+aWRlbnRpZmllcigpLCBbX3JlbW90
ZU9iamVjdFJlZ2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIF9yZW1vdGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKLSNlbmRpZgorICAgIF9pbXBsLT5kaXNh
YmxlRnJhbWVTaXplVXBkYXRlcygpOwogfQogCi0tIChXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAq
KV9oYW5kbGUKKy0gKHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKIHsKLSAgICByZXR1cm4g
W1tbV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgYWxsb2NdIF9pbml0V2l0aFBhZ2VQcm94eToqX3Bh
Z2VdIGF1dG9yZWxlYXNlXTsKKyAgICBfaW1wbC0+ZW5hYmxlRnJhbWVTaXplVXBkYXRlcygpOwog
fQogCi0tIChfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9n
cmVzc0V2ZW50cworLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzCiB7
Ci0gICAgcmV0dXJuIF9vYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOworICAgIF9pbXBs
LT5iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKIH0KIAotLSAoaWQgPFdLSGlz
dG9yeURlbGVnYXRlUHJpdmF0ZT4pX2hpc3RvcnlEZWxlZ2F0ZQorLSAodm9pZClfZW5kRGVmZXJy
aW5nVmlld0luV2luZG93Q2hhbmdlcwogewotICAgIHJldHVybiBfbmF2aWdhdGlvblN0YXRlLT5o
aXN0b3J5RGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOworICAgIF9pbXBsLT5lbmREZWZlcnJpbmdW
aWV3SW5XaW5kb3dDaGFuZ2VzKCk7CiB9CiAKLS0gKHZvaWQpX3NldEhpc3RvcnlEZWxlZ2F0ZToo
aWQgPFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZT4paGlzdG9yeURlbGVnYXRlCistICh2b2lkKV9l
bmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYwogewotICAgIF9wYWdlLT5zZXRIaXN0
b3J5Q2xpZW50KF9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUhpc3RvcnlDbGllbnQoKSk7Ci0gICAg
X25hdmlnYXRpb25TdGF0ZS0+c2V0SGlzdG9yeURlbGVnYXRlKGhpc3RvcnlEZWxlZ2F0ZSk7Cisg
ICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jKCk7CiB9CiAKLS0g
KHZvaWQpX3VwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFnZXIKKy0gKE5TVmlldyAqKV9m
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3CiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBfaW1wbC0+dXBkYXRlTWVkaWFQ
bGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotI2VuZGlmCisgICAgcmV0dXJuIF9pbXBsLT5mdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7CiB9CiAKLS0gKEJPT0wpX2NhblRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUKKy0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKIHsKLSNpZiBIQVZFKFRP
VUNIX0JBUikKLSAgICByZXR1cm4gX2ltcGwtPmNhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsK
LSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCisgICAgcmV0dXJuIF9pbXBsLT5mdWxsU2Ny
ZWVuV2luZG93KCk7CiB9CiAKLS0gKEJPT0wpX2lzUGljdHVyZUluUGljdHVyZUFjdGl2ZQorLSAo
TlNDb2xvciAqKV91bmRlcmxheUNvbG9yCiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICByZXR1cm4gX2ltcGwtPmlzUGlj
dHVyZUluUGljdHVyZUFjdGl2ZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYKKyAg
ICByZXR1cm4gX2ltcGwtPnVuZGVybGF5Q29sb3IoKTsKIH0KIAotLSAodm9pZClfdG9nZ2xlUGlj
dHVyZUluUGljdHVyZQorLSAodm9pZClfc2V0VW5kZXJsYXlDb2xvcjooTlNDb2xvciAqKXVuZGVy
bGF5Q29sb3IKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQotICAgIF9pbXBsLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7Ci0j
ZW5kaWYKKyAgICBfaW1wbC0+c2V0VW5kZXJsYXlDb2xvcih1bmRlcmxheUNvbG9yKTsKIH0KIAot
LSAodm9pZClfY2xvc2VBbGxNZWRpYVByZXNlbnRhdGlvbnMKKy0gKHZvaWQpX3NldEN1c3RvbVN3
aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCiB7Ci0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQotICAgIGlmIChhdXRvIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBfcGFnZS0+
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpKSB7Ci0gICAgICAgIHZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXItPmZvckVhY2hTZXNzaW9uKFtdIChhdXRvJiBtb2RlbCwgYXV0byYgaW50ZXJmYWNlKSB7Ci0g
ICAgICAgICAgICBtb2RlbC5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgICAgIH0pOwotICAg
IH0KLQotICAgIGlmIChhdXRvIGZ1bGxTY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCk7IGZ1bGxTY3JlZW5NYW5hZ2VyICYmIGZ1bGxTY3JlZW5NYW5hZ2VyLT5pc0Z1bGxT
Y3JlZW4oKSkKLSAgICAgICAgZnVsbFNjcmVlbk1hbmFnZXItPmNsb3NlKCk7Ci0jZW5kaWYKKyAg
ICBfaW1wbC0+c2V0Q3VzdG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKIH0KIAotLSAo
dm9pZClfc3RvcE1lZGlhQ2FwdHVyZQorLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENv
bnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0CiB7Ci0gICAgX3BhZ2UtPnN0b3BNZWRp
YUNhcHR1cmUoKTsKKyAgICBfaW1wbC0+c2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNl
dCh0b3BDb250ZW50SW5zZXQpOwogfQogCi0tICh2b2lkKV9zdG9wQWxsTWVkaWFQbGF5YmFjawor
LSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9pZCheKShDR1JlY3Qp
KWNhbGxiYWNrCiB7Ci0gICAgX3BhZ2UtPnN0b3BBbGxNZWRpYVBsYXliYWNrKCk7CisgICAgX2lt
cGwtPnNldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soY2FsbGJhY2spOwogfQogCi0tICh2
b2lkKV9zdXNwZW5kQWxsTWVkaWFQbGF5YmFjaworLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdCly
ZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0CiB7Ci0gICAgX3BhZ2UtPnN1c3BlbmRBbGxN
ZWRpYVBsYXliYWNrKCk7CisgICAgX2ltcGwtPnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNSZWN0VG9D
R1JlY3QocmVjdCksIE5TU2l6ZVRvQ0dTaXplKG9mZnNldCkpOwogfQogCi0tICh2b2lkKV9yZXN1
bWVBbGxNZWRpYVBsYXliYWNrCistICh2b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dG
bG9hdCl0b3RhbEhlaWdodE9mQmFubmVycwogewotICAgIF9wYWdlLT5yZXN1bWVBbGxNZWRpYVBs
YXliYWNrKCk7CisgICAgX2ltcGwtPnNldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzKHRvdGFsSGVpZ2h0
T2ZCYW5uZXJzKTsKIH0KIAotLSAoTlNVUkwgKilfdW5yZWFjaGFibGVVUkwKKy0gKENHRmxvYXQp
X3RvdGFsSGVpZ2h0T2ZCYW5uZXJzCiB7Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhX
VEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51bnJlYWNoYWJsZVVSTCgpXTsKKyAgICBy
ZXR1cm4gX2ltcGwtPnRvdGFsSGVpZ2h0T2ZCYW5uZXJzKCk7CiB9CiAKLS0gKE5TVVJMICopX21h
aW5GcmFtZVVSTAotewotICAgIGlmIChhdXRvKiBmcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuIGZyYW1lLT51cmwoKTsKLSAgICByZXR1cm4gbmlsOwotfQorI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKIAotLSAodm9pZClfbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCBmb3JVbnJlYWNoYWJsZVVS
TDooTlNVUkwgKil1bnJlYWNoYWJsZVVSTAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKK0ZP
Ul9FQUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tD
T05URU5UVklFVykKKworLSAodm9pZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlk
KXNlbmRlcgogewotICAgIE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIF9wYWdlLT5sb2FkQWx0ZXJuYXRlSFRNTCh7IHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwgIlVU
Ri04Il9zLCBiYXNlVVJMLCB1bnJlYWNoYWJsZVVSTCk7CisgICAgaWYgKHNlbGYudXNlc1N0YW5k
YXJkQ29udGVudFZpZXcpCisgICAgICAgIFtfY29udGVudFZpZXcgX3NldEZvbnRGb3JXZWJWaWV3
OmZvbnQgc2VuZGVyOnNlbmRlcl07CiB9CiAKLS0gKFdLTmF2aWdhdGlvbiAqKV9sb2FkRGF0YToo
TlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSBjaGFyYWN0ZXJFbmNv
ZGluZ05hbWU6KE5TU3RyaW5nICopY2hhcmFjdGVyRW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGEKKy0gKHZvaWQpX3NldEZvbnRTaXplOihD
R0Zsb2F0KWZvbnRTaXplIHNlbmRlcjooaWQpc2VuZGVyCiB7Ci0gICAgcmV0dXJuIHdyYXBwZXIo
X3BhZ2UtPmxvYWREYXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMp
LCBkYXRhLmxlbmd0aCB9LCBNSU1FVHlwZSwgY2hhcmFjdGVyRW5jb2RpbmdOYW1lLCBiYXNlVVJM
LmFic29sdXRlU3RyaW5nLCBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRh
KS5wdHIoKSkpOworICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQorICAgICAg
ICBbX2NvbnRlbnRWaWV3IF9zZXRGb250U2l6ZUZvcldlYlZpZXc6Zm9udFNpemUgc2VuZGVyOnNl
bmRlcl07CiB9CiAKLS0gKFdLTmF2aWdhdGlvbiAqKV9sb2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzOihCT09MKXNob3VsZE9wZW5FeHRlcm5h
bFVSTHMKKy0gKHZvaWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQp
c2VuZGVyCiB7Ci0gICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPmxvYWRSZXF1ZXN0KHJlcXVlc3Qs
IHNob3VsZE9wZW5FeHRlcm5hbFVSTHMgPyBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGRBbGxvdyA6IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3k6OlNob3VsZE5vdEFsbG93KSk7CisgICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZp
ZXcpCisgICAgICAgIFtfY29udGVudFZpZXcgX3NldFRleHRDb2xvckZvcldlYlZpZXc6Y29sb3Ig
c2VuZGVyOnNlbmRlcl07CiB9CiAKLS0gKE5TQXJyYXkgKilfY2VydGlmaWNhdGVDaGFpbgorLSAo
VUlWaWV3ICopaW5wdXRBY2Nlc3NvcnlWaWV3CiB7Ci0gICAgaWYgKFdlYktpdDo6V2ViRnJhbWVQ
cm94eSogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbWFp
bkZyYW1lLT5jZXJ0aWZpY2F0ZUluZm8oKSA/IChfX2JyaWRnZSBOU0FycmF5ICopbWFpbkZyYW1l
LT5jZXJ0aWZpY2F0ZUluZm8oKS0+Y2VydGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVDaGFpbigp
IDogbmlsOwotCi0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1
dEFjY2Vzc29yeVZpZXdGb3JXZWJWaWV3XTsKIH0KIAotLSAoTlNVUkwgKilfY29tbWl0dGVkVVJM
CistIChVSVZpZXcgKilpbnB1dFZpZXcKIHsKLSAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0
aFdURlN0cmluZzpfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpXTsKKyAgICByZXR1cm4gW19j
b250ZW50VmlldyBpbnB1dFZpZXdGb3JXZWJWaWV3XTsKIH0KIAotLSAoTlNTdHJpbmcgKilfTUlN
RVR5cGUKKy0gKFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3CiB7Ci0gICAgaWYg
KF9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIF9wYWdlLT5tYWluRnJhbWUoKS0+
bWltZVR5cGUoKTsKLQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoW19mdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKQorICAgICAgICByZXR1cm4gW19m
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3UGxhY2Vob2xkZXJdOworI2VuZGlmIC8v
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICByZXR1cm4gbmlsOwogfQogCi0tIChOU1N0cmlu
ZyAqKV91c2VyQWdlbnQKKy0gKHZvaWQpX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlv
bjooQ0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRl
ZEVsZW1lbnRJbmZvICopKWJsb2NrCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT51c2VyQWdlbnQoKTsK
LX0KKyAgICBhdXRvIGluZm9SZXF1ZXN0ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9u
UmVxdWVzdChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pKTsKKyAgICBpbmZvUmVx
dWVzdC5pbmNsdWRlU25hcHNob3QgPSB0cnVlOwogCi0tIChOU1N0cmluZyAqKV9hcHBsaWNhdGlv
bk5hbWVGb3JVc2VyQWdlbnQKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmFwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudCgpOworICAgIFtfY29udGVudFZpZXcgZG9BZnRlclBvc2l0aW9uSW5mb3JtYXRp
b25VcGRhdGU6W2NhcHR1cmVkQmxvY2sgPSBtYWtlQmxvY2tQdHIoYmxvY2spXSAoV2ViS2l0OjpJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikgeworICAgICAgICBj
YXB0dXJlZEJsb2NrKFtfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyBhY3RpdmF0ZWRFbGVtZW50SW5m
b1dpdGhJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjppbmZvcm1hdGlvbiB1c2VySW5m
bzpuaWxdKTsKKyAgICB9IGZvclJlcXVlc3Q6aW5mb1JlcXVlc3RdOwogfQogCi0tICh2b2lkKV9z
ZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQ6KE5TU3RyaW5nICopYXBwbGljYXRpb25OYW1l
Rm9yVXNlckFnZW50CistIChDR1JlY3QpX2NvbnRlbnRWaXNpYmxlUmVjdAogewotICAgIF9wYWdl
LT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFn
ZW50KTsKLSAgICBfcGFnZS0+c2V0QXBwbGljYXRpb25OYW1lRm9yRGVza3RvcFVzZXJBZ2VudChh
cHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVj
dDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwogfQogCi0t
IChOU1N0cmluZyAqKV9jdXN0b21Vc2VyQWdlbnQKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZy
b21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludAogewotICAgIHJldHVybiBzZWxmLmN1c3Rv
bVVzZXJBZ2VudDsKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3
OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107CiB9CiAKLS0gKHZvaWQpX3NldEN1c3RvbVVzZXJB
Z2VudDooTlNTdHJpbmcgKiljdXN0b21Vc2VyQWdlbnQKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2lu
dEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludAogewotICAgIHNlbGYuY3VzdG9tVXNl
ckFnZW50ID0gY3VzdG9tVXNlckFnZW50OworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6
cG9pbnQgdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107CiB9CiAKLS0gKHZvaWQpX3Nl
dFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ6KEJPT0wpdXNlckNvbnRlbnRFeHRlbnNpb25z
RW5hYmxlZAorLSAodm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24KIHsKLSAgICAv
LyBUaGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggaU9TIDkuCisgICAg
Ly8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCiB9CiAKLS0gKEJPT0wpX3VzZXJDb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQKKy0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbgog
ewotICAgIC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1Mg
OS4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4K
IH0KIAotLSAocGlkX3QpX3dlYlByb2Nlc3NJZGVudGlmaWVyCistIChDR1JlY3QpX3VpVGV4dENh
cmV0UmVjdAogewotICAgIGlmICghW3NlbGYgX2lzVmFsaWRdKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KKyAg
ICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKIAotICAgIHJldHVybiBf
cGFnZS0+cHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gW1tfY29udGVudFZpZXcgdmFs
dWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQuc2VsZWN0aW9uVmlldy5zZWxlY3Rp
b24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwogfQogCi0tIChwaWRfdClfcHJvdmlzaW9uYWxX
ZWJQcm9jZXNzSWRlbnRpZmllcgorLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNB
dFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0
ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3Rz
KSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghW3NlbGYgX2lzVmFsaWRdKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGF1dG8qIHByb3Zpc2lvbmFsUGFnZSA9IF9wYWdlLT5wcm92aXNp
b25hbFBhZ2VQcm94eSgpOwotICAgIGlmICghcHJvdmlzaW9uYWxQYWdlKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBwcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzSWRl
bnRpZmllcigpOworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRsZXI6
W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25SZWN0
cykgeworICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCisgICAgICAg
ICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNlbGVj
dGlvblJlY3QucmVjdCgpXV07CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIocmVj
dFZhbHVlcy5nZXQoKSk7CisgICAgfV07CiB9CiAKLS0gKHZvaWQpX2tpbGxXZWJDb250ZW50UHJv
Y2VzcworLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uCiB7Ci0gICAgaWYgKCFb
c2VsZiBfaXNWYWxpZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5wcm9jZXNzKCku
dGVybWluYXRlKCk7CisgICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0
aW9uXTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLS0gKE5TVmlldyAqKV9zYWZlQnJvd3NpbmdX
YXJuaW5nCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24KIHsKLSAgICByZXR1
cm4gX2ltcGwtPnNhZmVCcm93c2luZ1dhcm5pbmcoKTsKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nl
c3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dOwogfQotI2Vsc2UKLS0gKFVJVmlldyAqKV9zYWZlQnJv
d3NpbmdXYXJuaW5nCisKKy0gKEJPT0wpX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcgogewot
ICAgIHJldHVybiBfc2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKKyAgICByZXR1cm4gc2VsZi5f
Y3VycmVudENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7CiB9Ci0jZW5kaWYKIAotLSAoV0tO
YXZpZ2F0aW9uICopX3JlbG9hZFdpdGhvdXRDb250ZW50QmxvY2tlcnMKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQorCistIChfV0tJbnNwZWN0b3IgKilfaW5zcGVjdG9yCiB7Ci0gICAg
cmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkRpc2Fi
bGVDb250ZW50QmxvY2tlcnMpKTsKKyAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gX3BhZ2UtPmlu
c3BlY3RvcigpKQorICAgICAgICByZXR1cm4gd3JhcHBlcigqaW5zcGVjdG9yKTsKKyAgICByZXR1
cm4gbmlsOwogfQogCi0tIChXS05hdmlnYXRpb24gKilfcmVsb2FkRXhwaXJlZE9ubHkKKy0gKF9X
S0ZyYW1lSGFuZGxlICopX21haW5GcmFtZQogewotICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5y
ZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSkpOworICAgIGlmIChhdXRv
KiBmcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJ
OjpGcmFtZUhhbmRsZTo6Y3JlYXRlKGZyYW1lLT5mcmFtZUlEKCkpKTsKKyAgICByZXR1cm4gbmls
OwogfQogCi0tICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlCistIChC
T09MKV9pc0VkaXRhYmxlCiB7Ci0gICAgUmVmPFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5PiBwcm90
ZWN0ZWRQcm9jZXNzUHJveHkoX3BhZ2UtPnByb2Nlc3MoKSk7Ci0gICAgcHJvdGVjdGVkUHJvY2Vz
c1Byb3h5LT5yZXF1ZXN0VGVybWluYXRpb24oV2ViS2l0OjpQcm9jZXNzVGVybWluYXRpb25SZWFz
b246OlJlcXVlc3RlZEJ5Q2xpZW50KTsKLQotICAgIGlmIChhdXRvKiBwcm92aXNpb25hbFBhZ2VQ
cm94eSA9IF9wYWdlLT5wcm92aXNpb25hbFBhZ2VQcm94eSgpKSB7Ci0gICAgICAgIFJlZjxXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eT4gcHJvdGVjdGVkUHJvY2Vzc1Byb3h5KHByb3Zpc2lvbmFsUGFn
ZVByb3h5LT5wcm9jZXNzKCkpOwotICAgICAgICBwcm90ZWN0ZWRQcm9jZXNzUHJveHktPnJlcXVl
c3RUZXJtaW5hdGlvbihXZWJLaXQ6OlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVk
QnlDbGllbnQpOwotICAgIH0KKyAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmlzRWRpdGFibGUo
KTsKIH0KIAotLSAoQ0dSZWN0KV9jb252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOihD
R1JlY3QpcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcworLSAodm9pZClfc2V0RWRpdGFibGU6KEJP
T0wpZWRpdGFibGUKIHsKLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIGVhc2llciB0byB0YWxr
IGFib3V0IFdLV2ViVmlldyBjb29yZGluYXRlcyBpbiBhIGNvbnNpc3RlbnQgYW5kIGNyb3NzLXBs
YXRmb3JtIHdheS4KLSAgICAvLyBDdXJyZW50bHksIG5laXRoZXIgInJvb3QgdmlldyIgbm9yICJ3
aW5kb3ciIG1lYW4gIldLV2ViVmlldyBjb29yZGluYXRlcyIgb24gYm90aCBwbGF0Zm9ybXMuCi0g
ICAgLy8gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzY0OSBhbmQgcmVsYXRlZCBidWdzLgor
ICAgIGJvb2wgd2FzRWRpdGFibGUgPSBfcGFnZS0+aXNFZGl0YWJsZSgpOworICAgIF9wYWdlLT5z
ZXRFZGl0YWJsZShlZGl0YWJsZSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChlZGl0YWJs
ZSkKKyAgICAgICAgX2ltcGwtPmRpZEJlY29tZUVkaXRhYmxlKCk7CisjZW5kaWYKKworICAgIGlm
ICh3YXNFZGl0YWJsZSA9PSBlZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcyBmcm9tVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotI2Vsc2UKLSAgICBy
ZXR1cm4gcmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKKyAgICBbX2NvbnRlbnRWaWV3IF9kaWRD
aGFuZ2VXZWJWaWV3RWRpdGFiaWxpdHldOwogI2VuZGlmCiB9CiAKLS0gKENHUmVjdClfY29udmVy
dFJlY3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRpbmF0
ZXMKKy0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3Vt
ZW50OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wpKWNvbXBs
ZXRpb24KIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBbc2VsZiBjb252
ZXJ0UmVjdDpyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQo
KV07Ci0jZWxzZQotICAgIHJldHVybiByZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXM7Ci0jZW5kaWYK
KyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmQsIGFyZ3VtZW50LCBbY2FwdHVy
ZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbildKFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoY2FwdHVyZWRDb21wbGV0aW9u
QmxvY2spCisgICAgICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jayhlcnJvciA9PSBXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgIH0pOwogfQogCi0tICh2b2lkKV9y
ZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRp
bmF0ZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250
ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCistIChpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlPilfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihAW10pOworICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCit7
CisgICAgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistICh2b2lk
KV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVs
YXRpb25Db25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICB1c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7CisKKyAgICBpZiAoIV90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgfHwgIV9wYWdlKSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYKIAotICAgIENHUmVjdCBy
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gW3NlbGYgX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nv
b3JkaW5hdGVzOnJlY3RJbldlYlZpZXdDb29yZGluYXRlc107Ci0gICAgYXV0byB3ZWFrU2VsZiA9
IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZik7Ci0gICAgX3BhZ2UtPnRleHRJbnB1dENvbnRl
eHRzSW5SZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIFt3ZWFrU2VsZiwgY2FwdHVyZWRD
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+JiBjb250ZXh0cykgewotICAgICAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGVsZW1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvbnRleHRzLnNpemUoKV0pOworICAgIFZlY3Rv
cjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZT4gZXhj
bHVzaW9uUnVsZXM7CisgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgZm9yIChfV0tU
ZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSAqd2tSdWxlIGluIGNvbmZpZ3VyYXRpb24uZXhj
bHVzaW9uUnVsZXMpIHsKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9IHdrUnVsZS5pc0V4Y2x1c2lv
biA/IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1ZGUgOiBFeGNsdXNpb25SdWxlOjpUeXBlOjpJ
bmNsdWRlOworICAgICAgICAgICAgaWYgKHdrUnVsZS5hdHRyaWJ1dGVOYW1lKQorICAgICAgICAg
ICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6QXR0cmli
dXRlUnVsZSB7IHdrUnVsZS5hdHRyaWJ1dGVOYW1lLCB3a1J1bGUuYXR0cmlidXRlVmFsdWUgfSB9
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdrUnVsZS5jbGFzc05hbWUpCisgICAgICAgICAgICAg
ICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpDbGFzc1J1bGUg
eyB3a1J1bGUuY2xhc3NOYW1lIH0gfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpFbGVtZW50UnVs
ZSB7IHdrUnVsZS5lbGVtZW50TmFtZSB9IH0pOworICAgICAgICB9CisgICAgfQogCi0gICAgICAg
IGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOwotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGNvbnRleHQgOiBjb250ZXh0cykgewotICAgICAgICAgICAgV2ViQ29yZTo6RWxlbWVudENv
bnRleHQgY29udGV4dFdpdGhXZWJWaWV3Qm91bmRpbmdSZWN0ID0gY29udGV4dDsKLSAgICAgICAg
ICAgIGNvbnRleHRXaXRoV2ViVmlld0JvdW5kaW5nUmVjdC5ib3VuZGluZ1JlY3QgPSBbc3Ryb25n
U2VsZiBfY29udmVydFJlY3RGcm9tUm9vdFZpZXdDb29yZGluYXRlczpjb250ZXh0LmJvdW5kaW5n
UmVjdF07Ci0gICAgICAgICAgICBbZWxlbWVudHMgYWRkT2JqZWN0OmFkb3B0TlMoW1tfV0tUZXh0
SW5wdXRDb250ZXh0IGFsbG9jXSBfaW5pdFdpdGhUZXh0SW5wdXRDb250ZXh0OmNvbnRleHRXaXRo
V2ViVmlld0JvdW5kaW5nUmVjdF0pLmdldCgpXTsKKyAgICBfcGFnZS0+c3RhcnRUZXh0TWFuaXB1
bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3
PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRp
ZmllciBpdGVtSUQsCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgaWYg
KCF3ZWFrU2VsZikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJldGFpbmVk
U2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFpbmVk
U2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tlbnMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUoKV07CisgICAg
ICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKKyAgICAgICAgICAgIGF1dG8gd2tUb2tl
biA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKKyAg
ICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4uaWRl
bnRpZmllci50b1VJbnQ2NCgpKV07CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50OnRv
a2VuLmNvbnRlbnRdOworICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4uaXNF
eGNsdWRlZF07CisgICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0KCld
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihlbGVtZW50
cy5nZXQoKSk7CisgICAgICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW1JRC50
b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3
OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06aXRlbS5nZXQo
KV07CisgICAgfSwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jaygpOwog
ICAgIH0pOwogfQogCi0tICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1
dENvbnRleHQgKil0ZXh0SW5wdXRDb250ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJP
T0wpKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246
KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wg
c3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKE5PKTsKKyAgICB1c2luZyBNYW5pcHVsYXRpb25SZXN1bHQgPSBXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0OworCisgICAg
aWYgKCFfcGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgogCi0gICAgYXV0byB3
ZWJDb250ZXh0ID0gW3RleHRJbnB1dENvbnRleHQgX3RleHRJbnB1dENvbnRleHRdOwotICAgIGlm
ICh3ZWJDb250ZXh0LndlYlBhZ2VJZGVudGlmaWVyICE9IF9wYWdlLT53ZWJQYWdlSUQoKSkKLSAg
ICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1h
dDpAIlRoZSBwcm92aWRlZCBfV0tUZXh0SW5wdXRDb250ZXh0IHdhcyBub3QgY3JlYXRlZCBieSB0
aGlzIFdLV2ViVmlldy4iXTsKKyAgICBhdXRvIGl0ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVy
PFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+
KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUludDY0KCkpOwogCi0gICAgW3NlbGYgYmVjb21l
Rmlyc3RSZXNwb25kZXJdOworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuczsKKyAgICBmb3IgKF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbiAqd2tUb2tlbiBpbiBpdGVtLnRva2VucykgeworICAgICAgICBhdXRvIHRv
a2VuSUQgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6VG9rZW5JZGVudGlmaWVyVHlwZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllciku
dG9VSW50NjQoKSk7CisgICAgICAgIHRva2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250
ZW50IH0pOworICAgIH0KIAotICAgIF9wYWdlLT5mb2N1c1RleHRJbnB1dENvbnRleHQod2ViQ29u
dGV4dCwgW2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFu
ZGxlcihzdWNjZXNzKTsKKyAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1J
RCwgdG9rZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoTWFuaXB1bGF0aW9uUmVzdWx0IHJlc3VsdCkgeworICAgICAgICBjYXB0
dXJlZENvbXBsZXRpb25CbG9jayhyZXN1bHQgPT0gTWFuaXB1bGF0aW9uUmVzdWx0OjpTdWNjZXNz
KTsKICAgICB9KTsKIH0KLQotLSAodm9pZClfdGFrZVBERlNuYXBzaG90V2l0aENvbmZpZ3VyYXRp
b246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFu
ZGxlcgorLSAodm9pZClfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKIHsK
LSAgICBXS1BERkNvbmZpZ3VyYXRpb24gKnBkZkNvbmZpZ3VyYXRpb24gPSBuaWw7Ci0gICAgaWYg
KHNuYXBzaG90Q29uZmlndXJhdGlvbikgewotICAgICAgICBwZGZDb25maWd1cmF0aW9uID0gW1tb
V0tQREZDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIHBk
ZkNvbmZpZ3VyYXRpb24ucmVjdCA9IHNuYXBzaG90Q29uZmlndXJhdGlvbi5yZWN0OwotICAgIH0K
LQotICAgIFtzZWxmIGNyZWF0ZVBERldpdGhDb25maWd1cmF0aW9uOnBkZkNvbmZpZ3VyYXRpb24g
Y29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBbc2VsZiB0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246c2VuZGVyXTsKKyNlbHNlCisg
ICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgiVGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9u
Il9zKTsKKyNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oTUFDKQotLSAodm9pZClfc2V0U2hvdWxk
U3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3VwcHJlc3MKKysgKE5T
U3RyaW5nICopX3N0cmluZ0ZvckZpbmQKIHsKLSAgICBfaW1wbC0+c2V0U2hvdWxkU3VwcHJlc3NG
aXJzdFJlc3BvbmRlckNoYW5nZXMoc2hvdWxkU3VwcHJlc3MpOworICAgIHJldHVybiBXZWJLaXQ6
OnN0cmluZ0ZvckZpbmQoKTsKIH0KLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LS0gKHZvaWQgKF4pKHZvaWQpKV9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUKKysgKHZvaWQpX3Nl
dFN0cmluZ0ZvckZpbmQ6KE5TU3RyaW5nICopZmluZFN0cmluZwogewotICAgICsrX2FjdGl2ZUZv
Y3VzZWRTdGF0ZVJldGFpbkNvdW50OworICAgIFdlYktpdDo6dXBkYXRlU3RyaW5nRm9yRmluZChm
aW5kU3RyaW5nKTsKK30KIAotICAgIC8vIEZJWE1FOiBVc2Ugc29tZXRoaW5nIGxpa2UgQ29tcGxl
dGlvbkhhbmRsZXJDYWxsQ2hlY2tlciB0byBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgYmxvY2sg
aXMgY2FsbGVkIGJlZm9yZSBpdCdzIHJlbGVhc2VkLgotICAgIHJldHVybiBbW1tzZWxmXSB7Ci0g
ICAgICAgIC0tX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OwotICAgIH0gY29weV0gYXV0
b3JlbGVhc2VdOwotfQotCi0tICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rp
b25Nb3ZpbmdGb3J3YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBsZXRpb25IYW5kbGVy
CistIChfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSAqKV9yZW1vdGVPYmplY3RSZWdpc3RyeQogewot
ICAgIHR5cGVvZihjb21wbGV0aW9uSGFuZGxlcikgY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbmls
OwotICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJD
b3B5ID0gQmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBbX2NvbnRlbnRWaWV3
IF9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOnNlbGVjdGlu
Z0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6W2NvbXBsZXRpb25IYW5kbGVyQ29weV0oQk9PTCBk
aWRCZWNvbWVGaXJzdFJlc3BvbmRlcikgewotICAgICAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVy
Q29weSkKLSAgICAgICAgICAgIHJldHVybjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJu
IF9pbXBsLT5yZW1vdGVPYmplY3RSZWdpc3RyeSgpOworI2Vsc2UKKyAgICBpZiAoIV9yZW1vdGVP
YmplY3RSZWdpc3RyeSkgeworICAgICAgICBfcmVtb3RlT2JqZWN0UmVnaXN0cnkgPSBhZG9wdE5T
KFtbX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgYWxsb2NdIF9pbml0V2l0aFdlYlBhZ2VQcm94eToq
X3BhZ2VdKTsKKyAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0cnk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgX3BhZ2UtPmlkZW50aWZpZXIoKSwgW19yZW1vdGVPYmplY3RSZWdpc3RyeSByZW1v
dGVPYmplY3RSZWdpc3RyeV0pOworICAgIH0KIAotICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNv
cHkoZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpOwotICAgICAgICBCbG9ja19yZWxlYXNlKGNvbXBs
ZXRpb25IYW5kbGVyQ29weSk7Ci0gICAgfV07CisgICAgcmV0dXJuIF9yZW1vdGVPYmplY3RSZWdp
c3RyeS5nZXQoKTsKKyNlbmRpZgogfQogCi0tIChpZClfc25hcHNob3RMYXllckNvbnRlbnRzRm9y
QmFja0ZvcndhcmRMaXN0SXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbQorLSAoV0tC
cm93c2luZ0NvbnRleHRIYW5kbGUgKilfaGFuZGxlCiB7Ci0gICAgaWYgKF9wYWdlLT5iYWNrRm9y
d2FyZExpc3QoKS5jdXJyZW50SXRlbSgpID09ICZpdGVtLl9pdGVtKQotICAgICAgICBfcGFnZS0+
cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KCpfcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkuY3VycmVu
dEl0ZW0oKSk7Ci0KLSAgICBpZiAoYXV0byogdmlld1NuYXBzaG90ID0gaXRlbS5faXRlbS5zbmFw
c2hvdCgpKQotICAgICAgICByZXR1cm4gdmlld1NuYXBzaG90LT5hc0xheWVyQ29udGVudHMoKTsK
LQotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbW1dLQnJvd3NpbmdDb250ZXh0SGFuZGxl
IGFsbG9jXSBfaW5pdFdpdGhQYWdlUHJveHk6Kl9wYWdlXSBhdXRvcmVsZWFzZV07CiB9CiAKLS0g
KE5TQXJyYXkgKilfZGF0YURldGVjdGlvblJlc3VsdHMKKy0gKF9XS1JlbmRlcmluZ1Byb2dyZXNz
RXZlbnRzKV9vYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzCiB7Ci0jaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9kYXRhRGV0ZWN0aW9uUmVz
dWx0c107Ci0jZWxzZQotICAgIHJldHVybiBuaWw7Ci0jZW5kaWYKKyAgICByZXR1cm4gX29ic2Vy
dmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7CiB9CiAKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlS
ZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudAorLSAoaWQgPFdLSGlzdG9yeURlbGVnYXRlUHJp
dmF0ZT4pX2hpc3RvcnlEZWxlZ2F0ZQogewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzaWJpbGl0
eVJldHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50XTsKKyAgICByZXR1cm4gX25hdmlnYXRpb25T
dGF0ZS0+aGlzdG9yeURlbGVnYXRlKCkuYXV0b3JlbGVhc2UoKTsKIH0KIAotLy8gVGhpcyBtZXRo
b2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0vLyBDdXJyZW50bHkgaXQncyBvbmx5
IGluIFRlc3RSdW5uZXJXS1dlYlZpZXcuCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0U3Bl
YWtTZWxlY3Rpb25Db250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQKKy0gKHZvaWQpX3NldEhpc3Rv
cnlEZWxlZ2F0ZTooaWQgPFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZT4paGlzdG9yeURlbGVnYXRl
CiB7CisgICAgX3BhZ2UtPnNldEhpc3RvcnlDbGllbnQoX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRl
SGlzdG9yeUNsaWVudCgpKTsKKyAgICBfbmF2aWdhdGlvblN0YXRlLT5zZXRIaXN0b3J5RGVsZWdh
dGUoaGlzdG9yeURlbGVnYXRlKTsKIH0KIAotLSAoVUlUZXh0SW5wdXRBc3Npc3RhbnRJdGVtICop
aW5wdXRBc3Npc3RhbnRJdGVtCistICh2b2lkKV91cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyCiB7Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRBc3Npc3RhbnRJdGVtRm9y
V2ViVmlld107CisjaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09O
VFJPTFNfTUFOQUdFUikKKyAgICBfaW1wbC0+dXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xzTWFu
YWdlcigpOworI2VuZGlmCiB9CiAKKy0gKEJPT0wpX2NhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmUK
K3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2ltcGwtPmNhblRvZ2dsZVBpY3R1
cmVJblBpY3R1cmUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POwogI2VuZGlmCit9CiAKLS0gKE5T
RGF0YSAqKV9zZXNzaW9uU3RhdGVEYXRhCistIChCT09MKV9pc1BpY3R1cmVJblBpY3R1cmVBY3Rp
dmUKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVnYWN5IHNlc3Np
b24gc3RhdGUgZW5jb2Rlci4KLSAgICByZXR1cm4gd3JhcHBlcihXZWJLaXQ6OmVuY29kZUxlZ2Fj
eVNlc3Npb25TdGF0ZShfcGFnZS0+c2Vzc2lvblN0YXRlKCkpKTsKKyNpZiBIQVZFKFRPVUNIX0JB
UikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIHJldHVybiBf
aW1wbC0+aXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsK
KyNlbmRpZgogfQogCi0tIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlCistICh2b2lk
KV90b2dnbGVQaWN0dXJlSW5QaWN0dXJlCiB7Ci0gICAgcmV0dXJuIFtbW19XS1Nlc3Npb25TdGF0
ZSBhbGxvY10gX2luaXRXaXRoU2Vzc2lvblN0YXRlOl9wYWdlLT5zZXNzaW9uU3RhdGUoKV0gYXV0
b3JlbGVhc2VdOworI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCisgICAgX2ltcGwtPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKKyNl
bmRpZgogfQogCi0tIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlV2l0aEZpbHRlcjoo
Qk9PTCAoXikoV0tCYWNrRm9yd2FyZExpc3RJdGVtICppdGVtKSlmaWx0ZXIKKy0gKHZvaWQpX2Ns
b3NlQWxsTWVkaWFQcmVzZW50YXRpb25zCiB7Ci0gICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUgc2Vz
c2lvblN0YXRlID0gX3BhZ2UtPnNlc3Npb25TdGF0ZShbZmlsdGVyXShXZWJLaXQ6OldlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0mIGl0ZW0pIHsKLSAgICAgICAgaWYgKCFmaWx0ZXIpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gKGJvb2wpZmlsdGVyKHdyYXBwZXIoaXRl
bSkpOwotICAgIH0pOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoYXV0byB2
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKSkg
eworICAgICAgICB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLT5mb3JFYWNoU2Vzc2lvbihbXSAoYXV0
byYgbW9kZWwsIGF1dG8mIGludGVyZmFjZSkgeworICAgICAgICAgICAgbW9kZWwucmVxdWVzdEZ1
bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU5vbmUpOworICAgICAgICB9KTsKKyAgICB9CiAKLSAgICByZXR1cm4gW1tbX1dLU2Vz
c2lvblN0YXRlIGFsbG9jXSBfaW5pdFdpdGhTZXNzaW9uU3RhdGU6c2Vzc2lvblN0YXRlXSBhdXRv
cmVsZWFzZV07CisgICAgaWYgKGF1dG8gZnVsbFNjcmVlbk1hbmFnZXIgPSBfcGFnZS0+ZnVsbFNj
cmVlbk1hbmFnZXIoKTsgZnVsbFNjcmVlbk1hbmFnZXIgJiYgZnVsbFNjcmVlbk1hbmFnZXItPmlz
RnVsbFNjcmVlbigpKQorICAgICAgICBmdWxsU2NyZWVuTWFuYWdlci0+Y2xvc2UoKTsKKyNlbmRp
ZgogfQogCi0tICh2b2lkKV9yZXN0b3JlRnJvbVNlc3Npb25TdGF0ZURhdGE6KE5TRGF0YSAqKXNl
c3Npb25TdGF0ZURhdGEKKy0gKHZvaWQpX3N0b3BNZWRpYUNhcHR1cmUKIHsKLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVnYWN5IHNlc3Npb24gc3RhdGUgZGVjb2Rlci4K
LSAgICBXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGU7Ci0gICAgaWYgKCFXZWJLaXQ6
OmRlY29kZUxlZ2FjeVNlc3Npb25TdGF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc2Vz
c2lvblN0YXRlRGF0YS5ieXRlcyksIHNlc3Npb25TdGF0ZURhdGEubGVuZ3RoLCBzZXNzaW9uU3Rh
dGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+cmVzdG9yZUZyb21TZXNzaW9uU3Rh
dGUoV1RGTW92ZShzZXNzaW9uU3RhdGUpLCB0cnVlKTsKKyAgICBfcGFnZS0+c3RvcE1lZGlhQ2Fw
dHVyZSgpOwogfQogCi0tIChXS05hdmlnYXRpb24gKilfcmVzdG9yZVNlc3Npb25TdGF0ZTooX1dL
U2Vzc2lvblN0YXRlICopc2Vzc2lvblN0YXRlIGFuZE5hdmlnYXRlOihCT09MKW5hdmlnYXRlCist
ICh2b2lkKV9zdG9wQWxsTWVkaWFQbGF5YmFjawogewotICAgIHJldHVybiB3cmFwcGVyKF9wYWdl
LT5yZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUgPyBzZXNzaW9uU3RhdGUtPl9z
ZXNzaW9uU3RhdGUgOiBXZWJLaXQ6OlNlc3Npb25TdGF0ZSB7IH0sIG5hdmlnYXRlKSk7CisgICAg
X3BhZ2UtPnN0b3BBbGxNZWRpYVBsYXliYWNrKCk7CiB9CiAKLS0gKHZvaWQpX2Nsb3NlCistICh2
b2lkKV9zdXNwZW5kQWxsTWVkaWFQbGF5YmFjawogewotICAgIF9wYWdlLT5jbG9zZSgpOworICAg
IF9wYWdlLT5zdXNwZW5kQWxsTWVkaWFQbGF5YmFjaygpOwogfQogCi0tIChfV0tBdHRhY2htZW50
ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgY29u
dGVudFR5cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUgZGF0YTooTlNEYXRhICopZGF0YSBvcHRp
b25zOihfV0tBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZv
aWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfcmVzdW1lQWxs
TWVkaWFQbGF5YmFjawogewotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICBhdXRvIGZp
bGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmls
ZVdpdGhDb250ZW50czpkYXRhXSk7Ci0gICAgaWYgKGZpbGVuYW1lKQotICAgICAgICBbZmlsZVdy
YXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwotICAgIHJldHVybiBbc2VsZiBf
aW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50
VHlwZTpjb250ZW50VHlwZSBjb21wbGV0aW9uOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBfcGFn
ZS0+cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpOwogfQogCi0tIChfV0tBdHRhY2htZW50ICopX2lu
c2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBl
ciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBvcHRpb25zOihfV0tBdHRhY2ht
ZW50RGlzcGxheU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNj
ZXNzKSljb21wbGV0aW9uSGFuZGxlcgorLSAoTlNVUkwgKilfdW5yZWFjaGFibGVVUkwKIHsKLSAg
ICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRBdHRhY2ht
ZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNv
bXBsZXRpb246Y29tcGxldGlvbkhhbmRsZXJdOworICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudW5yZWFjaGFibGVVUkwoKV07CiB9
CiAKLS0gKF9XS0F0dGFjaG1lbnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjoo
TlNGaWxlV3JhcHBlciAqKWZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRl
bnRUeXBlIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxl
cgorLSAoTlNVUkwgKilfbWFpbkZyYW1lVVJMCiB7Ci0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxF
TUVOVCkKLSAgICBhdXRvIGlkZW50aWZpZXIgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7
Ci0gICAgYXV0byBhdHRhY2htZW50ID0gQVBJOjpBdHRhY2htZW50OjpjcmVhdGUoaWRlbnRpZmll
ciwgKl9wYWdlKTsKLSAgICBhdHRhY2htZW50LT5zZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRl
bnRUeXBlKGZpbGVXcmFwcGVyLCBjb250ZW50VHlwZSk7Ci0gICAgX3BhZ2UtPmluc2VydEF0dGFj
aG1lbnQoYXR0YWNobWVudC5jb3B5UmVmKCksIFtjYXB0dXJlZEhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7Ci0gICAgICAgIGlmIChjYXB0dXJlZEhhbmRsZXIpCi0gICAgICAgICAgICBjYXB0dXJlZEhh
bmRsZXIoZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKLSAgICB9
KTsKLQotICAgIHJldHVybiB3cmFwcGVyKGF0dGFjaG1lbnQpOwotI2Vsc2UKKyAgICBpZiAoYXV0
byogZnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBmcmFtZS0+dXJs
KCk7CiAgICAgcmV0dXJuIG5pbDsKLSNlbmRpZgogfQogCi0tIChfV0tBdHRhY2htZW50ICopX2F0
dGFjaG1lbnRGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKKy0gKHZvaWQpX2xv
YWRBbHRlcm5hdGVIVE1MU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBiYXNlVVJMOihOU1VSTCAq
KWJhc2VVUkwgZm9yVW5yZWFjaGFibGVVUkw6KE5TVVJMICopdW5yZWFjaGFibGVVUkwKIHsKLSNp
ZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBf
cGFnZS0+YXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCi0gICAgICAgIHJldHVy
biB3cmFwcGVyKGF0dGFjaG1lbnQpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5pbDsKKyAgICBOU0Rh
dGEgKmRhdGEgPSBbc3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XTsKKyAgICBfcGFnZS0+bG9hZEFsdGVybmF0ZUhUTUwoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sICJVVEYtOCJfcywgYmFzZVVSTCwgdW5y
ZWFjaGFibGVVUkwpOwogfQogCi0tICh2b2lkKV9zaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hh
bmdlV2l0aEFscGhhOihkb3VibGUpYWxwaGEgYmV0YTooZG91YmxlKWJldGEgZ2FtbWE6KGRvdWJs
ZSlnYW1tYQorLSAoV0tOYXZpZ2F0aW9uICopX2xvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVU
eXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIGNoYXJhY3RlckVuY29kaW5nTmFtZTooTlNTdHJpbmcg
KiljaGFyYWN0ZXJFbmNvZGluZ05hbWUgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJEYXRh
OihpZCl1c2VyRGF0YQogewotICAgIF9wYWdlLT5zaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hh
bmdlKGFscGhhLCBiZXRhLCBnYW1tYSk7CisgICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPmxvYWRE
YXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0
aCB9LCBNSU1FVHlwZSwgY2hhcmFjdGVyRW5jb2RpbmdOYW1lLCBiYXNlVVJMLmFic29sdXRlU3Ry
aW5nLCBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKS5wdHIoKSkpOwog
fQogCi0rIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCistIChXS05hdmlnYXRpb24gKilfbG9h
ZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgc2hvdWxkT3BlbkV4dGVybmFsVVJMczoo
Qk9PTClzaG91bGRPcGVuRXh0ZXJuYWxVUkxzCiB7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHdyYXBwZXIoX3BhZ2UtPmxvYWRSZXF1ZXN0KHJlcXVlc3QsIHNob3VsZE9wZW5FeHRlcm5h
bFVSTHMgPyBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxv
dyA6IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93
KSk7CiB9CiAKLS0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0
cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNv
bXBsZXRpb25IYW5kbGVyCistIChOU0FycmF5ICopX2NlcnRpZmljYXRlQ2hhaW4KIHsKLSAgICAv
LyBGSVhNRTogQWRvcHQgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTCBhbmQgcmVtb3Zl
IHRoaXMgZnVuY3Rpb24uCi0gICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVS
TDpuaWwgdGl0bGU6dGl0bGUgd2FybmluZzp3YXJuaW5nIGRldGFpbHM6ZGV0YWlscyBjb21wbGV0
aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgaWYgKFdlYktpdDo6V2ViRnJhbWVQ
cm94eSogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gbWFp
bkZyYW1lLT5jZXJ0aWZpY2F0ZUluZm8oKSA/IChfX2JyaWRnZSBOU0FycmF5ICopbWFpbkZyYW1l
LT5jZXJ0aWZpY2F0ZUluZm8oKS0+Y2VydGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVDaGFpbigp
IDogbmlsOworCisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAodm9pZClfc2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJu
aW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0
YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgor
LSAoTlNVUkwgKilfY29tbWl0dGVkVVJMCiB7Ci0gICAgYXV0byBzYWZlQnJvd3NpbmdXYXJuaW5n
ID0gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVhdGUodXJsLCB0aXRsZSwgd2Fybmlu
ZywgZGV0YWlscyk7Ci0gICAgYXV0byB3cmFwcGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVu
c2FmZUxvYWQsIFVSTD4mJiB2YXJpYW50KSB7Ci0gICAgICAgIHN3aXRjaE9uKHZhcmlhbnQsIFsm
XSAoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQgY29udGludWVVbnNhZmVMb2FkKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGNvbnRpbnVlVW5zYWZlTG9hZCkgewotICAgICAgICAgICAgY2FzZSBX
ZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzOgotICAgICAgICAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihZRVMpOwotICAgICAgICAgICAgY2FzZSBXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZDo6Tm86Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KE5PKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwgWyZdIChVUkwpIHsKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTk8p
OwotICAgICAgICB9KTsKLSAgICB9OwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBfaW1wbC0+c2hv
d1NhZmVCcm93c2luZ1dhcm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3cmFwcGVy
KSk7Ci0jZWxzZQotICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJvd3Np
bmdXYXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOwotI2VuZGlmCisg
ICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3Rh
dGUoKS51cmwoKV07CiB9CiAKLSsgKE5TVVJMICopX2NvbmZpcm1NYWx3YXJlU2VudGluZWwKKy0g
KE5TU3RyaW5nICopX01JTUVUeXBlCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6U2FmZUJyb3dzaW5n
V2FybmluZzo6Y29uZmlybU1hbHdhcmVTZW50aW5lbCgpOworICAgIGlmIChfcGFnZS0+bWFpbkZy
YW1lKCkpCisgICAgICAgIHJldHVybiBfcGFnZS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCk7CisK
KyAgICByZXR1cm4gbmlsOwogfQogCi0rIChOU1VSTCAqKV92aXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbAorLSAoTlNTdHJpbmcgKilfdXNlckFnZW50CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6U2Fm
ZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKTsKKyAgICByZXR1
cm4gX3BhZ2UtPnVzZXJBZ2VudCgpOwogfQogCi0tICh2b2lkKV9pc0pJVEVuYWJsZWQ6KHZvaWQo
XikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKE5TU3RyaW5nICopX2FwcGxpY2F0aW9uTmFt
ZUZvclVzZXJBZ2VudAogewotICAgIF9wYWdlLT5pc0pJVEVuYWJsZWQoW2NvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJvb2wgZW5hYmxlZCkgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbmFibGVkKTsKLSAgICB9KTsKKyAgICByZXR1cm4g
X3BhZ2UtPmFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCgpOwogfQogCi0tICh2b2lkKV9ldmFs
dWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0
cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXIKKy0gKHZvaWQpX3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDooTlNTdHJp
bmcgKilhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKIHsKLSAgICBbc2VsZiBfZXZhbHVhdGVK
YXZhU2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTpOTyBjb21wbGV0aW9u
SGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgX3BhZ2UtPnNldEFwcGxpY2F0aW9uTmFt
ZUZvclVzZXJBZ2VudChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOworICAgIF9wYWdlLT5z
ZXRBcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVz
ZXJBZ2VudCk7CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZVdlYnNpdGVQb2xpY2llczooX1dLV2Vic2l0
ZVBvbGljaWVzICopd2Vic2l0ZVBvbGljaWVzCistIChOU1N0cmluZyAqKV9jdXN0b21Vc2VyQWdl
bnQKIHsKLSAgICBhdXRvIGRhdGEgPSB3ZWJzaXRlUG9saWNpZXMud2VicGFnZVByZWZlcmVuY2Vz
LT5fd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7Ci0gICAgaWYgKGRhdGEud2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMpCi0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVu
dEV4Y2VwdGlvbiBmb3JtYXQ6QCJVcGRhdGluZyBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgb25seSBz
dXBwb3J0ZWQgZHVyaW5nIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24uIl07Ci0gICAg
X3BhZ2UtPnVwZGF0ZVdlYnNpdGVQb2xpY2llcyhXVEZNb3ZlKGRhdGEpKTsKKyAgICByZXR1cm4g
c2VsZi5jdXN0b21Vc2VyQWdlbnQ7CiB9CiAKLS0gKEJPT0wpX2FsbG93c1JlbW90ZUluc3BlY3Rp
b24KKy0gKHZvaWQpX3NldEN1c3RvbVVzZXJBZ2VudDooTlNTdHJpbmcgKiljdXN0b21Vc2VyQWdl
bnQKIHsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICByZXR1cm4gX3BhZ2UtPmFs
bG93c1JlbW90ZUluc3BlY3Rpb24oKTsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCisg
ICAgc2VsZi5jdXN0b21Vc2VyQWdlbnQgPSBjdXN0b21Vc2VyQWdlbnQ7CiB9CiAKLS0gKHZvaWQp
X3NldEFsbG93c1JlbW90ZUluc3BlY3Rpb246KEJPT0wpYWxsb3cKKy0gKHZvaWQpX3NldFVzZXJD
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ6KEJPT0wpdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxl
ZAogewotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIF9wYWdlLT5zZXRBbGxvd3NS
ZW1vdGVJbnNwZWN0aW9uKGFsbG93KTsKLSNlbmRpZgorICAgIC8vIFRoaXMgaXMga2VwdCBmb3Ig
YmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4KIH0KIAotLSAoTlNTdHJpbmcgKilfcmVt
b3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZQorLSAoQk9PTClfdXNlckNvbnRlbnRFeHRlbnNpb25z
RW5hYmxlZAogewotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIHJldHVybiBfcGFn
ZS0+cmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gbmls
OwotI2VuZGlmCisgICAgLy8gVGhpcyBpcyBrZXB0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3
aXRoIGlPUyA5LgorICAgIHJldHVybiB0cnVlOwogfQogCi0tICh2b2lkKV9zZXRSZW1vdGVJbnNw
ZWN0aW9uTmFtZU92ZXJyaWRlOihOU1N0cmluZyAqKW5hbWUKKy0gKHBpZF90KV93ZWJQcm9jZXNz
SWRlbnRpZmllcgogewotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIF9wYWdlLT5z
ZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKG5hbWUpOwotI2VuZGlmCisgICAgaWYgKCFb
c2VsZiBfaXNWYWxpZF0pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIF9wYWdlLT5w
cm9jZXNzSWRlbnRpZmllcigpOwogfQogCi0tIChCT09MKV9hZGRzVmlzaXRlZExpbmtzCistIChw
aWRfdClfcHJvdmlzaW9uYWxXZWJQcm9jZXNzSWRlbnRpZmllcgogewotICAgIHJldHVybiBfcGFn
ZS0+YWRkc1Zpc2l0ZWRMaW5rcygpOwotfQorICAgIGlmICghW3NlbGYgX2lzVmFsaWRdKQorICAg
ICAgICByZXR1cm4gMDsKIAotLSAodm9pZClfc2V0QWRkc1Zpc2l0ZWRMaW5rczooQk9PTClhZGRz
VmlzaXRlZExpbmtzCi17Ci0gICAgX3BhZ2UtPnNldEFkZHNWaXNpdGVkTGlua3MoYWRkc1Zpc2l0
ZWRMaW5rcyk7Ci19CisgICAgYXV0byogcHJvdmlzaW9uYWxQYWdlID0gX3BhZ2UtPnByb3Zpc2lv
bmFsUGFnZVByb3h5KCk7CisgICAgaWYgKCFwcm92aXNpb25hbFBhZ2UpCisgICAgICAgIHJldHVy
biAwOwogCi0tIChCT09MKV9uZXR3b3JrUmVxdWVzdHNJblByb2dyZXNzCi17Ci0gICAgcmV0dXJu
IF9wYWdlLT5wYWdlTG9hZFN0YXRlKCkubmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcygpOworICAg
IHJldHVybiBwcm92aXNpb25hbFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOwog
fQogCi1zdGF0aWMgaW5saW5lIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IGxh
eW91dE1pbGVzdG9uZXMoX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMgZXZlbnRzKQorLSAodm9p
ZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzCiB7Ci0gICAgT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91
dE1pbGVzdG9uZT4gbWlsZXN0b25lczsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6
OkRpZEZpcnN0TGF5b3V0KTsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVz
c0V2ZW50Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KQotICAgICAgICBtaWxlc3RvbmVzLmFk
ZChXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOwotCi0gICAgaWYgKGV2
ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50V2l0aFNpZ25pZmljYW50
QXJlYSkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkSGl0UmVsZXZhbnRSZXBh
aW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudFJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVlU2l6ZVRo
cmVzaG9sZCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6UmVhY2hlZFNlc3Npb25S
ZXN0b3JhdGlvblJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsKLQotICAgIGlmIChldmVudHMgJiBf
V0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXRBZnRlclN1cHByZXNzZWRJbmNyZW1l
bnRhbFJlbmRlcmluZykKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RM
YXlvdXRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZyk7Ci0KLSAgICBpZiAoZXZl
bnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0UGFpbnRBZnRlclN1cHByZXNzZWRJ
bmNyZW1lbnRhbFJlbmRlcmluZykKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlk
Rmlyc3RQYWludEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFsUmVuZGVyaW5nKTsKLQotICAgIGlm
IChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50RGlkUmVuZGVyU2lnbmlmaWNhbnRB
bW91bnRPZlRleHQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZFJlbmRlclNp
Z25pZmljYW50QW1vdW50T2ZUZXh0KTsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50Rmlyc3RNZWFuaW5nZnVsUGFpbnQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRk
KFdlYkNvcmU6OkRpZEZpcnN0TWVhbmluZ2Z1bFBhaW50KTsKKyAgICBpZiAoIVtzZWxmIF9pc1Zh
bGlkXSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIG1pbGVzdG9uZXM7CisgICAgX3Bh
Z2UtPnByb2Nlc3MoKS50ZXJtaW5hdGUoKTsKIH0KIAotLSAodm9pZClfc2V0T2JzZXJ2ZWRSZW5k
ZXJpbmdQcm9ncmVzc0V2ZW50czooX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMpb2JzZXJ2ZWRS
ZW5kZXJpbmdQcm9ncmVzc0V2ZW50cworI2lmIFBMQVRGT1JNKE1BQykKKy0gKE5TVmlldyAqKV9z
YWZlQnJvd3NpbmdXYXJuaW5nCiB7Ci0gICAgX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dHMgPSBvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOwotICAgIF9wYWdlLT5saXN0ZW5G
b3JMYXlvdXRNaWxlc3RvbmVzKGxheW91dE1pbGVzdG9uZXMob2JzZXJ2ZWRSZW5kZXJpbmdQcm9n
cmVzc0V2ZW50cykpOworICAgIHJldHVybiBfaW1wbC0+c2FmZUJyb3dzaW5nV2FybmluZygpOwog
fQotCi0tICh2b2lkKV9nZXRNYWluUmVzb3VyY2VEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorI2Vsc2UKKy0g
KFVJVmlldyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5nCiB7Ci0gICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworICAgIHJldHVybiBfc2FmZUJyb3dzaW5n
V2FybmluZy5nZXQoKTsKK30KKyNlbmRpZgogCi0gICAgX3BhZ2UtPmdldE1haW5SZXNvdXJjZURh
dGFPZkZyYW1lKF9wYWdlLT5tYWluRnJhbWUoKSwgW2hhbmRsZXJdKEFQSTo6RGF0YSogZGF0YSwg
V2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIHZvaWQgKF5jb21w
bGV0aW9uSGFuZGxlckJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKSA9ICh2b2lkICheKShOU0Rh
dGEgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICBpZiAoZXJyb3IgIT0gV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
UGlwZSBhIHByb3BlciBlcnJvciBpbiBmcm9tIHRoZSBXZWJQYWdlUHJveHkuCi0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlckJsb2NrKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldL
RXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSB1c2VySW5mbzpuaWxdKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckJsb2NrKHdyYXBw
ZXIoKmRhdGEpLCBuaWwpOwotICAgIH0pOworLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZFdpdGhv
dXRDb250ZW50QmxvY2tlcnMKK3sKKyAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVsb2FkKFdl
YkNvcmU6OlJlbG9hZE9wdGlvbjo6RGlzYWJsZUNvbnRlbnRCbG9ja2VycykpOwogfQogCi0tICh2
b2lkKV9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNE
YXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKFdLTmF2aWdhdGlvbiAqKV9y
ZWxvYWRFeHBpcmVkT25seQogewotICAgIFtzZWxmIGNyZWF0ZVdlYkFyY2hpdmVEYXRhV2l0aENv
bXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICByZXR1cm4gd3JhcHBlcihf
cGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpKTsKIH0KIAot
LSAodm9pZClfZ2V0Q29udGVudHNBc1N0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNTdHJpbmcgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfa2ls
bFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZQogewotICAgIGF1dG8gaGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7CisgICAgUmVmPFdlYktpdDo6V2ViUHJvY2Vz
c1Byb3h5PiBwcm90ZWN0ZWRQcm9jZXNzUHJveHkoX3BhZ2UtPnByb2Nlc3MoKSk7CisgICAgcHJv
dGVjdGVkUHJvY2Vzc1Byb3h5LT5yZXF1ZXN0VGVybWluYXRpb24oV2ViS2l0OjpQcm9jZXNzVGVy
bWluYXRpb25SZWFzb246OlJlcXVlc3RlZEJ5Q2xpZW50KTsKIAotICAgIF9wYWdlLT5nZXRDb250
ZW50c0FzU3RyaW5nKFtoYW5kbGVyXShTdHJpbmcgc3RyaW5nLCBXZWJLaXQ6OkNhbGxiYWNrQmFz
ZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tC
YXNlOjpFcnJvcjo6Tm9uZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFBpcGUgYSBwcm9wZXIg
ZXJyb3IgaW4gZnJvbSB0aGUgV2ViUGFnZVByb3h5LgotICAgICAgICAgICAgaGFuZGxlcihuaWws
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6c3RhdGljX2Nhc3Q8
aW50PihlcnJvcikgdXNlckluZm86bmlsXSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
aGFuZGxlcihzdHJpbmcsIG5pbCk7Ci0gICAgfSk7CisgICAgaWYgKGF1dG8qIHByb3Zpc2lvbmFs
UGFnZVByb3h5ID0gX3BhZ2UtPnByb3Zpc2lvbmFsUGFnZVByb3h5KCkpIHsKKyAgICAgICAgUmVm
PFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRQcm9jZXNzUHJveHkocHJvdmlzaW9u
YWxQYWdlUHJveHktPnByb2Nlc3MoKSk7CisgICAgICAgIHByb3RlY3RlZFByb2Nlc3NQcm94eS0+
cmVxdWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uOjpSZXF1
ZXN0ZWRCeUNsaWVudCk7CisgICAgfQogfQogCi0tICh2b2lkKV9nZXRDb250ZW50c0FzQXR0cmli
dXRlZFN0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBdHRyaWJ1dGVkU3Ry
aW5nICosIE5TRGljdGlvbmFyeTxOU0F0dHJpYnV0ZWRTdHJpbmdEb2N1bWVudEF0dHJpYnV0ZUtl
eSwgaWQ+ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKENHUmVjdClfY29udmVy
dFJlY3RGcm9tUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMKIHsKLSAgICBfcGFnZS0+Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoW2hhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiBhdHRyaWJ1dGVkU3Ry
aW5nKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZykKLSAgICAgICAgICAg
IGhhbmRsZXIoW1thdHRyaWJ1dGVkU3RyaW5nLnN0cmluZy5nZXQoKSByZXRhaW5dIGF1dG9yZWxl
YXNlXSwgW1thdHRyaWJ1dGVkU3RyaW5nLmRvY3VtZW50QXR0cmlidXRlcy5nZXQoKSByZXRhaW5d
IGF1dG9yZWxlYXNlXSwgbmlsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlcihu
aWwsIG5pbCwgY3JlYXRlTlNFcnJvcihXS0Vycm9yVW5rbm93bikuZ2V0KCkpOwotICAgIH0pOwor
ICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgZWFzaWVyIHRvIHRhbGsgYWJvdXQgV0tXZWJWaWV3
IGNvb3JkaW5hdGVzIGluIGEgY29uc2lzdGVudCBhbmQgY3Jvc3MtcGxhdGZvcm0gd2F5LgorICAg
IC8vIEN1cnJlbnRseSwgbmVpdGhlciAicm9vdCB2aWV3IiBub3IgIndpbmRvdyIgbWVhbiAiV0tX
ZWJWaWV3IGNvb3JkaW5hdGVzIiBvbiBib3RoIHBsYXRmb3Jtcy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTkzNjQ5IGFuZCByZWxhdGVkIGJ1Z3MuCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlcyBmcm9tVmlldzpfY29udGVudFZpZXcuZ2V0KCldOworI2Vsc2UKKyAgICByZXR1cm4g
cmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKKyNlbmRpZgogfQogCi0tICh2b2lkKV9nZXRBcHBs
aWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyCistIChDR1JlY3QpX2NvbnZlcnRSZWN0
VG9Sb290Vmlld0Nvb3JkaW5hdGVzOihDR1JlY3QpcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzCiB7
Ci0jaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQotICAgIF9wYWdlLT5nZXRBcHBsaWNh
dGlvbk1hbmlmZXN0KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9u
SGFuZGxlcildKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q+JiBt
YW5pZmVzdCwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShlcnJvcik7Ci0gICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikgewotICAg
ICAgICAgICAgaWYgKG1hbmlmZXN0KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBhcGlNYW5pZmVz
dCA9IEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdDo6Y3JlYXRlKCptYW5pZmVzdCk7Ci0gICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod3JhcHBlcihhcGlNYW5pZmVzdCkpOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAg
ICAgICAgfQotICAgIH0pOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFtz
ZWxmIGNvbnZlcnRSZWN0OnJlY3RJbldlYlZpZXdDb29yZGluYXRlcyB0b1ZpZXc6X2NvbnRlbnRW
aWV3LmdldCgpXTsKICNlbHNlCi0gICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgIHJldHVybiByZWN0SW5XZWJWaWV3Q29vcmRpbmF0
ZXM7CiAjZW5kaWYKIH0KIAotLSAoX1dLUGFnaW5hdGlvbk1vZGUpX3BhZ2luYXRpb25Nb2RlCist
ICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0SW5XZWJW
aWV3Q29vcmRpbmF0ZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0
SW5wdXRDb250ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgc3dpdGNoIChfcGFn
ZS0+cGFnaW5hdGlvbk1vZGUoKSkgewotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5w
YWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOwot
ICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ6Ci0gICAg
ICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0OwotICAgIGNhc2UgV2ViQ29y
ZTo6UGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQ
YWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6
VG9wVG9Cb3R0b21QYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVRv
cFRvQm90dG9tOwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdp
bmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50
Vmlld10pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQFtdKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KKyNlbmRpZgogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7CisgICAgQ0dSZWN0IHJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMgPSBbc2VsZiBfY29udmVydFJlY3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6cmVj
dEluV2ViVmlld0Nvb3JkaW5hdGVzXTsKKyAgICBhdXRvIHdlYWtTZWxmID0gV2Vha09iakNQdHI8
V0tXZWJWaWV3PihzZWxmKTsKKyAgICBfcGFnZS0+dGV4dElucHV0Q29udGV4dHNJblJlY3QocmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcywgW3dlYWtTZWxmLCBjYXB0dXJlZENvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpFbGVtZW50Q29udGV4dD4mIGNvbnRleHRzKSB7CisgICAgICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gZWxlbWVudHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6Y29udGV4dHMuc2l6ZSgpXSk7CisKKyAgICAgICAgYXV0byBzdHJvbmdT
ZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29udGV4dCA6
IGNvbnRleHRzKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCBjb250ZXh0
V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3QgPSBjb250ZXh0OworICAgICAgICAgICAgY29udGV4dFdp
dGhXZWJWaWV3Qm91bmRpbmdSZWN0LmJvdW5kaW5nUmVjdCA9IFtzdHJvbmdTZWxmIF9jb252ZXJ0
UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOmNvbnRleHQuYm91bmRpbmdSZWN0XTsKKyAgICAg
ICAgICAgIFtlbGVtZW50cyBhZGRPYmplY3Q6YWRvcHROUyhbW19XS1RleHRJbnB1dENvbnRleHQg
YWxsb2NdIF9pbml0V2l0aFRleHRJbnB1dENvbnRleHQ6Y29udGV4dFdpdGhXZWJWaWV3Qm91bmRp
bmdSZWN0XSkuZ2V0KCldOworICAgICAgICB9CisKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9u
SGFuZGxlcihlbGVtZW50cy5nZXQoKSk7CisgICAgfSk7CiB9CiAKLS0gKHZvaWQpX3NldFBhZ2lu
YXRpb25Nb2RlOihfV0tQYWdpbmF0aW9uTW9kZSlwYWdpbmF0aW9uTW9kZQorLSAodm9pZClfZm9j
dXNUZXh0SW5wdXRDb250ZXh0OihfV0tUZXh0SW5wdXRDb250ZXh0ICopdGV4dElucHV0Q29udGV4
dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgogewot
ICAgIFdlYkNvcmU6OlBhZ2luYXRpb246Ok1vZGUgbW9kZTsKLSAgICBzd2l0Y2ggKHBhZ2luYXRp
b25Nb2RlKSB7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgotICAgICAg
ICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDoKLSAgICAgICAgbW9kZSA9
IFdlYkNvcmU6OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6Ci0gICAgICAgIG1vZGUg
PSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOgotICAgICAgICBtb2Rl
ID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0ZWQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDoKLSAgICAgICAgbW9k
ZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFb
c2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoTk8pOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAKLSAgICBfcGFnZS0+c2V0
UGFnaW5hdGlvbk1vZGUobW9kZSk7CisgICAgYXV0byB3ZWJDb250ZXh0ID0gW3RleHRJbnB1dENv
bnRleHQgX3RleHRJbnB1dENvbnRleHRdOworICAgIGlmICh3ZWJDb250ZXh0LndlYlBhZ2VJZGVu
dGlmaWVyICE9IF9wYWdlLT53ZWJQYWdlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNl
Ok5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlRoZSBwcm92aWRlZCBfV0tUZXh0
SW5wdXRDb250ZXh0IHdhcyBub3QgY3JlYXRlZCBieSB0aGlzIFdLV2ViVmlldy4iXTsKKworICAg
IFtzZWxmIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKKworICAgIF9wYWdlLT5mb2N1c1RleHRJbnB1
dENvbnRleHQod2ViQ29udGV4dCwgW2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgY2FwdHVy
ZWRDb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICB9KTsKIH0KIAotLSAoQk9PTClfcGFn
aW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucworLSAodm9pZClfdGFrZVBERlNuYXBzaG90V2l0aENv
bmZpZ3VyYXRpb246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0
aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIHJldHVybiBfcGFnZS0+cGFnaW5hdGlvbkJlaGF2ZXNMaWtl
Q29sdW1ucygpOworICAgIFdLUERGQ29uZmlndXJhdGlvbiAqcGRmQ29uZmlndXJhdGlvbiA9IG5p
bDsKKyAgICBpZiAoc25hcHNob3RDb25maWd1cmF0aW9uKSB7CisgICAgICAgIHBkZkNvbmZpZ3Vy
YXRpb24gPSBbW1tXS1BERkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgcGRmQ29uZmlndXJhdGlvbi5yZWN0ID0gc25hcHNob3RDb25maWd1cmF0aW9uLnJl
Y3Q7CisgICAgfQorCisgICAgW3NlbGYgY3JlYXRlUERGV2l0aENvbmZpZ3VyYXRpb246cGRmQ29u
ZmlndXJhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0g
KHZvaWQpX3NldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM6KEJPT0wpYmVoYXZlc0xpa2VD
b2x1bW5zCisjaWYgUExBVEZPUk0oTUFDKQorLSAodm9pZClfc2V0U2hvdWxkU3VwcHJlc3NGaXJz
dFJlc3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3VwcHJlc3MKIHsKLSAgICBfcGFnZS0+c2V0
UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhiZWhhdmVzTGlrZUNvbHVtbnMpOworICAgIF9p
bXBsLT5zZXRTaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcyhzaG91bGRTdXBwcmVz
cyk7CiB9CisjZW5kaWYKIAotLSAoQ0dGbG9hdClfcGFnZUxlbmd0aAorI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCistICh2b2lkICheKSh2b2lkKSlfcmV0YWluQWN0aXZlRm9jdXNlZFN0YXRlCiB7
Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlTGVuZ3RoKCk7CisgICAgKytfYWN0aXZlRm9jdXNlZFN0
YXRlUmV0YWluQ291bnQ7CisKKyAgICAvLyBGSVhNRTogVXNlIHNvbWV0aGluZyBsaWtlIENvbXBs
ZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGJsb2Nr
IGlzIGNhbGxlZCBiZWZvcmUgaXQncyByZWxlYXNlZC4KKyAgICByZXR1cm4gW1tbc2VsZl0gewor
ICAgICAgICAtLV9hY3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKKyAgICB9IGNvcHldIGF1
dG9yZWxlYXNlXTsKIH0KIAotLSAodm9pZClfc2V0UGFnZUxlbmd0aDooQ0dGbG9hdClwYWdlTGVu
Z3RoCistICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3
YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJP
T0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgX3Bh
Z2UtPnNldFBhZ2VMZW5ndGgocGFnZUxlbmd0aCk7CisgICAgdHlwZW9mKGNvbXBsZXRpb25IYW5k
bGVyKSBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBuaWw7CisgICAgaWYgKGNvbXBsZXRpb25IYW5k
bGVyKQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRp
b25IYW5kbGVyKTsKKworICAgIFtfY29udGVudFZpZXcgX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0
aFNlbGVjdGlvbk1vdmluZ0ZvcndhcmQ6c2VsZWN0aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxl
cjpbY29tcGxldGlvbkhhbmRsZXJDb3B5XShCT09MIGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSB7
CisgICAgICAgIGlmICghY29tcGxldGlvbkhhbmRsZXJDb3B5KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weShkaWRCZWNvbWVGaXJzdFJlc3BvbmRl
cik7CisgICAgICAgIEJsb2NrX3JlbGVhc2UoY29tcGxldGlvbkhhbmRsZXJDb3B5KTsKKyAgICB9
XTsKIH0KIAotLSAoQ0dGbG9hdClfZ2FwQmV0d2VlblBhZ2VzCistIChpZClfc25hcHNob3RMYXll
ckNvbnRlbnRzRm9yQmFja0ZvcndhcmRMaXN0SXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICop
aXRlbQogewotICAgIHJldHVybiBfcGFnZS0+Z2FwQmV0d2VlblBhZ2VzKCk7CisgICAgaWYgKF9w
YWdlLT5iYWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpID09ICZpdGVtLl9pdGVtKQorICAg
ICAgICBfcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KCpfcGFnZS0+YmFja0ZvcndhcmRM
aXN0KCkuY3VycmVudEl0ZW0oKSk7CisKKyAgICBpZiAoYXV0byogdmlld1NuYXBzaG90ID0gaXRl
bS5faXRlbS5zbmFwc2hvdCgpKQorICAgICAgICByZXR1cm4gdmlld1NuYXBzaG90LT5hc0xheWVy
Q29udGVudHMoKTsKKworICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpX3NldEdhcEJldHdl
ZW5QYWdlczooQ0dGbG9hdClnYXBCZXR3ZWVuUGFnZXMKKy0gKE5TQXJyYXkgKilfZGF0YURldGVj
dGlvblJlc3VsdHMKIHsKLSAgICBfcGFnZS0+c2V0R2FwQmV0d2VlblBhZ2VzKGdhcEJldHdlZW5Q
YWdlcyk7CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIHJldHVybiBbX2NvbnRlbnRW
aWV3IF9kYXRhRGV0ZWN0aW9uUmVzdWx0c107CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5k
aWYKIH0KIAotLSAoQk9PTClfcGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZAorLSAodm9pZClfYWNj
ZXNzaWJpbGl0eVJldHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50CiB7Ci0gICAgcmV0dXJuIF9w
YWdlLT5wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKCk7CisgICAgW19jb250ZW50VmlldyBhY2Nl
c3NpYmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdOwogfQogCi0tICh2b2lkKV9z
ZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkOihCT09MKWxpbmVHcmlkRW5hYmxlZAorLy8gVGhp
cyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCisvLyBDdXJyZW50bHkgaXQn
cyBvbmx5IGluIFRlc3RSdW5uZXJXS1dlYlZpZXcuCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlk
R2V0U3BlYWtTZWxlY3Rpb25Db250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQKIHsKLSAgICBfcGFn
ZS0+c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChsaW5lR3JpZEVuYWJsZWQpOwogfQogCi0t
IChOU1VJbnRlZ2VyKV9wYWdlQ291bnQKKy0gKFVJVGV4dElucHV0QXNzaXN0YW50SXRlbSAqKWlu
cHV0QXNzaXN0YW50SXRlbQogewotICAgIHJldHVybiBfcGFnZS0+cGFnZUNvdW50KCk7CisgICAg
cmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRBc3Npc3RhbnRJdGVtRm9yV2ViVmlld107CiB9CiAK
LS0gKEJPT0wpX3N1cHBvcnRzVGV4dFpvb20KKyNlbmRpZgorCistIChOU0RhdGEgKilfc2Vzc2lv
blN0YXRlRGF0YQogewotICAgIHJldHVybiBfcGFnZS0+c3VwcG9ydHNUZXh0Wm9vbSgpOworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgdXNlIHRoZSBsZWdhY3kgc2Vzc2lvbiBzdGF0ZSBl
bmNvZGVyLgorICAgIHJldHVybiB3cmFwcGVyKFdlYktpdDo6ZW5jb2RlTGVnYWN5U2Vzc2lvblN0
YXRlKF9wYWdlLT5zZXNzaW9uU3RhdGUoKSkpOwogfQogCi0tIChkb3VibGUpX3RleHRab29tRmFj
dG9yCistIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlCiB7Ci0gICAgcmV0dXJuIF9w
YWdlLT50ZXh0Wm9vbUZhY3RvcigpOworICAgIHJldHVybiBbW1tfV0tTZXNzaW9uU3RhdGUgYWxs
b2NdIF9pbml0V2l0aFNlc3Npb25TdGF0ZTpfcGFnZS0+c2Vzc2lvblN0YXRlKCldIGF1dG9yZWxl
YXNlXTsKIH0KIAotLSAodm9pZClfc2V0VGV4dFpvb21GYWN0b3I6KGRvdWJsZSl6b29tRmFjdG9y
CistIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlV2l0aEZpbHRlcjooQk9PTCAoXiko
V0tCYWNrRm9yd2FyZExpc3RJdGVtICppdGVtKSlmaWx0ZXIKIHsKLSAgICBfcGFnZS0+c2V0VGV4
dFpvb21GYWN0b3Ioem9vbUZhY3Rvcik7CisgICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUgc2Vzc2lv
blN0YXRlID0gX3BhZ2UtPnNlc3Npb25TdGF0ZShbZmlsdGVyXShXZWJLaXQ6OldlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0mIGl0ZW0pIHsKKyAgICAgICAgaWYgKCFmaWx0ZXIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gKGJvb2wpZmlsdGVyKHdyYXBwZXIoaXRlbSkp
OworICAgIH0pOworCisgICAgcmV0dXJuIFtbW19XS1Nlc3Npb25TdGF0ZSBhbGxvY10gX2luaXRX
aXRoU2Vzc2lvblN0YXRlOnNlc3Npb25TdGF0ZV0gYXV0b3JlbGVhc2VdOwogfQogCi0tICh2b2lk
KXNldFBhZ2Vab29tOihDR0Zsb2F0KXBhZ2Vab29tCistICh2b2lkKV9yZXN0b3JlRnJvbVNlc3Np
b25TdGF0ZURhdGE6KE5TRGF0YSAqKXNlc3Npb25TdGF0ZURhdGEKIHsKLSAgICBfcGFnZS0+c2V0
UGFnZVpvb21GYWN0b3IocGFnZVpvb20pOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3Qg
dXNlIHRoZSBsZWdhY3kgc2Vzc2lvbiBzdGF0ZSBkZWNvZGVyLgorICAgIFdlYktpdDo6U2Vzc2lv
blN0YXRlIHNlc3Npb25TdGF0ZTsKKyAgICBpZiAoIVdlYktpdDo6ZGVjb2RlTGVnYWN5U2Vzc2lv
blN0YXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZXNzaW9uU3RhdGVEYXRhLmJ5dGVz
KSwgc2Vzc2lvblN0YXRlRGF0YS5sZW5ndGgsIHNlc3Npb25TdGF0ZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIF9wYWdlLT5yZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShXVEZNb3ZlKHNlc3Npb25T
dGF0ZSksIHRydWUpOwogfQogCi0tIChDR0Zsb2F0KXBhZ2Vab29tCistIChXS05hdmlnYXRpb24g
KilfcmVzdG9yZVNlc3Npb25TdGF0ZTooX1dLU2Vzc2lvblN0YXRlICopc2Vzc2lvblN0YXRlIGFu
ZE5hdmlnYXRlOihCT09MKW5hdmlnYXRlCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlWm9vbUZh
Y3RvcigpOworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5yZXN0b3JlRnJvbVNlc3Npb25TdGF0
ZShzZXNzaW9uU3RhdGUgPyBzZXNzaW9uU3RhdGUtPl9zZXNzaW9uU3RhdGUgOiBXZWJLaXQ6OlNl
c3Npb25TdGF0ZSB7IH0sIG5hdmlnYXRlKSk7CiB9CiAKLS0gKGRvdWJsZSlfcGFnZVpvb21GYWN0
b3IKKy0gKHZvaWQpX2Nsb3NlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHBhZ2Vab29tXTsKKyAgICBf
cGFnZS0+Y2xvc2UoKTsKIH0KIAotLSAodm9pZClfc2V0UGFnZVpvb21GYWN0b3I6KGRvdWJsZSl6
b29tRmFjdG9yCistIChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5h
bWU6KE5TU3RyaW5nICopZmlsZW5hbWUgY29udGVudFR5cGU6KE5TU3RyaW5nICopY29udGVudFR5
cGUgZGF0YTooTlNEYXRhICopZGF0YSBvcHRpb25zOihfV0tBdHRhY2htZW50RGlzcGxheU9wdGlv
bnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIFtzZWxmIHNldFBhZ2Vab29tOnpvb21GYWN0b3JdOworICAgIFVOVVNF
RF9QQVJBTShvcHRpb25zKTsKKyAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmls
ZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSk7CisgICAg
aWYgKGZpbGVuYW1lKQorICAgICAgICBbZmlsZVdyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6
ZmlsZW5hbWVdOworICAgIHJldHVybiBbc2VsZiBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3Jh
cHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTpjb250ZW50VHlwZSBjb21wbGV0aW9u
OmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAotLSAoaWQgPF9XS0RpYWdub3N0aWNMb2dnaW5nRGVs
ZWdhdGU+KV9kaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlCistIChfV0tBdHRhY2htZW50ICopX2lu
c2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBl
ciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBvcHRpb25zOihfV0tBdHRhY2ht
ZW50RGlzcGxheU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNj
ZXNzKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8qIGRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50ID0gX3BhZ2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7Ci0gICAgaWYgKCFkaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBVTlVTRURfUEFSQU0o
b3B0aW9ucyk7CisgICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFw
cGVyOmZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRpb246Y29tcGxl
dGlvbkhhbmRsZXJdOworfQogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQmPigqZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpLmRlbGVnYXRlKCku
YXV0b3JlbGVhc2UoKTsKKy0gKF9XS0F0dGFjaG1lbnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhG
aWxlV3JhcHBlcjooTlNGaWxlV3JhcHBlciAqKWZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOihOU1N0
cmluZyAqKWNvbnRlbnRUeXBlIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21w
bGV0aW9uSGFuZGxlcgoreworI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgYXV0
byBpZGVudGlmaWVyID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIGF1dG8gYXR0
YWNobWVudCA9IEFQSTo6QXR0YWNobWVudDo6Y3JlYXRlKGlkZW50aWZpZXIsICpfcGFnZSk7Cisg
ICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZShmaWxlV3Jh
cHBlciwgY29udGVudFR5cGUpOworICAgIF9wYWdlLT5pbnNlcnRBdHRhY2htZW50KGF0dGFjaG1l
bnQuY29weVJlZigpLCBbY2FwdHVyZWRIYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0gKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBp
ZiAoY2FwdHVyZWRIYW5kbGVyKQorICAgICAgICAgICAgY2FwdHVyZWRIYW5kbGVyKGVycm9yID09
IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgfSk7CisKKyAgICByZXR1
cm4gd3JhcHBlcihhdHRhY2htZW50KTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgog
fQogCi0tICh2b2lkKV9zZXREaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlOihpZDxfV0tEaWFnbm9z
dGljTG9nZ2luZ0RlbGVnYXRlPilkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlCistIChfV0tBdHRh
Y2htZW50ICopX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIK
IHsKLSAgICBhdXRvKiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9wYWdlLT5kaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudCgpOwotICAgIGlmICghZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpCi0gICAg
ICAgIHJldHVybjsKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIGlmIChhdXRv
IGF0dGFjaG1lbnQgPSBfcGFnZS0+YXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikp
CisgICAgICAgIHJldHVybiB3cmFwcGVyKGF0dGFjaG1lbnQpOworI2VuZGlmCisgICAgcmV0dXJu
IG5pbDsKK30KIAotICAgIHN0YXRpY19jYXN0PFdlYktpdDo6RGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQmPigqZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpLnNldERlbGVnYXRlKGRpYWdub3N0aWNMb2dn
aW5nRGVsZWdhdGUpOworLSAodm9pZClfc2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZVdp
dGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhIGdhbW1hOihkb3VibGUpZ2Ft
bWEKK3sKKyAgICBfcGFnZS0+c2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShhbHBoYSwg
YmV0YSwgZ2FtbWEpOwogfQogCi0tIChpZCA8X1dLRmluZERlbGVnYXRlPilfZmluZERlbGVnYXRl
CisrIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdlLT5maW5kQ2xpZW50KCkpLmRlbGVnYXRlKCkuYXV0
b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLSAodm9pZClfc2V0RmluZERlbGVn
YXRlOihpZDxfV0tGaW5kRGVsZWdhdGU+KWZpbmREZWxlZ2F0ZQorLSAodm9pZClfc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJp
bmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5zZXREZWxl
Z2F0ZShmaW5kRGVsZWdhdGUpOworICAgIC8vIEZJWE1FOiBBZG9wdCBfc2hvd1NhZmVCcm93c2lu
Z1dhcm5pbmdXaXRoVVJMIGFuZCByZW1vdmUgdGhpcyBmdW5jdGlvbi4KKyAgICBbc2VsZiBfc2hv
d1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMOm5pbCB0aXRsZTp0aXRsZSB3YXJuaW5nOndhcm5p
bmcgZGV0YWlsczpkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsK
IH0KIAotc3RhdGljIGlubGluZSBXZWJLaXQ6OkZpbmRPcHRpb25zIHRvRmluZE9wdGlvbnMoX1dL
RmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucykKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJu
aW5nV2l0aFVSTDooTlNVUkwgKil1cmwgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzoo
TlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICB1bnNpZ25lZCBmaW5kT3B0aW9ucyA9IDA7CisgICAgYXV0byBzYWZlQnJvd3NpbmdXYXJuaW5n
ID0gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVhdGUodXJsLCB0aXRsZSwgd2Fybmlu
ZywgZGV0YWlscyk7CisgICAgYXV0byB3cmFwcGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVu
c2FmZUxvYWQsIFVSTD4mJiB2YXJpYW50KSB7CisgICAgICAgIHN3aXRjaE9uKHZhcmlhbnQsIFsm
XSAoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQgY29udGludWVVbnNhZmVMb2FkKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnRpbnVlVW5zYWZlTG9hZCkgeworICAgICAgICAgICAgY2FzZSBX
ZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzOgorICAgICAgICAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihZRVMpOworICAgICAgICAgICAgY2FzZSBXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZDo6Tm86CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KE5PKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgWyZdIChVUkwpIHsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTk8p
OworICAgICAgICB9KTsKKyAgICB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBfaW1wbC0+c2hv
d1NhZmVCcm93c2luZ1dhcm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3cmFwcGVy
KSk7CisjZWxzZQorICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJvd3Np
bmdXYXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOworI2VuZGlmCit9
CiAKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZl
KQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0
aXZlOwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMp
Ci0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNBdFdvcmRTdGFydHM7
Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRh
bEFzV29yZFN0YXJ0KQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25z
VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBf
V0tGaW5kT3B0aW9uc0JhY2t3YXJkcykKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpG
aW5kT3B0aW9uc0JhY2t3YXJkczsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRp
b25zV3JhcEFyb3VuZCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9u
c1dyYXBBcm91bmQ7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dP
dmVybGF5KQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd092
ZXJsYXk7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5k
aWNhdG9yKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd0Zp
bmRJbmRpY2F0b3I7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dI
aWdobGlnaHQpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93
SGlnaGxpZ2h0OwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNOb0luZGV4
Q2hhbmdlKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zTm9JbmRl
eENoYW5nZTsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zRGV0ZXJtaW5l
TWF0Y2hJbmRleCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Rl
dGVybWluZU1hdGNoSW5kZXg7CisrIChOU1VSTCAqKV9jb25maXJtTWFsd2FyZVNlbnRpbmVsCit7
CisgICAgcmV0dXJuIFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y29uZmlybU1hbHdhcmVT
ZW50aW5lbCgpOworfQogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlv
bnM+KGZpbmRPcHRpb25zKTsKKysgKE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVs
Cit7CisgICAgcmV0dXJuIFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVX
ZWJzaXRlU2VudGluZWwoKTsKIH0KIAotLSAodm9pZClfY291bnRTdHJpbmdNYXRjaGVzOihOU1N0
cmluZyAqKXN0cmluZyBvcHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihO
U1VJbnRlZ2VyKW1heENvdW50CistICh2b2lkKV9pc0pJVEVuYWJsZWQ6KHZvaWQoXikoQk9PTCkp
Y29tcGxldGlvbkhhbmRsZXIKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChf
Y3VzdG9tQ29udGVudFZpZXcpIHsKLSAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfY291
bnRTdHJpbmdNYXRjaGVzOnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRd
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgX3BhZ2UtPmNvdW50U3RyaW5n
TWF0Y2hlcyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENvdW50KTsKKyAgICBf
cGFnZS0+aXNKSVRFbmFibGVkKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildIChib29sIGVuYWJsZWQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZW5hYmxlZCk7CisgICAgfSk7CiB9CiAKLS0gKHZvaWQpX2ZpbmRTdHJpbmc6KE5TU3RyaW5n
ICopc3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUlu
dGVnZXIpbWF4Q291bnQKKy0gKHZvaWQpX2V2YWx1YXRlSmF2YVNjcmlwdFdpdGhvdXRVc2VyR2Vz
dHVyZTooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShpZCwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgLy8gV2hpbGUgQXBwS2l0IGNvbnRhaW5zIGxvZ2ljIGluIE5TQmFyVGV4
dEZpbmRlciB0byBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgZmluZCBwYXN0ZWJvYXJkCi0gICAg
Ly8gd2hlbiB0aGUgZmluZCBzdHJpbmcgY2hhbmdlcywgdGhpcyAoYWxvbmcgd2l0aCB0aGUgZmlu
ZCBwYXN0ZWJvYXJkIGl0c2VsZikgYXJlIGJvdGggbWlzc2luZwotICAgIC8vIGZyb20gaU9TOyB0
aHVzLCBvbiBpT1MsIHdlIHVwZGF0ZSB0aGUgY3VycmVudCBmaW5kLWluLXBhZ2Ugc3RyaW5nIGhl
cmUuCi0gICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5kKHN0cmluZyk7CisgICAgW3NlbGYg
X2V2YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6Tk8g
Y29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworfQogCi0gICAgaWYgKF9jdXN0
b21Db250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9maW5kU3Ry
aW5nOnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOihfV0tXZWJzaXRl
UG9saWNpZXMgKil3ZWJzaXRlUG9saWNpZXMKK3sKKyAgICBhdXRvIGRhdGEgPSB3ZWJzaXRlUG9s
aWNpZXMud2VicGFnZVByZWZlcmVuY2VzLT5fd2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7CisgICAg
aWYgKGRhdGEud2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJVcGRhdGluZyBXS1dl
YnNpdGVEYXRhU3RvcmUgaXMgb25seSBzdXBwb3J0ZWQgZHVyaW5nIGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24uIl07CisgICAgX3BhZ2UtPnVwZGF0ZVdlYnNpdGVQb2xpY2llcyhXVEZN
b3ZlKGRhdGEpKTsKK30KKworLSAoQk9PTClfYWxsb3dzUmVtb3RlSW5zcGVjdGlvbgoreworI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIHJldHVybiBfcGFnZS0+YWxsb3dzUmVtb3Rl
SW5zcGVjdGlvbigpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CiAjZW5kaWYKLSAgICBfcGFnZS0+
ZmluZFN0cmluZyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENvdW50KTsKIH0K
IAotLSAodm9pZClfaGlkZUZpbmRVSQorLSAodm9pZClfc2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlv
bjooQk9PTClhbGxvdwogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKF9jdXN0
b21Db250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9oaWRlRmlu
ZFVJXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKKyAgICBfcGFnZS0+c2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlvbihhbGxvdyk7CiAjZW5kaWYK
LSAgICBfcGFnZS0+aGlkZUZpbmRVSSgpOwogfQogCi0tICh2b2lkKV9zYXZlQmFja0ZvcndhcmRT
bmFwc2hvdEZvckl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0KKy0gKE5TU3RyaW5n
ICopX3JlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGUKIHsKLSAgICBpZiAoIWl0ZW0pCi0gICAg
ICAgIHJldHVybjsKLSAgICBfcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0uX2l0
ZW0pOworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIHJldHVybiBfcGFnZS0+cmVt
b3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2Vu
ZGlmCiB9CiAKLS0gKGlkIDxfV0tJbnB1dERlbGVnYXRlPilfaW5wdXREZWxlZ2F0ZQorLSAodm9p
ZClfc2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZTooTlNTdHJpbmcgKiluYW1lCiB7Ci0g
ICAgcmV0dXJuIF9pbnB1dERlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQorICAgIF9wYWdlLT5zZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJy
aWRlKG5hbWUpOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldElucHV0RGVsZWdhdGU6KGlkIDxf
V0tJbnB1dERlbGVnYXRlPilpbnB1dERlbGVnYXRlCistIChCT09MKV9hZGRzVmlzaXRlZExpbmtz
CiB7Ci0gICAgX2lucHV0RGVsZWdhdGUgPSBpbnB1dERlbGVnYXRlOworICAgIHJldHVybiBfcGFn
ZS0+YWRkc1Zpc2l0ZWRMaW5rcygpOworfQogCi0gICAgY2xhc3MgRm9ybUNsaWVudCA6IHB1Ymxp
YyBBUEk6OkZvcm1DbGllbnQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEZvcm1DbGllbnQoV0tXZWJWaWV3ICp3ZWJWaWV3
KQotICAgICAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKLSAgICAgICAgewotICAgICAgICB9
CistICh2b2lkKV9zZXRBZGRzVmlzaXRlZExpbmtzOihCT09MKWFkZHNWaXNpdGVkTGlua3MKK3sK
KyAgICBfcGFnZS0+c2V0QWRkc1Zpc2l0ZWRMaW5rcyhhZGRzVmlzaXRlZExpbmtzKTsKK30KIAot
ICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkgeyB9CistIChCT09MKV9uZXR3b3JrUmVxdWVz
dHNJblByb2dyZXNzCit7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdlTG9hZFN0YXRlKCkubmV0d29y
a1JlcXVlc3RzSW5Qcm9ncmVzcygpOworfQogCi0gICAgICAgIHZvaWQgd2lsbFN1Ym1pdEZvcm0o
V2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJLaXQ6Oldl
YkZyYW1lUHJveHkmIHNvdXJjZUZyYW1lLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFdURjo6U3Ry
aW5nLCBXVEY6OlN0cmluZz4+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSTo6T2JqZWN0KiB1c2VyRGF0
YSwgV1RGOjpGdW5jdGlvbjx2b2lkKHZvaWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodXNlckRhdGEgJiYgdXNlckRhdGEtPnR5cGUo
KSAhPSBBUEk6Ok9iamVjdDo6VHlwZTo6RGF0YSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCgh
dXNlckRhdGEgfHwgdXNlckRhdGEtPnR5cGUoKSA9PSBBUEk6Ok9iamVjdDo6VHlwZTo6RGF0YSk7
Ci0gICAgICAgICAgICAgICAgbV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24o
KS0+bWFya0N1cnJlbnRseURpc3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKCk7Ci0gICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9CitzdGF0aWMgaW5saW5lIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3Rv
bmU+IGxheW91dE1pbGVzdG9uZXMoX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMgZXZlbnRzKQor
eworICAgIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IG1pbGVzdG9uZXM7CiAK
LSAgICAgICAgICAgIGF1dG8gaW5wdXREZWxlZ2F0ZSA9IG1fd2ViVmlldy0+X2lucHV0RGVsZWdh
dGUuZ2V0KCk7CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJz
dExheW91dCkKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RMYXlvdXQp
OwogCi0gICAgICAgICAgICBpZiAoIVtpbnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dXNlck9iamVjdDpzdWJtaXNz
aW9uSGFuZGxlcjopXSkgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgIGlmIChldmVudHMgJiBf
V0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KQorICAg
ICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXQpOwogCi0gICAgICAgICAgICBhdXRvIHZhbHVlTWFwID0gYWRvcHROUyhbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dGV4dEZpZWxkVmFsdWVzLnNpemUoKV0p
OwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdGV4dEZpZWxkVmFsdWVzKQot
ICAgICAgICAgICAgICAgIFt2YWx1ZU1hcCBzZXRPYmplY3Q6cGFpci5zZWNvbmQgZm9yS2V5OnBh
aXIuZmlyc3RdOworICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmly
c3RQYWludFdpdGhTaWduaWZpY2FudEFyZWEpCisgICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNv
cmU6OkRpZEhpdFJlbGV2YW50UmVwYWludGVkT2JqZWN0c0FyZWFUaHJlc2hvbGQpOwogCi0gICAg
ICAgICAgICBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+ICp1c2VyT2JqZWN0ID0gbmlsOwotICAg
ICAgICAgICAgaWYgKEFQSTo6RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEFQSTo6RGF0YSo+KHVz
ZXJEYXRhKSkgewotICAgICAgICAgICAgICAgIGF1dG8gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDxjb25zdCB2b2lkKj4oZGF0YS0+Ynl0ZXMoKSkpIGxlbmd0aDpkYXRhLT5zaXplKCkgZnJlZVdo
ZW5Eb25lOk5PXSk7Ci0gICAgICAgICAgICAgICAgYXV0byB1bmFyY2hpdmVyID0gc2VjdXJlVW5h
cmNoaXZlckZyb21EYXRhKG5zRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgQHRyeSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhbGxvd2VkQ2xhc3NlcyA9IG1fd2ViVmlldy0+
X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmFsbG93ZWRDbGFzc2VzRm9yUGFyYW1ldGVy
Q29kaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VyT2JqZWN0ID0gW3VuYXJjaGl2
ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOmFsbG93ZWRDbGFzc2VzIGZvcktleTpAInVzZXJPYmpl
Y3QiXTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
dXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TT2JqZWN0IGNs
YXNzXSBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07Ci0gICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5T
RXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZGVjb2RlIHVzZXIgZGF0YTogJUAiLCBleGNlcHRpb24pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jl
c3NFdmVudFJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCkK
KyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6UmVhY2hlZFNlc3Npb25SZXN0b3JhdGlv
blJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsKIAotICAgICAgICAgICAgYXV0byBjaGVja2VyID0g
V2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoaW5wdXREZWxlZ2F0
ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OndpbGxTdWJtaXRGb3JtVmFsdWVzOnVzZXJPYmpl
Y3Q6c3VibWlzc2lvbkhhbmRsZXI6KSk7Ci0gICAgICAgICAgICBbaW5wdXREZWxlZ2F0ZSBfd2Vi
VmlldzptX3dlYlZpZXcgd2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dmFsdWVNYXAuZ2V0KCkgdXNlck9i
amVjdDp1c2VyT2JqZWN0IHN1Ym1pc3Npb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUo
Y2hlY2tlcildIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRs
ZXJIYXNCZWVuQ2FsbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSkuZ2V0KCldOwotICAgICAg
ICB9CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdExheW91
dEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFsUmVuZGVyaW5nKQorICAgICAgICBtaWxlc3RvbmVz
LmFkZChXZWJDb3JlOjpEaWRGaXJzdExheW91dEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFsUmVu
ZGVyaW5nKTsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owot
ICAgIH07CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBh
aW50QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpCisgICAgICAgIG1pbGVzdG9u
ZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0UGFpbnRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJl
bmRlcmluZyk7CiAKLSAgICBpZiAoaW5wdXREZWxlZ2F0ZSkKLSAgICAgICAgX3BhZ2UtPnNldEZv
cm1DbGllbnQobWFrZVVuaXF1ZTxGb3JtQ2xpZW50PihzZWxmKSk7Ci0gICAgZWxzZQotICAgICAg
ICBfcGFnZS0+c2V0Rm9ybUNsaWVudChudWxscHRyKTsKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVu
ZGVyaW5nUHJvZ3Jlc3NFdmVudERpZFJlbmRlclNpZ25pZmljYW50QW1vdW50T2ZUZXh0KQorICAg
ICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRSZW5kZXJTaWduaWZpY2FudEFtb3VudE9m
VGV4dCk7CisKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0
TWVhbmluZ2Z1bFBhaW50KQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJz
dE1lYW5pbmdmdWxQYWludCk7CisKKyAgICByZXR1cm4gbWlsZXN0b25lczsKIH0KIAotLSAoQk9P
TClfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlRG9jdW1lbnQKKy0gKHZvaWQpX3NldE9ic2Vy
dmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM6KF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKW9i
c2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMKIHsKLSAgICBpZiAoYXV0byogbWFpbkZyYW1l
ID0gX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3Bs
YXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudCgpOwotICAgIHJldHVybiBOTzsKKyAgICBfb2Jz
ZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyA9IG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NF
dmVudHM7CisgICAgX3BhZ2UtPmxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMobGF5b3V0TWlsZXN0
b25lcyhvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKSk7CiB9CiAKLS0gKEJPT0wpX2lz
RGlzcGxheWluZ1N0YW5kYWxvbmVNZWRpYURvY3VtZW50CistICh2b2lkKV9nZXRNYWluUmVzb3Vy
Y2VEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmIChhdXRvKiBtYWluRnJhbWUgPSBfcGFnZS0+
bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBtYWluRnJhbWUtPmlzRGlzcGxheWluZ1N0YW5k
YWxvbmVNZWRpYURvY3VtZW50KCk7Ci0gICAgcmV0dXJuIE5POworICAgIGF1dG8gaGFuZGxlciA9
IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKworICAgIF9wYWdlLT5nZXRNYWlu
UmVzb3VyY2VEYXRhT2ZGcmFtZShfcGFnZS0+bWFpbkZyYW1lKCksIFtoYW5kbGVyXShBUEk6OkRh
dGEqIGRhdGEsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICB2
b2lkICheY29tcGxldGlvbkhhbmRsZXJCbG9jaykoTlNEYXRhICosIE5TRXJyb3IgKikgPSAodm9p
ZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgaWYgKGVy
cm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJvbSB0aGUgV2ViUGFnZVByb3h5Lgor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayhuaWwsIFtOU0Vycm9yIGVycm9yV2l0
aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6c3RhdGljX2Nhc3Q8aW50PihlcnJvcikgdXNlcklu
Zm86bmlsXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJC
bG9jayh3cmFwcGVyKCpkYXRhKSwgbmlsKTsKKyAgICB9KTsKIH0KIAotLSAoQk9PTClfaXNQbGF5
aW5nQXVkaW8KKy0gKHZvaWQpX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAg
IHJldHVybiBfcGFnZS0+aXNQbGF5aW5nQXVkaW8oKTsKKyAgICBbc2VsZiBjcmVhdGVXZWJBcmNo
aXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0g
KEJPT0wpX2lzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKKy0gKHZvaWQpX2dldENv
bnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nICos
IE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmlzU2hv
d2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgX3BhZ2UtPmdldENvbnRlbnRzQXNT
dHJpbmcoW2hhbmRsZXJdKFN0cmluZyBzdHJpbmcsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
ciBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVy
cm9yOjpOb25lKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUGlwZSBhIHByb3BlciBlcnJvciBp
biBmcm9tIHRoZSBXZWJQYWdlUHJveHkuCisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJy
b3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2FzdDxpbnQ+KGVy
cm9yKSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBoYW5kbGVy
KHN0cmluZywgbmlsKTsKKyAgICB9KTsKIH0KIAotLSAoX1dLTGF5b3V0TW9kZSlfbGF5b3V0TW9k
ZQorLSAodm9pZClfZ2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmdXaXRoQ29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TQXR0cmlidXRlZFN0cmluZyAqLCBOU0RpY3Rpb25hcnk8TlNBdHRy
aWJ1dGVkU3RyaW5nRG9jdW1lbnRBdHRyaWJ1dGVLZXksIGlkPiAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHN3aXRjaCAoX2ltcGwtPmxh
eW91dE1vZGUoKSkgewotICAgIGNhc2Uga1dLTGF5b3V0TW9kZUZpeGVkU2l6ZToKLSAgICAgICAg
cmV0dXJuIF9XS0xheW91dE1vZGVGaXhlZFNpemU7Ci0gICAgY2FzZSBrV0tMYXlvdXRNb2RlRHlu
YW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6Ci0gICAgICAgIHJldHVybiBfV0tMYXlvdXRN
b2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU7Ci0gICAgY2FzZSBrV0tMYXlvdXRN
b2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOgotICAgICAgICBy
ZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50
U2l6ZTsKLSAgICBjYXNlIGtXS0xheW91dE1vZGVWaWV3U2l6ZToKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZVZpZXdTaXplOwotICAgIH0KKyAgICBfcGFnZS0+Z2V0
Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoW2hhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXShhdXRvJiBhdHRyaWJ1dGVkU3RyaW5nKSB7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVkU3RyaW5nLnN0cmluZykKKyAgICAgICAgICAgIGhhbmRsZXIoW1thdHRyaWJ1dGVkU3Ry
aW5nLnN0cmluZy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSwgW1thdHRyaWJ1dGVkU3RyaW5n
LmRvY3VtZW50QXR0cmlidXRlcy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSwgbmlsKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlcihuaWwsIG5pbCwgY3JlYXRlTlNFcnJvcihX
S0Vycm9yVW5rbm93bikuZ2V0KCkpOworICAgIH0pOworfQorCistICh2b2lkKV9nZXRBcHBsaWNh
dGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9O
X01BTklGRVNUKQorICAgIF9wYWdlLT5nZXRBcHBsaWNhdGlvbk1hbmlmZXN0KFtjb21wbGV0aW9u
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q+JiBtYW5pZmVzdCwgV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAg
ICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICAgICAgaWYgKG1hbmlmZXN0KSB7
CisgICAgICAgICAgICAgICAgYXV0byBhcGlNYW5pZmVzdCA9IEFQSTo6QXBwbGljYXRpb25NYW5p
ZmVzdDo6Y3JlYXRlKCptYW5pZmVzdCk7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIod3JhcHBlcihhcGlNYW5pZmVzdCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgfQorICAgIH0pOwogI2Vsc2UK
LSAgICByZXR1cm4gX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkgPyBfV0tMYXlvdXRNb2RlRml4ZWRT
aXplIDogX1dLTGF5b3V0TW9kZVZpZXdTaXplOworICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKICNlbmRpZgogfQogCi0tICh2b2lkKV9z
ZXRMYXlvdXRNb2RlOihfV0tMYXlvdXRNb2RlKWxheW91dE1vZGUKKy0gKF9XS1BhZ2luYXRpb25N
b2RlKV9wYWdpbmF0aW9uTW9kZQogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBXS0xheW91dE1v
ZGUgd2tWaWV3TGF5b3V0TW9kZTsKLSAgICBzd2l0Y2ggKGxheW91dE1vZGUpIHsKLSAgICBjYXNl
IF9XS0xheW91dE1vZGVGaXhlZFNpemU6Ci0gICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tM
YXlvdXRNb2RlRml4ZWRTaXplOworICAgIHN3aXRjaCAoX3BhZ2UtPnBhZ2luYXRpb25Nb2RlKCkp
IHsKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOgorICAgICAgICBy
ZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDsKKyAgICBjYXNlIFdlYkNvcmU6OlBh
Z2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOgorICAgICAgICByZXR1cm4gX1dLUGFnaW5h
dGlvbk1vZGVMZWZ0VG9SaWdodDsKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlJpZ2h0
VG9MZWZ0UGFnaW5hdGVkOgorICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVSaWdodFRv
TGVmdDsKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVk
OgorICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbTsKKyAgICBjYXNl
IFdlYkNvcmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOgorICAgICAgICByZXR1
cm4gX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDsKK30K
KworLSAodm9pZClfc2V0UGFnaW5hdGlvbk1vZGU6KF9XS1BhZ2luYXRpb25Nb2RlKXBhZ2luYXRp
b25Nb2RlCit7CisgICAgV2ViQ29yZTo6UGFnaW5hdGlvbjo6TW9kZSBtb2RlOworICAgIHN3aXRj
aCAocGFnaW5hdGlvbk1vZGUpIHsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0
ZWQ6CisgICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZy
b21WaWV3U2NhbGU6Ci0gICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRHlu
YW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU7CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9k
ZUxlZnRUb1JpZ2h0OgorICAgICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6TGVmdFRv
UmlnaHRQYWdpbmF0ZWQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5
bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZToKLSAgICAgICAgd2tWaWV3
TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1E
b2N1bWVudFNpemU7CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OgorICAg
ICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZVZpZXdTaXplOgotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlVmlld1NpemU7Cisg
ICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOgorICAgICAgICBtb2RlID0gV2Vi
Q29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0ZWQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDoKKyAgICAgICAgbW9kZSA9IFdl
YkNvcmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOwogICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CiAgICAgfQotICAgIF9pbXBsLT5zZXRMYXlv
dXRNb2RlKHdrVmlld0xheW91dE1vZGUpOwotI2Vsc2UKLSAgICBfcGFnZS0+c2V0VXNlRml4ZWRM
YXlvdXQobGF5b3V0TW9kZSA9PSBfV0tMYXlvdXRNb2RlRml4ZWRTaXplIHx8IGxheW91dE1vZGUg
PT0gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlKTsKLSNlbmRp
ZgorCisgICAgX3BhZ2UtPnNldFBhZ2luYXRpb25Nb2RlKG1vZGUpOwogfQogCi0tIChDR1NpemUp
X2ZpeGVkTGF5b3V0U2l6ZQorLSAoQk9PTClfcGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucwog
ewotICAgIHJldHVybiBfcGFnZS0+Zml4ZWRMYXlvdXRTaXplKCk7CisgICAgcmV0dXJuIF9wYWdl
LT5wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKCk7CiB9CiAKLS0gKHZvaWQpX3NldEZpeGVk
TGF5b3V0U2l6ZTooQ0dTaXplKWZpeGVkTGF5b3V0U2l6ZQorLSAodm9pZClfc2V0UGFnaW5hdGlv
bkJlaGF2ZXNMaWtlQ29sdW1uczooQk9PTCliZWhhdmVzTGlrZUNvbHVtbnMKIHsKLSAgICBfcGFn
ZS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpG
bG9hdFNpemUoZml4ZWRMYXlvdXRTaXplKSkpOworICAgIF9wYWdlLT5zZXRQYWdpbmF0aW9uQmVo
YXZlc0xpa2VDb2x1bW5zKGJlaGF2ZXNMaWtlQ29sdW1ucyk7CiB9CiAKLS0gKHZvaWQpX3NldEJh
Y2tncm91bmRFeHRlbmRzQmV5b25kUGFnZTooQk9PTCliYWNrZ3JvdW5kRXh0ZW5kcworLSAoQ0dG
bG9hdClfcGFnZUxlbmd0aAogewotICAgIF9wYWdlLT5zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9u
ZFBhZ2UoYmFja2dyb3VuZEV4dGVuZHMpOworICAgIHJldHVybiBfcGFnZS0+cGFnZUxlbmd0aCgp
OwogfQogCi0tIChCT09MKV9iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UKKy0gKHZvaWQpX3Nl
dFBhZ2VMZW5ndGg6KENHRmxvYXQpcGFnZUxlbmd0aAogewotICAgIHJldHVybiBfcGFnZS0+YmFj
a2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKCk7CisgICAgX3BhZ2UtPnNldFBhZ2VMZW5ndGgocGFn
ZUxlbmd0aCk7CiB9CiAKLS0gKENHRmxvYXQpX3ZpZXdTY2FsZQorLSAoQ0dGbG9hdClfZ2FwQmV0
d2VlblBhZ2VzCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBfcGFnZS0+dmlld1Nj
YWxlRmFjdG9yKCk7Ci0jZWxzZQotICAgIHJldHVybiBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFj
dG9yKCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UtPmdhcEJldHdlZW5QYWdlcygpOwogfQog
Ci0tICh2b2lkKV9zZXRWaWV3U2NhbGU6KENHRmxvYXQpdmlld1NjYWxlCistICh2b2lkKV9zZXRH
YXBCZXR3ZWVuUGFnZXM6KENHRmxvYXQpZ2FwQmV0d2VlblBhZ2VzCiB7Ci0gICAgaWYgKHZpZXdT
Y2FsZSA8PSAwIHx8IGlzbmFuKHZpZXdTY2FsZSkgfHwgaXNpbmYodmlld1NjYWxlKSkKLSAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpA
IlZpZXcgc2NhbGUgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyIl07Ci0KLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgX2ltcGwtPnNldFZpZXdTY2FsZSh2aWV3U2NhbGUpOwotI2Vsc2UKLSAgICBp
ZiAoX3BhZ2UtPmxheW91dFNpemVTY2FsZUZhY3RvcigpID09IHZpZXdTY2FsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRT
aXplKFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgdmlld1NjYWxlLCBf
cGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkpOwotI2VuZGlmCisgICAgX3BhZ2Ut
PnNldEdhcEJldHdlZW5QYWdlcyhnYXBCZXR3ZWVuUGFnZXMpOwogfQogCi0tICh2b2lkKV9zZXRN
aW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGg6KENHRmxvYXQpbWluaW11bUVmZmVjdGl2ZURldmlj
ZVdpZHRoCistIChCT09MKV9wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkCiB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0
aCgpID09IG1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXplKFtzZWxmIGFj
dGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgX3BhZ2UtPmxheW91dFNpemVTY2FsZUZh
Y3RvcigpLCBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgpOwotI2VuZGlmCisgICAgcmV0dXJu
IF9wYWdlLT5wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKCk7CiB9CiAKLS0gKENHRmxvYXQpX21p
bmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aAorLSAodm9pZClfc2V0UGFnaW5hdGlvbkxpbmVHcmlk
RW5hYmxlZDooQk9PTClsaW5lR3JpZEVuYWJsZWQKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIHJldHVybiBfcGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCk7Ci0jZWxz
ZQotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAgX3BhZ2UtPnNldFBhZ2luYXRpb25MaW5lR3Jp
ZEVuYWJsZWQobGluZUdyaWRFbmFibGVkKTsKIH0KIAotI3ByYWdtYSBtYXJrIHNjcm9sbHBlcmYg
bWV0aG9kcwotCi0tICh2b2lkKV9zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5h
YmxlZDooQk9PTCllbmFibGVkCistIChOU1VJbnRlZ2VyKV9wYWdlQ291bnQKIHsKLSAgICBfcGFn
ZS0+c2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoZW5hYmxlZCk7Cisg
ICAgcmV0dXJuIF9wYWdlLT5wYWdlQ291bnQoKTsKIH0KIAotLSAoQk9PTClfc2Nyb2xsUGVyZm9y
bWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQKKy0gKEJPT0wpX3N1cHBvcnRzVGV4dFpvb20KIHsK
LSAgICByZXR1cm4gX3BhZ2UtPnNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVk
KCk7CisgICAgcmV0dXJuIF9wYWdlLT5zdXBwb3J0c1RleHRab29tKCk7CiB9CiAKLS0gKE5TQXJy
YXkgKilfc2Nyb2xsUGVyZm9ybWFuY2VEYXRhCistIChkb3VibGUpX3RleHRab29tRmFjdG9yCiB7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoV2ViS2l0OjpSZW1vdGVMYXllclRy
ZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEqIHNjcm9sbFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YSgpKQotICAgICAgICByZXR1cm4gc2Nyb2xsUGVyZkRhdGEtPmRh
dGEoKTsKLSNlbmRpZgotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIF9wYWdlLT50ZXh0Wm9v
bUZhY3RvcigpOwogfQogCi0jcHJhZ21hIG1hcmsgbWVkaWEgcGxheWJhY2sgcmVzdHJpY3Rpb25z
Ci0KLS0gKEJPT0wpX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjawotewotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIF9wYWdlLT5hbGxvd3NNZWRpYURvY3VtZW50
SW5saW5lUGxheWJhY2soKTsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCi19Ci0KLS0g
KHZvaWQpX3NldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjazooQk9PTClmbGFnCi17
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBfcGFnZS0+c2V0QWxsb3dzTWVkaWFEb2N1
bWVudElubGluZVBsYXliYWNrKGZsYWcpOwotI2VuZGlmCi19Ci0KLS0gKEJPT0wpX3dlYlByb2Nl
c3NJc1Jlc3BvbnNpdmUKLXsKLSAgICByZXR1cm4gX3BhZ2UtPnByb2Nlc3MoKS5pc1Jlc3BvbnNp
dmUoKTsKLX0KLQotLSAodm9pZClfc2V0RnVsbHNjcmVlbkRlbGVnYXRlOihpZDxfV0tGdWxsc2Ny
ZWVuRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAg
IGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50
KCkpKQotICAgICAgICBkb3duY2FzdDxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5m
dWxsc2NyZWVuQ2xpZW50KCkpLnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLSNlbmRpZgotfQotCi0t
IChpZDxfV0tGdWxsc2NyZWVuRGVsZWdhdGU+KV9mdWxsc2NyZWVuRGVsZWdhdGUKLXsKLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVu
dD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxX
ZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLmRlbGVn
YXRlKCkuYXV0b3JlbGVhc2UoKTsKLSNlbmRpZgotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKEJP
T0wpX2lzSW5GdWxsc2NyZWVuCi17Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHJl
dHVybiBfcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKSAmJiBfcGFnZS0+ZnVsbFNjcmVlbk1hbmFn
ZXIoKS0+aXNGdWxsU2NyZWVuKCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi0tIChfV0tNZWRpYUNhcHR1cmVTdGF0ZSlfbWVkaWFDYXB0dXJlU3RhdGUKLXsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b1dLTWVkaWFDYXB0dXJlU3RhdGUoX3BhZ2UtPm1lZGlhU3RhdGVGbGFn
cygpKTsKLX0KLQotLSAodm9pZClfc2V0TWVkaWFDYXB0dXJlRW5hYmxlZDooQk9PTCllbmFibGVk
Ci17Ci0gICAgX3BhZ2UtPnNldE1lZGlhQ2FwdHVyZUVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLS0g
KEJPT0wpX21lZGlhQ2FwdHVyZUVuYWJsZWQKLXsKLSAgICByZXR1cm4gX3BhZ2UtPm1lZGlhQ2Fw
dHVyZUVuYWJsZWQoKTsKLX0KLQotLSAodm9pZClfc2V0UGFnZU11dGVkOihfV0tNZWRpYU11dGVk
U3RhdGUpbXV0ZWRTdGF0ZQotewotICAgIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok11dGVkU3Rh
dGVGbGFncyBjb3JlU3RhdGUgPSBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpOb25lTXV0ZWQ7Ci0K
LSAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQXVkaW9NdXRlZCkKLSAgICAgICAgY29yZVN0
YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1ZGlvSXNNdXRlZDsKLSAgICBpZiAobXV0
ZWRTdGF0ZSAmIF9XS01lZGlhQ2FwdHVyZURldmljZXNNdXRlZCkKLSAgICAgICAgY29yZVN0YXRl
IHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1ZGlvQW5kVmlkZW9DYXB0dXJlSXNNdXRlZDsK
LSAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhU2NyZWVuQ2FwdHVyZU11dGVkKQotICAgICAg
ICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6U2NyZWVuQ2FwdHVyZUlzTXV0
ZWQ7Ci0KLSAgICBfcGFnZS0+c2V0TXV0ZWQoY29yZVN0YXRlKTsKLX0KLQotLSAodm9pZClfcmVt
b3ZlRGF0YURldGVjdGVkTGlua3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgotewotI2lm
IEVOQUJMRShEQVRBX0RFVEVDVElPTikKLSAgICBfcGFnZS0+cmVtb3ZlRGF0YURldGVjdGVkTGlu
a3MoW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbiksIHBhZ2UgPSBtYWtlV2Vh
a1B0cihfcGFnZS5nZXQoKSldIChhdXRvJiByZXN1bHQpIHsKLSAgICAgICAgaWYgKHBhZ2UpCi0g
ICAgICAgICAgICBwYWdlLT5zZXREYXRhRGV0ZWN0aW9uUmVzdWx0KHJlc3VsdCk7Ci0gICAgICAg
IGlmIChjb21wbGV0aW9uKQotICAgICAgICAgICAgY29tcGxldGlvbigpOwotICAgIH0pOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7Ci0jZW5kaWYKLX0KLQotI3ByYWdtYSBt
YXJrIGlPUy1zcGVjaWZpYyBtZXRob2RzCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0t
ICh2b2lkKV9kZXRlY3REYXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5cGVzKXR5cGVzIGNv
bXBsZXRpb25IYW5kbGVyOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KLXsKLSNpZiBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCi0gICAgX3BhZ2UtPmRldGVjdERhdGFJbkFsbEZyYW1lcyhmcm9t
V0tEYXRhRGV0ZWN0b3JUeXBlcyh0eXBlcyksIFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb24pLCBwYWdlID0gbWFrZVdlYWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0
KSB7Ci0gICAgICAgIGlmIChwYWdlKQotICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlv
blJlc3VsdChyZXN1bHQpOwotICAgICAgICBpZiAoY29tcGxldGlvbikKLSAgICAgICAgICAgIGNv
bXBsZXRpb24oKTsKLSAgICB9KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGVzKTsKLSAg
ICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLS0gKHZvaWQpcmVtb3ZlRnJvbVN1cGVydmlldwotewotICAgIFtzdXBlciBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIGlzRnVsbFNjcmVlbl0pCi0gICAgICAgIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
d2ViVmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbl07Ci19Ci0jZW5k
aWYKLQotLy8gRGVwcmVjYXRlZCBTUEkuCi0tIChDR1NpemUpX21pbmltdW1MYXlvdXRTaXplT3Zl
cnJpZGUKLXsKLSAgICBBU1NFUlQoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpOwotICAgIHJldHVy
biBfdmlld0xheW91dFNpemVPdmVycmlkZS52YWx1ZU9yKENHU2l6ZVplcm8pOwotfQotCi0tICh2
b2lkKV9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOihDR1NpemUpdmlld0xheW91dFNpemVPdmVy
cmlkZQotewotICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gdmlld0xheW91dFNpemVPdmVy
cmlkZTsKLQotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICBbc2VsZiBfZGlz
cGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUodmlld0xheW91dFNpemVP
dmVycmlkZSldOwotfQotCi0tIChVSUVkZ2VJbnNldHMpX29ic2N1cmVkSW5zZXRzCi17Ci0gICAg
cmV0dXJuIF9vYnNjdXJlZEluc2V0czsKLX0KLQotLSAodm9pZClfc2V0T2JzY3VyZWRJbnNldHM6
KFVJRWRnZUluc2V0cylvYnNjdXJlZEluc2V0cwotewotICAgIEFTU0VSVChvYnNjdXJlZEluc2V0
cy50b3AgPj0gMCk7Ci0gICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLmxlZnQgPj0gMCk7Ci0gICAg
QVNTRVJUKG9ic2N1cmVkSW5zZXRzLmJvdHRvbSA+PSAwKTsKLSAgICBBU1NFUlQob2JzY3VyZWRJ
bnNldHMucmlnaHQgPj0gMCk7Ci0KLSAgICBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzID0gWUVTOwot
Ci0gICAgaWYgKFVJRWRnZUluc2V0c0VxdWFsVG9FZGdlSW5zZXRzKF9vYnNjdXJlZEluc2V0cywg
b2JzY3VyZWRJbnNldHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfb2JzY3VyZWRJbnNldHMg
PSBvYnNjdXJlZEluc2V0czsKLQotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVj
dFVwZGF0ZV07Ci19Ci0KLS0gKFVJUmVjdEVkZ2UpX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVk
QnlTYWZlQXJlYQotewotICAgIHJldHVybiBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNh
ZmVBcmVhOwotfQotCi0tICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2Fm
ZUFyZWE6KFVJUmVjdEVkZ2UpZWRnZXMKLXsKLSAgICBpZiAoZWRnZXMgPT0gX29ic2N1cmVkSW5z
ZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX29ic2N1
cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSA9IGVkZ2VzOwotCi0gICAgW3NlbGYgX3Nj
aGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLX0KLQotLSAoVUlFZGdlSW5zZXRzKV91
bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMKLXsKLSAgICByZXR1cm4gX3Vub2JzY3VyZWRTYWZlQXJl
YUluc2V0czsKLX0KLQotLSAodm9pZClfc2V0VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOihVSUVk
Z2VJbnNldHMpdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzCi17Ci0gICAgQVNTRVJUKHVub2JzY3Vy
ZWRTYWZlQXJlYUluc2V0cy50b3AgPj0gMCk7Ci0gICAgQVNTRVJUKHVub2JzY3VyZWRTYWZlQXJl
YUluc2V0cy5sZWZ0ID49IDApOwotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMu
Ym90dG9tID49IDApOwotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMucmlnaHQg
Pj0gMCk7Ci0KLSAgICBfaGF2ZVNldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFlFUzsKLQot
ICAgIGlmIChVSUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhfdW5vYnNjdXJlZFNhZmVBcmVh
SW5zZXRzLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOwot
Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLX0KLQotLSAo
Qk9PTClfc2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cwotewotICAgIGlmICghW3Nl
bGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgcmV0
dXJuIF9hdm9pZHNVbnNhZmVBcmVhOwotfQotCi0tICh2b2lkKV9zZXRJbnRlcmZhY2VPcmllbnRh
dGlvbk92ZXJyaWRlOihVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9u
Ci17Ci0gICAgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uID0gWUVTOwotICAgIF9pbnRl
cmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlID0gaW50ZXJmYWNlT3JpZW50YXRpb247Ci0KLSAgICBp
ZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRV
cGRhdGVNb2RlOjpOb3RSZXNpemluZykKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0RGV2aWNl
T3JpZW50YXRpb246ZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKF9p
bnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlKV07Ci19Ci0KLS0gKFVJSW50ZXJmYWNlT3JpZW50
YXRpb24pX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUKLXsKLSAgICBBU1NFUlQoX292ZXJy
aWRlc0ludGVyZmFjZU9yaWVudGF0aW9uKTsKLSAgICByZXR1cm4gX2ludGVyZmFjZU9yaWVudGF0
aW9uT3ZlcnJpZGU7Ci19Ci0KLS0gKHZvaWQpX2NsZWFySW50ZXJmYWNlT3JpZW50YXRpb25PdmVy
cmlkZQotewotICAgIF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA9IE5POwotICAgIF9p
bnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlID0gVUlJbnRlcmZhY2VPcmllbnRhdGlvblBvcnRy
YWl0OwotfQotCi0vLyBEZXByZWNhdGVkIFNQSQotLSAoQ0dTaXplKV9tYXhpbXVtVW5vYnNjdXJl
ZFNpemVPdmVycmlkZQotewotICAgIEFTU0VSVChfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUpOwotICAgIHJldHVybiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUudmFsdWVPcihD
R1NpemVaZXJvKTsKLX0KLQotLSAodm9pZClfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGU6KENHU2l6ZSlzaXplCi17Ci0gICAgQVNTRVJUKHNpemUud2lkdGggPD0gc2VsZi5ib3VuZHMu
c2l6ZS53aWR0aCAmJiBzaXplLmhlaWdodCA8PSBzZWxmLmJvdW5kcy5zaXplLmhlaWdodCk7Ci0g
ICAgX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlID0gc2l6ZTsKLQotICAgIGlmIChfZHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRNYXhpbXVtVW5vYnNj
dXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKHNpemUpXTsKLX0KLQotLSAodm9pZClfc2V0QWxs
b3dzVmlld3BvcnRTaHJpbmtUb0ZpdDooQk9PTClhbGxvd1Nocmlua1RvRml0Ci17Ci0gICAgX2Fs
bG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQgPSBhbGxvd1Nocmlua1RvRml0OwotfQotCi0tIChCT09M
KV9hbGxvd3NWaWV3cG9ydFNocmlua1RvRml0Ci17Ci0gICAgcmV0dXJuIF9hbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0OwotfQotCi0tICh2b2lkKV9iZWdpbkludGVyYWN0aXZlT2JzY3VyZWRJbnNl
dHNDaGFuZ2UKLXsKLSAgICBBU1NFUlQoIV9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFj
dGl2ZWx5KTsKLSAgICBfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSA9IFlF
UzsKLX0KLQotLSAodm9pZClfZW5kSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZQotewot
ICAgIEFTU0VSVChfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSk7Ci0gICAg
X2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBOTzsKLSAgICBbc2VsZiBf
c2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwotfQotCi0tICh2b2lkKV9oaWRlQ29u
dGVudFVudGlsTmV4dFVwZGF0ZQotewotICAgIGlmIChhdXRvKiBhcmVhID0gX3BhZ2UtPmRyYXdp
bmdBcmVhKCkpCi0gICAgICAgIGFyZWEtPmhpZGVDb250ZW50VW50aWxBbnlVcGRhdGUoKTsKLX0K
LQotLSAodm9pZClfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jawotewotICAgIENHUmVjdCBvbGRCb3VuZHMgPSBzZWxmLmJvdW5kczsKLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3Qgb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gX3BhZ2UtPnVu
b2JzY3VyZWRDb250ZW50UmVjdCgpOwotCi0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250
ZW50Vmlld10gfHwgIV9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZyYW1lIHx8IENHUmVjdElzRW1w
dHkob2xkQm91bmRzKSB8fCBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczopXSkKLSAgICAgICAgICAgIFtf
Y3VzdG9tQ29udGVudFZpZXcgd2ViX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp1cGRh
dGVCbG9ja107Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwZGF0ZUJsb2NrKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFn
ZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRl
czpdIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKLQotICAgIF9keW5h
bWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
OjpSZXNpemluZ1dpdGhBbmltYXRpb247Ci0KLSAgICBhdXRvIG9sZFZpZXdMYXlvdXRTaXplID0g
W3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdOwotICAgIGF1dG8gb2xkTWF4
aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG9s
ZEJvdW5kcyk7Ci0gICAgaW50MzJfdCBvbGRPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9u
KHNlbGYpOwotICAgIFVJRWRnZUluc2V0cyBvbGRPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZElu
c2V0czsKLQotICAgIHVwZGF0ZUJsb2NrKCk7Ci0KLSAgICBDR1JlY3QgbmV3Qm91bmRzID0gc2Vs
Zi5ib3VuZHM7Ci0gICAgYXV0byBuZXdWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2ZVZpZXdM
YXlvdXRTaXplOm5ld0JvdW5kc107Ci0gICAgYXV0byBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUg
PSBhY3RpdmVNYXhpbXVtVW5vYnNjdXJlZFNpemUoc2VsZiwgbmV3Qm91bmRzKTsKLSAgICBpbnQz
Ml90IG5ld09yaWVudGF0aW9uID0gYWN0aXZlT3JpZW50YXRpb24oc2VsZik7Ci0gICAgVUlFZGdl
SW5zZXRzIG5ld09ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5zZXRzOwotICAgIENHUmVjdCBm
dXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzID0gVUlFZGdlSW5zZXRzSW5zZXRS
ZWN0KG5ld0JvdW5kcywgX29ic2N1cmVkSW5zZXRzKTsKLSAgICBDR1JlY3QgY29udGVudFZpZXdC
b3VuZHMgPSBbX2NvbnRlbnRWaWV3IGJvdW5kc107Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KCEoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUgJiYgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgp
KSwgIkNsaWVudHMgY29udHJvbGxpbmcgdGhlIGxheW91dCBzaXplIHNob3VsZCBtYWludGFpbiBh
IHZhbGlkIGxheW91dCBzaXplIHRvIG1pbmltaXplIGxheW91dHMuIik7Ci0gICAgaWYgKENHUmVj
dElzRW1wdHkobmV3Qm91bmRzKSB8fCBuZXdWaWV3TGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgQ0dS
ZWN0SXNFbXB0eShmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzKSB8fCBDR1Jl
Y3RJc0VtcHR5KGNvbnRlbnRWaWV3Qm91bmRzKSkgewotICAgICAgICBbc2VsZiBfY2FuY2VsQW5p
bWF0ZWRSZXNpemVdOwotICAgICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwotICAg
ICAgICBpZiAoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpCi0gICAgICAgICAgICBbc2VsZiBfZGlz
cGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpuZXdWaWV3TGF5b3V0U2l6ZV07Ci0gICAgICAgIGlmIChf
bWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpCi0gICAgICAgICAgICBbc2VsZiBfZGlzcGF0
Y2hTZXRNYXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKG5ld01heGltdW1V
bm9ic2N1cmVkU2l6ZSldOwotICAgICAgICBpZiAoX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0
aW9uKQotICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0RGV2aWNlT3JpZW50YXRpb246bmV3
T3JpZW50YXRpb25dOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoQ0dSZWN0
RXF1YWxUb1JlY3Qob2xkQm91bmRzLCBuZXdCb3VuZHMpCi0gICAgICAgICYmIG9sZFZpZXdMYXlv
dXRTaXplID09IG5ld1ZpZXdMYXlvdXRTaXplCi0gICAgICAgICYmIG9sZE1heGltdW1Vbm9ic2N1
cmVkU2l6ZSA9PSBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUKLSAgICAgICAgJiYgb2xkT3JpZW50
YXRpb24gPT0gbmV3T3JpZW50YXRpb24KLSAgICAgICAgJiYgVUlFZGdlSW5zZXRzRXF1YWxUb0Vk
Z2VJbnNldHMob2xkT2JzY3VyZWRJbnNldHMsIG5ld09ic2N1cmVkSW5zZXRzKSkgewotICAgICAg
ICBbc2VsZiBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0z
RElkZW50aXR5OwotCi0gICAgaWYgKCFfcmVzaXplQW5pbWF0aW9uVmlldykgewotICAgICAgICBO
U1VJbnRlZ2VyIGluZGV4T2ZDb250ZW50VmlldyA9IFtbX3Njcm9sbFZpZXcgc3Vidmlld3NdIGlu
ZGV4T2ZPYmplY3Q6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICAgICAgX3Jlc2l6ZUFuaW1hdGlv
blZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtfcmVzaXpl
QW5pbWF0aW9uVmlldyBsYXllcl0ubmFtZSA9IEAiUmVzaXplQW5pbWF0aW9uIjsKLSAgICAgICAg
W19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6X3Jlc2l6ZUFuaW1hdGlvblZpZXcuZ2V0KCkgYXRJ
bmRleDppbmRleE9mQ29udGVudFZpZXddOwotICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcg
YWRkU3VidmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlv
blZpZXcgYWRkU3VidmlldzpbX2NvbnRlbnRWaWV3IHVuc2NhbGVkVmlld11dOwotICAgIH0KLQot
ICAgIENHU2l6ZSBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcyA9IGNvbnRlbnRW
aWV3Qm91bmRzLnNpemU7Ci0gICAgW19zY3JvbGxWaWV3IHNldE1pbmltdW1ab29tU2NhbGU6c3Rk
OjptaW4obmV3Vmlld0xheW91dFNpemUud2lkdGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmll
d0Nvb3JkaW5hdGVzLndpZHRoLCBbX3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV0pXTsKLSAg
ICBbX3Njcm9sbFZpZXcgc2V0TWF4aW11bVpvb21TY2FsZTpzdGQ6Om1heChuZXdWaWV3TGF5b3V0
U2l6ZS53aWR0aCgpIC8gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGgs
IFtfc2Nyb2xsVmlldyBtYXhpbXVtWm9vbVNjYWxlXSldOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUg
bmV3IHNjYWxlIHRvIGtlZXAgdGhlIGN1cnJlbnQgY29udGVudCB3aWR0aCBpbiB0aGUgc2Nyb2xs
dmlldy4KLSAgICBDR0Zsb2F0IG9sZFdlYlZpZXdXaWR0aEluQ29udGVudFZpZXdDb29yZGluYXRl
cyA9IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpOwotICAgIF9hbmltYXRlZFJlc2l6
ZU9yaWdpbmFsQ29udGVudFdpZHRoID0gc3RkOjptaW4oY29udGVudFNpemVJbkNvbnRlbnRWaWV3
Q29vcmRpbmF0ZXMud2lkdGgsIG9sZFdlYlZpZXdXaWR0aEluQ29udGVudFZpZXdDb29yZGluYXRl
cyk7Ci0gICAgQ0dGbG9hdCB0YXJnZXRTY2FsZSA9IG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkg
LyBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aDsKLSAgICBDR0Zsb2F0IHJlc2l6
ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSA9IHRhcmdldFNjYWxlIC8gY29udGVudFpvb21T
Y2FsZShzZWxmKTsKLSAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgc2V0VHJhbnNmb3JtOkNHQWZm
aW5lVHJhbnNmb3JtTWFrZVNjYWxlKHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSwg
cmVzaXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxlKV07Ci0KLSAgICAvLyBDb21wdXRlIGEg
bmV3IHBvc2l0aW9uIHRvIGtlZXAgdGhlIGNvbnRlbnQgY2VudGVyZWQuCi0gICAgQ0dQb2ludCBv
cmlnaW5hbENvbnRlbnRDZW50ZXIgPSBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QuY2VudGVyKCk7
Ci0gICAgQ0dQb2ludCBvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNlbGZDb29yZGluYXRlcyA9IFtz
ZWxmIGNvbnZlcnRQb2ludDpvcmlnaW5hbENvbnRlbnRDZW50ZXIgZnJvbVZpZXc6X2NvbnRlbnRW
aWV3LmdldCgpXTsKLSAgICBDR1BvaW50IGZ1dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxm
Q29vcmRpbmF0ZXMgPSBDR1BvaW50TWFrZShmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3Jk
aW5hdGVzLm9yaWdpbi54ICsgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5z
aXplLndpZHRoIC8gMiwgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5vcmln
aW4ueSArIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQg
LyAyKTsKLQotICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50T2Zmc2V0ID0gW19zY3JvbGxWaWV3
IGNvbnRlbnRPZmZzZXRdOwotICAgIENHUG9pbnQgY29udGVudE9mZnNldCA9IG9yaWdpbmFsQ29u
dGVudE9mZnNldDsKLSAgICBjb250ZW50T2Zmc2V0LnggKz0gKG9yaWdpbmFsQ29udGVudENlbnRl
ckluU2VsZkNvb3JkaW5hdGVzLnggLSBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNv
b3JkaW5hdGVzLngpOwotICAgIGNvbnRlbnRPZmZzZXQueSArPSAob3JpZ2luYWxDb250ZW50Q2Vu
dGVySW5TZWxmQ29vcmRpbmF0ZXMueSAtIGZ1dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxm
Q29vcmRpbmF0ZXMueSk7Ci0KLSAgICAvLyBMaW1pdCB0aGUgbmV3IG9mZnNldCB3aXRoaW4gdGhl
IHNjcm9sbHZpZXcsIHdlIGRvIG5vdCB3YW50IHRvIHJ1YmJlciBiYW5kIHByb2dyYW1tYXRpY2Fs
bHkuCi0gICAgQ0dTaXplIGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMgPSBDR1Np
emVNYWtlKGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoICogdGFyZ2V0
U2NhbGUsIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLmhlaWdodCAqIHRhcmdl
dFNjYWxlKTsKLSAgICBDR0Zsb2F0IG1heEhvcml6b250YWxPZmZzZXQgPSBmdXR1cmVDb250ZW50
U2l6ZUluU2VsZkNvb3JkaW5hdGVzLndpZHRoIC0gbmV3Qm91bmRzLnNpemUud2lkdGggKyBfb2Jz
Y3VyZWRJbnNldHMucmlnaHQ7Ci0gICAgY29udGVudE9mZnNldC54ID0gc3RkOjptaW4oY29udGVu
dE9mZnNldC54LCBtYXhIb3Jpem9udGFsT2Zmc2V0KTsKLSAgICBDR0Zsb2F0IG1heFZlcnRpY2Fs
T2Zmc2V0ID0gZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcy5oZWlnaHQgLSBuZXdC
b3VuZHMuc2l6ZS5oZWlnaHQgKyBfb2JzY3VyZWRJbnNldHMuYm90dG9tOwotICAgIGNvbnRlbnRP
ZmZzZXQueSA9IHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQueSwgbWF4VmVydGljYWxPZmZzZXQpOwot
Ci0gICAgY29udGVudE9mZnNldC54ID0gc3RkOjptYXgoY29udGVudE9mZnNldC54LCAtX29ic2N1
cmVkSW5zZXRzLmxlZnQpOwotICAgIGNvbnRlbnRPZmZzZXQueSA9IHN0ZDo6bWF4KGNvbnRlbnRP
ZmZzZXQueSwgLV9vYnNjdXJlZEluc2V0cy50b3ApOwotCi0gICAgLy8gTWFrZSB0aGUgdG9wL2Jv
dHRvbSBlZGdlcyAic3RpY2t5IiB3aXRoaW4gMSBwaXhlbC4KLSAgICBpZiAob2xkVW5vYnNjdXJl
ZENvbnRlbnRSZWN0Lm1heFkoKSA+IGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVz
LmhlaWdodCAtIDEpCi0gICAgICAgIGNvbnRlbnRPZmZzZXQueSA9IG1heFZlcnRpY2FsT2Zmc2V0
OwotICAgIGlmIChvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QueSgpIDwgMSkKLSAgICAgICAgY29u
dGVudE9mZnNldC55ID0gW3NlbGYgX2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld10u
eTsKLQotICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXZlIGNvbnRlbnQgY2VudGVyZWQgYWZ0ZXIgZG91
YmxlIHRhcCB0byB6b29tLCB3ZSBzaG91bGQgYWxzbyB0cnkgdG8ga2VlcCB0aGF0IHJlY3QgaW4g
dmlldy4KLSAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudFNpemU6cm91bmRTY3JvbGxWaWV3Q29u
dGVudFNpemUoKl9wYWdlLCBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzKV07Ci0g
ICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldF07Ci0KLSAgICBD
R1JlY3QgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0
Om5ld0JvdW5kcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICBDR1JlY3QgdW5vYnNj
dXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OmZ1dHVyZVVu
b2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07
Ci0KLSAgICBVSUVkZ2VJbnNldHMgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gW3NlbGYgX2Nv
bXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRdOwotICAgIFdlYkNvcmU6OkZsb2F0Qm94RXh0
ZW50IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0c0V4dGVudCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNl
dHMudG9wLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMucmlnaHQsIHVub2JzY3VyZWRTYWZlQXJl
YUluc2V0cy5ib3R0b20sIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5sZWZ0KTsKLQotICAgIF9s
YXN0U2VudFZpZXdMYXlvdXRTaXplID0gbmV3Vmlld0xheW91dFNpemU7Ci0gICAgX2xhc3RTZW50
TWF4aW11bVVub2JzY3VyZWRTaXplID0gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplOwotICAgIF9s
YXN0U2VudERldmljZU9yaWVudGF0aW9uID0gbmV3T3JpZW50YXRpb247Ci0KLSAgICBfcGFnZS0+
ZHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZShuZXdWaWV3TGF5b3V0U2l6ZSwgbmV3TWF4aW11bVVu
b2JzY3VyZWRTaXplLCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzLCB1bm9ic2N1cmVk
UmVjdEluQ29udGVudENvb3JkaW5hdGVzLCBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3Jk
aW5hdGVzLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQsIHRhcmdldFNjYWxlLCBuZXdP
cmllbnRhdGlvbiwgKytfY3VycmVudER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRCk7Ci0gICAg
aWYgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBfcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkKLSAgICAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShu
ZXdCb3VuZHMuc2l6ZSkpOwotCi0gICAgX3dhaXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVz
aXplID0gWUVTOwotICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBZRVM7Ci19Ci0K
LS0gKHZvaWQpX2VuZEFuaW1hdGVkUmVzaXplCi17Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9lbmRBbmltYXRlZFJlc2l6ZV0g
X2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgJWQiLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigp
LnRvVUludDY0KCksIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlKTsKLQotICAgIC8vIElmIHdl
IGFscmVhZHkgaGF2ZSBhbiB1cC10by1kYXRlIGxheWVyIHRyZWUsIGltbWVkaWF0ZWx5IGNvbXBs
ZXRlCi0gICAgLy8gdGhlIHJlc2l6ZS4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGRlZmVyIGNvbXBsZXRp
b24gdW50aWwgd2UgZG8uCi0gICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IE5POwot
ICAgIGlmICghX3dhaXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVzaXplKQotICAgICAgICBb
c2VsZiBfZGlkQ29tcGxldGVBbmltYXRlZFJlc2l6ZV07Ci19Ci0KLS0gKHZvaWQpX3Jlc2l6ZVdo
aWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawot
ewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dL
V2ViVmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXM6XSIsIHNlbGYsIF9w
YWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7Ci0KLSAgICBbc2VsZiBfYmVnaW5BbmltYXRl
ZFJlc2l6ZVdpdGhVcGRhdGVzOnVwZGF0ZUJsb2NrXTsKLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpSZXNpemlu
Z1dpdGhBbmltYXRpb24pIHsKLSAgICAgICAgW19jb250ZW50VmlldyBzZXRIaWRkZW46WUVTXTsK
LSAgICAgICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3
cG9ydFVwZGF0ZU1vZGU6OlJlc2l6aW5nV2l0aERvY3VtZW50SGlkZGVuOwotICAgICAgICAKLSAg
ICAgICAgLy8gX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzIGlzIHVzZWQgYnkg
aXRzZWxmOyB0aGUgY2xpZW50IHdpbGwKLSAgICAgICAgLy8gbm90IGNhbGwgZW5kQW5pbWF0ZWRS
ZXNpemUsIHNvIHdlIGNhbid0IHdhaXQgZm9yIGl0LgotICAgICAgICBfd2FpdGluZ0ZvckVuZEFu
aW1hdGVkUmVzaXplID0gTk87Ci0gICAgfQotfQotCi0tICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vz
c29yeVZpZXdzSW5zZXQ6KENHU2l6ZSlpbnNldAotewotICAgIFtfY3VzdG9tQ29udGVudFZpZXcg
d2ViX3NldE92ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07Ci19Ci0KLS0gKHZvaWQp
X3NuYXBzaG90UmVjdDooQ0dSZWN0KXJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldp
ZHRoOihDR0Zsb2F0KWltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQ0dJbWFn
ZVJlZikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0
ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykg
ewotICAgICAgICAvLyBEZWZlciBzbmFwc2hvdHRpbmcgdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQg
cmVzaXplIGNvbXBsZXRlcy4KLSAgICAgICAgdm9pZCAoXmNvcGllZENvbXBsZXRpb25IYW5kbGVy
KShDR0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKLSAgICAgICAgUmV0YWlu
UHRyPFdLV2ViVmlldz4gcmV0YWluZWRTZWxmID0gc2VsZjsKLSAgICAgICAgX2NhbGxiYWNrc0Rl
ZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbcmV0YWluZWRTZWxmLCByZWN0SW5WaWV3Q29vcmRp
bmF0ZXMsIGltYWdlV2lkdGgsIGNvcGllZENvbXBsZXRpb25IYW5kbGVyXSB7Ci0gICAgICAgICAg
ICBbcmV0YWluZWRTZWxmIF9zbmFwc2hvdFJlY3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9J
bWFnZU9mV2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpjb3BpZWRDb21wbGV0aW9u
SGFuZGxlcl07Ci0gICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ0dSZWN0IHNuYXBz
aG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6cmVjdEluVmll
d0Nvb3JkaW5hdGVzIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwotICAgIENHRmxv
YXQgaW1hZ2VTY2FsZSA9IGltYWdlV2lkdGggLyBzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGlu
YXRlcy5zaXplLndpZHRoOwotICAgIENHRmxvYXQgaW1hZ2VIZWlnaHQgPSBpbWFnZVNjYWxlICog
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQ7Ci0gICAgQ0dTaXpl
IGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpOwotCi0gICAg
aWYgKFtbX2N1c3RvbUNvbnRlbnRWaWV3IGNsYXNzXSB3ZWJfcmVxdWlyZXNDdXN0b21TbmFwc2hv
dHRpbmddKSB7Ci0gICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3NuYXBzaG90UmVjdElu
Q29udGVudFZpZXdDb29yZGluYXRlczpzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyBz
bmFwc2hvdFdpZHRoOmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRs
ZXJdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgSEFWRShDT1JFX0FOSU1BVElPTl9S
RU5ERVJfU0VSVkVSKSAmJiBIQVZFKElPU1VSRkFDRSkKLSAgICAvLyBJZiB3ZSBhcmUgcGFyZW50
ZWQgYW5kIG5vdCBoaWRkZW4sIGFuZCB0aHVzIHdvbid0IGluY3VyIGEgc2lnbmlmaWNhbnQgcGVu
YWx0eSBmcm9tIHBhZ2luZyBpbiB0aWxlcywgc25hcHNob3QgdGhlIHZpZXcgaGllcmFyY2h5IGRp
cmVjdGx5LgotICAgIE5TU3RyaW5nICpkaXNwbGF5TmFtZSA9IHNlbGYud2luZG93LnNjcmVlbi5k
aXNwbGF5Q29uZmlndXJhdGlvbi5uYW1lOwotICAgIGlmIChkaXNwbGF5TmFtZSAmJiAhc2VsZi53
aW5kb3cuaGlkZGVuKSB7Ci0gICAgICAgIGF1dG8gc3VyZmFjZSA9IFdlYkNvcmU6OklPU3VyZmFj
ZTo6Y3JlYXRlKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoaW1h
Z2VTaXplKSksIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOwotICAgICAgICBpZiAoIXN1
cmZhY2UpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIENHRmxvYXQgaW1hZ2VTY2FsZUluVmll
d0Nvb3JkaW5hdGVzID0gaW1hZ2VXaWR0aCAvIHJlY3RJblZpZXdDb29yZGluYXRlcy5zaXplLndp
ZHRoOwotICAgICAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtl
U2NhbGUoaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzLCBpbWFnZVNjYWxlSW5WaWV3Q29vcmRp
bmF0ZXMsIDEpOwotICAgICAgICB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNEVHJhbnNsYXRlKHRy
YW5zZm9ybSwgLXJlY3RJblZpZXdDb29yZGluYXRlcy5vcmlnaW4ueCwgLXJlY3RJblZpZXdDb29y
ZGluYXRlcy5vcmlnaW4ueSwgMCk7Ci0gICAgICAgIENBUmVuZGVyU2VydmVyUmVuZGVyRGlzcGxh
eUxheWVyV2l0aFRyYW5zZm9ybUFuZFRpbWVPZmZzZXQoTUFDSF9QT1JUX05VTEwsIChDRlN0cmlu
Z1JlZilkaXNwbGF5TmFtZSwgc2VsZi5sYXllci5jb250ZXh0LmNvbnRleHRJZCwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50NjRfdD4oc2VsZi5sYXllciksIHN1cmZhY2UtPnN1cmZhY2UoKSwgMCwgMCwg
JnRyYW5zZm9ybSwgMCk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6OklPU3Vy
ZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKHN1cmZhY2UpKS5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsKLSAg
ICAgICAgQVNTRVJUKCFbW19jdXN0b21Db250ZW50VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3Vz
dG9tU25hcHNob3R0aW5nXSk7Ci0gICAgICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dFdp
dGhPcHRpb25zKGltYWdlU2l6ZSwgWUVTLCAxKTsKLQotICAgICAgICBVSVZpZXcgKmN1c3RvbUNv
bnRlbnRWaWV3ID0gX2N1c3RvbUNvbnRlbnRWaWV3LmdldCgpOwotICAgICAgICBbY3VzdG9tQ29u
dGVudFZpZXcuYmFja2dyb3VuZENvbG9yIHNldF07Ci0gICAgICAgIFVJUmVjdEZpbGwoQ0dSZWN0
TWFrZSgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCkpOwotCi0gICAgICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gVUlHcmFwaGljc0dldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRp
bmF0ZXMub3JpZ2luLnggKiBpbWFnZVNjYWxlLCAtc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRp
bmF0ZXMub3JpZ2luLnkgKiBpbWFnZVNjYWxlKTsKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgaW1hZ2VTY2FsZSwgaW1hZ2VTY2FsZSk7Ci0gICAgICAgIFtjdXN0b21Db250ZW50
Vmlldy5sYXllciByZW5kZXJJbkNvbnRleHQ6Y29udGV4dF07Ci0KLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoW1VJR3JhcGhpY3NHZXRJbWFnZUZyb21DdXJyZW50SW1hZ2VDb250ZXh0KCkgQ0dJ
bWFnZV0pOwotCi0gICAgICAgIFVJR3JhcGhpY3NFbmRJbWFnZUNvbnRleHQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHZvaWQoXmNvcGllZENvbXBsZXRpb25IYW5kbGVyKShDR0lt
YWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKLSAgICBfcGFnZS0+dGFrZVNuYXBz
aG90KFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3Qoc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRp
bmF0ZXMpLCBXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdl
U2l6ZSkpLCBXZWJLaXQ6OlNuYXBzaG90T3B0aW9uc0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3Rvciwg
Wz1dKGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlLCBX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKLSAgICAgICAgaWYgKGltYWdlSGFuZGxlLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
LSAgICAgICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gYml0bWFwID0gV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQotICAgICAgICBpZiAoIWJpdG1hcCkgewotICAgICAg
ICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Ci0gICAgICAgICAgICBbY29w
aWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZTsKLSAgICAgICAg
Y2dJbWFnZSA9IGJpdG1hcC0+bWFrZUNHSW1hZ2UoKTsKLSAgICAgICAgY29waWVkQ29tcGxldGlv
bkhhbmRsZXIoY2dJbWFnZS5nZXQoKSk7Ci0gICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxl
ciByZWxlYXNlXTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0
ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOihDR1NpemUpbWluaW11bUxheW91dFNpemUgbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6KENHU2l6ZSltYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVy
cmlkZQotewotICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiLVtX
S1dlYlZpZXcgIiA8PCBfcGFnZS0+aWRlbnRpZmllcigpIDw8ICIgX292ZXJyaWRlTGF5b3V0UGFy
YW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZToiIDw8IFdlYkNvcmU6OkZsb2F0U2l6ZShtaW5p
bXVtTGF5b3V0U2l6ZSkgPDwgIiBtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZToiIDw8IFdl
YkNvcmU6OkZsb2F0U2l6ZShtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSkgPDwgIl0iKTsK
LQotICAgIFtzZWxmIF9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOm1pbmltdW1MYXlvdXRTaXpl
XTsKLSAgICBbc2VsZiBfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6bWF4aW11bVVu
b2JzY3VyZWRTaXplT3ZlcnJpZGVdOwotfQotCi0tICh2b2lkKV9jbGVhck92ZXJyaWRlTGF5b3V0
UGFyYW1ldGVycwotewotICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gV1RGOjpudWxsb3B0
OwotICAgIF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsKLX0K
LQotc3RhdGljIFdURjo6T3B0aW9uYWw8V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM+IHZpZXdw
b3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3Ry
aW5nICo+ICp2aWV3cG9ydEFyZ3VtZW50UGFpcnMsIGJvb2wgdmlld3BvcnRGaXRFbmFibGVkKQot
ewotICAgIGlmICghdmlld3BvcnRBcmd1bWVudFBhaXJzKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVu
dHMoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZpZXdwb3J0TWV0YSk7Ci0KLSAgICBbdmll
d3BvcnRBcmd1bWVudFBhaXJzIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazptYWtl
QmxvY2tQdHIoWyZdIChOU1N0cmluZyAqa2V5LCBOU1N0cmluZyAqdmFsdWUsIEJPT0wqIHN0b3Ap
IHsKLSAgICAgICAgaWYgKCFba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0gfHwg
IVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQotICAgICAgICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIi1bV0tX
ZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBLZXlzIGFuZCB2YWx1ZXMg
bXVzdCBhbGwgYmUgTlNTdHJpbmdzLiJdOwotICAgICAgICBTdHJpbmcga2V5U3RyaW5nID0ga2V5
OwotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSB2YWx1ZTsKLSAgICAgICAgV2ViQ29yZTo6
c2V0Vmlld3BvcnRGZWF0dXJlKHZpZXdwb3J0QXJndW1lbnRzLCBrZXlTdHJpbmcsIHZhbHVlU3Ry
aW5nLCB2aWV3cG9ydEZpdEVuYWJsZWQsIFtdIChXZWJDb3JlOjpWaWV3cG9ydEVycm9yQ29kZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiLVtXS1dl
YlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06IEVycm9yIHBhcnNpbmcgdmll
d3BvcnQgYXJndW1lbnQ6ICVzIiwgZXJyb3JNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICB9KTsKLSAgICB9KS5nZXQoKV07Ci0KLSAgICByZXR1cm4gdmlld3BvcnRBcmd1bWVudHM7Ci19
Ci0KLS0gKHZvaWQpX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgTlNTdHJpbmcgKj4gKilhcmd1bWVudHMKLXsKLSAgICBpZiAoIV9wYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+c2V0T3ZlcnJpZGVWaWV3cG9ydEFyZ3VtZW50
cyh2aWV3cG9ydEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KGFyZ3VtZW50cywgX3BhZ2UtPnByZWZl
cmVuY2VzKCkudmlld3BvcnRGaXRFbmFibGVkKCkpKTsKLX0KLQotLSAoVUlWaWV3ICopX3ZpZXdG
b3JGaW5kVUkKLXsKLSAgICByZXR1cm4gW3NlbGYgdmlld0Zvclpvb21pbmdJblNjcm9sbFZpZXc6
W3NlbGYgc2Nyb2xsVmlld11dOwotfQotCi0tIChCT09MKV9pc0Rpc3BsYXlpbmdQREYKLXsKLSAg
ICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6cGRmTUlN
RVR5cGVzKCkpIHsKLSAgICAgICAgQ2xhc3MgcHJvdmlkZXJDbGFzcyA9IFtbX2NvbmZpZ3VyYXRp
b24gX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5XSBwcm92aWRlckZvck1JTUVUeXBlOm1pbWVUeXBl
XTsKLSAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgaXNLaW5kT2ZDbGFzczpwcm92aWRl
ckNsYXNzXSkKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5P
OwotfQotCi0tIChOU0RhdGEgKilfZGF0YUZvckRpc3BsYXllZFBERgotewotICAgIGlmICghW3Nl
bGYgX2lzRGlzcGxheWluZ1BERl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtf
Y3VzdG9tQ29udGVudFZpZXcgd2ViX2RhdGFSZXByZXNlbnRhdGlvbl07Ci19Ci0KLS0gKE5TU3Ry
aW5nICopX3N1Z2dlc3RlZEZpbGVuYW1lRm9yRGlzcGxheWVkUERGCi17Ci0gICAgaWYgKCFbc2Vs
ZiBfaXNEaXNwbGF5aW5nUERGXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW19j
dXN0b21Db250ZW50VmlldyB3ZWJfc3VnZ2VzdGVkRmlsZW5hbWVdOwotfQotCi0tIChfV0tXZWJW
aWV3UHJpbnRGb3JtYXR0ZXIgKilfd2ViVmlld1ByaW50Rm9ybWF0dGVyCi17Ci0gICAgVUlWaWV3
UHJpbnRGb3JtYXR0ZXIgKnZpZXdQcmludEZvcm1hdHRlciA9IHNlbGYudmlld1ByaW50Rm9ybWF0
dGVyOwotICAgIEFTU0VSVChbdmlld1ByaW50Rm9ybWF0dGVyIGlzS2luZE9mQ2xhc3M6W19XS1dl
YlZpZXdQcmludEZvcm1hdHRlciBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1dlYlZpZXdQcmlu
dEZvcm1hdHRlciAqKXZpZXdQcmludEZvcm1hdHRlcjsKLX0KLQotc3RhdGljIFdlYkNvcmU6OlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KFVJU2VtYW50aWNDb250ZW50QXR0cmlidXRlIGNvbnRlbnRBdHRyaWJ1dGUpCistICh2b2lkKV9z
ZXRUZXh0Wm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3IKIHsKLSAgICBhdXRvIGRpcmVjdGlv
biA9IFtVSVZpZXcgdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkZvclNlbWFudGljQ29udGVu
dEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewot
ICAgIGNhc2UgVUlVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6Ci0gICAg
ICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7Ci0g
ICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdDoKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OlJUTDsKLSAg
ICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOworICAgIF9wYWdlLT5zZXRUZXh0Wm9vbUZh
Y3Rvcih6b29tRmFjdG9yKTsKIH0KIAotLSAodm9pZClzZXRTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1
dGU6KFVJU2VtYW50aWNDb250ZW50QXR0cmlidXRlKWNvbnRlbnRBdHRyaWJ1dGUKKy0gKHZvaWQp
c2V0UGFnZVpvb206KENHRmxvYXQpcGFnZVpvb20KIHsKLSAgICBbc3VwZXIgc2V0U2VtYW50aWND
b250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVdOwotCi0gICAgX3BhZ2UtPnNldFVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKGNv
bnRlbnRBdHRyaWJ1dGUpKTsKKyAgICBfcGFnZS0+c2V0UGFnZVpvb21GYWN0b3IocGFnZVpvb20p
OwogfQogCi0jZWxzZSAvLyAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI3ByYWdtYSBtYXJr
IC0gT1MgWC1zcGVjaWZpYyBtZXRob2RzCistIChDR0Zsb2F0KXBhZ2Vab29tCit7CisgICAgcmV0
dXJuIF9wYWdlLT5wYWdlWm9vbUZhY3RvcigpOworfQogCi0tIChCT09MKV9kcmF3c0JhY2tncm91
bmQKKy0gKGRvdWJsZSlfcGFnZVpvb21GYWN0b3IKIHsKLSAgICByZXR1cm4gX2ltcGwtPmRyYXdz
QmFja2dyb3VuZCgpOworICAgIHJldHVybiBbc2VsZiBwYWdlWm9vbV07CiB9CiAKLS0gKHZvaWQp
X3NldERyYXdzQmFja2dyb3VuZDooQk9PTClkcmF3c0JhY2tncm91bmQKKy0gKHZvaWQpX3NldFBh
Z2Vab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3RvcgogewotICAgIF9pbXBsLT5zZXREcmF3c0Jh
Y2tncm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsKKyAgICBbc2VsZiBzZXRQYWdlWm9vbTp6b29tRmFj
dG9yXTsKIH0KIAotLSAoTlNDb2xvciAqKV9iYWNrZ3JvdW5kQ29sb3IKKy0gKGlkIDxfV0tEaWFn
bm9zdGljTG9nZ2luZ0RlbGVnYXRlPilfZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZQogewotICAg
IHJldHVybiBfaW1wbC0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgYXV0byogZGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsKKyAgICBpZiAo
IWRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQmPigqZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQpLmRlbGVnYXRlKCkuYXV0b3JlbGVhc2UoKTsKIH0KIAotLSAodm9p
ZClfc2V0QmFja2dyb3VuZENvbG9yOihOU0NvbG9yICopYmFja2dyb3VuZENvbG9yCistICh2b2lk
KV9zZXREaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlOihpZDxfV0tEaWFnbm9zdGljTG9nZ2luZ0Rl
bGVnYXRlPilkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlCiB7Ci0gICAgX2ltcGwtPnNldEJhY2tn
cm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworICAgIGF1dG8qIGRpYWdub3N0aWNMb2dnaW5n
Q2xpZW50ID0gX3BhZ2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7CisgICAgaWYgKCFkaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljX2Nhc3Q8
V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCkuc2V0RGVsZWdhdGUoZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZSk7CiB9CiAKLS0gKHZvaWQp
X3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOihCT09MKWRyYXdzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kCistIChpZCA8X1dLRmluZERlbGVnYXRlPilfZmluZERlbGVnYXRlCiB7Ci0gICAgc3Rh
dGljIEJPT0wgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nOwotICAgIGlmICghaGFzTG9nZ2Vk
RGVwcmVjYXRpb25XYXJuaW5nKSB7Ci0gICAgICAgIC8vIFNlZSBidWcgMTU1NTUwIGZvciBkZXRh
aWxzLgotICAgICAgICBOU0xvZyhAIi1bV0tXZWJWaWV3IF9zZXREcmF3c1RyYW5zcGFyZW50QmFj
a2dyb3VuZDpdIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKLSAgICAg
ICAgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nID0gWUVTOwotICAgIH0KLSAgICBbc2VsZiBf
c2V0RHJhd3NCYWNrZ3JvdW5kOiFkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZF07CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdlLT5maW5kQ2xpZW50KCkp
LmRlbGVnYXRlKCkuYXV0b3JlbGVhc2UoKTsKIH0KIAotLSAoTlNWaWV3ICopX2luc3BlY3RvckF0
dGFjaG1lbnRWaWV3CistICh2b2lkKV9zZXRGaW5kRGVsZWdhdGU6KGlkPF9XS0ZpbmREZWxlZ2F0
ZT4pZmluZERlbGVnYXRlCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5pbnNwZWN0b3JBdHRhY2htZW50
VmlldygpOworICAgIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdlLT5maW5k
Q2xpZW50KCkpLnNldERlbGVnYXRlKGZpbmREZWxlZ2F0ZSk7CiB9CiAKLS0gKHZvaWQpX3NldElu
c3BlY3RvckF0dGFjaG1lbnRWaWV3OihOU1ZpZXcgKiluZXdWaWV3CitzdGF0aWMgaW5saW5lIFdl
YktpdDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRp
b25zKQogewotICAgIF9pbXBsLT5zZXRJbnNwZWN0b3JBdHRhY2htZW50VmlldyhuZXdWaWV3KTsK
KyAgICB1bnNpZ25lZCBmaW5kT3B0aW9ucyA9IDA7CisKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAm
IF9XS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBX
ZWJLaXQ6OkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOworICAgIGlmICh3a0ZpbmRPcHRpb25z
ICYgX1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6RmluZE9wdGlvbnNBdFdvcmRTdGFydHM7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBf
V0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0KQorICAgICAgICBmaW5k
T3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3Rh
cnQ7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0JhY2t3YXJkcykKKyAg
ICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICBp
ZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCkKKyAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1dyYXBBcm91bmQ7CisgICAgaWYgKHdrRmlu
ZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dPdmVybGF5KQorICAgICAgICBmaW5kT3B0aW9u
cyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd092ZXJsYXk7CisgICAgaWYgKHdrRmluZE9wdGlv
bnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yKQorICAgICAgICBmaW5kT3B0aW9u
cyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3I7CisgICAgaWYgKHdrRmlu
ZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQpCisgICAgICAgIGZpbmRPcHRp
b25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0OworICAgIGlmICh3a0ZpbmRP
cHRpb25zICYgX1dLRmluZE9wdGlvbnNOb0luZGV4Q2hhbmdlKQorICAgICAgICBmaW5kT3B0aW9u
cyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zTm9JbmRleENoYW5nZTsKKyAgICBpZiAod2tGaW5kT3B0
aW9ucyAmIF9XS0ZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleCkKKyAgICAgICAgZmluZE9w
dGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXg7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oZmluZE9wdGlvbnMpOwogfQog
Ci0tICh2b2lkKV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092ZXJsYXlTY3JvbGxiYXJT
dHlsZSlzY3JvbGxiYXJTdHlsZQorLSAodm9pZClfY291bnRTdHJpbmdNYXRjaGVzOihOU1N0cmlu
ZyAqKXN0cmluZyBvcHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJ
bnRlZ2VyKW1heENvdW50CiB7Ci0gICAgX2ltcGwtPnNldE92ZXJsYXlTY3JvbGxiYXJTdHlsZSh0
b0NvcmVTY3JvbGxiYXJTdHlsZShzY3JvbGxiYXJTdHlsZSkpOworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgeworICAgICAgICBbX2N1c3RvbUNv
bnRlbnRWaWV3IHdlYl9jb3VudFN0cmluZ01hdGNoZXM6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBt
YXhDb3VudDptYXhDb3VudF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBf
cGFnZS0+Y291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwg
bWF4Q291bnQpOwogfQogCi0tIChfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUpX292ZXJsYXlTY3Jv
bGxiYXJTdHlsZQorLSAodm9pZClfZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9u
czooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudAog
ewotICAgIHJldHVybiB0b0FQSVNjcm9sbGJhclN0eWxlKF9pbXBsLT5vdmVybGF5U2Nyb2xsYmFy
U3R5bGUoKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBXaGlsZSBBcHBLaXQg
Y29udGFpbnMgbG9naWMgaW4gTlNCYXJUZXh0RmluZGVyIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRl
IHRoZSBmaW5kIHBhc3RlYm9hcmQKKyAgICAvLyB3aGVuIHRoZSBmaW5kIHN0cmluZyBjaGFuZ2Vz
LCB0aGlzIChhbG9uZyB3aXRoIHRoZSBmaW5kIHBhc3RlYm9hcmQgaXRzZWxmKSBhcmUgYm90aCBt
aXNzaW5nCisgICAgLy8gZnJvbSBpT1M7IHRodXMsIG9uIGlPUywgd2UgdXBkYXRlIHRoZSBjdXJy
ZW50IGZpbmQtaW4tcGFnZSBzdHJpbmcgaGVyZS4KKyAgICBXZWJLaXQ6OnVwZGF0ZVN0cmluZ0Zv
ckZpbmQoc3RyaW5nKTsKKworICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsKKyAgICAgICAg
W19jdXN0b21Db250ZW50VmlldyB3ZWJfZmluZFN0cmluZzpzdHJpbmcgb3B0aW9uczpvcHRpb25z
IG1heENvdW50Om1heENvdW50XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAg
IF9wYWdlLT5maW5kU3RyaW5nKHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4Q291
bnQpOwogfQogCi0tIChCT09MKV93aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkCistICh2
b2lkKV9oaWRlRmluZFVJCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT53aW5kb3dPY2NsdXNpb25EZXRl
Y3Rpb25FbmFibGVkKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoX2N1c3Rv
bUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2hpZGVGaW5k
VUldOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgX3BhZ2UtPmhpZGVGaW5k
VUkoKTsKIH0KIAotLSAodm9pZClfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDoo
Qk9PTCllbmFibGVkCistICh2b2lkKV9zYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW06KFdL
QmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0KIHsKLSAgICBfaW1wbC0+c2V0V2luZG93T2NjbHVz
aW9uRGV0ZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJl
dHVybjsKKyAgICBfcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0uX2l0ZW0pOwog
fQogCi0tICh2b2lkKXNoYXJlU2hlZXREaWREaXNtaXNzOihXS1NoYXJlU2hlZXQgKilzaGFyZVNo
ZWV0CistIChpZCA8X1dLSW5wdXREZWxlZ2F0ZT4pX2lucHV0RGVsZWdhdGUKIHsKLSAgICBfaW1w
bC0+c2hhcmVTaGVldERpZERpc21pc3Moc2hhcmVTaGVldCk7CisgICAgcmV0dXJuIF9pbnB1dERl
bGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwogfQogCi0tICh2b2lkKV9zZXRPdmVycmlkZURldmlj
ZVNjYWxlRmFjdG9yOihDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yCistICh2b2lkKV9zZXRJbnB1
dERlbGVnYXRlOihpZCA8X1dLSW5wdXREZWxlZ2F0ZT4paW5wdXREZWxlZ2F0ZQogewotICAgIF9p
bXBsLT5zZXRPdmVycmlkZURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAg
ICBfaW5wdXREZWxlZ2F0ZSA9IGlucHV0RGVsZWdhdGU7CisKKyAgICBjbGFzcyBGb3JtQ2xpZW50
IDogcHVibGljIEFQSTo6Rm9ybUNsaWVudCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgRm9ybUNsaWVudChXS1dlYlZpZXcg
KndlYlZpZXcpCisgICAgICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkgeyB9CisKKyAgICAgICAg
dm9pZCB3aWxsU3VibWl0Rm9ybShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJh
bWVQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYgc291cmNlRnJhbWUsIGNvbnN0IFZlY3Rv
cjxzdGQ6OnBhaXI8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywg
QVBJOjpPYmplY3QqIHVzZXJEYXRhLCBXVEY6OkZ1bmN0aW9uPHZvaWQodm9pZCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh1c2VyRGF0
YSAmJiB1c2VyRGF0YS0+dHlwZSgpICE9IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKCF1c2VyRGF0YSB8fCB1c2VyRGF0YS0+dHlwZSgpID09IEFQSTo6
T2JqZWN0OjpUeXBlOjpEYXRhKTsKKyAgICAgICAgICAgICAgICBtX3dlYlZpZXctPl9wYWdlLT5w
cm9jZXNzKCkuY29ubmVjdGlvbigpLT5tYXJrQ3VycmVudGx5RGlzcGF0Y2hlZE1lc3NhZ2VBc0lu
dmFsaWQoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBpbnB1dERl
bGVnYXRlID0gbV93ZWJWaWV3LT5faW5wdXREZWxlZ2F0ZS5nZXQoKTsKKworICAgICAgICAgICAg
aWYgKCFbaW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3
OndpbGxTdWJtaXRGb3JtVmFsdWVzOnVzZXJPYmplY3Q6c3VibWlzc2lvbkhhbmRsZXI6KV0pIHsK
KyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB2YWx1ZU1hcCA9IGFkb3B0
TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRleHRGaWVs
ZFZhbHVlcy5zaXplKCldKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHRl
eHRGaWVsZFZhbHVlcykKKyAgICAgICAgICAgICAgICBbdmFsdWVNYXAgc2V0T2JqZWN0OnBhaXIu
c2Vjb25kIGZvcktleTpwYWlyLmZpcnN0XTsKKworICAgICAgICAgICAgTlNPYmplY3QgPE5TU2Vj
dXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChBUEk6OkRhdGEq
IGRhdGEgPSBzdGF0aWNfY2FzdDxBUEk6OkRhdGEqPih1c2VyRGF0YSkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNO
b0NvcHk6Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KGRhdGEtPmJ5
dGVzKCkpKSBsZW5ndGg6ZGF0YS0+c2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10pOworICAgICAgICAg
ICAgICAgIGF1dG8gdW5hcmNoaXZlciA9IHNlY3VyZVVuYXJjaGl2ZXJGcm9tRGF0YShuc0RhdGEu
Z2V0KCkpOworICAgICAgICAgICAgICAgIEB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
YXV0byogYWxsb3dlZENsYXNzZXMgPSBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkucHJvY2Vz
c1Bvb2woKS5hbGxvd2VkQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGluZygpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3Nl
czphbGxvd2VkQ2xhc3NlcyBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmplY3QgPSBbdW5hcmNoaXZl
ciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU09iamVjdCBjbGFzc10gZm9yS2V5OkAidXNlck9iamVj
dCJdOworICAgICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSB1c2VyIGRh
dGE6ICVAIiwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6Q29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlcjo6Y3JlYXRlKGlucHV0RGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzp3
aWxsU3VibWl0Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1pc3Npb25IYW5kbGVyOikpOworICAg
ICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6bV93ZWJWaWV3IHdpbGxTdWJtaXRGb3Jt
VmFsdWVzOnZhbHVlTWFwLmdldCgpIHVzZXJPYmplY3Q6dXNlck9iamVjdCBzdWJtaXNzaW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSB7CisgICAgICAgICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIH0pLmdldCgpXTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
V0tXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgfTsKKworICAgIGlmIChpbnB1dERlbGVnYXRlKQor
ICAgICAgICBfcGFnZS0+c2V0Rm9ybUNsaWVudChtYWtlVW5pcXVlPEZvcm1DbGllbnQ+KHNlbGYp
KTsKKyAgICBlbHNlCisgICAgICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50KG51bGxwdHIpOwogfQog
Ci0tIChDR0Zsb2F0KV9vdmVycmlkZURldmljZVNjYWxlRmFjdG9yCistIChCT09MKV9pc0Rpc3Bs
YXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudAogewotICAgIHJldHVybiBfaW1wbC0+b3ZlcnJp
ZGVEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGlmIChhdXRvKiBtYWluRnJhbWUgPSBfcGFnZS0+
bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBtYWluRnJhbWUtPmlzRGlzcGxheWluZ1N0YW5k
YWxvbmVJbWFnZURvY3VtZW50KCk7CisgICAgcmV0dXJuIE5POwogfQogCi0tICh2b2lkKV9zZXRU
b3BDb250ZW50SW5zZXQ6KENHRmxvYXQpY29udGVudEluc2V0CistIChCT09MKV9pc0Rpc3BsYXlp
bmdTdGFuZGFsb25lTWVkaWFEb2N1bWVudAogewotICAgIHJldHVybiBfaW1wbC0+c2V0VG9wQ29u
dGVudEluc2V0KGNvbnRlbnRJbnNldCk7CisgICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9wYWdl
LT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5nU3Rh
bmRhbG9uZU1lZGlhRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gTk87CiB9CiAKLS0gKENHRmxvYXQp
X3RvcENvbnRlbnRJbnNldAorLSAoQk9PTClfaXNQbGF5aW5nQXVkaW8KIHsKLSAgICByZXR1cm4g
X2ltcGwtPnRvcENvbnRlbnRJbnNldCgpOworICAgIHJldHVybiBfcGFnZS0+aXNQbGF5aW5nQXVk
aW8oKTsKIH0KIAotLSAoTlNDb2xvciAqKV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKKy0g
KEJPT0wpX2lzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKIHsKLSAgICByZXR1cm4g
X2ltcGwtPnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpOworICAgIHJldHVybiBfcGFnZS0+
aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwogfQogCi0tIChfV0tSZWN0RWRn
ZSlfcGlubmVkU3RhdGUKKy0gKF9XS0xheW91dE1vZGUpX2xheW91dE1vZGUKIHsKLSAgICByZXR1
cm4gX2ltcGwtPnBpbm5lZFN0YXRlKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHN3aXRjaCAo
X2ltcGwtPmxheW91dE1vZGUoKSkgeworICAgIGNhc2Uga1dLTGF5b3V0TW9kZUZpeGVkU2l6ZToK
KyAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVGaXhlZFNpemU7CisgICAgY2FzZSBrV0tMYXlv
dXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6CisgICAgICAgIHJldHVybiBf
V0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU7CisgICAgY2FzZSBr
V0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOgor
ICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11
bURvY3VtZW50U2l6ZTsKKyAgICBjYXNlIGtXS0xheW91dE1vZGVWaWV3U2l6ZToKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZVZpZXdTaXplOworICAgIH0KKyNlbHNl
CisgICAgcmV0dXJuIF9wYWdlLT51c2VGaXhlZExheW91dCgpID8gX1dLTGF5b3V0TW9kZUZpeGVk
U2l6ZSA6IF9XS0xheW91dE1vZGVWaWV3U2l6ZTsKKyNlbmRpZgogfQogCi0tIChfV0tSZWN0RWRn
ZSlfcnViYmVyQmFuZGluZ0VuYWJsZWQKKy0gKHZvaWQpX3NldExheW91dE1vZGU6KF9XS0xheW91
dE1vZGUpbGF5b3V0TW9kZQogewotICAgIHJldHVybiBfaW1wbC0+cnViYmVyQmFuZGluZ0VuYWJs
ZWQoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgV0tMYXlvdXRNb2RlIHdrVmlld0xheW91dE1v
ZGU7CisgICAgc3dpdGNoIChsYXlvdXRNb2RlKSB7CisgICAgY2FzZSBfV0tMYXlvdXRNb2RlRml4
ZWRTaXplOgorICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUZpeGVkU2l6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21w
dXRlZEZyb21WaWV3U2NhbGU6CisgICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRN
b2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50
U2l6ZToKKyAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVEeW5hbWljU2l6
ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgX1dLTGF5b3V0TW9kZVZpZXdTaXplOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHdrVmlld0xh
eW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlVmlld1NpemU7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBfaW1wbC0+c2V0TGF5b3V0TW9kZSh3a1ZpZXdMYXlvdXRNb2RlKTsKKyNlbHNlCisgICAg
X3BhZ2UtPnNldFVzZUZpeGVkTGF5b3V0KGxheW91dE1vZGUgPT0gX1dLTGF5b3V0TW9kZUZpeGVk
U2l6ZSB8fCBsYXlvdXRNb2RlID09IF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJv
bVZpZXdTY2FsZSk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0UnViYmVyQmFuZGluZ0VuYWJs
ZWQ6KF9XS1JlY3RFZGdlKXN0YXRlCistIChDR1NpemUpX2ZpeGVkTGF5b3V0U2l6ZQogewotICAg
IF9pbXBsLT5zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZChzdGF0ZSk7CisgICAgcmV0dXJuIF9wYWdl
LT5maXhlZExheW91dFNpemUoKTsKIH0KIAotLSAoaWQpX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OihfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVzdFJl
c3VsdCB3aXRoVHlwZTooX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSl0eXBlIHVzZXJEYXRhOihpZDxO
U1NlY3VyZUNvZGluZz4pdXNlckRhdGEKKy0gKHZvaWQpX3NldEZpeGVkTGF5b3V0U2l6ZTooQ0dT
aXplKWZpeGVkTGF5b3V0U2l6ZQogewotICAgIHJldHVybiBuaWw7CisgICAgX3BhZ2UtPnNldEZp
eGVkTGF5b3V0U2l6ZShXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXpl
KGZpeGVkTGF5b3V0U2l6ZSkpKTsKIH0KIAotLSAodm9pZClfc2V0QXV0b21hdGljYWxseUFkanVz
dHNDb250ZW50SW5zZXRzOihCT09MKWF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cwor
LSAodm9pZClfc2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlOihCT09MKWJhY2tncm91bmRF
eHRlbmRzCiB7Ci0gICAgX2ltcGwtPnNldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0
cyhhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMpOworICAgIF9wYWdlLT5zZXRCYWNr
Z3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYmFja2dyb3VuZEV4dGVuZHMpOwogfQogCi0tIChCT09M
KV9hdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMKKy0gKEJPT0wpX2JhY2tncm91bmRF
eHRlbmRzQmV5b25kUGFnZQogewotICAgIHJldHVybiBfaW1wbC0+YXV0b21hdGljYWxseUFkanVz
dHNDb250ZW50SW5zZXRzKCk7CisgICAgcmV0dXJuIF9wYWdlLT5iYWNrZ3JvdW5kRXh0ZW5kc0Jl
eW9uZFBhZ2UoKTsKIH0KIAotLSAoQ0dGbG9hdClfbWluaW11bUxheW91dFdpZHRoCistIChDR0Zs
b2F0KV92aWV3U2NhbGUKIHsKLSAgICByZXR1cm4gX3BhZ2UtPm1pbmltdW1TaXplRm9yQXV0b0xh
eW91dCgpLndpZHRoKCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBfcGFnZS0+dmll
d1NjYWxlRmFjdG9yKCk7CisjZWxzZQorICAgIHJldHVybiBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxl
RmFjdG9yKCk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0TWluaW11bUxheW91dFdpZHRoOihD
R0Zsb2F0KXdpZHRoCistICh2b2lkKV9zZXRWaWV3U2NhbGU6KENHRmxvYXQpdmlld1NjYWxlCiB7
Ci0gICAgQk9PTCBleHBhbmRzVG9GaXQgPSB3aWR0aCA+IDA7CisgICAgaWYgKHZpZXdTY2FsZSA8
PSAwIHx8IGlzbmFuKHZpZXdTY2FsZSkgfHwgaXNpbmYodmlld1NjYWxlKSkKKyAgICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlZpZXcg
c2NhbGUgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyIl07CiAKLSAgICBfcGFnZS0+c2V0TWlu
aW11bVNpemVGb3JBdXRvTGF5b3V0KFdlYkNvcmU6OkludFNpemUod2lkdGgsIDApKTsKLSAgICBf
cGFnZS0+c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKCFleHBhbmRzVG9GaXQpOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBfaW1wbC0+c2V0Vmlld1NjYWxlKHZpZXdTY2FsZSk7CisjZWxzZQorICAg
IGlmIChfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCkgPT0gdmlld1NjYWxlKQorICAgICAg
ICByZXR1cm47CiAKLSAgICBfaW1wbC0+c2V0Q2xpcHNUb1Zpc2libGVSZWN0KGV4cGFuZHNUb0Zp
dCk7CisgICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXplKFtz
ZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgdmlld1NjYWxlLCBfcGFnZS0+
bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkpOworI2VuZGlmCiB9CiAKLS0gKEJPT0wpX3No
b3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0CistICh2b2lkKV9zZXRN
aW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGg6KENHRmxvYXQpbWluaW11bUVmZmVjdGl2ZURldmlj
ZVdpZHRoCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHRGb3JB
dXRvTGF5b3V0KCk7Ci19CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoX3BhZ2Ut
Pm1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpID09IG1pbmltdW1FZmZlY3RpdmVEZXZpY2VX
aWR0aCkKKyAgICAgICAgcmV0dXJuOwogCi0tICh2b2lkKV9zZXRTaG91bGRFeHBhbmRDb250ZW50
VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dDooQk9PTClzaG91bGRFeHBhbmQKLXsKLSAgICByZXR1
cm4gX2ltcGwtPnNldFNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQoc2hvdWxk
RXhwYW5kKTsKKyAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uVmlld0xheW91dFNp
emUoW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdLCBfcGFnZS0+bGF5b3V0
U2l6ZVNjYWxlRmFjdG9yKCksIG1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCk7CisjZW5kaWYK
IH0KIAotLSAoQk9PTClfYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIKKy0gKENHRmxvYXQp
X21pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aAogewotICAgIHJldHVybiBfcGFnZS0+YWx3YXlz
U2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IHJldHVybiBfcGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCk7CisjZWxzZQorICAg
IHJldHVybiAwOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldEFsd2F5c1Nob3dzSG9yaXpvbnRh
bFNjcm9sbGVyOihCT09MKWFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyCisjcHJhZ21hIG1h
cmsgc2Nyb2xscGVyZiBtZXRob2RzCisKKy0gKHZvaWQpX3NldFNjcm9sbFBlcmZvcm1hbmNlRGF0
YUNvbGxlY3Rpb25FbmFibGVkOihCT09MKWVuYWJsZWQKIHsKLSAgICBfcGFnZS0+c2V0QWx3YXlz
U2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIpOwor
ICAgIF9wYWdlLT5zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotLSAoQk9PTClfYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyCistIChCT09M
KV9zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZAogewotICAgIHJldHVybiBf
cGFnZS0+YWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKCk7CisgICAgcmV0dXJuIF9wYWdlLT5z
Y3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZCgpOwogfQogCi0tICh2b2lkKV9z
ZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NWZXJ0aWNhbFNj
cm9sbGVyCistIChOU0FycmF5ICopX3Njcm9sbFBlcmZvcm1hbmNlRGF0YQogewotICAgIF9wYWdl
LT5zZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9s
bGVyKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSogc2Nyb2xsUGVyZkRhdGEgPSBfcGFnZS0+
c2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxQZXJmRGF0
YS0+ZGF0YSgpOworI2VuZGlmCisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoTlNQcmludE9wZXJh
dGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJ
bmZvCisjcHJhZ21hIG1hcmsgbWVkaWEgcGxheWJhY2sgcmVzdHJpY3Rpb25zCisKKy0gKEJPT0wp
X2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjawogewotICAgIHJldHVybiBbc2VsZiBw
cmludE9wZXJhdGlvbldpdGhQcmludEluZm86cHJpbnRJbmZvXTsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHJldHVybiBfcGFnZS0+YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXli
YWNrKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgogfQogCi0tIChOU1ByaW50T3Bl
cmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmlu
dEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKKy0gKHZvaWQpX3Nl
dEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjazooQk9PTClmbGFnCiB7Ci0gICAgaWYg
KGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKFdlYkNvcmU6
OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRsZS5fZnJhbWVJRCkpKQotICAgICAgICBy
ZXR1cm4gX2ltcGwtPnByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbyhwcmludEluZm8sICp3ZWJG
cmFtZVByb3h5KTsKLSAgICByZXR1cm4gbmlsOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgX3BhZ2UtPnNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhmbGFnKTsKKyNl
bmRpZgogfQogCi0tICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246KE5TVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbil1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uCist
IChCT09MKV93ZWJQcm9jZXNzSXNSZXNwb25zaXZlCiB7Ci0gICAgW3N1cGVyIHNldFVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb246dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbl07Ci0KLSAg
ICBfaW1wbC0+c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uKTsKKyAgICByZXR1cm4gX3BhZ2UtPnByb2Nlc3MoKS5pc1Jlc3BvbnNpdmUo
KTsKIH0KIAotLSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CistICh2b2lk
KV9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6KGlkPF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZT4pZGVsZWdh
dGUKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikKLSAgICByZXR1cm4gX2ltcGwtPmNsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOwotI2Vsc2UKLSAgICByZXR1cm4gTk87CisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGll
bnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpKQorICAgICAgICBkb3duY2FzdDxXZWJLaXQ6
OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLnNldERlbGVnYXRl
KGRlbGVnYXRlKTsKICNlbmRpZgogfQogCi0tICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CistIChpZDxf
V0tGdWxsc2NyZWVuRGVsZWdhdGU+KV9mdWxsc2NyZWVuRGVsZWdhdGUKIHsKLSNpZiBIQVZFKFRP
VUNIX0JBUikKLSAgICBfaW1wbC0+c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3KHdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk7CisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxs
c2NyZWVuQ2xpZW50KCkpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0OjpGdWxsc2Ny
ZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9yZWxl
YXNlKCk7CiAjZW5kaWYKKyAgICByZXR1cm4gbmlsOwogfQogCi0tIChpZClfbWVkaWFQbGF5YmFj
a0NvbnRyb2xzVmlldworLSAoQk9PTClfaXNJbkZ1bGxzY3JlZW4KIHsKLSNpZiBIQVZFKFRPVUNI
X0JBUikKLSAgICByZXR1cm4gX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldygpID8gX2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA6IG5pbDsKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgcmV0dXJuIF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdl
cigpICYmIF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5pc0Z1bGxTY3JlZW4oKTsKICNlbHNl
Ci0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAotLy8gVGhp
cyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0tICh2b2lkKV9hZGRNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3OihpZCltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CistIChf
V0tNZWRpYUNhcHR1cmVTdGF0ZSlfbWVkaWFDYXB0dXJlU3RhdGUKIHsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b1dLTWVkaWFDYXB0dXJlU3RhdGUoX3BhZ2UtPm1lZGlhU3RhdGVGbGFncygpKTsKIH0K
IAotLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0tICh2b2lk
KV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CistICh2b2lkKV9zZXRNZWRpYUNhcHR1
cmVFbmFibGVkOihCT09MKWVuYWJsZWQKIHsKKyAgICBfcGFnZS0+c2V0TWVkaWFDYXB0dXJlRW5h
YmxlZChlbmFibGVkKTsKIH0KIAotLSAodm9pZClfcHJlcGFyZUZvck1vdmVUb1dpbmRvdzooTlNX
aW5kb3cgKil0YXJnZXRXaW5kb3cgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29t
cGxldGlvbkhhbmRsZXIKKy0gKEJPT0wpX21lZGlhQ2FwdHVyZUVuYWJsZWQKIHsKLSAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7
Ci0gICAgX2ltcGwtPnByZXBhcmVGb3JNb3ZlVG9XaW5kb3codGFyZ2V0V2luZG93LCBbY29tcGxl
dGlvbkhhbmRsZXJDb3B5XSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weSgpOwotICAg
IH0pOworICAgIHJldHVybiBfcGFnZS0+bWVkaWFDYXB0dXJlRW5hYmxlZCgpOwogfQogCi0tICh2
b2lkKV9zZXRUaHVtYm5haWxWaWV3OihfV0tUaHVtYm5haWxWaWV3ICopdGh1bWJuYWlsVmlldwor
LSAodm9pZClfc2V0UGFnZU11dGVkOihfV0tNZWRpYU11dGVkU3RhdGUpbXV0ZWRTdGF0ZQogewot
ICAgIF9pbXBsLT5zZXRUaHVtYm5haWxWaWV3KHRodW1ibmFpbFZpZXcpOworICAgIFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBjb3JlU3RhdGUgPSBXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpOb25lTXV0ZWQ7CisKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQXVk
aW9NdXRlZCkKKyAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1
ZGlvSXNNdXRlZDsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQ2FwdHVyZURldmljZXNN
dXRlZCkKKyAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1ZGlv
QW5kVmlkZW9DYXB0dXJlSXNNdXRlZDsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhU2Ny
ZWVuQ2FwdHVyZU11dGVkKQorICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9k
dWNlcjo6U2NyZWVuQ2FwdHVyZUlzTXV0ZWQ7CisKKyAgICBfcGFnZS0+c2V0TXV0ZWQoY29yZVN0
YXRlKTsKIH0KIAotLSAoX1dLVGh1bWJuYWlsVmlldyAqKV90aHVtYm5haWxWaWV3CistICh2b2lk
KV9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uCiB7
Ci0gICAgaWYgKCFfaW1wbCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gX2ltcGwt
PnRodW1ibmFpbFZpZXcoKTsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgX3BhZ2Ut
PnJlbW92ZURhdGFEZXRlY3RlZExpbmtzKFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb24pLCBwYWdlID0gbWFrZVdlYWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7
CisgICAgICAgIGlmIChwYWdlKQorICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJl
c3VsdChyZXN1bHQpOworICAgICAgICBpZiAoY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBs
ZXRpb24oKTsKKyAgICB9KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOwor
I2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldElnbm9yZXNBbGxFdmVudHM6KEJPT0wpaWdub3Jlc0Fs
bEV2ZW50cworLy8gRXhlY3V0ZSB0aGUgc3VwcGxpZWQgYmxvY2sgYWZ0ZXIgdGhlIG5leHQgdHJh
bnNhY3Rpb24gZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIF9pbXBsLT5z
ZXRJZ25vcmVzQWxsRXZlbnRzKGlnbm9yZXNBbGxFdmVudHMpOworICAgIFtzZWxmIF9pbnRlcm5h
bERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5n
Rm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107CiB9CiAK
LS0gKEJPT0wpX2lnbm9yZXNBbGxFdmVudHMKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRl
QmxvY2sKIHsKLSAgICByZXR1cm4gX2ltcGwtPmlnbm9yZXNBbGxFdmVudHMoKTsKKyAgICBbc2Vs
ZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRo
b3V0V2FpdGluZ0ZvclBhaW50aW5nOllFUyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
Ok5PXTsKIH0KIAotLSAoTlNJbnRlZ2VyKV9zcGVsbENoZWNrZXJEb2N1bWVudFRhZworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCistICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlv
blVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jawogewotICAgIHJldHVybiBfaW1w
bC0+c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKTsKLX0KKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFu
ZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNl
bmRpZgorICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2Nr
KTsKIAotQGVuZAorICAgIGlmIChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFj
a3MpCisgICAgICAgIFtfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgYWRk
T2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5nZXQoKV07CisgICAgZWxzZSB7CisgICAgICAgIF9zdGFi
bGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmlsXSk7
CisgICAgICAgIFtzZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0
YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKKyAgICB9Cit9CisjZW5kaWYKIAotI3VuZGVmIEZP
UldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcKKyNwcmFnbWEgbWFyayBpT1Mtc3BlY2lmaWMg
bWV0aG9kcwogCi1AaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmcpCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAotLSAodm9pZClfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkCistICh2b2lkKV9kZXRlY3REYXRhV2l0aFR5
cGVzOihXS0RhdGFEZXRlY3RvclR5cGVzKXR5cGVzIGNvbXBsZXRpb25IYW5kbGVyOihkaXNwYXRj
aF9ibG9ja190KWNvbXBsZXRpb24KIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFtf
Y29udGVudFZpZXcgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOwor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBfcGFnZS0+ZGV0ZWN0RGF0YUluQWxsRnJh
bWVzKGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgW2NvbXBsZXRpb24gPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbiksIHBhZ2UgPSBtYWtlV2Vha1B0cihfcGFnZS5nZXQoKSldIChhdXRv
JiByZXN1bHQpIHsKKyAgICAgICAgaWYgKHBhZ2UpCisgICAgICAgICAgICBwYWdlLT5zZXREYXRh
RGV0ZWN0aW9uUmVzdWx0KHJlc3VsdCk7CisgICAgICAgIGlmIChjb21wbGV0aW9uKQorICAgICAg
ICAgICAgY29tcGxldGlvbigpOworICAgIH0pOwogI2Vsc2UKLSAgICBfaW1wbC0+c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBl
cyk7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOwogI2VuZGlmCiB9CiAKLS0gKE5TRGlj
dGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlcklu
dGVyZmFjZUl0ZW0KKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCistICh2b2lkKXJlbW92ZUZy
b21TdXBlcnZpZXcKIHsKLSAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmlu
ZzpAInZhbGlkYXRpb25CdWJibGUiXSkgewotICAgICAgICBhdXRvKiB2YWxpZGF0aW9uQnViYmxl
ID0gX3BhZ2UtPnZhbGlkYXRpb25CdWJibGUoKTsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2
YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgpIDogZW1wdHlTdHJp
bmcoKTsKLSAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlk
YXRpb25CdWJibGUtPmZvbnRTaXplKCkgOiAwOwotICAgICAgICByZXR1cm4gQHsgdXNlckludGVy
ZmFjZUl0ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2UsIEAiZm9udFNpemUi
OiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9OwotICAgIH0KKyAgICBb
c3VwZXIgcmVtb3ZlRnJvbVN1cGVydmlld107CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5T
U3RyaW5nICopdXNlckludGVyZmFjZUl0ZW1dOwotI2Vsc2UKLSAgICByZXR1cm4gbmlsOwotI2Vu
ZGlmCisgICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkK
KyAgICAgICAgW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3RGlkUmVtb3ZlRnJv
bVN1cGVydmlld1doaWxlSW5GdWxsc2NyZWVuXTsKIH0KKyNlbmRpZgogCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLS0gKHZvaWQpX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjoo
Q0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRlZEVs
ZW1lbnRJbmZvICopKWJsb2NrCisvLyBEZXByZWNhdGVkIFNQSS4KKy0gKENHU2l6ZSlfbWluaW11
bUxheW91dFNpemVPdmVycmlkZQogewotICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6Oklu
dGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3Np
dGlvbikpOwotICAgIGluZm9SZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7Ci0KLSAgICBb
X2NvbnRlbnRWaWV3IGRvQWZ0ZXJQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlOltjYXB0dXJlZEJs
b2NrID0gbWFrZUJsb2NrUHRyKGJsb2NrKV0gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24gaW5mb3JtYXRpb24pIHsKLSAgICAgICAgY2FwdHVyZWRCbG9jayhbX1dLQWN0
aXZhdGVkRWxlbWVudEluZm8gYWN0aXZhdGVkRWxlbWVudEluZm9XaXRoSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb246aW5mb3JtYXRpb24gdXNlckluZm86bmlsXSk7Ci0gICAgfSBmb3JS
ZXF1ZXN0OmluZm9SZXF1ZXN0XTsKKyAgICBBU1NFUlQoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUp
OworICAgIHJldHVybiBfdmlld0xheW91dFNpemVPdmVycmlkZS52YWx1ZU9yKENHU2l6ZVplcm8p
OwogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zm
c2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25I
YW5kbGVyCistICh2b2lkKV9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOihDR1NpemUpdmlld0xh
eW91dFNpemVPdmVycmlkZQogewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRy
aWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlv
bkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxl
Y3Rpb25SZWN0cykgewotICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXpl
KCldKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMp
Ci0gICAgICAgICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dS
ZWN0OnNlbGVjdGlvblJlY3QucmVjdCgpXV07Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhh
bmRsZXIocmVjdFZhbHVlcy5nZXQoKSk7Ci0gICAgfV07CisgICAgX3ZpZXdMYXlvdXRTaXplT3Zl
cnJpZGUgPSB2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOworCisgICAgaWYgKF9keW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVz
aXppbmcpCisgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOldlYkNvcmU6
OkZsb2F0U2l6ZSh2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKV07CiB9CiAKLS0gKHZvaWQpX2FjY2Vz
c2liaWxpdHlTdG9yZVNlbGVjdGlvbgorLSAoVUlFZGdlSW5zZXRzKV9vYnNjdXJlZEluc2V0cwog
ewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbl07CisgICAg
cmV0dXJuIF9vYnNjdXJlZEluc2V0czsKIH0KIAotLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFy
U2VsZWN0aW9uCistICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0czooVUlFZGdlSW5zZXRzKW9ic2N1
cmVkSW5zZXRzCiB7Ci0gICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0
aW9uXTsKKyAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMudG9wID49IDApOworICAgIEFTU0VSVChv
YnNjdXJlZEluc2V0cy5sZWZ0ID49IDApOworICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy5ib3R0
b20gPj0gMCk7CisgICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLnJpZ2h0ID49IDApOworCisgICAg
X2hhdmVTZXRPYnNjdXJlZEluc2V0cyA9IFlFUzsKKworICAgIGlmIChVSUVkZ2VJbnNldHNFcXVh
bFRvRWRnZUluc2V0cyhfb2JzY3VyZWRJbnNldHMsIG9ic2N1cmVkSW5zZXRzKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX29ic2N1cmVkSW5zZXRzID0gb2JzY3VyZWRJbnNldHM7CisKKyAgICBb
c2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwogfQogCi0tIChVSVZpZXcg
KilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldworLSAoVUlSZWN0RWRnZSlfb2JzY3VyZWRJbnNl
dEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhCiB7Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQot
ICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pCi0gICAg
ICAgIHJldHVybiBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQbGFjZWhvbGRl
cl07Ci0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHJldHVybiBuaWw7Cisg
ICAgcmV0dXJuIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWE7CiB9CiAKLS0g
KENHUmVjdClfY29udGVudFZpc2libGVSZWN0CistICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0RWRn
ZXNBZmZlY3RlZEJ5U2FmZUFyZWE6KFVJUmVjdEVkZ2UpZWRnZXMKIHsKLSAgICByZXR1cm4gW3Nl
bGYgY29udmVydFJlY3Q6W3NlbGYgYm91bmRzXSB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRW
aWV3XTsKLX0KKyAgICBpZiAoZWRnZXMgPT0gX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlT
YWZlQXJlYSkKKyAgICAgICAgcmV0dXJuOwogCi0tIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9t
Q29udGVudHNUb1ZpZXc6KENHUG9pbnQpcG9pbnQKLXsKLSAgICByZXR1cm4gW3NlbGYgY29udmVy
dFBvaW50OnBvaW50IGZyb21WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Ci19CisgICAg
X29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSA9IGVkZ2VzOwogCi0tIChDR1Bv
aW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQKLXsKLSAg
ICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpzZWxmLl9jdXJyZW50Q29u
dGVudFZpZXddOworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07
CiB9CiAKLS0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0CistIChVSUVkZ2VJbnNldHMp
X3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0cwogewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5
VGFiOllFU107CisgICAgcmV0dXJuIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7CiB9CiAKLS0g
KHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91cworLSAodm9pZClfc2V0VW5vYnNjdXJl
ZFNhZmVBcmVhSW5zZXRzOihVSUVkZ2VJbnNldHMpdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzCiB7
Ci0gICAgW19jb250ZW50VmlldyBhY2Nlc3NvcnlUYWI6Tk9dOwotfQorICAgIEFTU0VSVCh1bm9i
c2N1cmVkU2FmZUFyZWFJbnNldHMudG9wID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2Fm
ZUFyZWFJbnNldHMubGVmdCA+PSAwKTsKKyAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRzLmJvdHRvbSA+PSAwKTsKKyAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJp
Z2h0ID49IDApOwogCi0tICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3
U3RyaW5nIHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgW19jb250ZW50Vmll
dyBhcHBseUF1dG9jb3JyZWN0aW9uOm5ld1N0cmluZyB0b1N0cmluZzpvbGRTdHJpbmcgd2l0aENv
bXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0gKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0cykgewot
ICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfV07CisgICAgX2hhdmVT
ZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBZRVM7CisKKyAgICBpZiAoVUlFZGdlSW5zZXRz
RXF1YWxUb0VkZ2VJbnNldHMoX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0cywgdW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3Vub2JzY3VyZWRTYWZlQXJl
YUluc2V0cyA9IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKKworICAgIFtzZWxmIF9zY2hlZHVs
ZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CiB9CiAKLS0gKHZvaWQpZGlzbWlzc0Zvcm1BY2Nl
c3NvcnlWaWV3CistIChCT09MKV9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzCiB7
Ci0gICAgW19jb250ZW50VmlldyBhY2Nlc3NvcnlEb25lXTsKKyAgICBpZiAoIVtzZWxmIHVzZXNT
dGFuZGFyZENvbnRlbnRWaWV3XSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBfYXZv
aWRzVW5zYWZlQXJlYTsKIH0KIAotLSAodm9pZClfZGlzbWlzc0ZpbGVQaWNrZXIKKy0gKHZvaWQp
X3NldEludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6KFVJSW50ZXJmYWNlT3JpZW50YXRpb24p
aW50ZXJmYWNlT3JpZW50YXRpb24KIHsKLSAgICBbX2NvbnRlbnRWaWV3IGRpc21pc3NGaWxlUGlj
a2VyXTsKKyAgICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBZRVM7CisgICAgX2lu
dGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBpbnRlcmZhY2VPcmllbnRhdGlvbjsKKworICAg
IGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXREZXZp
Y2VPcmllbnRhdGlvbjpkZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNlT3JpZW50YXRpb24o
X2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUpXTsKIH0KIAotLSAodm9pZClzZXRUaW1lUGlj
a2VyVmFsdWVUb0hvdXI6KE5TSW50ZWdlcilob3VyIG1pbnV0ZTooTlNJbnRlZ2VyKW1pbnV0ZQor
LSAoVUlJbnRlcmZhY2VPcmllbnRhdGlvbilfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZQog
ewotICAgIFtfY29udGVudFZpZXcgc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOmhvdXIgbWludXRl
Om1pbnV0ZV07CisgICAgQVNTRVJUKF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbik7Cisg
ICAgcmV0dXJuIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOwogfQogCi0tICh2b2lkKXNl
bGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6KGludClyb3dJbmRleAorLSAodm9pZClfY2xlYXJJ
bnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlCiB7Ci0gICAgW19jb250ZW50VmlldyBzZWxlY3RG
b3JtQWNjZXNzb3J5UGlja2VyUm93OnJvd0luZGV4XTsKKyAgICBfb3ZlcnJpZGVzSW50ZXJmYWNl
T3JpZW50YXRpb24gPSBOTzsKKyAgICBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IFVJ
SW50ZXJmYWNlT3JpZW50YXRpb25Qb3J0cmFpdDsKIH0KIAotLSAoTlNTdHJpbmcgKilzZWxlY3RG
b3JtUG9wb3ZlclRpdGxlCisvLyBEZXByZWNhdGVkIFNQSQorLSAoQ0dTaXplKV9tYXhpbXVtVW5v
YnNjdXJlZFNpemVPdmVycmlkZQogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IHNlbGVjdEZv
cm1Qb3BvdmVyVGl0bGVdOworICAgIEFTU0VSVChfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUpOworICAgIHJldHVybiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUudmFsdWVPcihD
R1NpemVaZXJvKTsKIH0KIAotLSAoTlNTdHJpbmcgKil0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5n
CistICh2b2lkKV9zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTooQ0dTaXplKXNpemUK
IHsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXTsK
KyAgICBBU1NFUlQoc2l6ZS53aWR0aCA8PSBzZWxmLmJvdW5kcy5zaXplLndpZHRoICYmIHNpemUu
aGVpZ2h0IDw9IHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICBfbWF4aW11bVVub2JzY3Vy
ZWRTaXplT3ZlcnJpZGUgPSBzaXplOworCisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCisg
ICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpG
bG9hdFNpemUoc2l6ZSldOwogfQogCi0tIChOU1N0cmluZyAqKWZvcm1JbnB1dExhYmVsCistICh2
b2lkKV9zZXRBbGxvd3NWaWV3cG9ydFNocmlua1RvRml0OihCT09MKWFsbG93U2hyaW5rVG9GaXQK
IHsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07CisgICAgX2FsbG93
c1ZpZXdwb3J0U2hyaW5rVG9GaXQgPSBhbGxvd1Nocmlua1RvRml0OwogfQogCi0tICh2b2lkKWRp
ZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbgorLSAoQk9PTClfYWxsb3dzVmlld3BvcnRTaHJp
bmtUb0ZpdAogewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgIHJldHVy
biBfYWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdDsKIH0KIAotLSAodm9pZClkaWRFbmRGb3JtQ29u
dHJvbEludGVyYWN0aW9uCistICh2b2lkKV9iZWdpbkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHND
aGFuZ2UKIHsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKyAgICBBU1NFUlQo
IV9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5KTsKKyAgICBfaXNDaGFuZ2lu
Z09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSA9IFlFUzsKIH0KIAotLSAodm9pZClfZGlkU2hv
d0NvbnRleHRNZW51CistICh2b2lkKV9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdl
CiB7Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCisgICAgQVNTRVJUKF9pc0No
YW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5KTsKKyAgICBfaXNDaGFuZ2luZ09ic2N1
cmVkSW5zZXRzSW50ZXJhY3RpdmVseSA9IE5POworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVD
b250ZW50UmVjdFVwZGF0ZV07CiB9CiAKLS0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudQor
LSAodm9pZClfaGlkZUNvbnRlbnRVbnRpbE5leHRVcGRhdGUKIHsKLSAgICAvLyBGb3Igc3ViY2xh
c3NlcyB0byBvdmVycmlkZS4KKyAgICBpZiAoYXV0byogYXJlYSA9IF9wYWdlLT5kcmF3aW5nQXJl
YSgpKQorICAgICAgICBhcmVhLT5oaWRlQ29udGVudFVudGlsQW55VXBkYXRlKCk7CiB9CiAKLS0g
KENHUmVjdClfdWlUZXh0Q2FyZXRSZWN0CistICh2b2lkKV9iZWdpbkFuaW1hdGVkUmVzaXplV2l0
aFVwZGF0ZXM6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCiB7Ci0gICAgLy8gRm9yY2UgdGhl
IHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCi0gICAgW19jb250ZW50VmlldyBf
dXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisgICAgQ0dSZWN0IG9sZEJvdW5kcyA9IHNlbGYuYm91
bmRzOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QgPSBf
cGFnZS0+dW5vYnNjdXJlZENvbnRlbnRSZWN0KCk7CiAKLSAgICByZXR1cm4gW1tfY29udGVudFZp
ZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQuc2VsZWN0aW9uVmlldy5z
ZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwotfQorICAgIGlmICghW3NlbGYgdXNl
c1N0YW5kYXJkQ29udGVudFZpZXddIHx8ICFfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSB8
fCBDR1JlY3RJc0VtcHR5KG9sZEJvdW5kcykgfHwgb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6KV0pCisg
ICAgICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0
aFVwZGF0ZXM6dXBkYXRlQmxvY2tdOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cGRhdGVC
bG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0tIChDR1JlY3QpX2lucHV0Vmlld0Jv
dW5kcwotewotICAgIHJldHVybiBfaW5wdXRWaWV3Qm91bmRzOwotfQorICAgIFJFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfYmVnaW5Bbmlt
YXRlZFJlc2l6ZVdpdGhVcGRhdGVzOl0iLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUlu
dDY0KCkpOwogCi0tIChOU0FycmF5PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVjdHMK
LXsKLSAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4K
LSAgICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKKyAgICBfZHluYW1p
Y1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6
UmVzaXppbmdXaXRoQW5pbWF0aW9uOwogCi0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX3VpVGV4
dFNlbGVjdGlvblJlY3RzXTsKLX0KKyAgICBhdXRvIG9sZFZpZXdMYXlvdXRTaXplID0gW3NlbGYg
YWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdOworICAgIGF1dG8gb2xkTWF4aW11bVVu
b2JzY3VyZWRTaXplID0gYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG9sZEJvdW5k
cyk7CisgICAgaW50MzJfdCBvbGRPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYp
OworICAgIFVJRWRnZUluc2V0cyBvbGRPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsK
IAotLSAoTlNTdHJpbmcgKilfc2Nyb2xsaW5nVHJlZUFzVGV4dAotewotICAgIFdlYktpdDo6UmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSogY29vcmRpbmF0b3IgPSBfcGFnZS0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eSgpOwotICAgIGlmICghY29vcmRpbmF0b3IpCi0gICAgICAgIHJl
dHVybiBAIiI7CisgICAgdXBkYXRlQmxvY2soKTsKKworICAgIENHUmVjdCBuZXdCb3VuZHMgPSBz
ZWxmLmJvdW5kczsKKyAgICBhdXRvIG5ld1ZpZXdMYXlvdXRTaXplID0gW3NlbGYgYWN0aXZlVmll
d0xheW91dFNpemU6bmV3Qm91bmRzXTsKKyAgICBhdXRvIG5ld01heGltdW1Vbm9ic2N1cmVkU2l6
ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShzZWxmLCBuZXdCb3VuZHMpOworICAgIGlu
dDMyX3QgbmV3T3JpZW50YXRpb24gPSBhY3RpdmVPcmllbnRhdGlvbihzZWxmKTsKKyAgICBVSUVk
Z2VJbnNldHMgbmV3T2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7CisgICAgQ0dSZWN0
IGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMgPSBVSUVkZ2VJbnNldHNJbnNl
dFJlY3QobmV3Qm91bmRzLCBfb2JzY3VyZWRJbnNldHMpOworICAgIENHUmVjdCBjb250ZW50Vmll
d0JvdW5kcyA9IFtfY29udGVudFZpZXcgYm91bmRzXTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIShfdmlld0xheW91dFNpemVPdmVycmlkZSAmJiBuZXdWaWV3TGF5b3V0U2l6ZS5pc0VtcHR5
KCkpLCAiQ2xpZW50cyBjb250cm9sbGluZyB0aGUgbGF5b3V0IHNpemUgc2hvdWxkIG1haW50YWlu
IGEgdmFsaWQgbGF5b3V0IHNpemUgdG8gbWluaW1pemUgbGF5b3V0cy4iKTsKKyAgICBpZiAoQ0dS
ZWN0SXNFbXB0eShuZXdCb3VuZHMpIHx8IG5ld1ZpZXdMYXlvdXRTaXplLmlzRW1wdHkoKSB8fCBD
R1JlY3RJc0VtcHR5KGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMpIHx8IENH
UmVjdElzRW1wdHkoY29udGVudFZpZXdCb3VuZHMpKSB7CisgICAgICAgIFtzZWxmIF9jYW5jZWxB
bmltYXRlZFJlc2l6ZV07CisgICAgICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07Cisg
ICAgICAgIGlmIChfdmlld0xheW91dFNpemVPdmVycmlkZSkKKyAgICAgICAgICAgIFtzZWxmIF9k
aXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOm5ld1ZpZXdMYXlvdXRTaXplXTsKKyAgICAgICAgaWYg
KF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSkKKyAgICAgICAgICAgIFtzZWxmIF9kaXNw
YXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUobmV3TWF4aW11
bVVub2JzY3VyZWRTaXplKV07CisgICAgICAgIGlmIChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50
YXRpb24pCisgICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpu
ZXdPcmllbnRhdGlvbl07CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChDR1Jl
Y3RFcXVhbFRvUmVjdChvbGRCb3VuZHMsIG5ld0JvdW5kcykKKyAgICAgICAgJiYgb2xkVmlld0xh
eW91dFNpemUgPT0gbmV3Vmlld0xheW91dFNpemUKKyAgICAgICAgJiYgb2xkTWF4aW11bVVub2Jz
Y3VyZWRTaXplID09IG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZQorICAgICAgICAmJiBvbGRPcmll
bnRhdGlvbiA9PSBuZXdPcmllbnRhdGlvbgorICAgICAgICAmJiBVSUVkZ2VJbnNldHNFcXVhbFRv
RWRnZUluc2V0cyhvbGRPYnNjdXJlZEluc2V0cywgbmV3T2JzY3VyZWRJbnNldHMpKSB7CisgICAg
ICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6ZV07CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMgPSBDQVRyYW5zZm9y
bTNESWRlbnRpdHk7CisKKyAgICBpZiAoIV9yZXNpemVBbmltYXRpb25WaWV3KSB7CisgICAgICAg
IE5TVUludGVnZXIgaW5kZXhPZkNvbnRlbnRWaWV3ID0gW1tfc2Nyb2xsVmlldyBzdWJ2aWV3c10g
aW5kZXhPZk9iamVjdDpfY29udGVudFZpZXcuZ2V0KCldOworICAgICAgICBfcmVzaXplQW5pbWF0
aW9uVmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW19yZXNp
emVBbmltYXRpb25WaWV3IGxheWVyXS5uYW1lID0gQCJSZXNpemVBbmltYXRpb24iOworICAgICAg
ICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3VidmlldzpfcmVzaXplQW5pbWF0aW9uVmlldy5nZXQoKSBh
dEluZGV4OmluZGV4T2ZDb250ZW50Vmlld107CisgICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmll
dyBhZGRTdWJ2aWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgICAgIFtfcmVzaXplQW5pbWF0
aW9uVmlldyBhZGRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5zY2FsZWRWaWV3XV07CisgICAgfQor
CisgICAgQ0dTaXplIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzID0gY29udGVu
dFZpZXdCb3VuZHMuc2l6ZTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0TWluaW11bVpvb21TY2FsZTpz
dGQ6Om1pbihuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gY29udGVudFNpemVJbkNvbnRlbnRW
aWV3Q29vcmRpbmF0ZXMud2lkdGgsIFtfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXSldOwor
ICAgIFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVtWm9vbVNjYWxlOnN0ZDo6bWF4KG5ld1ZpZXdMYXlv
dXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0
aCwgW19zY3JvbGxWaWV3IG1heGltdW1ab29tU2NhbGVdKV07CisKKyAgICAvLyBDb21wdXRlIHRo
ZSBuZXcgc2NhbGUgdG8ga2VlcCB0aGUgY3VycmVudCBjb250ZW50IHdpZHRoIGluIHRoZSBzY3Jv
bGx2aWV3LgorICAgIENHRmxvYXQgb2xkV2ViVmlld1dpZHRoSW5Db250ZW50Vmlld0Nvb3JkaW5h
dGVzID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LndpZHRoKCk7CisgICAgX2FuaW1hdGVkUmVz
aXplT3JpZ2luYWxDb250ZW50V2lkdGggPSBzdGQ6Om1pbihjb250ZW50U2l6ZUluQ29udGVudFZp
ZXdDb29yZGluYXRlcy53aWR0aCwgb2xkV2ViVmlld1dpZHRoSW5Db250ZW50Vmlld0Nvb3JkaW5h
dGVzKTsKKyAgICBDR0Zsb2F0IHRhcmdldFNjYWxlID0gbmV3Vmlld0xheW91dFNpemUud2lkdGgo
KSAvIF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoOworICAgIENHRmxvYXQgcmVz
aXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxlID0gdGFyZ2V0U2NhbGUgLyBjb250ZW50Wm9v
bVNjYWxlKHNlbGYpOworICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyBzZXRUcmFuc2Zvcm06Q0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocmVzaXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxl
LCByZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUpXTsKKworICAgIC8vIENvbXB1dGUg
YSBuZXcgcG9zaXRpb24gdG8ga2VlcCB0aGUgY29udGVudCBjZW50ZXJlZC4KKyAgICBDR1BvaW50
IG9yaWdpbmFsQ29udGVudENlbnRlciA9IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC5jZW50ZXIo
KTsKKyAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVudENlbnRlckluU2VsZkNvb3JkaW5hdGVzID0g
W3NlbGYgY29udmVydFBvaW50Om9yaWdpbmFsQ29udGVudENlbnRlciBmcm9tVmlldzpfY29udGVu
dFZpZXcuZ2V0KCldOworICAgIENHUG9pbnQgZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNl
bGZDb29yZGluYXRlcyA9IENHUG9pbnRNYWtlKGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29v
cmRpbmF0ZXMub3JpZ2luLnggKyBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVz
LnNpemUud2lkdGggLyAyLCBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLm9y
aWdpbi55ICsgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5zaXplLmhlaWdo
dCAvIDIpOworCisgICAgQ0dQb2ludCBvcmlnaW5hbENvbnRlbnRPZmZzZXQgPSBbX3Njcm9sbFZp
ZXcgY29udGVudE9mZnNldF07CisgICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0ID0gb3JpZ2luYWxD
b250ZW50T2Zmc2V0OworICAgIGNvbnRlbnRPZmZzZXQueCArPSAob3JpZ2luYWxDb250ZW50Q2Vu
dGVySW5TZWxmQ29vcmRpbmF0ZXMueCAtIGZ1dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxm
Q29vcmRpbmF0ZXMueCk7CisgICAgY29udGVudE9mZnNldC55ICs9IChvcmlnaW5hbENvbnRlbnRD
ZW50ZXJJblNlbGZDb29yZGluYXRlcy55IC0gZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNl
bGZDb29yZGluYXRlcy55KTsKKworICAgIC8vIExpbWl0IHRoZSBuZXcgb2Zmc2V0IHdpdGhpbiB0
aGUgc2Nyb2xsdmlldywgd2UgZG8gbm90IHdhbnQgdG8gcnViYmVyIGJhbmQgcHJvZ3JhbW1hdGlj
YWxseS4KKyAgICBDR1NpemUgZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcyA9IENH
U2l6ZU1ha2UoY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGggKiB0YXJn
ZXRTY2FsZSwgY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMuaGVpZ2h0ICogdGFy
Z2V0U2NhbGUpOworICAgIENHRmxvYXQgbWF4SG9yaXpvbnRhbE9mZnNldCA9IGZ1dHVyZUNvbnRl
bnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMud2lkdGggLSBuZXdCb3VuZHMuc2l6ZS53aWR0aCArIF9v
YnNjdXJlZEluc2V0cy5yaWdodDsKKyAgICBjb250ZW50T2Zmc2V0LnggPSBzdGQ6Om1pbihjb250
ZW50T2Zmc2V0LngsIG1heEhvcml6b250YWxPZmZzZXQpOworICAgIENHRmxvYXQgbWF4VmVydGlj
YWxPZmZzZXQgPSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzLmhlaWdodCAtIG5l
d0JvdW5kcy5zaXplLmhlaWdodCArIF9vYnNjdXJlZEluc2V0cy5ib3R0b207CisgICAgY29udGVu
dE9mZnNldC55ID0gc3RkOjptaW4oY29udGVudE9mZnNldC55LCBtYXhWZXJ0aWNhbE9mZnNldCk7
CisKKyAgICBjb250ZW50T2Zmc2V0LnggPSBzdGQ6Om1heChjb250ZW50T2Zmc2V0LngsIC1fb2Jz
Y3VyZWRJbnNldHMubGVmdCk7CisgICAgY29udGVudE9mZnNldC55ID0gc3RkOjptYXgoY29udGVu
dE9mZnNldC55LCAtX29ic2N1cmVkSW5zZXRzLnRvcCk7CisKKyAgICAvLyBNYWtlIHRoZSB0b3Av
Ym90dG9tIGVkZ2VzICJzdGlja3kiIHdpdGhpbiAxIHBpeGVsLgorICAgIGlmIChvbGRVbm9ic2N1
cmVkQ29udGVudFJlY3QubWF4WSgpID4gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0
ZXMuaGVpZ2h0IC0gMSkKKyAgICAgICAgY29udGVudE9mZnNldC55ID0gbWF4VmVydGljYWxPZmZz
ZXQ7CisgICAgaWYgKG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC55KCkgPCAxKQorICAgICAgICBj
b250ZW50T2Zmc2V0LnkgPSBbc2VsZiBfaW5pdGlhbENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3
XS55OworCisgICAgLy8gRklYTUU6IGlmIHdlIGhhdmUgY29udGVudCBjZW50ZXJlZCBhZnRlciBk
b3VibGUgdGFwIHRvIHpvb20sIHdlIHNob3VsZCBhbHNvIHRyeSB0byBrZWVwIHRoYXQgcmVjdCBp
biB2aWV3LgorICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdD
b250ZW50U2l6ZSgqX3BhZ2UsIGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMpXTsK
KyAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpjb250ZW50T2Zmc2V0XTsKKworICAg
IENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJl
Y3Q6bmV3Qm91bmRzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOworICAgIENHUmVjdCB1bm9i
c2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6ZnV0dXJl
VW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgp
XTsKKworICAgIFVJRWRnZUluc2V0cyB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBbc2VsZiBf
Y29tcHV0ZWRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldF07CisgICAgV2ViQ29yZTo6RmxvYXRCb3hF
eHRlbnQgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0ZW50KHVub2JzY3VyZWRTYWZlQXJlYUlu
c2V0cy50b3AsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5yaWdodCwgdW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXRzLmJvdHRvbSwgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmxlZnQpOworCisgICAg
X2xhc3RTZW50Vmlld0xheW91dFNpemUgPSBuZXdWaWV3TGF5b3V0U2l6ZTsKKyAgICBfbGFzdFNl
bnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemU7CisgICAg
X2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gPSBuZXdPcmllbnRhdGlvbjsKKworICAgIF9wYWdl
LT5keW5hbWljVmlld3BvcnRTaXplVXBkYXRlKG5ld1ZpZXdMYXlvdXRTaXplLCBuZXdNYXhpbXVt
VW5vYnNjdXJlZFNpemUsIHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMsIHVub2JzY3Vy
ZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMsIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29v
cmRpbmF0ZXMsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0c0V4dGVudCwgdGFyZ2V0U2NhbGUsIG5l
d09yaWVudGF0aW9uLCArK19jdXJyZW50RHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEKTsKKyAg
ICBpZiAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IF9wYWdlLT5kcmF3
aW5nQXJlYSgpKQorICAgICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXpl
KG5ld0JvdW5kcy5zaXplKSk7CiAKLSAgICByZXR1cm4gY29vcmRpbmF0b3ItPnNjcm9sbGluZ1Ry
ZWVBc1RleHQoKTsKKyAgICBfd2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUgPSBZ
RVM7CisgICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IFlFUzsKIH0KIAotLSAoTlNO
dW1iZXIgKilfc3RhYmxlU3RhdGVPdmVycmlkZQorLSAodm9pZClfZW5kQW5pbWF0ZWRSZXNpemUK
IHsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLSAgICByZXR1cm4gbmlsOwor
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2Vi
VmlldyBfZW5kQW5pbWF0ZWRSZXNpemVdIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICVkIiwg
c2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBk
YXRlTW9kZSk7CisKKyAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gdXAtdG8tZGF0ZSBsYXll
ciB0cmVlLCBpbW1lZGlhdGVseSBjb21wbGV0ZQorICAgIC8vIHRoZSByZXNpemUuIE90aGVyd2lz
ZSwgd2Ugd2lsbCBkZWZlciBjb21wbGV0aW9uIHVudGlsIHdlIGRvLgorICAgIF93YWl0aW5nRm9y
RW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKKyAgICBpZiAoIV93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJB
bmltYXRlZFJlc2l6ZSkKKyAgICAgICAgW3NlbGYgX2RpZENvbXBsZXRlQW5pbWF0ZWRSZXNpemVd
OwogfQogCi0tICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlz
cGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jaworLSAodm9pZClfcmVzaXplV2hpbGVIaWRpbmdDb250
ZW50V2l0aFVwZGF0ZXM6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCiB7Ci0gICAgaWYgKCFb
c2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIodXBkYXRl
QmxvY2spOworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1
KSAtW1dLV2ViVmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXM6XSIsIHNl
bGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CiAKLSAgICBpZiAoX3N0YWJsZVN0
YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzKQotICAgICAgICBbX3N0YWJsZVN0YXRlUHJl
c2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGFkZE9iamVjdDp1cGRhdGVCbG9ja0NvcHkuZ2V0KCld
OwotICAgIGVsc2UgewotICAgICAgICBfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxs
YmFja3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czp1
cGRhdGVCbG9ja0NvcHkuZ2V0KCksIG5pbF0pOwotICAgICAgICBbc2VsZiBfZmlyZVByZXNlbnRh
dGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc107Cisg
ICAgW3NlbGYgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp1cGRhdGVCbG9ja107Cisg
ICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdw
b3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoQW5pbWF0aW9uKSB7CisgICAgICAgIFtfY29udGVu
dFZpZXcgc2V0SGlkZGVuOllFU107CisgICAgICAgIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
ID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dpdGhEb2N1bWVu
dEhpZGRlbjsKKyAgICAgICAgCisgICAgICAgIC8vIF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRX
aXRoVXBkYXRlcyBpcyB1c2VkIGJ5IGl0c2VsZjsgdGhlIGNsaWVudCB3aWxsCisgICAgICAgIC8v
IG5vdCBjYWxsIGVuZEFuaW1hdGVkUmVzaXplLCBzbyB3ZSBjYW4ndCB3YWl0IGZvciBpdC4KKyAg
ICAgICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IE5POwogICAgIH0KIH0KIApAQCAt
NzE0Myw2NDMgKzY4NDMsNDU5IEBAIC0gKHZvaWQpX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVGb3JQ
ZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3MKICAgICB9XTsKIH0KIAotLSAo
TlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25lZCBsb25nIGxv
bmcpbGF5ZXJJRAotewotICAgIENBTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLmxheWVy
V2l0aElERm9yVGVzdGluZyhsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgcmV0dXJuIEB7Ci0gICAgICAgIEAiYm91bmRzIiA6IEB7Ci0gICAgICAg
ICAgICBAIngiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAotICAgICAgICAgICAgQCJ5IiA6
IEAobGF5ZXIuYm91bmRzLm9yaWdpbi54KSwKLSAgICAgICAgICAgIEAid2lkdGgiIDogQChsYXll
ci5ib3VuZHMuc2l6ZS53aWR0aCksCi0gICAgICAgICAgICBAImhlaWdodCIgOiBAKGxheWVyLmJv
dW5kcy5zaXplLmhlaWdodCksCi0KLSAgICAgICAgfSwKLSAgICAgICAgQCJwb3NpdGlvbiIgOiBA
ewotICAgICAgICAgICAgQCJ4IiA6IEAobGF5ZXIucG9zaXRpb24ueCksCi0gICAgICAgICAgICBA
InkiIDogQChsYXllci5wb3NpdGlvbi55KSwKLSAgICAgICAgfSwKLSAgICAgICAgQCJ6UG9zaXRp
b24iIDogQChsYXllci56UG9zaXRpb24pLAotICAgICAgICBAImFuY2hvclBvaW50IiA6IEB7Ci0g
ICAgICAgICAgICBAIngiIDogQChsYXllci5hbmNob3JQb2ludC54KSwKLSAgICAgICAgICAgIEAi
eSIgOiBAKGxheWVyLmFuY2hvclBvaW50LnkpLAotICAgICAgICB9LAotICAgICAgICBAImFuY2hv
clBvaW50WiIgOiBAKGxheWVyLmFuY2hvclBvaW50WiksCi0gICAgICAgIEAidHJhbnNmb3JtIiA6
IEB7Ci0gICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTEpLAotICAgICAg
ICAgICAgQCJtMTIiIDogQChsYXllci50cmFuc2Zvcm0ubTEyKSwKLSAgICAgICAgICAgIEAibTEz
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMyksCi0gICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVy
LnRyYW5zZm9ybS5tMTQpLAotCi0gICAgICAgICAgICBAIm0yMSIgOiBAKGxheWVyLnRyYW5zZm9y
bS5tMjEpLAotICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci50cmFuc2Zvcm0ubTIyKSwKLSAg
ICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMyksCi0gICAgICAgICAgICBA
Im0yNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjQpLAotCi0gICAgICAgICAgICBAIm0zMSIgOiBA
KGxheWVyLnRyYW5zZm9ybS5tMzEpLAotICAgICAgICAgICAgQCJtMzIiIDogQChsYXllci50cmFu
c2Zvcm0ubTMyKSwKLSAgICAgICAgICAgIEAibTMzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMyks
Ci0gICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzQpLAotCi0gICAgICAg
ICAgICBAIm00MSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDEpLAotICAgICAgICAgICAgQCJtNDIi
IDogQChsYXllci50cmFuc2Zvcm0ubTQyKSwKLSAgICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIu
dHJhbnNmb3JtLm00MyksCi0gICAgICAgICAgICBAIm00NCIgOiBAKGxheWVyLnRyYW5zZm9ybS5t
NDQpLAotICAgICAgICB9LAotICAgICAgICBAInN1YmxheWVyVHJhbnNmb3JtIiA6IEB7Ci0gICAg
ICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMSksCi0gICAgICAg
ICAgICBAIm0xMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMiksCi0gICAgICAgICAg
ICBAIm0xMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMyksCi0gICAgICAgICAgICBA
Im0xNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xNCksCi0KLSAgICAgICAgICAgIEAi
bTIxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIxKSwKLSAgICAgICAgICAgIEAibTIy
IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIyKSwKLSAgICAgICAgICAgIEAibTIzIiA6
IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIzKSwKLSAgICAgICAgICAgIEAibTI0IiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTI0KSwKLQotICAgICAgICAgICAgQCJtMzEiIDogQChs
YXllci5zdWJsYXllclRyYW5zZm9ybS5tMzEpLAotICAgICAgICAgICAgQCJtMzIiIDogQChsYXll
ci5zdWJsYXllclRyYW5zZm9ybS5tMzIpLAotICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci5z
dWJsYXllclRyYW5zZm9ybS5tMzMpLAotICAgICAgICAgICAgQCJtMzQiIDogQChsYXllci5zdWJs
YXllclRyYW5zZm9ybS5tMzQpLAotCi0gICAgICAgICAgICBAIm00MSIgOiBAKGxheWVyLnN1Ymxh
eWVyVHJhbnNmb3JtLm00MSksCi0gICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm00MiksCi0gICAgICAgICAgICBAIm00MyIgOiBAKGxheWVyLnN1YmxheWVyVHJh
bnNmb3JtLm00MyksCi0gICAgICAgICAgICBAIm00NCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm00NCksCi0gICAgICAgIH0sCi0KLSAgICAgICAgQCJoaWRkZW4iIDogQChsYXllci5oaWRk
ZW4pLAotICAgICAgICBAImRvdWJsZVNpZGVkIiA6IEAobGF5ZXIuZG91YmxlU2lkZWQpLAotICAg
ICAgICBAIm1hc2tzVG9Cb3VuZHMiIDogQChsYXllci5tYXNrc1RvQm91bmRzKSwKLSAgICAgICAg
QCJjb250ZW50c1NjYWxlIiA6IEAobGF5ZXIuY29udGVudHNTY2FsZSksCi0gICAgICAgIEAicmFz
dGVyaXphdGlvblNjYWxlIiA6IEAobGF5ZXIucmFzdGVyaXphdGlvblNjYWxlKSwKLSAgICAgICAg
QCJvcGFxdWUiIDogQChsYXllci5vcGFxdWUpLAotICAgICAgICBAIm9wYWNpdHkiIDogQChsYXll
ci5vcGFjaXR5KSwKLSAgICB9OwotfQotCi0tICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xl
VGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KKy0gKHZvaWQpX3NldE92ZXJsYWlk
QWNjZXNzb3J5Vmlld3NJbnNldDooQ0dTaXplKWluc2V0CiB7Ci0gICAgW19jb250ZW50VmlldyBf
ZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6YWN0aW9uXTsKKyAgICBbX2N1c3RvbUNv
bnRlbnRWaWV3IHdlYl9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6aW5zZXRdOwogfQog
Ci0tICh2b2lkKV9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRp
c3BhdGNoX2Jsb2NrX3QpYWN0aW9uCistICh2b2lkKV9zbmFwc2hvdFJlY3Q6KENHUmVjdClyZWN0
SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0aDooQ0dGbG9hdClpbWFnZVdpZHRoIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKENHSW1hZ2VSZWYpKWNvbXBsZXRpb25IYW5kbGVyCiB7
Ci0gICAgW19jb250ZW50VmlldyBfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JU
ZXN0aW5nOmFjdGlvbl07Ci19CisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9
IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKKyAgICAg
ICAgLy8gRGVmZXIgc25hcHNob3R0aW5nIHVudGlsIGFmdGVyIHRoZSBjdXJyZW50IHJlc2l6ZSBj
b21wbGV0ZXMuCisgICAgICAgIHZvaWQgKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoQ0dJbWFn
ZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgICAgIFJldGFpblB0cjxXS1dl
YlZpZXc+IHJldGFpbmVkU2VsZiA9IHNlbGY7CisgICAgICAgIF9jYWxsYmFja3NEZWZlcnJlZER1
cmluZ1Jlc2l6ZS5hcHBlbmQoW3JldGFpbmVkU2VsZiwgcmVjdEluVmlld0Nvb3JkaW5hdGVzLCBp
bWFnZVdpZHRoLCBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAgW3JldGFp
bmVkU2VsZiBfc25hcHNob3RSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldp
ZHRoOmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29waWVkQ29tcGxldGlvbkhhbmRsZXJd
OworICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgQ0dSZWN0IHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3Nl
bGYgY29udmVydFJlY3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpzZWxmLl9jdXJyZW50
Q29udGVudFZpZXddOworICAgIENHRmxvYXQgaW1hZ2VTY2FsZSA9IGltYWdlV2lkdGggLyBzbmFw
c2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5zaXplLndpZHRoOworICAgIENHRmxvYXQgaW1h
Z2VIZWlnaHQgPSBpbWFnZVNjYWxlICogc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMu
c2l6ZS5oZWlnaHQ7CisgICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoaW1hZ2VXaWR0
aCwgaW1hZ2VIZWlnaHQpOwogCi0jaWYgUExBVEZPUk0oTUFDKQotLSAoV0tQYWdlUmVmKV9wYWdl
UmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3Ci17Ci0gICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdl
dCgpKTsKLX0KKyAgICBpZiAoW1tfY3VzdG9tQ29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJl
c0N1c3RvbVNuYXBzaG90dGluZ10pIHsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJf
c25hcHNob3RSZWN0SW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzOnNuYXBzaG90UmVjdEluQ29udGVu
dENvb3JkaW5hdGVzIHNuYXBzaG90V2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpj
b21wbGV0aW9uSGFuZGxlcl07CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLS0gKHZvaWQpX2Rp
c21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MKLXsKLSAgICBfaW1wbC0+ZGlzbWlzc0Nv
bnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c0Zyb21WaWV3T25seSgpOwotfQorI2lmIEhBVkUoQ09S
RV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikgJiYgSEFWRShJT1NVUkZBQ0UpCisgICAgLy8gSWYg
d2UgYXJlIHBhcmVudGVkIGFuZCBub3QgaGlkZGVuLCBhbmQgdGh1cyB3b24ndCBpbmN1ciBhIHNp
Z25pZmljYW50IHBlbmFsdHkgZnJvbSBwYWdpbmcgaW4gdGlsZXMsIHNuYXBzaG90IHRoZSB2aWV3
IGhpZXJhcmNoeSBkaXJlY3RseS4KKyAgICBOU1N0cmluZyAqZGlzcGxheU5hbWUgPSBzZWxmLndp
bmRvdy5zY3JlZW4uZGlzcGxheUNvbmZpZ3VyYXRpb24ubmFtZTsKKyAgICBpZiAoZGlzcGxheU5h
bWUgJiYgIXNlbGYud2luZG93LmhpZGRlbikgeworICAgICAgICBhdXRvIHN1cmZhY2UgPSBXZWJD
b3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6
RmxvYXRTaXplKGltYWdlU2l6ZSkpLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKKyAg
ICAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDR0Zsb2F0IGlt
YWdlU2NhbGVJblZpZXdDb29yZGluYXRlcyA9IGltYWdlV2lkdGggLyByZWN0SW5WaWV3Q29vcmRp
bmF0ZXMuc2l6ZS53aWR0aDsKKyAgICAgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRy
YW5zZm9ybTNETWFrZVNjYWxlKGltYWdlU2NhbGVJblZpZXdDb29yZGluYXRlcywgaW1hZ2VTY2Fs
ZUluVmlld0Nvb3JkaW5hdGVzLCAxKTsKKyAgICAgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0z
RFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIC1yZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3JpZ2luLngsIC1y
ZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3JpZ2luLnksIDApOworICAgICAgICBDQVJlbmRlclNlcnZl
clJlbmRlckRpc3BsYXlMYXllcldpdGhUcmFuc2Zvcm1BbmRUaW1lT2Zmc2V0KE1BQ0hfUE9SVF9O
VUxMLCAoQ0ZTdHJpbmdSZWYpZGlzcGxheU5hbWUsIHNlbGYubGF5ZXIuY29udGV4dC5jb250ZXh0
SWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNlbGYubGF5ZXIpLCBzdXJmYWNlLT5zdXJm
YWNlKCksIDAsIDAsICZ0cmFuc2Zvcm0sIDApOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
ZWJDb3JlOjpJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShzdXJmYWNlKSkuZ2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAKLS0gKHZvaWQpX3NldEZyYW1lOihO
U1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldAotewotICAgIF9pbXBsLT5zZXRG
cmFtZUFuZFNjcm9sbEJ5KE5TUmVjdFRvQ0dSZWN0KHJlY3QpLCBOU1NpemVUb0NHU2l6ZShvZmZz
ZXQpKTsKLX0KKyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIEFTU0VSVCgh
W1tfY3VzdG9tQ29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1c3RvbVNuYXBzaG90dGlu
Z10pOworICAgICAgICBVSUdyYXBoaWNzQmVnaW5JbWFnZUNvbnRleHRXaXRoT3B0aW9ucyhpbWFn
ZVNpemUsIFlFUywgMSk7CiAKLS0gKHZvaWQpX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOihDR0Zs
b2F0KXRvdGFsSGVpZ2h0T2ZCYW5uZXJzCi17Ci0gICAgX2ltcGwtPnNldFRvdGFsSGVpZ2h0T2ZC
YW5uZXJzKHRvdGFsSGVpZ2h0T2ZCYW5uZXJzKTsKLX0KKyAgICAgICAgVUlWaWV3ICpjdXN0b21D
b250ZW50VmlldyA9IF9jdXN0b21Db250ZW50Vmlldy5nZXQoKTsKKyAgICAgICAgW2N1c3RvbUNv
bnRlbnRWaWV3LmJhY2tncm91bmRDb2xvciBzZXRdOworICAgICAgICBVSVJlY3RGaWxsKENHUmVj
dE1ha2UoMCwgMCwgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpKTsKIAotLSAoQ0dGbG9hdClfdG90
YWxIZWlnaHRPZkJhbm5lcnMKLXsKLSAgICByZXR1cm4gX2ltcGwtPnRvdGFsSGVpZ2h0T2ZCYW5u
ZXJzKCk7Ci19CisgICAgICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gVUlHcmFwaGljc0dldEN1
cnJlbnRDb250ZXh0KCk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAt
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnggKiBpbWFnZVNjYWxlLCAt
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnkgKiBpbWFnZVNjYWxlKTsK
KyAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgaW1hZ2VTY2FsZSwgaW1hZ2VTY2Fs
ZSk7CisgICAgICAgIFtjdXN0b21Db250ZW50Vmlldy5sYXllciByZW5kZXJJbkNvbnRleHQ6Y29u
dGV4dF07CiAKLS0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwotewot
ICAgIF9pbXBsLT5iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKLX0KKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoW1VJR3JhcGhpY3NHZXRJbWFnZUZyb21DdXJyZW50SW1hZ2VD
b250ZXh0KCkgQ0dJbWFnZV0pOwogCi0tICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dD
aGFuZ2VzCi17Ci0gICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsK
LX0KKyAgICAgICAgVUlHcmFwaGljc0VuZEltYWdlQ29udGV4dCgpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0tICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYwot
ewotICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYygpOwotfQor
ICAgIHZvaWQoXmNvcGllZENvbXBsZXRpb25IYW5kbGVyKShDR0ltYWdlUmVmKSA9IFtjb21wbGV0
aW9uSGFuZGxlciBjb3B5XTsKKyAgICBfcGFnZS0+dGFrZVNuYXBzaG90KFdlYkNvcmU6OmVuY2xv
c2luZ0ludFJlY3Qoc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMpLCBXZWJDb3JlOjpl
eHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdlU2l6ZSkpLCBXZWJLaXQ6OlNu
YXBzaG90T3B0aW9uc0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvciwgWz1dKGNvbnN0IFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlLCBXZWJLaXQ6OkNhbGxiYWNrQmFz
ZTo6RXJyb3IpIHsKKyAgICAgICAgaWYgKGltYWdlSGFuZGxlLmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAgICAgICAgIFtjb3Bp
ZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogCi0tICh2b2lkKV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2
ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+Z2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2Vi
Q29yZUZyb21WaWV3T25seShldmVudCk7Ci19CisgICAgICAgIGF1dG8gYml0bWFwID0gV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKIAotLSAodm9pZClfc2V0SWdub3Jlc05vbldoZWVs
RXZlbnRzOihCT09MKWlnbm9yZXNOb25XaGVlbEV2ZW50cwotewotICAgIF9pbXBsLT5zZXRJZ25v
cmVzTm9uV2hlZWxFdmVudHMoaWdub3Jlc05vbldoZWVsRXZlbnRzKTsKLX0KKyAgICAgICAgaWYg
KCFiaXRtYXApIHsKKyAgICAgICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OworICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLS0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50
cwotewotICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7CisgICAgICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlOworICAgICAgICBjZ0ltYWdlID0gYml0bWFw
LT5tYWtlQ0dJbWFnZSgpOworICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihjZ0ltYWdl
LmdldCgpKTsKKyAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAg
IH0pOwogfQogCi0tICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzOihOU0FycmF5ICopY3VzdG9t
U3dpcGVWaWV3cworLSAodm9pZClfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1M
YXlvdXRTaXplOihDR1NpemUpbWluaW11bUxheW91dFNpemUgbWF4aW11bVVub2JzY3VyZWRTaXpl
T3ZlcnJpZGU6KENHU2l6ZSltYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZQogewotICAgIF9p
bXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzKGN1c3RvbVN3aXBlVmlld3MpOwotfQorICAgIExPR19X
SVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiLVtXS1dlYlZpZXcgIiA8PCBfcGFn
ZS0+aWRlbnRpZmllcigpIDw8ICIgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVt
TGF5b3V0U2l6ZToiIDw8IFdlYkNvcmU6OkZsb2F0U2l6ZShtaW5pbXVtTGF5b3V0U2l6ZSkgPDwg
IiBtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZToiIDw8IFdlYkNvcmU6OkZsb2F0U2l6ZSht
YXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSkgPDwgIl0iKTsKIAotLSAodm9pZClfc2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0Ci17Ci0g
ICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQodG9wQ29udGVudElu
c2V0KTsKKyAgICBbc2VsZiBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTptaW5pbXVtTGF5b3V0
U2l6ZV07CisgICAgW3NlbGYgX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOm1heGlt
dW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlXTsKIH0KIAotLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhF
dmVudDooTlNFdmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQ
aW5uZWRTdGF0ZQorLSAodm9pZClfY2xlYXJPdmVycmlkZUxheW91dFBhcmFtZXRlcnMKIHsKLSAg
ICByZXR1cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVk
U3RhdGUpOworICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gV1RGOjpudWxsb3B0OworICAg
IF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsKIH0KIAotLSAo
dm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9pZCheKShDR1JlY3QpKWNh
bGxiYWNrCitzdGF0aWMgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cz4g
dmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
TlNTdHJpbmcgKj4gKnZpZXdwb3J0QXJndW1lbnRQYWlycywgYm9vbCB2aWV3cG9ydEZpdEVuYWJs
ZWQpCiB7Ci0gICAgX2ltcGwtPnNldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soY2FsbGJh
Y2spOwotfQorICAgIGlmICghdmlld3BvcnRBcmd1bWVudFBhaXJzKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0tIChOU1ZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldwot
ewotICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldygpOwotfQorICAg
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzKFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzOjpWaWV3cG9ydE1ldGEpOwogCi0tIChOU1dpbmRvdyAqKV9mdWxsU2Ny
ZWVuV2luZG93Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuV2luZG93KCk7Ci19Cisg
ICAgW3ZpZXdwb3J0QXJndW1lbnRQYWlycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxv
Y2s6bWFrZUJsb2NrUHRyKFsmXSAoTlNTdHJpbmcgKmtleSwgTlNTdHJpbmcgKnZhbHVlLCBCT09M
KiBzdG9wKSB7CisgICAgICAgIGlmICghW2tleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFz
c11dIHx8ICFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAg
ICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6
QCItW1dLV2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogS2V5cyBhbmQg
dmFsdWVzIG11c3QgYWxsIGJlIE5TU3RyaW5ncy4iXTsKKyAgICAgICAgU3RyaW5nIGtleVN0cmlu
ZyA9IGtleTsKKyAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWU7CisgICAgICAgIFdl
YkNvcmU6OnNldFZpZXdwb3J0RmVhdHVyZSh2aWV3cG9ydEFyZ3VtZW50cywga2V5U3RyaW5nLCB2
YWx1ZVN0cmluZywgdmlld3BvcnRGaXRFbmFibGVkLCBbXSAoV2ViQ29yZTo6Vmlld3BvcnRFcnJv
ckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7CisgICAgICAgICAgICBOU0xvZyhA
Ii1bV0tXZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBFcnJvciBwYXJz
aW5nIHZpZXdwb3J0IGFyZ3VtZW50OiAlcyIsIGVycm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgfSk7CisgICAgfSkuZ2V0KCldOwogCi0tICh2b2lkKV9kaXNhYmxlRnJhbWVTaXpl
VXBkYXRlcwotewotICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOworICAgIHJl
dHVybiB2aWV3cG9ydEFyZ3VtZW50czsKIH0KIAotLSAodm9pZClfZW5hYmxlRnJhbWVTaXplVXBk
YXRlcworLSAodm9pZClfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqKWFyZ3VtZW50cwogewotICAgIF9pbXBsLT5lbmFi
bGVGcmFtZVNpemVVcGRhdGVzKCk7Ci19CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0dXJu
OwogCi0tICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17CisgICAg
X3BhZ2UtPnNldE92ZXJyaWRlVmlld3BvcnRBcmd1bWVudHModmlld3BvcnRBcmd1bWVudHNGcm9t
RGljdGlvbmFyeShhcmd1bWVudHMsIF9wYWdlLT5wcmVmZXJlbmNlcygpLnZpZXdwb3J0Rml0RW5h
YmxlZCgpKSk7CiB9CiAKLS0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgor
LSAoVUlWaWV3ICopX3ZpZXdGb3JGaW5kVUkKIHsKKyAgICByZXR1cm4gW3NlbGYgdmlld0Zvclpv
b21pbmdJblNjcm9sbFZpZXc6W3NlbGYgc2Nyb2xsVmlld11dOwogfQogCi0tICh2b2lkKV9jb21w
bGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgorLSAoQk9PTClfaXNEaXNwbGF5aW5nUERGCiB7
Ci19CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OnBkZk1JTUVUeXBlcygpKSB7CisgICAgICAgIENsYXNzIHByb3ZpZGVyQ2xhc3MgPSBbW19jb25m
aWd1cmF0aW9uIF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV0gcHJvdmlkZXJGb3JNSU1FVHlwZTpt
aW1lVHlwZV07CisgICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IGlzS2luZE9mQ2xhc3M6
cHJvdmlkZXJDbGFzc10pCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KIAotLSAoQk9P
TClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKLXsK
LSAgICBpZiAoYXV0byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUo
V2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCi0g
ICAgICAgIHJldHVybiBfaW1wbC0+Y2FuQ2hhbmdlRnJhbWVMYXlvdXQoKndlYkZyYW1lUHJveHkp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gTk87CiB9CiAKLS0gKE5TQ29sb3IgKilf
dW5kZXJsYXlDb2xvcgorLSAoTlNEYXRhICopX2RhdGFGb3JEaXNwbGF5ZWRQREYKIHsKLSAgICBy
ZXR1cm4gX2ltcGwtPnVuZGVybGF5Q29sb3IoKTsKKyAgICBpZiAoIVtzZWxmIF9pc0Rpc3BsYXlp
bmdQREZdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbX2N1c3RvbUNvbnRlbnRW
aWV3IHdlYl9kYXRhUmVwcmVzZW50YXRpb25dOwogfQogCi0tICh2b2lkKV9zZXRVbmRlcmxheUNv
bG9yOihOU0NvbG9yICopdW5kZXJsYXlDb2xvcgorLSAoTlNTdHJpbmcgKilfc3VnZ2VzdGVkRmls
ZW5hbWVGb3JEaXNwbGF5ZWRQREYKIHsKLSAgICBfaW1wbC0+c2V0VW5kZXJsYXlDb2xvcih1bmRl
cmxheUNvbG9yKTsKKyAgICBpZiAoIVtzZWxmIF9pc0Rpc3BsYXlpbmdQREZdKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zdWdnZXN0ZWRG
aWxlbmFtZV07CiB9CiAKLS0gKEJPT0wpX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2Vy
CistIChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgKilfd2ViVmlld1ByaW50Rm9ybWF0dGVyCiB7
Ci0gICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFu
YWdlcigpOworICAgIFVJVmlld1ByaW50Rm9ybWF0dGVyICp2aWV3UHJpbnRGb3JtYXR0ZXIgPSBz
ZWxmLnZpZXdQcmludEZvcm1hdHRlcjsKKyAgICBBU1NFUlQoW3ZpZXdQcmludEZvcm1hdHRlciBp
c0tpbmRPZkNsYXNzOltfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgY2xhc3NdXSk7CisgICAgcmV0
dXJuIChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgKil2aWV3UHJpbnRGb3JtYXR0ZXI7CiB9CiAK
LS0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElECitzdGF0aWMgV2ViQ29yZTo6VXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbiB0b1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24o
VUlTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGUgY29udGVudEF0dHJpYnV0ZSkKIHsKLSAgICBpZiAo
X3BhZ2UpCi0gICAgICAgIF9wYWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOwotfQor
ICAgIGF1dG8gZGlyZWN0aW9uID0gW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
Rm9yU2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVdOworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25M
ZWZ0VG9SaWdodDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb246OkxUUjsKKyAgICBjYXNlIFVJVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJp
Z2h0VG9MZWZ0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbjo6UlRMOworICAgIH0KIAotLSAodm9pZClfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJ
RFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXIKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5
IHN1YmNsYXNzZXMuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OkxUUjsKIH0KIAotLSAodm9pZClfaGFu
ZGxlQWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCist
ICh2b2lkKXNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTooVUlTZW1hbnRpY0NvbnRlbnRBdHRy
aWJ1dGUpY29udGVudEF0dHJpYnV0ZQogewotICAgIF9pbXBsLT5oYW5kbGVBY2NlcHRlZENhbmRp
ZGF0ZShjYW5kaWRhdGUpOwotfQorICAgIFtzdXBlciBzZXRTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1
dGU6Y29udGVudEF0dHJpYnV0ZV07CiAKLS0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorICAgIF9wYWdlLT5zZXRV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHRvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bihjb250ZW50QXR0cmlidXRlKSk7CiB9CiAKLS0gKHZvaWQpX2RpZFVwZGF0ZUNhbmRpZGF0ZUxp
c3RWaXNpYmlsaXR5OihCT09MKXZpc2libGUKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNs
YXNzZXMuCi19CisjZWxzZSAvLyAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotLSAodm9pZClf
Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlcwotewotICAgIF9pbXBsLT5mb3JjZVJlcXVlc3RDYW5kaWRh
dGVzRm9yVGVzdGluZygpOwotfQorI3ByYWdtYSBtYXJrIC0gT1MgWC1zcGVjaWZpYyBtZXRob2Rz
CiAKLS0gKEJPT0wpX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVzCistIChCT09MKV9kcmF3c0JhY2tn
cm91bmQKIHsKLSAgICByZXR1cm4gX2ltcGwtPnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCk7Cisg
ICAgcmV0dXJuIF9pbXBsLT5kcmF3c0JhY2tncm91bmQoKTsKIH0KIAotLSAodm9pZClfaW5zZXJ0
VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5n
ZQorLSAodm9pZClfc2V0RHJhd3NCYWNrZ3JvdW5kOihCT09MKWRyYXdzQmFja2dyb3VuZAogewot
ICAgIFtzZWxmIGluc2VydFRleHQ6c3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6cmVwbGFjZW1lbnRS
YW5nZV07CisgICAgX2ltcGwtPnNldERyYXdzQmFja2dyb3VuZChkcmF3c0JhY2tncm91bmQpOwog
fQogCi0tIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QKKy0gKE5TQ29sb3IgKilfYmFja2dyb3VuZENv
bG9yCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCku
Zm9jdXNlZEVsZW1lbnRSZWN0OworICAgIHJldHVybiBfaW1wbC0+YmFja2dyb3VuZENvbG9yKCk7
CiB9CiAKLS0gKEJPT0wpX3VzZVN5c3RlbUFwcGVhcmFuY2UKKy0gKHZvaWQpX3NldEJhY2tncm91
bmRDb2xvcjooTlNDb2xvciAqKWJhY2tncm91bmRDb2xvcgogewotICAgIHJldHVybiBfaW1wbC0+
dXNlU3lzdGVtQXBwZWFyYW5jZSgpOworICAgIF9pbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmFj
a2dyb3VuZENvbG9yKTsKIH0KIAotLSAodm9pZClfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTooQk9P
TCl1c2VTeXN0ZW1BcHBlYXJhbmNlCistICh2b2lkKV9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZDooQk9PTClkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZAogewotICAgIF9pbXBsLT5zZXRV
c2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOworICAgIHN0YXRpYyBCT09M
IGhhc0xvZ2dlZERlcHJlY2F0aW9uV2FybmluZzsKKyAgICBpZiAoIWhhc0xvZ2dlZERlcHJlY2F0
aW9uV2FybmluZykgeworICAgICAgICAvLyBTZWUgYnVnIDE1NTU1MCBmb3IgZGV0YWlscy4KKyAg
ICAgICAgTlNMb2coQCItW1dLV2ViVmlldyBfc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6
XSBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIik7CisgICAgICAgIGhhc0xv
Z2dlZERlcHJlY2F0aW9uV2FybmluZyA9IFlFUzsKKyAgICB9CisgICAgW3NlbGYgX3NldERyYXdz
QmFja2dyb3VuZDohZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmRdOwogfQogCi0tICh2b2lkKXZp
ZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlCistIChOU1ZpZXcgKilfaW5zcGVjdG9yQXR0
YWNobWVudFZpZXcKIHsKLSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVyaW5nIFtzdXBlciBp
bml0V2l0aENvZGVyOl0gYW5kIFtzdXBlciBpbml0V2l0aEZyYW1lOl0uCi0gICAgLy8gVGhhdCBp
cyBiZWZvcmUgX2ltcGwgaXMgcmVhZHkgdG8gYmUgdXNlZCwgc28gY2hlY2suIDxyZGFyOi8vcHJv
YmxlbS8zOTYxMTIzNj4KLSAgICBpZiAoIV9pbXBsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBf
aW1wbC0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOworICAgIHJldHVybiBfaW1wbC0+
aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKIH0KIAotLSAodm9pZClfc2V0SGVhZGVyQmFubmVy
SGVpZ2h0OihpbnQpaGVpZ2h0CistICh2b2lkKV9zZXRJbnNwZWN0b3JBdHRhY2htZW50Vmlldzoo
TlNWaWV3ICopbmV3VmlldwogewotICAgIF9wYWdlLT5zZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JU
ZXN0aW5nKGhlaWdodCk7CisgICAgX2ltcGwtPnNldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3KG5l
d1ZpZXcpOwogfQogCi0tICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQK
Ky0gKHZvaWQpX3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTooX1dLT3ZlcmxheVNjcm9sbGJhclN0
eWxlKXNjcm9sbGJhclN0eWxlCiB7Ci0gICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZv
clRlc3RpbmcoaGVpZ2h0KTsKKyAgICBfaW1wbC0+c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlKHRv
Q29yZVNjcm9sbGJhclN0eWxlKHNjcm9sbGJhclN0eWxlKSk7CiB9CiAKLS0gKHZvaWQpX2RvQWZ0
ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNwYXRjaF9ibG9ja190KWFjdGlv
bgorLSAoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKV9vdmVybGF5U2Nyb2xsYmFyU3R5bGUKIHsK
LSAgICBfaW1wbC0+ZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHMoYWN0aW9u
KTsKKyAgICByZXR1cm4gdG9BUElTY3JvbGxiYXJTdHlsZShfaW1wbC0+b3ZlcmxheVNjcm9sbGJh
clN0eWxlKCkpOwogfQogCi0tIChOU01lbnUgKilfYWN0aXZlTWVudQorLSAoQk9PTClfd2luZG93
T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZAogewotICAgIC8vIEZJWE1FOiBPbmx5IHRoZSBET00g
cGFzdGUgYWNjZXNzIG1lbnUgaXMgc3VwcG9ydGVkIGZvciBub3cuIEluIHRoZSBmdXR1cmUsIGl0
IGNvdWxkIGJlCi0gICAgLy8gZXh0ZW5kZWQgdG8gcmVjb2duaXplIHRoZSByZWd1bGFyIGNvbnRl
eHQgbWVudSBhcyB3ZWxsLgotICAgIHJldHVybiBfaW1wbC0+ZG9tUGFzdGVNZW51KCk7CisgICAg
cmV0dXJuIF9pbXBsLT53aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCk7CiB9CiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCi0KLS0gKHZvaWQpX3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5n
U2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9PTCwgTlNTdHJpbmcqLCBkb3VibGUsIGRvdWJs
ZSwgTlNJbnRlZ2VyKSljYWxsYmFjaworLSAodm9pZClfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0
aW9uRW5hYmxlZDooQk9PTCllbmFibGVkCiB7Ci0gICAgaWYgKCFfcGFnZSkgewotICAgICAgICBj
YWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSwgMCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY2Fs
bGJhY2spOwotICAgIGF1dG8gbG9jYWxDYWxsYmFjayA9IFdlYktpdDo6Tm93UGxheWluZ0luZm9D
YWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShib29sIGFjdGl2ZSwgYm9vbCByZWdpc3RlcmVkQXNO
b3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmluZyB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3Vi
bGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlkZW50aWZpZXIsIFdlYktpdDo6Q2FsbGJh
Y2tCYXNlOjpFcnJvcikgewotICAgICAgICBoYW5kbGVyKGFjdGl2ZSwgcmVnaXN0ZXJlZEFzTm93
UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVsYXBzZWRUaW1lLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKLSAgICB9KTsKLQotICAgIF9wYWdlLT5yZXF1ZXN0QWN0aXZlTm93UGxheWlu
Z1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxDYWxsYmFjaykpOworICAgIF9pbXBsLT5zZXRXaW5k
b3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9zZXRQ
YWdlU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW4KKy0gKHZv
aWQpc2hhcmVTaGVldERpZERpc21pc3M6KFdLU2hhcmVTaGVldCAqKXNoYXJlU2hlZXQKIHsKLSAg
ICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQob3JpZ2lu
KSk7CisgICAgX2ltcGwtPnNoYXJlU2hlZXREaWREaXNtaXNzKHNoYXJlU2hlZXQpOwogfQogCi0t
IChDR0Zsb2F0KV9wYWdlU2NhbGUKKy0gKHZvaWQpX3NldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0
b3I6KENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3IKIHsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2VT
Y2FsZUZhY3RvcigpOworICAgIF9pbXBsLT5zZXRPdmVycmlkZURldmljZVNjYWxlRmFjdG9yKGRl
dmljZVNjYWxlRmFjdG9yKTsKIH0KIAotLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdG
b3JQYWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0aW5n
Rm9yQW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZQor
LSAoQ0dGbG9hdClfb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcgogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxv
Y2spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAod2l0aG91dFdh
aXRpbmdGb3JQYWludGluZykKLSAgICAgICAgX3BhZ2UtPnNldFNob3VsZFNraXBXYWl0aW5nRm9y
UGFpbnRBZnRlck5leHRWaWV3RGlkTW92ZVRvV2luZG93KHRydWUpOwotCi0gICAgYXV0byB1cGRh
dGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIodXBkYXRlQmxvY2spOwotCi0gICAgUmV0YWluUHRy
PFdLV2ViVmlldz4gc3Ryb25nU2VsZiA9IHNlbGY7Ci0gICAgX3BhZ2UtPmNhbGxBZnRlck5leHRQ
cmVzZW50YXRpb25VcGRhdGUoW3VwZGF0ZUJsb2NrQ29weSwgd2l0aG91dFdhaXRpbmdGb3JBbmlt
YXRlZFJlc2l6ZSwgc3Ryb25nU2VsZl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7Ci0gICAgICAgIGlmICghdXBkYXRlQmxvY2tDb3B5KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKCF3aXRob3V0V2FpdGluZ0Zv
ckFuaW1hdGVkUmVzaXplICYmIHN0cm9uZ1NlbGYtPl9keW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
ICE9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAg
ICAgICAgICAgIHN0cm9uZ1NlbGYtPl9jYWxsYmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5hcHBl
bmQoW3VwZGF0ZUJsb2NrQ29weV0gewotICAgICAgICAgICAgICAgIHVwZGF0ZUJsb2NrQ29weSgp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHdpdGhvdXRXYWl0aW5nRm9yQW5p
bWF0ZWRSZXNpemUpOwotI2VuZGlmCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7Ci0gICAg
fSk7CisgICAgcmV0dXJuIF9pbXBsLT5vdmVycmlkZURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAK
LS0gKEJPT0wpX3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcKKy0gKHZvaWQpX3Nl
dFRvcENvbnRlbnRJbnNldDooQ0dGbG9hdCljb250ZW50SW5zZXQKIHsKLSAgICAvLyBGb3Igc3Vi
Y2xhc3NlcyB0byBvdmVycmlkZTsKLSAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIF9pbXBsLT5z
ZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KTsKIH0KIAotLSAodm9pZClfc2V0U2Nyb2xs
aW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzooQk9PTClkaXNhYmxlZAorLSAoQ0dGbG9hdClf
dG9wQ29udGVudEluc2V0CiB7CisgICAgcmV0dXJuIF9pbXBsLT50b3BDb250ZW50SW5zZXQoKTsK
IH0KIAotLy8gRXhlY3V0ZSB0aGUgc3VwcGxpZWQgYmxvY2sgYWZ0ZXIgdGhlIG5leHQgdHJhbnNh
Y3Rpb24gZnJvbSB0aGUgV2ViUHJvY2Vzcy4KLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworLSAoTlNDb2xvciAqKV9wYWdl
RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKIHsKLSAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5n
Ok5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworICAgIHJldHVybiBfaW1w
bC0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7CiB9CiAKLS0gKHZvaWQpX2RvQWZ0ZXJO
ZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZUZvclRl
c3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistIChfV0tSZWN0RWRnZSlfcGlubmVk
U3RhdGUKIHsKLSAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5n
Rm9yQW5pbWF0ZWRSZXNpemU6WUVTXTsKKyAgICByZXR1cm4gX2ltcGwtPnBpbm5lZFN0YXRlKCk7
CiB9CiAKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRp
bmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKKy0gKF9XS1JlY3RFZGdl
KV9ydWJiZXJCYW5kaW5nRW5hYmxlZAogewotICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6
WUVTIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworICAgIHJldHVybiBfaW1w
bC0+cnViYmVyQmFuZGluZ0VuYWJsZWQoKTsKIH0KIAotLSAodm9pZClfZG9BZnRlck5leHRWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistICh2b2lk
KV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDooX1dLUmVjdEVkZ2Upc3RhdGUKIHsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3Mu
YXBwZW5kKG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jaykpOwotICAgIFtzZWxmIF9zY2hlZHVsZVZp
c2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci0jZWxzZQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSNlbmRpZgorICAgIF9pbXBsLT5z
ZXRSdWJiZXJCYW5kaW5nRW5hYmxlZChzdGF0ZSk7CiB9CiAKLS0gKHZvaWQpX2Rpc2FibGVCYWNr
Rm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKKy0gKGlkKV9pbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDooX1dLSGl0VGVzdFJlc3VsdCAq
KWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2Vy
RGF0YTooaWQ8TlNTZWN1cmVDb2Rpbmc+KXVzZXJEYXRhCiB7Ci0gICAgV2ViS2l0OjpWaWV3U25h
cHNob3RTdG9yZTo6c2luZ2xldG9uKCkuc2V0RGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRl
c3RpbmcodHJ1ZSk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAodm9pZClfZXhlY3V0ZUVkaXRD
b21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQg
Y29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbgorLSAodm9pZClfc2V0QXV0b21h
dGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzOihCT09MKWF1dG9tYXRpY2FsbHlBZGp1c3RzQ29u
dGVudEluc2V0cwogewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZCwgYXJn
dW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9u
KV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIGlmIChjYXB0
dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2Nr
KGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7Ci0gICAgfSk7Cisg
ICAgX2ltcGwtPnNldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cyhhdXRvbWF0aWNh
bGx5QWRqdXN0c0NvbnRlbnRJbnNldHMpOwogfQogCi0tIChpZCA8X1dLVGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlCistIChCT09MKV9hdXRvbWF0aWNh
bGx5QWRqdXN0c0NvbnRlbnRJbnNldHMKIHsKLSAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICByZXR1cm4gX2ltcGwtPmF1dG9tYXRpY2Fs
bHlBZGp1c3RzQ29udGVudEluc2V0cygpOwogfQogCi0tICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCist
IChDR0Zsb2F0KV9taW5pbXVtTGF5b3V0V2lkdGgKIHsKLSAgICBfdGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlID0gZGVsZWdhdGU7CisgICAgcmV0dXJuIF9wYWdlLT5taW5pbXVtU2l6ZUZvckF1dG9M
YXlvdXQoKS53aWR0aCgpOwogfQogCi0tICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uICopY29uZmln
dXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQp
X3NldE1pbmltdW1MYXlvdXRXaWR0aDooQ0dGbG9hdCl3aWR0aAogewotICAgIHVzaW5nIEV4Y2x1
c2lvblJ1bGUgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9u
UnVsZTsKLQotICAgIGlmICghX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSB8fCAhX3BhZ2UpIHsK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9u
UnVsZT4gZXhjbHVzaW9uUnVsZXM7Ci0gICAgaWYgKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAg
Zm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSAqd2tSdWxlIGluIGNvbmZpZ3Vy
YXRpb24uZXhjbHVzaW9uUnVsZXMpIHsKLSAgICAgICAgICAgIGF1dG8gdHlwZSA9IHdrUnVsZS5p
c0V4Y2x1c2lvbiA/IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1ZGUgOiBFeGNsdXNpb25SdWxl
OjpUeXBlOjpJbmNsdWRlOwotICAgICAgICAgICAgaWYgKHdrUnVsZS5hdHRyaWJ1dGVOYW1lKQot
ICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVs
ZTo6QXR0cmlidXRlUnVsZSB7IHdrUnVsZS5hdHRyaWJ1dGVOYW1lLCB3a1J1bGUuYXR0cmlidXRl
VmFsdWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHdrUnVsZS5jbGFzc05hbWUpCi0gICAg
ICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpD
bGFzc1J1bGUgeyB3a1J1bGUuY2xhc3NOYW1lIH0gfSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpF
bGVtZW50UnVsZSB7IHdrUnVsZS5lbGVtZW50TmFtZSB9IH0pOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoZXhjbHVzaW9uUnVsZXMsIFt3ZWFr
U2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAotICAgICAgICBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuPiYgdG9rZW5zKSB7Ci0gICAgICAgIGlmICghd2Vha1NlbGYpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgYXV0byByZXRhaW5lZFNlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKLSAgICAg
ICAgYXV0byBkZWxlZ2F0ZSA9IFtyZXRhaW5lZFNlbGYgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZV07Ci0gICAgICAgIGlmICghZGVsZWdhdGUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQk9P
TCBleHBhbmRzVG9GaXQgPSB3aWR0aCA+IDA7CiAKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndr
VG9rZW5zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnRva2Vucy5zaXplKCld
OwotICAgICAgICBmb3IgKGF1dG8mIHRva2VuIDogdG9rZW5zKSB7Ci0gICAgICAgICAgICBhdXRv
IHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0
XSk7Ci0gICAgICAgICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRv
a2VuLmlkZW50aWZpZXIudG9VSW50NjQoKSldOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0Q29u
dGVudDp0b2tlbi5jb250ZW50XTsKLSAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRv
a2VuLmlzRXhjbHVkZWRdOwotICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2Vu
LmdldCgpXTsKLSAgICAgICAgfQorICAgIF9wYWdlLT5zZXRNaW5pbXVtU2l6ZUZvckF1dG9MYXlv
dXQoV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgMCkpOworICAgIF9wYWdlLT5zZXRNYWluRnJhbWVJ
c1Njcm9sbGFibGUoIWV4cGFuZHNUb0ZpdCk7CiAKLSAgICAgICAgYXV0byBpdGVtID0gYWRvcHRO
UyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3Ry
aW5nOjpudW1iZXIoaXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOwotICAgICAg
ICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1
bGF0aW9uSXRlbTppdGVtLmdldCgpXTsKLSAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sg
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7Ci0gICAgICAgIGNhcHR1cmVk
Q29tcGxldGlvbkJsb2NrKCk7Ci0gICAgfSk7CisgICAgX2ltcGwtPnNldENsaXBzVG9WaXNpYmxl
UmVjdChleHBhbmRzVG9GaXQpOwogfQogCi0tICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRp
b246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJP
T0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKKy0gKEJPT0wpX3Nob3VsZEV4cGFuZENvbnRl
bnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0CiB7Ci0gICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVz
dWx0ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJl
c3VsdDsKLQotICAgIGlmICghX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaXRl
bUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikudG9VSW50
NjQoKSk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7Ci0gICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKLSAgICAgICAgYXV0byB0b2tlbklEID0g
bWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OlRva2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLnRvVUludDY0
KCkpOwotICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4uY29udGVudCB9KTsK
LSAgICB9Ci0KLSAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9r
ZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhh
bmRsZXIpXSAoTWFuaXB1bGF0aW9uUmVzdWx0IHJlc3VsdCkgewotICAgICAgICBjYXB0dXJlZENv
bXBsZXRpb25CbG9jayhyZXN1bHQgPT0gTWFuaXB1bGF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKLSAg
ICB9KTsKKyAgICByZXR1cm4gX2ltcGwtPnNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9M
YXlvdXQoKTsKIH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS0gKENHUmVjdClfZHJh
Z0NhcmV0UmVjdAorLSAodm9pZClfc2V0U2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZv
ckF1dG9MYXlvdXQ6KEJPT0wpc2hvdWxkRXhwYW5kCiB7Ci0jaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKLSAgICByZXR1cm4gX3BhZ2UtPmN1cnJlbnREcmFnQ2FyZXRSZWN0KCk7Ci0jZWxzZQotICAg
IHJldHVybiBDR1JlY3RaZXJvOwotI2VuZGlmCisgICAgcmV0dXJuIF9pbXBsLT5zZXRTaG91bGRF
eHBhbmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0KHNob3VsZEV4cGFuZCk7CiB9CiAKLS0gKHZv
aWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgor
LSAoQk9PTClfYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIKIHsKLSAgICBbX2NvbnRlbnRW
aWV3IF9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246bG9jYXRpb25dOworICAgIHJl
dHVybiBfcGFnZS0+YWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoKTsKIH0KIAotLSAodm9p
ZClfc2ltdWxhdGVUZXh0RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0CistICh2b2lkKV9zZXRBbHdh
eXNTaG93c0hvcml6b250YWxTY3JvbGxlcjooQk9PTClhbHdheXNTaG93c0hvcml6b250YWxTY3Jv
bGxlcgogewotICAgIFtfY29udGVudFZpZXcgX3NpbXVsYXRlVGV4dEVudGVyZWQ6dGV4dF07Cisg
ICAgX3BhZ2UtPnNldEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9y
aXpvbnRhbFNjcm9sbGVyKTsKIH0KIAotLSAodm9pZClfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFp
dERpZENoYW5nZQorLSAoQk9PTClfYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyCiB7Ci0gICAg
aWYgKCFfcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIF9wYWdlLT5lZmZlY3RpdmVBcHBlYXJh
bmNlRGlkQ2hhbmdlKCk7Ci0gICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kXTsK
KyAgICByZXR1cm4gX3BhZ2UtPmFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcigpOwogfQogCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotLSAoQk9PTClfYmVnaW5CYWNrU3dpcGVG
b3JUZXN0aW5nCistICh2b2lkKV9zZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6KEJPT0wp
YWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJl
dHVybiBfaW1wbC0+YmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKCk7Ci0jZWxzZQotICAgIGlmICgh
X2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgcmV0dXJuIF9nZXN0
dXJlQ29udHJvbGxlci0+YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2spOwotI2Vu
ZGlmCisgICAgX3BhZ2UtPnNldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcihhbHdheXNTaG93
c1ZlcnRpY2FsU2Nyb2xsZXIpOwogfQogCi0tIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRl
c3RpbmcKKy0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZv
OihOU1ByaW50SW5mbyAqKXByaW50SW5mbwogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1
cm4gX2ltcGwtPmNvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZygpOwotI2Vsc2UKLSAgICBpZiAo
IV9nZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBfZ2Vz
dHVyZUNvbnRyb2xsZXItPmNvbXBsZXRlU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3Rp
bmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsK
LSNlbmRpZgorICAgIHJldHVybiBbc2VsZiBwcmludE9wZXJhdGlvbldpdGhQcmludEluZm86cHJp
bnRJbmZvXTsKIH0KIAotLSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wp
ZGVmZXJzTG9hZGluZworLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQ
cmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1lOihfV0tGcmFtZUhhbmRs
ZSAqKWZyYW1lSGFuZGxlCiB7Ci0gICAgX3BhZ2UtPnNldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5n
KGRlZmVyc0xvYWRpbmcpOworICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0gX3BhZ2UtPnBy
b2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoZnJhbWVIYW5k
bGUuX2ZyYW1lSUQpKSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5wcmludE9wZXJhdGlvbldpdGhQ
cmludEluZm8ocHJpbnRJbmZvLCAqd2ViRnJhbWVQcm94eSk7CisgICAgcmV0dXJuIG5pbDsKIH0K
IAotLSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRp
b25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVkCistICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb246KE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbil1c2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uCiB7Ci0gICAgX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRl
Q29tcGxldGlvbkZvclRlc3RpbmcgPSByZXNvbHZlZDsKKyAgICBbc3VwZXIgc2V0VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbjp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uXTsKKworICAg
IF9pbXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24pOwogfQogCi0tIChCT09MKV9oYXNJbnNwZWN0b3JGcm9udGVuZAorLSAoQk9P
TClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgcmV0dXJuIF9wYWdlICYm
IF9wYWdlLT5oYXNJbnNwZWN0b3JGcm9udGVuZCgpOworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAg
IHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7Cisj
ZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgogfQogCi0tIChfV0tJbnNwZWN0b3IgKilfaW5z
cGVjdG9yCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJPT0wp
d2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgaWYgKGF1dG8qIGluc3BlY3Rv
ciA9IF9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIoKmluc3BlY3Rv
cik7Ci0gICAgcmV0dXJuIG5pbDsKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICBfaW1wbC0+c2V0
Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KHdhbnRzTWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldyk7CisjZW5kaWYKIH0KIAotLSAoX1dLRnJhbWVIYW5kbGUgKilfbWFpbkZyYW1l
CistIChpZClfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwogewotICAgIGlmIChhdXRvKiBmcmFt
ZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpGcmFt
ZUhhbmRsZTo6Y3JlYXRlKGZyYW1lLT5mcmFtZUlEKCkpKTsKKyNpZiBIQVZFKFRPVUNIX0JBUikK
KyAgICByZXR1cm4gX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygp
ID8gX2ltcGwtPm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA6IG5pbDsKKyNlbHNlCiAgICAg
cmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCi0tICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGVzdGluZworLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3Zl
cnJpZGUuCistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihpZCltZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgaWYgKF9wYWdlKQotICAgICAgICBfcGFnZS0+cHJv
Y2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKFdlYktpdDo6SXNTdXNwZW5zaW9uSW1taW5lbnQ6
OlllcywgW10geyB9KTsKIH0KIAotLSAodm9pZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3RpbmcK
Ky8vIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorLSAodm9pZClf
cmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwogewotICAgIGlmIChfcGFnZSkKLSAgICAg
ICAgX3BhZ2UtPnByb2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCi0tICh2b2lk
KV9zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rpbmc6KGludCl2YWx1ZQorLSAodm9pZClfcHJlcGFy
ZUZvck1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil0YXJnZXRXaW5kb3cgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9wYWdlKQot
ICAgICAgICByZXR1cm47CisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOworICAgIF9pbXBsLT5wcmVwYXJlRm9yTW92ZVRvV2lu
ZG93KHRhcmdldFdpbmRvdywgW2NvbXBsZXRpb25IYW5kbGVyQ29weV0geworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlckNvcHkoKTsKKyAgICB9KTsKK30KIAotICAgIF9wYWdlLT5wcm9jZXNzKCku
c2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nKHN0YXRpY19jYXN0PFdlYktpdDo6QXNzZXJ0aW9u
U3RhdGU+KHZhbHVlKSk7CistICh2b2lkKV9zZXRUaHVtYm5haWxWaWV3OihfV0tUaHVtYm5haWxW
aWV3ICopdGh1bWJuYWlsVmlldworeworICAgIF9pbXBsLT5zZXRUaHVtYm5haWxWaWV3KHRodW1i
bmFpbFZpZXcpOwogfQogCi0tIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2
aXR5Rm9yVGVzdGluZworLSAoX1dLVGh1bWJuYWlsVmlldyAqKV90aHVtYm5haWxWaWV3CiB7Ci0j
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHJldHVybiBfcGFnZSA/IF9wYWdlLT5wcm9j
ZXNzKCkucHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIDogZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgorICAg
IGlmICghX2ltcGwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIF9pbXBsLT50aHVt
Ym5haWxWaWV3KCk7CiB9CiAKLS0gKEJPT0wpX2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0
aXZpdHlGb3JUZXN0aW5nCistICh2b2lkKV9zZXRJZ25vcmVzQWxsRXZlbnRzOihCT09MKWlnbm9y
ZXNBbGxFdmVudHMKIHsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcmV0dXJuIF9w
YWdlID8gX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJGb3Jl
Z3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgOiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCisgICAgX2ltcGwtPnNldElnbm9yZXNBbGxFdmVudHMoaWdub3Jlc0FsbEV2
ZW50cyk7CiB9CiAKLS0gKHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdAorLSAoQk9PTClf
aWdub3Jlc0FsbEV2ZW50cwogewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgV2ViS2l0
OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZGVueU5leHRVc2VyTWVkaWFS
ZXF1ZXN0KCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwtPmlnbm9yZXNBbGxFdmVudHMoKTsK
IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0tICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJl
dmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRf
dClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRAorLSAoTlNJbnRlZ2VyKV9zcGVsbENo
ZWNrZXJEb2N1bWVudFRhZwogewotI2lmIFVTRShTWVNURU1fUFJFVklFVykKLSAgICBpZiAoX3Bh
Z2UpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3BhZ2UtPnN5c3Rl
bVByZXZpZXdDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBwcmV2aWV3Q29udHJvbGxlci0+dHJp
Z2dlclN5c3RlbVByZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVtZW50SUQsIGRv
Y3VtZW50SUQsIHBhZ2VJRCk7Ci0gICAgfQotI2VuZGlmCisgICAgcmV0dXJuIF9pbXBsLT5zcGVs
bENoZWNrZXJEb2N1bWVudFRhZygpOwogfQorCiAjZW5kaWYKIAogQGVuZAogCisjdW5kZWYgRk9S
V0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklFVworCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChG
dWxsU2NyZWVuQVBJX1ByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDQzNTA4MGYzMjQ0NWNlOGU3ZjU2
ZWU1ZGMwMDQzOTRiY2YxYWE1ZDkuLjhhMjg3ZWY3MjBhODI5YmFjNWRlOTliYzExZGU3MDE0MWMy
NGU4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3dGYvUmVmUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVmFyaWFudC5oPgor
I2luY2x1ZGUgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICNpbXBvcnQgIlVJS2l0U1BJLmgiCkBAIC02OCwxOCArNjksNDcgQEAgY2xhc3MgU2FmZUJyb3dz
aW5nV2FybmluZzsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0
cnVjdCBQcmludEluZm87CisjaWYgUExBVEZPUk0oTUFDKQorY2xhc3MgV2ViVmlld0ltcGw7Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY2xhc3MgVmlld0dlc3R1cmVDb250cm9s
bGVyOworI2VuZGlmCiB9CiAKIEBjbGFzcyBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3Ry
eTsKIEBjbGFzcyBXS1Bhc3N3b3JkVmlldzsKIEBjbGFzcyBfV0tGcmFtZUhhbmRsZTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorQGNsYXNzIFdLU2Nyb2xsVmlldzsKK0BjbGFzcyBXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyOworI2VuZGlmCitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlOwogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSBXS19XRUJfVklFV19QUk9U
T0NPTFMgewogCiBAcGFja2FnZQogICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9u
PiBfY29uZmlndXJhdGlvbjsKLQogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3Bh
Z2U7CisgICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4+IF90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisgICAgT3B0aW9uYWw8Qk9PTD4gX3Jlc29sdXRpb25G
b3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rpbmc7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0ltcGw+IF9pbXBsOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFJldGFpblB0cjxXS1Njcm9s
bFZpZXc+IF9zY3JvbGxWaWV3OworICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBfY29udGVu
dFZpZXc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVy
PiBfZ2VzdHVyZUNvbnRyb2xsZXI7CisgICAgVmVjdG9yPEJsb2NrUHRyPHZvaWQgKCk+PiBfdmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyPiBfZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKKworICAgIENHUmVjdCBfaW5wdXRWaWV3Qm91
bmRzOworI2VuZGlmCiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODcsNiArMTE3
LDggQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX3Byb2Nlc3NXaWxsU3dhcDsKIC0gKHZv
aWQpX2RpZFJlbGF1bmNoUHJvY2VzczsKIAorLSAoVUlWaWV3ICopX2N1cnJlbnRDb250ZW50Vmll
dzsKKwogLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKIC0gKHZvaWQpX2RpZENv
bW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYp
bGF5ZXJUcmVlVHJhbnNhY3Rpb247CiAtICh2b2lkKV9sYXllclRyZWVDb21taXRDb21wbGV0ZTsK
QEAgLTk5LDggKzEzMSwxMCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogCiAtICh2b2lkKV9zY3JvbGxU
b0NvbnRlbnRTY3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClzY3JvbGxQb3NpdGlv
biBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdpbjsKIC0gKEJPT0wp
X3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmlt
dW1TY3JvbGxEaXN0YW5jZTsKKwogLSAoZG91YmxlKV9pbml0aWFsU2NhbGVGYWN0b3I7CiAtIChk
b3VibGUpX2NvbnRlbnRab29tU2NhbGU7CisKIC0gKGRvdWJsZSlfdGFyZ2V0Q29udGVudFpvb21T
Y2FsZUZvclJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpdGFyZ2V0UmVjdCBjdXJyZW50
U2NhbGU6KGRvdWJsZSljdXJyZW50U2NhbGUgZml0RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVS
ZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJs
ZSltYXhpbXVtU2NhbGU7CiAtICh2b2lkKV96b29tVG9Gb2N1c1JlY3Q6KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpZm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyBpbnNpZGVG
aXhlZDooQk9PTClpbnNpZGVGaXhlZCBmb250U2l6ZTooZmxvYXQpZm9udFNpemUgbWluaW11bVNj
YWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2Fs
ZSBhbGxvd1NjYWxpbmc6KEJPT0wpYWxsb3dTY2FsaW5nIGZvcmNlU2Nyb2xsOihCT09MKWZvcmNl
U2Nyb2xsOwogLSAoQk9PTClfem9vbVRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJl
Y3Qgd2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gZml0RW50aXJlUmVjdDoo
Qk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhp
bXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgbWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9h
dCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7CkBAIC0xNTYsMTMgKzE5MCwxMCBAQCBzdHJ1Y3QgUHJp
bnRJbmZvOwogLSAodm9pZClfcmVzZXRGb2N1c1ByZXNlcnZhdGlvbkNvdW50OwogCiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFzc3dvcmRWaWV3ICpfcGFzc3dvcmRWaWV3Owot
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzQmFja2dyb3VuZDsKLQog
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJS
ZWdpc3RyeSAqX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5OwotCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFdLU2VsZWN0aW9uR3JhbnVsYXJpdHkgX3NlbGVjdGlvbkdyYW51bGFyaXR5
OwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzQmFja2dyb3VuZDsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfYWxsb3dzRG91YmxlVGFwR2Vz
dHVyZXM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3N0eWx1c1RhcEdl
c3R1cmVTaG91bGRDcmVhdGVFZGl0YWJsZUltYWdlOwogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIF9oYXZlU2V0T2JzY3VyZWRJbnNldHM7CkBAIC0xNzIsNiArMjAzLDcgQEAg
c3RydWN0IFByaW50SW5mbzsKIAogLSAoQk9PTClfZWZmZWN0aXZlQXBwZWFyYW5jZUlzRGFyazsK
IC0gKEJPT0wpX2VmZmVjdGl2ZVVzZXJJbnRlcmZhY2VMZXZlbElzRWxldmF0ZWQ7CisKICNlbmRp
ZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVO
VCkKQEAgLTE4MCw2ICsyMTIsOCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAodm9pZClfZGlkSW52
YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQ7CiAj
ZW5kaWYKIAorLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToo
dm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzooQk9P
TCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNp
emU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTsKKwogLSAodm9pZClfc2hv
d1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYp
d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50
PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVy
OwogLSAodm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nOwogLSAodm9pZClfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uOwpAQCAtMTkwLDcgKzIyNCwx
NCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAoV2ViS2l0OjpXZWJQYWdlUHJveHkqKV9wYWdlOwog
CiAjaWYgUExBVEZPUk0oTUFDKQorCistICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9u
QW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfY2Fu
Y2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCkpOworLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5n
IHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5nZTsKIC0gKHZvaWQpX3dl
Yl9ncmFudERPTVBhc3RlQWNjZXNzOworCiAjZW5kaWYKIAogQGVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKaW5kZXggNzg0
YjZiMWUyMTBiYWMzN2Y5ZTBjYWFlNWU2MzIzNDk0NWM0OTE3ZC4uOWE3MTM4MDcwZDJhY2VmZjk2
ZDkxMTZkMDcyNjQzMDNkZmJiYWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCkBAIC0xNzIsNiArMTcyLDEyIEBAIHR5
cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgc2V0dGVyPV9zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uOikgQk9PTCBfYWxs
b3dzUmVtb3RlSW5zcGVjdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9
X3NldFJlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGU6KSBOU1N0cmluZyAqX3JlbW90ZUluc3Bl
Y3Rpb25OYW1lT3ZlcnJpZGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4w
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0luc3BlY3RvciAqX2luc3Bl
Y3RvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOworCitAcHJvcGVydHkgKG5v
bmF0b21pYywgd2Vhaywgc2V0dGVyPV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KSBpZCA8
X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2
b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5p
cHVsYXRpb25Db25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBsZXRpb246
KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQo
XikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywg
c2V0dGVyPV9zZXRBZGRzVmlzaXRlZExpbmtzOikgQk9PTCBfYWRkc1Zpc2l0ZWRMaW5rczsKIApA
QCAtMjEyLDYgKzIxOCwxNCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVj
dEVkZ2UpIHsKIC0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0
cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4y
KSk7CiAtICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6KE5TVVJMICopdXJs
IHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRh
aWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
KF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQu
NCksIGlvcygxMi4yKSk7CiAKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRl
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
KSwgaW9zKDEwLjApKTsKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0
aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwgaW9zKDEwLjMpKTsKKyNpZiBUQVJHRVRfT1NfSVBI
T05FCistICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0
Y2hfYmxvY2tfdCl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CisjZW5k
aWYKKworLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJn
dW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29t
cGxldGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOworCiAt
ICh2b2lkKV9pc0pJVEVuYWJsZWQ6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX3JlbW92
ZURhdGFEZXRlY3RlZExpbmtzOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24gV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIApAQCAtMjM4LDYgKzI1MiwxMCBA
QCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIAogI2lmIFRB
UkdFVF9PU19JUEhPTkUKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3Qg
X2NvbnRlbnRWaXNpYmxlUmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CistIChDR1Bv
aW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6KENHUG9pbnQpcG9pbnQgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTAuMCkpOworLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbVZpZXdU
b0NvbnRlbnRzOihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKKwog
LSAodm9pZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRlciBXS19BUElf
QVZBSUxBQkxFKGlvcygxMi4yKSk7CiAtICh2b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250
U2l6ZSBzZW5kZXI6KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CiAtICh2
b2lkKV9zZXRUZXh0Q29sb3I6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNlbmRlciBXS19B
UElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CkBAIC0yNzYsNiArMjk0LDE0IEBAIHR5cGVkZWYgTlNf
T1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogCiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXREcmFnSW50ZXJhY3Rpb25Qb2xpY3k6KSBfV0tEcmFnSW50ZXJhY3Rpb25Q
b2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeSBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3Nob3VsZEF2b2lkUmVzaXpp
bmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjApKTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY29udGVudFZpZXdJc0ZpcnN0
UmVzcG9uZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX3VpVGV4dENhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxF
KGlvcygxMC4zKSk7CisKKy0gKHZvaWQpX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlv
bjooQ0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRl
ZEVsZW1lbnRJbmZvICopKWJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKKworLSAo
dm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMykpOworLSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEwLjMpKTsKIAogLSAodm9pZClfYmVnaW5JbnRlcmFjdGl2ZU9ic2N1cmVkSW5z
ZXRzQ2hhbmdlOwogLSAodm9pZClfZW5kSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZTsK
QEAgLTMwNiwxOCArMzMyLDMzIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tS
ZWN0RWRnZSkgewogLSAoaWQpX3NuYXBzaG90TGF5ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJkTGlz
dEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0gV0tfQVBJX0FWQUlMQUJMRShpb3Mo
OV8wKSk7CiAtIChOU0FycmF5ICopX2RhdGFEZXRlY3Rpb25SZXN1bHRzOwogCistICh2b2lkKV9h
Y2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zm
c2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDExLjMpKTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbiBX
S19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJT
ZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOworCiAtICh2b2lkKV9hY2Nlc3Np
YmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnQgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTEuMCkpOwogLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0aW9uQ29udGVu
dDooTlNTdHJpbmcgKiljb250ZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIAogQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKl9zYWZlQnJvd3NpbmdXYXJuaW5n
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CisKKy0gKFVJVmll
dyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjAp
KTsKKwogI2Vsc2UKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNWaWV3ICpfc2Fm
ZUJyb3dzaW5nV2FybmluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIu
MikpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJl
ZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlldyAgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0FjdGl2ZVZpZGVv
Rm9yQ29udHJvbHNNYW5hZ2VyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpKTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0SWdub3Jlc05vbldoZWVsRXZl
bnRzOikgQk9PTCBfaWdub3Jlc05vbldoZWVsRXZlbnRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTMuNCkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVmlldyAqX3Nh
ZmVCcm93c2luZ1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSk7CiAKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLUmVjdEVkZ2UgX3Bpbm5lZFN0YXRlIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0UnViYmVyQmFuZGluZ0VuYWJsZWQ6KSBfV0tSZWN0RWRnZSBfcnViYmVyQmFuZGlu
Z0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAKIEBwcm9wZXJ0eSAo
cmVhZG9ubHkpIE5TQ29sb3IgKl9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7CiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRCYWNrZ3JvdW5kQ29sb3I6KSBOU0NvbG9yICpfYmFj
a2dyb3VuZENvbG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldFVuZGVybGF5Q29sb3I6KSBOU0NvbG9yICpfdW5k
ZXJsYXlDb2xvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworQHByb3BlcnR5
IChub25hdG9taWMsIHNldHRlcj1fc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6KSBDR0Zsb2F0IF90
b3RhbEhlaWdodE9mQmFubmVycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldERyYXdzQmFja2dyb3VuZDopIEJPT0wgX2Ry
YXdzQmFja2dyb3VuZDsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFRvcENvbnRl
bnRJbnNldDopIENHRmxvYXQgX3RvcENvbnRlbnRJbnNldDsKIApAQCAtMzMxLDYgKzM3MiwyNyBA
QCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNJbnRlZ2VyIF9zcGVsbENoZWNrZXJEb2N1bWVudFRh
ZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7CiAKIC0gKHZvaWQpX3NldFNob3VsZFN1
cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzOihCT09MKXNob3VsZFN1cHByZXNzOworLSAoQk9P
TClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistIChCT09MKV90cnlUb1N3aXBlV2l0aEV2
ZW50OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bp
bm5lZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistICh2b2lkKV9k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTMuNCkpOworLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihO
U1NpemUpb2Zmc2V0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistICh2b2lk
KV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQpX2Rpc2FibGVGcmFtZVNp
emVVcGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZW5h
YmxlRnJhbWVTaXplVXBkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKwor
LSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hh
bmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2VuZERlZmVy
cmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCkpOworCistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzOihOU0FycmF5ICopY3VzdG9tU3dp
cGVWaWV3cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX3NldERp
ZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0KSljYWxsYmFjayBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmll
d3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldCBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKKworLSAoTlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistIChOU1dpbmRvdyAqKV9mdWxs
U2NyZWVuV2luZG93IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogCiAvLyBDbGll
bnRzIHRoYXQgd2FudCB0byBtYWludGFpbiBkZWZhdWx0IGJlaGF2aW9yIGNhbiByZXR1cm4gbmls
LiBUbyBkaXNhYmxlIHRoZSBpbW1lZGlhdGUgYWN0aW9uIGVudGlyZWx5LCByZXR1cm4gTlNOdWxs
LiBBbmQgdG8KIC8vIGRvIHNvbWV0aGluZyBjdXN0b20sIHJldHVybiBhbiBvYmplY3QgdGhhdCBj
b25mb3JtcyB0byB0aGUgTlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyIHByb3Rv
Y29sLgpAQCAtMzQ2LDcgKzQwOCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWRnZSkgewogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0QWx3YXlzU2hv
d3NWZXJ0aWNhbFNjcm9sbGVyOikgQk9PTCBfYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogCiAtIChOU1ByaW50T3BlcmF0aW9uICop
X3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm87Ci0t
IChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmlu
dEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7CistIChOU1ByaW50T3Bl
cmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmlu
dEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMikpOwogCiAvLyBGSVhNRTogVGhpcyBTUEkgc2hvdWxkIGJlY29tZSBh
IHBhcnQgb2YgdGhlIFdLVUlEZWxlZ2F0ZS4gcmRhcjovL3Byb2JsZW0vMjY1NjE1MzcKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OikgQk9PTCBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwpAQCAtMzU2LDYgKzQxOCw3IEBAIHR5cGVkZWYg
TlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogCiAtICh2b2lkKV9wcmVwYXJl
Rm9yTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXRhcmdldFdpbmRvdyBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEzKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0
VXNlU3lzdGVtQXBwZWFyYW5jZTopIEJPT0wgX3VzZVN5c3RlbUFwcGVhcmFuY2UgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xNCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0
T3ZlcmxheVNjcm9sbGJhclN0eWxlOikgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlIF9vdmVybGF5
U2Nyb2xsYmFyU3R5bGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiBAcHJvcGVy
dHkgKHN0cm9uZywgbm9uYXRvbWljLCBzZXR0ZXI9X3NldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3
OikgTlNWaWV3ICpfaW5zcGVjdG9yQXR0YWNobWVudFZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7CiAKQEAgLTQ1MSwxNDAgKzUxNCw0IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhO
U1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgPFVJUmVz
cG9uZGVyU3RhbmRhcmRFZGl0QWN0aW9ucz4KIEBlbmQKIAotI2VuZGlmCi0KLUBpbnRlcmZhY2Ug
V0tXZWJWaWV3IChXS1Rlc3RpbmcpCi0KLS0gKHZvaWQpX3NldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAoTlNEaWN0aW9uYXJ5ICopX2NvbnRl
bnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwotCi0jaWYgVEFSR0VUX09T
X0lQSE9ORQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfY29udGVu
dFZpc2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKLS0gKENHUG9pbnQpX2Nv
bnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4wKSk7Ci0tIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVu
dHM6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotCi0tICh2b2lk
KWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0t
ICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMCkpOwotLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXcgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTAuMykpOwotLSAodm9pZClfZGlzbWlzc0ZpbGVQaWNrZXIgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTMuMCkpOwotLSAodm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQp
cm93SW5kZXggV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZyBXS19BUElf
QVZBSUxBQkxFKGlvcygxMi4wKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
U3RyaW5nICpzZWxlY3RGb3JtUG9wb3ZlclRpdGxlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjAp
KTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmZvcm1JbnB1dExh
YmVsIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLS0gKHZvaWQpc2V0VGltZVBpY2tlclZh
bHVlVG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGUgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi0tICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5T
U3RyaW5nICopbmV3U3RyaW5nIHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjApKTsKLQotLSAodm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJh
Y3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClkaWRFbmRGb3JtQ29u
dHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLQotLSAodm9pZClf
ZGlkU2hvd0NvbnRleHRNZW51IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKHZvaWQp
X2RpZERpc21pc3NDb250ZXh0TWVudSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2
b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tf
dCl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kb0Fm
dGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tf
QVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TQXJyYXk8TlNWYWx1ZSAqPiAqX3VpVGV4dFNlbGVjdGlvblJlY3RzIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Q0dSZWN0IF91aVRleHRDYXJldFJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2lucHV0Vmlld0JvdW5kcyBXS19B
UElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNTdHJpbmcgKl9zY3JvbGxpbmdUcmVlQXNUZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU051bWJlciAqX3N0YWJs
ZVN0YXRlT3ZlcnJpZGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi0tIChOU0RpY3Rp
b25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXll
cklEIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLS0gKHZvaWQpX3NpbXVsYXRlTG9uZ1By
ZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbiBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4wKSk7Ci0tICh2b2lkKV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAqKXRleHQg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIENHUmVjdCBfZHJhZ0NhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7
Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzoo
ZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwotCi0t
ICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRp
b24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSli
bG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5
UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0
OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNW
YWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEx
LjMpKTsKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbiBXS19BUElfQVZBSUxB
QkxFKGlvcygxMS4zKSk7Ci0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24gV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOwotLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotCi0tICh2b2lkKV90cmlnZ2Vy
U3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50
Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRCBXS19BUElfQVZBSUxB
QkxFKGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Qk9PTCBfY29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEy
LjIpKTsKLSNlbHNlCi0tICh2b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0RnJhbWU6KE5T
UmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOwotLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2Vz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZW5kRGVmZXJyaW5n
Vmlld0luV2luZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0g
KHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5
V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkp
OwotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmll
d3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXRDdXN0b21T
d2lwZVZpZXdzVG9wQ29udGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChOU1ZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKE5TV2luZG93ICop
X2Z1bGxTY3JlZW5XaW5kb3cgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2
b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLS0gKHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0
aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfY2FuY2VsSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwot
LSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMy40KSk7Ci0tIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJh
bWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
LS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bp
bm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2
b2lkKF4pKENHUmVjdCkpY2FsbGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczop
IENHRmxvYXQgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0VW5kZXJsYXlD
b2xvcjopIE5TQ29sb3IgKl91bmRlcmxheUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRJZ25v
cmVzTm9uV2hlZWxFdmVudHM6KSBCT09MIF9pZ25vcmVzTm9uV2hlZWxFdmVudHMgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFdLUGFnZVJlZiBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlldyAgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIpKTsKLS0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElEIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfaGFuZGxlQ29udHJvbGxlZEVsZW1l
bnRJRFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMi4zKSk7Ci0tICh2b2lkKV9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTooTlNUZXh0Q2hl
Y2tpbmdSZXN1bHQgKiljYW5kaWRhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7
Ci0tICh2b2lkKV9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0
VmlzaWJpbGl0eTooQk9PTCl2aXNpYmxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zaG91bGRSZXF1ZXN0Q2Fu
ZGlkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2luc2Vy
dFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFu
Z2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tIChOU1JlY3QpX2NhbmRpZGF0
ZVJlY3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykpOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOikgQk9PTCBfdXNl
U3lzdGVtQXBwZWFyYW5jZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7Ci1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTWVudSAqX2FjdGl2ZU1lbnUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSk7Ci0KLS0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdo
dDooaW50KWhlaWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQp
X3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhlaWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEyLjMpKTsKLS0gKHZvaWQpX2RvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZl
bnRzOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpKTsKLSNlbmRpZgotCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25J
bmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5TSW50
ZWdlcikpY2FsbGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMp
KTsKLQotLSAodm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0KXNjYWxlIHdpdGhPcmlnaW46KENH
UG9pbnQpb3JpZ2luIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKENHRmxvYXQpX3Bh
Z2VTY2FsZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJO
ZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZUZvclRlc3Rp
bmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTQpLCBpb3MoMTIuMCkpOwotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVX
aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwotLSAodm9pZClfZG9BZnRl
ck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2Nr
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOwotCi0tICh2b2lkKV9k
aXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7Ci0tICh2b2lkKV9leGVjdXRlRWRpdENv
bW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBj
b21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCksIGlvcygxMS4zKSk7Ci0KLS0gKHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVx
dWVzdCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKLQotLSAoQk9P
TClfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nOwotLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVG
b3JUZXN0aW5nOwotLSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wpZGVm
ZXJzTG9hZGluZzsKLQotLSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5
V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVkIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCBfaGFzSW5zcGVjdG9yRnJvbnRlbmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNC40KSwgaW9zKDEyLjIpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dL
SW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlv
cygxMi4yKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxl
ICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7
Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKLS0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJh
dGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3Vy
YXRpb24gY29tcGxldGlvbjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClf
Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0g
Y29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRl
c3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotCi0tICh2b2lkKV9wcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZzsKLS0gKHZvaWQpX3Byb2Nlc3NEaWRSZXN1bWVG
b3JUZXN0aW5nOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2
aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpc3RhdGUgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLQotQGVuZAor
I2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YTNjZGFkZTNh
NjkyNWEyYTkzOWM0ODJkZmFjNGVhMjA4ZDgxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5oCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rl
c3RpbmcpCisKKy0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2lu
OihDR1BvaW50KW9yaWdpbjsKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZTsKKworLSAodm9pZClfc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkOwor
LSAoTlNEaWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcg
Kil1c2VySW50ZXJmYWNlSXRlbTsKKworLSAodm9pZClfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdT
ZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0cmluZyosIGRvdWJsZSwgZG91Ymxl
LCBOU0ludGVnZXIpKWNhbGxiYWNrOworCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlv
blVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2b2lkIChe
KSh2b2lkKSl1cGRhdGVCbG9jazsKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jazsKKworLSAodm9pZClfZGlzYWJs
ZUJhY2tGb3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZzsKKworLSAodm9pZClfZGVu
eU5leHRVc2VyTWVkaWFSZXF1ZXN0OworCistIChCT09MKV9iZWdpbkJhY2tTd2lwZUZvclRlc3Rp
bmc7CistIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3Rpbmc7CistICh2b2lkKV9zZXRE
ZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZlcnNMb2FkaW5nOworCistICh2b2lkKV9z
ZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRlc3Rpbmc6
KEJPT0wpcmVzb2x2ZWQ7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBf
aGFzSW5zcGVjdG9yRnJvbnRlbmQ7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3Nl
dFNjcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRh
dGVzRGlzYWJsZWRGb3JUZXN0aW5nOworCistICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGVzdGluZzsKKy0gKHZvaWQpX3Byb2Nlc3NEaWRSZXN1bWVGb3JUZXN0aW5nOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyQmFj
a2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgQk9PTCBfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmc7Cist
ICh2b2lkKV9zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rpbmc6KGludClzdGF0ZTsKKworQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rl
c3RpbmcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVz
dGluZy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ZjAxOWE4MzEwMzZhZTQxNjcxNTVhNWFjNzZlMTg1YTBkN2M3
OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld1Rlc3RpbmcubW0KQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgorCisjaW1w
b3J0ICJVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgorI2ltcG9ydCAiV2ViUHJvY2Vz
c1Byb3h5LmgiCisjaW1wb3J0ICJXZWJWaWV3SW1wbC5oIgorI2ltcG9ydCAiX1dLRnJhbWVIYW5k
bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQg
PFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgorCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZp
ZXcgKFdLVGVzdGluZykKKworLSAodm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0KXNjYWxlIHdp
dGhPcmlnaW46KENHUG9pbnQpb3JpZ2luCit7CisgICAgX3BhZ2UtPnNjYWxlUGFnZShzY2FsZSwg
V2ViQ29yZTo6cm91bmRlZEludFBvaW50KG9yaWdpbikpOworfQorCistIChDR0Zsb2F0KV9wYWdl
U2NhbGUKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOworfQorCistICh2
b2lkKV9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09MKWVu
YWJsZWQKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFtfY29udGVudFZpZXcgc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmVuYWJsZWRdOworI2Vsc2UKKyAgICBfaW1w
bC0+c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQpOworI2VuZGlmCit9
CisKKy0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3Ry
aW5nICopdXNlckludGVyZmFjZUl0ZW0KK3sKKyAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlz
RXF1YWxUb1N0cmluZzpAInZhbGlkYXRpb25CdWJibGUiXSkgeworICAgICAgICBhdXRvKiB2YWxp
ZGF0aW9uQnViYmxlID0gX3BhZ2UtPnZhbGlkYXRpb25CdWJibGUoKTsKKyAgICAgICAgU3RyaW5n
IG1lc3NhZ2UgPSB2YWxpZGF0aW9uQnViYmxlID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgp
IDogZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1
YmJsZSA/IHZhbGlkYXRpb25CdWJibGUtPmZvbnRTaXplKCkgOiAwOworICAgICAgICByZXR1cm4g
QHsgdXNlckludGVyZmFjZUl0ZW06IEB7IEAibWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2Us
IEAiZm9udFNpemUiOiBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9Owor
ICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFtfY29udGVudFZp
ZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNl
SXRlbV07CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKK30KKworLSAodm9pZClfcmVx
dWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0
cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCit7CisgICAgaWYgKCFf
cGFnZSkgeworICAgICAgICBjYWxsYmFjayhOTywgTk8sIEAiIiwgc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGhhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoY2FsbGJhY2spOworICAgIGF1dG8gbG9jYWxDYWxsYmFjayA9IFdlYktp
dDo6Tm93UGxheWluZ0luZm9DYWxsYmFjazo6Y3JlYXRlKFtoYW5kbGVyXShib29sIGFjdGl2ZSwg
Ym9vbCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIFN0cmluZyB0aXRsZSwgZG91
YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlkZW50aWZp
ZXIsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAgICBoYW5kbGVyKGFjdGl2
ZSwgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCB0aXRsZSwgZHVyYXRpb24sIGVs
YXBzZWRUaW1lLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB9KTsKKworICAgIF9wYWdlLT5yZXF1
ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvKFdURk1vdmUobG9jYWxDYWxsYmFjaykpOwor
fQorCistIChCT09MKV9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCit7CisgICAg
Ly8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGU7CisgICAgcmV0dXJuIE5POworfQorCistICh2
b2lkKV9zZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRpc2FibGVk
Cit7Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdh
aXRpbmdGb3JBbmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJs
b2NrCit7CisgICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6
dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0Zv
ckFuaW1hdGVkUmVzaXplOllFU107Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworeworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5h
cHBlbmQobWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKSk7CisgICAgW3NlbGYgX3NjaGVkdWxlVmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKKyNlbHNlCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOworI2VuZGlmCit9CisKKy0gKHZvaWQp
X2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKK3sKKyAgICBX
ZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25hcHNob3RW
b2xhdGlsaXR5Rm9yVGVzdGluZyh0cnVlKTsKK30KKworLSAoQk9PTClfYmVnaW5CYWNrU3dpcGVG
b3JUZXN0aW5nCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBfaW1wbC0+YmVnaW5C
YWNrU3dpcGVGb3JUZXN0aW5nKCk7CisjZWxzZQorICAgIGlmICghX2dlc3R1cmVDb250cm9sbGVy
KQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+YmVn
aW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVzdGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2spOworI2VuZGlmCit9CisKKy0gKEJPT0wp
X2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZworeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBy
ZXR1cm4gX2ltcGwtPmNvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZygpOworI2Vsc2UKKyAgICBp
ZiAoIV9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBf
Z2VzdHVyZUNvbnRyb2xsZXItPmNvbXBsZXRlU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRl
c3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNr
KTsKKyNlbmRpZgorfQorCistICh2b2lkKV9zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9P
TClkZWZlcnNMb2FkaW5nCit7CisgICAgX3BhZ2UtPnNldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5n
KGRlZmVyc0xvYWRpbmcpOworfQorCistICh2b2lkKV9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1t
ZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRlc3Rpbmc6KEJPT0wpcmVzb2x2ZWQKK3sKKyAgICBf
cmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZyA9IHJl
c29sdmVkOworfQorCistIChCT09MKV9oYXNJbnNwZWN0b3JGcm9udGVuZAoreworICAgIHJldHVy
biBfcGFnZSAmJiBfcGFnZS0+aGFzSW5zcGVjdG9yRnJvbnRlbmQoKTsKK30KKworLSAodm9pZClf
cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcKK3sKKyAgICBpZiAoX3BhZ2Up
CisgICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoV2ViS2l0OjpJ
c1N1c3BlbnNpb25JbW1pbmVudDo6WWVzLCBbXSB7IH0pOworfQorCistICh2b2lkKV9wcm9jZXNz
RGlkUmVzdW1lRm9yVGVzdGluZworeworICAgIGlmIChfcGFnZSkKKyAgICAgICAgX3BhZ2UtPnBy
b2Nlc3MoKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworfQorCistICh2b2lkKV9zZXRBc3NlcnRp
b25TdGF0ZUZvclRlc3Rpbmc6KGludCl2YWx1ZQoreworICAgIGlmICghX3BhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIF9wYWdlLT5wcm9jZXNzKCkuc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0
aW5nKHN0YXRpY19jYXN0PFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU+KHZhbHVlKSk7Cit9CisKKy0g
KEJPT0wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nCit7Cisj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIHJldHVybiBfcGFnZSA/IF9wYWdlLT5wcm9j
ZXNzKCkucHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZygpIDogZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQor
CistIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwor
eworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+
cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0
eUZvclRlc3RpbmcoKSA6IGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKworLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0Cit7CisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBXZWJLaXQ6OlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0
b24oKS5kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QoKTsKKyNlbmRpZgorfQorCitAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJ
T1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lP
Uy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI5ZjI3OTc0N2ZmODQ3MzFhODc1NzdiZTFmNWFhYjg3ODJiY2YwZDcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2Vi
Vmlld1Rlc3RpbmdJT1MuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlldy5oPgorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCitAaW50ZXJmYWNl
IFdLV2ViVmlldyAoV0tUZXN0aW5nSU9TKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TU3RyaW5nICp0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PE5TVmFsdWUgKj4gKl91aVRleHRT
ZWxlY3Rpb25SZWN0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9p
bnB1dFZpZXdCb3VuZHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5n
ICpfc2Nyb2xsaW5nVHJlZUFzVGV4dDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
TlNOdW1iZXIgKl9zdGFibGVTdGF0ZU92ZXJyaWRlOworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBDR1JlY3QgX2RyYWdDYXJldFJlY3Q7CisKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3Nv
cnlCYXJOZXh0OworLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhclByZXZpb3VzOworLSAodm9p
ZClkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXc7CistICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcjsK
Ky0gKHZvaWQpc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4OworCist
ICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihO
U0ludGVnZXIpbWludXRlOworCistICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5n
ICopbmV3U3RyaW5nIHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOworCistICh2b2lkKV9k
aWRTaG93Q29udGV4dE1lbnU7CistICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnU7CistICh2
b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClh
Y3Rpb247CisKKy0gKE5TRGljdGlvbmFyeSAqKV9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5z
aWduZWQgbG9uZyBsb25nKWxheWVySUQ7CistICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlv
bkF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb247CistICh2b2lkKV9zaW11bGF0ZVRleHRFbnRl
cmVkOihOU1N0cmluZyAqKXRleHQ7CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJh
Z1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKKy0gKHZvaWQp
X3RyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQg
ZG9jdW1lbnQ6KHVpbnQ2NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlEOworCitA
ZW5kCisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGM4YjVmYWQzN2NlYzBhMjg4NzE0Y2IxZTMwOWI4YTAzNzQ1OTI4MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5t
bQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1w
b3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCisjaW1wb3J0ICJXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgor
I2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
b0ludGVybmFsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVGVzdGluZ0lPUykK
KworLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQKK3sKKyAgICBbX2NvbnRlbnRWaWV3
IGFjY2Vzc29yeVRhYjpZRVNdOworfQorCistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyUHJl
dmlvdXMKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107Cit9CisKKy0gKHZv
aWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJpbmc6KE5T
U3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rp
b246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6W2Nh
cHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIp
XSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7CisgICAgICAgIGNhcHR1cmVkQ29t
cGxldGlvbkhhbmRsZXIoKTsKKyAgICB9XTsKK30KKworLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vz
c29yeVZpZXcKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURvbmVdOworfQorCistICh2
b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgoreworICAgIFtfY29udGVudFZpZXcgZGlzbWlzc0ZpbGVQ
aWNrZXJdOworfQorCistICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2Vy
KWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlCit7CisgICAgW19jb250ZW50VmlldyBzZXRU
aW1lUGlja2VyVmFsdWVUb0hvdXI6aG91ciBtaW51dGU6bWludXRlXTsKK30KKworLSAodm9pZClz
ZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgKK3sKKyAgICBbX2NvbnRl
bnRWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5kZXhdOworfQorCistIChO
U1N0cmluZyAqKXNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUKK3sKKyAgICByZXR1cm4gW19jb250ZW50
VmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXTsKK30KKworLSAoTlNTdHJpbmcgKil0ZXh0Q29u
dGVudFR5cGVGb3JUZXN0aW5nCit7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgdGV4dENvbnRl
bnRUeXBlRm9yVGVzdGluZ107Cit9CisKKy0gKE5TU3RyaW5nICopZm9ybUlucHV0TGFiZWwKK3sK
KyAgICByZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5wdXRMYWJlbF07Cit9CisKKy0gKHZvaWQp
X2RpZFNob3dDb250ZXh0TWVudQoreworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRl
LgorfQorCistICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnUKK3sKKyAgICAvLyBGb3Igc3Vi
Y2xhc3NlcyB0byBvdmVycmlkZS4KK30KKworLSAoQ0dSZWN0KV9pbnB1dFZpZXdCb3VuZHMKK3sK
KyAgICByZXR1cm4gX2lucHV0Vmlld0JvdW5kczsKK30KKworLSAoTlNBcnJheTxOU1ZhbHVlICo+
ICopX3VpVGV4dFNlbGVjdGlvblJlY3RzCit7CisgICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2
aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCisgICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdl
ZFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBfdWlUZXh0U2VsZWN0aW9u
UmVjdHNdOworfQorCistIChOU1N0cmluZyAqKV9zY3JvbGxpbmdUcmVlQXNUZXh0Cit7CisgICAg
V2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9w
YWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7CisgICAgaWYgKCFjb29yZGluYXRvcikK
KyAgICAgICAgcmV0dXJuIEAiIjsKKworICAgIHJldHVybiBjb29yZGluYXRvci0+c2Nyb2xsaW5n
VHJlZUFzVGV4dCgpOworfQorCistIChOU051bWJlciAqKV9zdGFibGVTdGF0ZU92ZXJyaWRlCit7
CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25lZCBs
b25nIGxvbmcpbGF5ZXJJRAoreworICAgIENBTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8V2ViS2l0
OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkp
LmxheWVyV2l0aElERm9yVGVzdGluZyhsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIEB7CisgICAgICAgIEAiYm91bmRzIiA6IEB7Cisg
ICAgICAgICAgICBAIngiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAorICAgICAgICAgICAg
QCJ5IiA6IEAobGF5ZXIuYm91bmRzLm9yaWdpbi54KSwKKyAgICAgICAgICAgIEAid2lkdGgiIDog
QChsYXllci5ib3VuZHMuc2l6ZS53aWR0aCksCisgICAgICAgICAgICBAImhlaWdodCIgOiBAKGxh
eWVyLmJvdW5kcy5zaXplLmhlaWdodCksCisKKyAgICAgICAgfSwKKyAgICAgICAgQCJwb3NpdGlv
biIgOiBAeworICAgICAgICAgICAgQCJ4IiA6IEAobGF5ZXIucG9zaXRpb24ueCksCisgICAgICAg
ICAgICBAInkiIDogQChsYXllci5wb3NpdGlvbi55KSwKKyAgICAgICAgfSwKKyAgICAgICAgQCJ6
UG9zaXRpb24iIDogQChsYXllci56UG9zaXRpb24pLAorICAgICAgICBAImFuY2hvclBvaW50IiA6
IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5hbmNob3JQb2ludC54KSwKKyAgICAgICAg
ICAgIEAieSIgOiBAKGxheWVyLmFuY2hvclBvaW50LnkpLAorICAgICAgICB9LAorICAgICAgICBA
ImFuY2hvclBvaW50WiIgOiBAKGxheWVyLmFuY2hvclBvaW50WiksCisgICAgICAgIEAidHJhbnNm
b3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTEpLAor
ICAgICAgICAgICAgQCJtMTIiIDogQChsYXllci50cmFuc2Zvcm0ubTEyKSwKKyAgICAgICAgICAg
IEAibTEzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMyksCisgICAgICAgICAgICBAIm0xNCIgOiBA
KGxheWVyLnRyYW5zZm9ybS5tMTQpLAorCisgICAgICAgICAgICBAIm0yMSIgOiBAKGxheWVyLnRy
YW5zZm9ybS5tMjEpLAorICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci50cmFuc2Zvcm0ubTIy
KSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMyksCisgICAgICAg
ICAgICBAIm0yNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjQpLAorCisgICAgICAgICAgICBAIm0z
MSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzEpLAorICAgICAgICAgICAgQCJtMzIiIDogQChsYXll
ci50cmFuc2Zvcm0ubTMyKSwKKyAgICAgICAgICAgIEAibTMzIiA6IEAobGF5ZXIudHJhbnNmb3Jt
Lm0zMyksCisgICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzQpLAorCisg
ICAgICAgICAgICBAIm00MSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDEpLAorICAgICAgICAgICAg
QCJtNDIiIDogQChsYXllci50cmFuc2Zvcm0ubTQyKSwKKyAgICAgICAgICAgIEAibTQzIiA6IEAo
bGF5ZXIudHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBAIm00NCIgOiBAKGxheWVyLnRyYW5z
Zm9ybS5tNDQpLAorICAgICAgICB9LAorICAgICAgICBAInN1YmxheWVyVHJhbnNmb3JtIiA6IEB7
CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMSksCisg
ICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMiksCisgICAg
ICAgICAgICBAIm0xMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xMyksCisgICAgICAg
ICAgICBAIm0xNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xNCksCisKKyAgICAgICAg
ICAgIEAibTIxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIxKSwKKyAgICAgICAgICAg
IEAibTIyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIyKSwKKyAgICAgICAgICAgIEAi
bTIzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIzKSwKKyAgICAgICAgICAgIEAibTI0
IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTI0KSwKKworICAgICAgICAgICAgQCJtMzEi
IDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzEpLAorICAgICAgICAgICAgQCJtMzIiIDog
QChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzIpLAorICAgICAgICAgICAgQCJtMzMiIDogQChs
YXllci5zdWJsYXllclRyYW5zZm9ybS5tMzMpLAorICAgICAgICAgICAgQCJtMzQiIDogQChsYXll
ci5zdWJsYXllclRyYW5zZm9ybS5tMzQpLAorCisgICAgICAgICAgICBAIm00MSIgOiBAKGxheWVy
LnN1YmxheWVyVHJhbnNmb3JtLm00MSksCisgICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnN1
YmxheWVyVHJhbnNmb3JtLm00MiksCisgICAgICAgICAgICBAIm00MyIgOiBAKGxheWVyLnN1Ymxh
eWVyVHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBAIm00NCIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm00NCksCisgICAgICAgIH0sCisKKyAgICAgICAgQCJoaWRkZW4iIDogQChsYXll
ci5oaWRkZW4pLAorICAgICAgICBAImRvdWJsZVNpZGVkIiA6IEAobGF5ZXIuZG91YmxlU2lkZWQp
LAorICAgICAgICBAIm1hc2tzVG9Cb3VuZHMiIDogQChsYXllci5tYXNrc1RvQm91bmRzKSwKKyAg
ICAgICAgQCJjb250ZW50c1NjYWxlIiA6IEAobGF5ZXIuY29udGVudHNTY2FsZSksCisgICAgICAg
IEAicmFzdGVyaXphdGlvblNjYWxlIiA6IEAobGF5ZXIucmFzdGVyaXphdGlvblNjYWxlKSwKKyAg
ICAgICAgQCJvcGFxdWUiIDogQChsYXllci5vcGFxdWUpLAorICAgICAgICBAIm9wYWNpdHkiIDog
QChsYXllci5vcGFjaXR5KSwKKyAgICB9OworfQorCistICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5n
U2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBbX2NvbnRl
bnRWaWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTphY3Rpb25dOworfQorCist
ICh2b2lkKV9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3Bh
dGNoX2Jsb2NrX3QpYWN0aW9uCit7CisgICAgW19jb250ZW50VmlldyBfZG9BZnRlclJlY2Vpdmlu
Z0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOmFjdGlvbl07Cit9CisKKy0gKENHUmVjdClfZHJh
Z0NhcmV0UmVjdAoreworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgcmV0dXJuIF9wYWdl
LT5jdXJyZW50RHJhZ0NhcmV0UmVjdCgpOworI2Vsc2UKKyAgICByZXR1cm4gQ0dSZWN0WmVybzsK
KyNlbmRpZgorfQorCistICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246
KENHUG9pbnQpbG9jYXRpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9zaW11bGF0ZUxvbmdQcmVz
c0FjdGlvbkF0TG9jYXRpb246bG9jYXRpb25dOworfQorCistICh2b2lkKV9zaW11bGF0ZVRleHRF
bnRlcmVkOihOU1N0cmluZyAqKXRleHQKK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9zaW11bGF0ZVRl
eHRFbnRlcmVkOnRleHRdOworfQorCistICh2b2lkKV9keW5hbWljVXNlckludGVyZmFjZVRyYWl0
RGlkQ2hhbmdlCit7CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIF9wYWdl
LT5lZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCk7CisgICAgW3NlbGYgX3VwZGF0ZVNjcm9s
bFZpZXdCYWNrZ3JvdW5kXTsKK30KKworLSAodm9pZClfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rp
b25PbkVsZW1lbnQ6KHVpbnQ2NF90KWVsZW1lbnRJRCBkb2N1bWVudDoodWludDY0X3QpZG9jdW1l
bnRJRCBwYWdlOih1aW50NjRfdClwYWdlSUQKK3sKKyNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCisg
ICAgaWYgKF9wYWdlKSB7CisgICAgICAgIGlmIChhdXRvKiBwcmV2aWV3Q29udHJvbGxlciA9IF9w
YWdlLT5zeXN0ZW1QcmV2aWV3Q29udHJvbGxlcigpKQorICAgICAgICAgICAgcHJldmlld0NvbnRy
b2xsZXItPnRyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uV2l0aFRhcmdldEZvclRlc3RpbmcoZWxl
bWVudElELCBkb2N1bWVudElELCBwYWdlSUQpOworICAgIH0KKyNlbmRpZgorfQorCitAZW5kCisK
KyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmQx
NTZhMjU2ZDQ1MTI1MzJiOTgzYmZmNmIzNmYxYzgwZWYyMGEyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLmgKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLQmFzZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorCisjaWYgIVRBUkdFVF9PU19JUEhPTkUK
KworQGNsYXNzIF9XS0ZyYW1lSGFuZGxlOworCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0
aW5nTWFjKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0FjdGl2
ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBCT09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNNZW51ICpfYWN0aXZlTWVudTsKKworLSAodm9pZClfcmVxdWVzdENvbnRyb2xs
ZWRFbGVtZW50SUQ7CistICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6
KE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRDYW5kaWRh
dGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlOworLSAodm9pZClfZGlkSGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGU7CisKKy0gKHZvaWQpX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXM7Cist
ICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9PTCl2aXNpYmxlOwor
CistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5n
ZSlyZXBsYWNlbWVudFJhbmdlOworLSAoTlNSZWN0KV9jYW5kaWRhdGVSZWN0OworCistICh2b2lk
KV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistICh2b2lkKV9zZXRGb290ZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistICh2b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBl
bmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKK0BlbmQKKworI2Vu
ZGlmIC8vICFUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYyNzk3ZTRl
Yzk5ODMzY2UwNTRhMzkxOTAxYTJiNjAzYzFhZjc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQpAQCAtMCww
ICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQg
IldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgi
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVGVzdGluZ01hYykKKworLSAodm9pZClf
cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQKK3sKKyAgICBpZiAoX3BhZ2UpCisgICAgICAgIF9w
YWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworfQorCistICh2b2lkKV9oYW5kbGVD
b250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAg
IC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KK30KKworLSAodm9pZClfaGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCit7CisgICAgX2lt
cGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Cit9CisKKy0gKHZvaWQpX2Rp
ZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFz
c2VzLgorfQorCistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTooQk9P
TCl2aXNpYmxlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorfQorCistICh2
b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgX2ltcGwtPmZvcmNlUmVxdWVzdENh
bmRpZGF0ZXNGb3JUZXN0aW5nKCk7Cit9CisKKy0gKEJPT0wpX3Nob3VsZFJlcXVlc3RDYW5kaWRh
dGVzCit7CisgICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOworfQor
CistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5n
ZSlyZXBsYWNlbWVudFJhbmdlCit7CisgICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVwbGFj
ZW1lbnRSYW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKK30KKworLSAoTlNSZWN0KV9jYW5kaWRhdGVS
ZWN0Cit7CisgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCku
Zm9jdXNlZEVsZW1lbnRSZWN0OworfQorCistICh2b2lkKXZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVB
cHBlYXJhbmNlCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyBbc3VwZXIgaW5p
dFdpdGhDb2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdpdGhGcmFtZTpdLgorICAgIC8vIFRoYXQgaXMg
YmVmb3JlIF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVzZWQsIHNvIGNoZWNrLiA8cmRhcjovL3Byb2Js
ZW0vMzk2MTEyMzY+CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX2lt
cGwtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZClfc2V0SGVh
ZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNldEhlYWRlckJhbm5l
ckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfc2V0Rm9vdGVyQmFubmVy
SGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZv
clRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5k
aW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCit7CisgICAgX2ltcGwtPmRv
QWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzKGFjdGlvbik7Cit9CisKKy0gKE5T
TWVudSAqKV9hY3RpdmVNZW51Cit7CisgICAgLy8gRklYTUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBh
Y2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVyZSwgaXQgY291bGQg
YmUKKyAgICAvLyBleHRlbmRlZCB0byByZWNvZ25pemUgdGhlIHJlZ3VsYXIgY29udGV4dCBtZW51
IGFzIHdlbGwuCisgICAgcmV0dXJuIF9pbXBsLT5kb21QYXN0ZU1lbnUoKTsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KaW5kZXggZjU4OWU5ZDMzNjFmYTFmYjYw
MzVkYWExMzkyMTUyMjAxNjZiY2UxMC4uN2Q4OTAyZWViOTY2ZGZkYmFkNzg3ZDgyYmIyZDhlZGZj
OWJiN2NmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNs
aWVudEltcGxDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdl
Q2xpZW50SW1wbENvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIldLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgor
I2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4
IGRjOWY3NGM0OWE2YmVhOWVkYzE1MDZjNWFiOTU3ZTAwNmEyMDdhNWUuLjBjNWUwZjdmNmM2MGY3
YTRjM2Y2ODFlMjlkZDQzMGQ1M2QxYzA5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbXBvcnQg
IldLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29u
dGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5
LmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCIKICNpbXBv
cnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGJjOGFlMDIyMWM0
ZTYxYjY0YTk3Y2U1ZDQyOGYzMTZkNGUwNzgwY2MuLjA1Yjg4ZDE5ZDNhZDAzODljZTA3YmE1M2Fl
NWJhMmVkMDEzYzgxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNzEsNiArNzEsNyBAQAogI2ltcG9y
dCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKICNpbXBvcnQgIldLV2ViVmlld0lu
dGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZp
ZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQuaCIKICNp
bXBvcnQgIldlYkF1dG9jb3JyZWN0aW9uRGF0YS5oIgogI2ltcG9ydCAiV2ViRGF0YUxpc3RTdWdn
ZXN0aW9uc0Ryb3Bkb3duSU9TLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNTYyOGNmMzViOGNjYjJkMWZi
OTE5ZDFjMmE3MDg0M2Y3Njg3ODg3ZC4uNDQxMGI3ZDEzZjA2YzEyYzZhYmVhZDhhMzY3NTIwMDZk
NjlkMjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLTW91c2VH
ZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS01v
dXNlR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjaWYgSEFWRShIT1ZF
Ul9HRVNUVVJFX1JFQ09HTklaRVIpCiAKKyNpbXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29nbml6
ZXIuaD4KICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKIAogQGludGVyZmFjZSBXS01v
dXNlR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4v
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQppbmRleCAxYTJiZmQ4NzUyZTc3NjEy
ZDM4MDlhZjIyZTkwNWVkZTY5MzFlN2NkLi4zOGI3YzRmMGY2YmJhZTZiMzg5OTZkZWIxY2I2MzY0
NDc3ZGNhOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNj
cmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKICNpbXBvcnQgIldLRnVsbHNjcmVlblN0YWNrVmlldy5o
IgogI2ltcG9ydCAiV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgot
I2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5o
IgogI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQppbmRleCAyMjY1M2Q3
NDM5ODg2ZGJmNWVjZGNkZGFmZTcyZDAyZDdiODMxZDAwLi4wMmRlZDE4N2QzMmJkNjJhNDNhMTBk
MmU5YTYzNjgyYTMzYTc0OTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGxNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJXS1N0cmlu
Z0NGLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdNYWMuaCIKICNpbXBvcnQgIldlYkNv
bG9yUGlja2VyTWFjLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5TWFjLmgiCiAjaW1w
b3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oCmluZGV4IDRkZWRjMGE2YWEyYTIyMzg5NjE1NjFlZjA5NjM2ZmJmMWU3ZDUxMTUuLjAxZDdh
MmFiNzUxOGU2Mzc5OGVmYWYyNmQzOWM2OTU1ODAxYzdjYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIu
aApAQCAtMjMsOCArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKSAmJiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBv
cnQgIkdlbmVyaWNDYWxsYmFjay5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNzlk
ZGMxMjA0MGYyYmY3OTI0MGNjYTU1ZWY5ODkzMGI1MDA3NTM0Li4yNzMyOGUyNDVjMDA4NzVmNDJk
NDhjZmFlNzBkMzQ4YTA3ZWJjNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4LDYgKzk4LDkgQEAKIAkJMEYwOENGNTQxRDYzQzE0
MDAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBvcG92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDhDRjUzMUQ2M0MxNDAwMEI0OERGMSAvKiBXS0Zv
cm1TZWxlY3RQb3BvdmVyLmggKi87IH07CiAJCTBGMTc0QUEzMTQyQTRDQjcwMDM5MjUwRiAvKiBB
UElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5LmggKi87IH07CiAJCTBG
M0M3MjVCMTk2RjYwNEUwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0M3MjU5MTk2RjVG
NjgwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAqLzsgfTsKKwkJMEY0NUEz
MzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzJGMjM5RDg5QTAwMDI5NEFC
RiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggKi87IH07CisJCTBGNDVBMzM1MjM5RDg5QUYwMDI5
NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3
VGVzdGluZ01hYy5oICovOyB9OworCQkwRjQ1QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJW
aWV3VGVzdGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCAqLzsgfTsK
IAkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU5NDc4
RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLzsgfTsK
IAkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTk0Nzk1MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
LmggKi87IH07CiAJCTBGNTk0NzlEMTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdU
cmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU5
NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oICovOyB9OwpAQCAt
MTA5LDYgKzExMiw5IEBACiAJCTBGOTMxQzFDMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMUMxQTE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oICovOyB9OwogCQkwRjkzMUMxQzE4QzU3MTE5
MDBEQkI4RDQgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzFDMUExOEM1NzEx
OTAwREJCOEQ0IC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCAqLzsg
fTsKIAkJMEZCNjU5MjMxMjA4QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNjU5MjIxMjA4QjRE
QjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oICovOyB9OworCQkwRkI5NDgzNzIzOUYzMUQx
MDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIENvcHkgVGVzdGluZyBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzNCMjM5RDhDQzQwMDI5NEFC
RiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggKi87IH07CisJCTBGQjk0ODM4MjM5RjMyMzgwMDkyNkE4
RiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8q
IFdLV2ViVmlld1Rlc3RpbmdJT1MuaCAqLzsgfTsKKwkJMEZCOTQ4MzkyMzlGMzIzODAwOTI2QThG
IC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyog
V0tXZWJWaWV3VGVzdGluZ01hYy5oICovOyB9OwogCQkwRkNCNEU0NjE4QkJFMDQ0MDAwRkNGQzkg
LyogUGFnZUNsaWVudEltcGxJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0I0RTM2MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbElP
Uy5oICovOyB9OwogCQkwRkNCNEU0ODE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFMzgx
OEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXQuaCAqLzsgfTsKIAkJMEZDQjRFNEExOEJC
RTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNBMThCQkUwNDQwMDBGQ0ZDOSAv
KiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggKi87IH07CkBAIC0xOTIzLDYgKzE5MjksMTkgQEAK
IC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhD
b3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEZCOTQ4MzYyMzlGMzFCNzAwOTI2QThG
IC8qIENvcHkgVGVzdGluZyBIZWFkZXJzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlkc3RQYXRoID0g
V2ViS2l0VGVzdFN1cHBvcnQ7CisJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTY7CisJCQlmaWxlcyA9
ICgKKwkJCQkwRkI5NDgzNzIzOUYzMUQxMDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGlu
IENvcHkgVGVzdGluZyBIZWFkZXJzICovLAorCQkJCTBGQjk0ODM4MjM5RjMyMzgwMDkyNkE4RiAv
KiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCisJCQkJ
MEZCOTQ4MzkyMzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBDb3B5
IFRlc3RpbmcgSGVhZGVycyAqLywKKwkJCSk7CisJCQluYW1lID0gIkNvcHkgVGVzdGluZyBIZWFk
ZXJzIjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9Owog
CQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyogQ29weSBNZXNzYWdlIEdlbmVyYXRpb24gU2Ny
aXB0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjAyNSw2ICsyMDQ0LDEyIEBACiAJCTBGMTc0QUE2
MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdLR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNDNzI1NzE5NkY1RjUwMDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0b3JI
aWdobGlnaHRWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNDNzI1OTE5
NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJW
aWV3VGVzdGluZ0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZp
ZXdUZXN0aW5nSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzMwMjM5
RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ0lPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmll
d1Rlc3RpbmdNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3
VGVzdGluZ01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMzNDIzOUQ4
OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmdNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdU
ZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1Rlc3Rp
bmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzM0MyMzlEOENDNDAwMjk0
QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OEUxODdCM0Iz
QTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RjE4N0IzQjNBMDA0Mzc4NTcg
LyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwNjksNiArNTA5NCwxNSBAQAogCQkJdGFiV2lkdGggPSA4
OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkwRjQ1QTMyRTIzOUQ4OTYwMDAyOTRBQkYgLyog
aW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjQ1
QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oICovLAorCQkJCTBG
NDVBMzMwMjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovLAorCQkJ
KTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkx
MDU4QzdCMEZFQTU1ODVFMTFDQTJDQkIgLyogTGlua2VkIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjc0OSw2ICs2NzgzLDggQEAKIAkJ
CQkxQUMxNDE1MDE4QUM0N0VFMDA2QzYwMkMgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaCAqLywKIAkJCQkxQTY2QkY4RTE4QTA1MkVEMDAyMDcxQjQgLyogV0tXZWJWaWV3SW50ZXJu
YWwuaCAqLywKIAkJCQkyNkY5QTgzQTE4QTM0NjNGMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0
ZS5oICovLAorCQkJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5n
LmggKi8sCisJCQkJMEY0NUEzM0MyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3Rpbmcu
bW0gKi8sCiAJCQkJMUFENjBGNUMxOEUyMEY0QzAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXMu
aCAqLywKIAkJCQkxQUQ2MEY1QjE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5t
bSAqLywKIAkJCQkxQUQ2MEY1RjE4RTIwRjc0MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlc0lu
dGVybmFsLmggKi8sCkBAIC04MTc4LDYgKzgyMTQsNyBAQAogCQkJCUJDMEMzNzY2MTBGODA3NjYw
MDc2RDdDQiAvKiBDICovLAogCQkJCTM3QzRDMDgzMTgxNDlDMkEwMDM2ODhCOSAvKiBDb2NvYSAq
LywKIAkJCQlCQzhBNTAxMzExNzY1RjQ1MDA3NTc1NzMgLyogY3BwICovLAorCQkJCTBGNDVBMzJF
MjM5RDg5NjAwMDI5NEFCRiAvKiBpb3MgKi8sCiAJCQkJQkMxMTFCNDcxMTJGNjE2OTAwMzM3QkFC
IC8qIG1hYyAqLywKIAkJCQk2MzQ4NDI0RjFGQjI2RTcxMDA5NDZFM0MgLyogQVBJQXBwbGljYXRp
b25NYW5pZmVzdC5oICovLAogCQkJCTJFNUM3NzBEMUZBN0Q0MjkwMDU5MzJDMyAvKiBBUElBdHRh
Y2htZW50LmNwcCAqLywKQEAgLTg0NjEsNiArODQ5OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQlCQzg2OTlCMzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICovLAogCQkJCUJDODY5OUI0
MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oICovLAorCQkJCTBGNDVBMzMzMjM5
RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggKi8sCisJCQkJMEY0NUEzMzQy
MzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMubW0gKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDczNSw2ICsxMDc3
NCw5IEBACiAJCQkJMkRDNkQ5QzMxOEM0NEE2MTAwNDNCQUQ0IC8qIFdLV2ViVmlld0NvbnRlbnRQ
cm92aWRlclJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY2QkY4RjE4QTA1MkVEMDAy
MDcxQjQgLyogV0tXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2RjlBODNC
MThBMzQ2ODEwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjQ1QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY0NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJ
T1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDVBMzM1MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dl
YlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ2MEY1RTE4RTIwRjRDMDAy
MEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFENjBGNjAx
OEUyMEY3NDAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODUyLDYgKzEwODk0LDcgQEAKIAkJCQkxQTIxODAx
NjFCNTQ1NDYyMDA0NkFFQzQgLyogQWRkIFN5bWxpbmsgaW4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZh
dGVGcmFtZXdvcmtzICovLAogCQkJCTUzNzlDN0FDMjFFNTI4ODUwMEU0QThGNiAvKiBDaGVjayAu
eGNmaWxlbGlzdHMgKi8sCiAJCQkJOTMzMTcwMDcyMjM0Njc0NTAwQjMyNTU0IC8qIENyZWF0ZSBz
eW1saW5rcyB0byBYUEMgc2VydmljZXMgZm9yIGVuZ2luZWVyaW5nIGJ1aWxkcyAqLywKKwkJCQkw
RkI5NDgzNjIzOUYzMUI3MDA5MjZBOEYgLyogQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCQk1MzVFMDhDNDIyNTQ1QjcyMDBERjAwQ0EgLyogUEJY
QnVpbGRSdWxlICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDQ4NWQxZGI1ZDJlNjZjOTVhNzJmZGNhYmQxM2VlNmI1MGYwYjNiOWQuLmRmMTdi
ZjU1NjVkNTVlN2ZhNjBkZGJmNmE4YTY4ZjZkMTg0ZGE0ZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxOS0xMi0x
MCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IFdLV2ViVmlldyBjb2RlIHJlbGF0ZWQgdG8gdGVzdGluZyB0byBuZXcgZmlsZXMsIHdpdGggdGhl
aXIgb3duIGhlYWRlcnMsIGFuZCBzdG9wIGV4cG9zaW5nIHRlc3Qtb25seSBmdW5jdGlvbnMgYXMg
U1BJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
MDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Rv
cCBleHBvc2luZyBXS1dlYlZpZXcgKFdLVGVzdGluZykgYXMgU1BJLCBiZWNhdXNlIGV2ZXJ5b25l
IGFkZGVkIFNQSSBoZXJlIGJ5IG1pc3Rha2UsIGFuZAorICAgICAgICBpbnRlcm5hbCBjbGllbnRz
IGtlcHQgdXNpbmcgdGVzdGluZyBTUEkuCisgICAgICAgIAorICAgICAgICBJbnN0ZWFkLCBtb3Zl
IHRlc3Rpbmctb25seSBmdW5jdGlvbnMgdG8gaW50ZXJuYWwgaGVhZGVycyB0aGF0IGFyZSBub3Qg
cHJlc2VudCBpbiB0aGUgYnVpbHQgZnJhbWV3b3JrLAorICAgICAgICBhbmQgbW92ZSB0byBXS1dl
YlZpZXcgKFdLUHJpdmF0ZSkgcHJvcGVydGllcyBhbmQgZnVuY3Rpb25zIHRoYXQgd2Via2l0IGNs
aWVudHMgcmVseSBvbi4KKyAgICAgICAgCisgICAgICAgIEFkZCBXS1dlYlZpZXdUZXN0aW5nL1dL
V2ViVmlld1Rlc3RpbmdNYWMvV0tXZWJWaWV3VGVzdGluZ0lPUyBmb3IgdGVzdC1vbmx5IGNvZGUu
CisgICAgICAgIAorICAgICAgICBXS1dlYlZpZXdUZXN0aW5nKiBoZWFkZXJzIGFyZSBjb3BpZWQg
dG8gYSAiV2ViS2l0VGVzdFN1cHBvcnQiIGRpcmVjdG9yeSBpbiB0aGUgUHJvZHVjdHMgZGlyZWN0
b3J5LCBhbmQgV1RSL0RSVCBhbmQgVGVzdFdlYktpdEFQSQorICAgICAgICBnZXQgaGVhZGVyIHNl
YXJjaCBwYXRocyB0byBmaW5kIHRoZSBoZWFkZXJzIHRoZXJlLgorCisgICAgICAgICogTWluaUJy
b3dzZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzoKKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9FZGl0aW5nVGVzdEhhcm5lc3MubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0Fm
dGVyQ3Jhc2gubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9N
ZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRp
YUJ1ZmZlcmluZy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW06CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRT
YW5kYm94Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlk
ZW9Db250cm9sc01hbmFnZXIubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVz
dHMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZp
ZXdFZGl0QWN0aW9ucy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW06CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5tbToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbToKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1t
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW06
CisKIDIwMTktMTItMDkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZS1kaXNhYmxlIFRMUzEuMCBhbmQgVExTMS4xIGJ5IGRlZmF1bHQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcg
Yi9Ub29scy9NaW5pQnJvd3Nlci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCmluZGV4IGZj
NjFkNTIyN2M4NjA4NDg4NTE0Y2JkOTJhMjhkYzdjMWMyZWZhZjQuLjIwZjBlNDVmOTM5NTM3NWNk
YWYzMWU3NTJiNGIyNTZmZWRmN2IyNzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvQ29uZmln
dXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpAQCAtNzAsNiArNzAsOCBAQCBHQ0NfVkVSU0lPTiA9IGNv
bS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7CiBXQVJOSU5HX0NGTEFHUyA9IC1XYWxs
IC1XIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogR0NDX05PX0NPTU1PTl9CTE9DS1MgPSBZRVM7CiAK
K0hFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViS2l0VGVzdFN1
cHBvcnQ7CisKIFNVUFBPUlRFRF9QTEFURk9STVMgPSBpcGhvbmVvcyBpcGhvbmVzaW11bGF0b3Ig
bWFjb3N4IHR2b3MgdHZzaW11bGF0b3Igd2F0Y2hvcyB3YXRjaHNpbXVsYXRvcjsKIAogVEFSR0VU
X01BQ19PU19YX1ZFUlNJT05fTUFKT1IgPSAkKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9S
JChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6c3VmZml4OmlkZW50aWZpZXIpKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tIGIv
VG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KaW5kZXgg
MDA2MzI2NmVkMzNlN2RhN2EyYWI5MTQyYTJhZjBhMTJjNTkwZDBkOS4uNDk2YWM0NzE2ZThjY2Yz
OThkMTk1NmYwYTlmNDJiZTM5OTgyZGU0YyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
bWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
bWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lt
cG9ydCAiQXBwRGVsZWdhdGUuaCIKICNpbXBvcnQgIlNldHRpbmdzQ29udHJvbGxlci5oIgorI2lt
cG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLRnJhbWVJbmZvLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKaW5kZXggZWVjMTNmNmVkOTg2ZDIzYzEwY2M2
NzI2YWE5YmQ3NDA3NDEzNDY2NC4uZTk1NmJiMThjMzY0N2FiMjEwMmQ3NzIxNGUzZWJkMTQyMzJk
MWRkZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29uZmlndXJhdGlvbnMvQmFzZS54
Y2NvbmZpZwpAQCAtMzMsNyArMzMsNyBAQCBDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBn
bnUrKzF6OwogQ0xBTkdfQ1hYX0xJQlJBUlkgPSBsaWJjKys7CiBDTEFOR19FTkFCTEVfT0JKQ19X
RUFLID0gWUVTOwogQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VB
UkNIX1BBVEhTID0gJHtCVUlMVF9QUk9EVUNUU19ESVJ9L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VC
Q09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvV2ViQ29yZVRlc3RTdXBwb3J0ICR7U1JDUk9PVH07CitIRUFERVJfU0VBUkNIX1BB
VEhTID0gJHtCVUlMVF9QUk9EVUNUU19ESVJ9L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9Q
UklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvV2ViQ29yZVRlc3RTdXBwb3J0ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJLaXRUZXN0U3Vw
cG9ydCAke1NSQ1JPT1R9OwogCiBHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKIEdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpICQoRkVBVFVSRV9ERUZJTkVT
KSBVX0RJU0FCTEVfUkVOQU1JTkc9MSBVX1NIT1dfQ1BMVVNQTFVTX0FQST0wICQoR0NDX1BSRVBS
T0NFU1NPUl9ERUZJTklUSU9OU18kKFBMQVRGT1JNX05BTUUpKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KaW5kZXggZjA5NmZiNzU2ZjAwNDNlNjM2NmRlYzRmMDFh
OTBiYzFkMDczN2MzYi4uMTY2N2Y3MGVkMWMzMGJhZmRjMWIzOTBhNDk3ZDA1MjAwNDlkZGYwNSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0KQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJFZGl0aW5nVGVzdEhhcm5lc3MuaCIKIAogI2ltcG9ydCAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAKIEBpbXBsZW1lbnRhdGlvbiBFZGl0aW5nVGVzdEhh
cm5lc3MKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVz
cG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tCmluZGV4IDI3MTJjNWYwNDBhZGUxYWJlZTYy
NDUxOTI4ZGU3ZDczOGI3YTExY2QuLmQ1YjdjZmQ5MWRkMTM1MDcyNGE1NTdlYTRiNWVhNjJiY2M5
YWQ1OGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3Bv
bnNpdmVuZXNzVGltZXJDcmFzaC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0KQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lt
cG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRl
TWFjLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3Rm
L0hhc2hTZXQuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0FuaW1hdGVkUmVzaXplLm1tCmluZGV4IDMxMTljM2MzOTkwMzAyNWMxZDI3MTBjMWJl
ZGJkYjQ2NzYyMzMwNTUuLmU0MDQ0MDk1ZGE0MTlhNjE1OWQ0YzNiOGZhZDFjMjU5OWY4NzM1NzIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0
ZWRSZXNpemUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9B
bmltYXRlZFJlc2l6ZS5tbQpAQCAtMjksMTEgKzI5LDExIEBACiAjaW1wb3J0ICJUZXN0LmgiCiAj
aW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVm
ZXJlbmNlcy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvbi5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tCmluZGV4IDY0ZGM0NmI0Zjc3NzJiZGNm
ZTg3MWUyZjg1ZWUyOWU2MTM0YTBkYzguLjgwMDJkOGE2MDAyODQwYTQ2M2U1NTFlYmU2YjQ1NDFl
N2QwZDA4ODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW0KQEAgLTI4LDEwICsyOCwxMCBAQAog
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlV0aWxpdGllcy5oIgogI2lt
cG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJv
Y2Vzc1Bvb2xQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFz
aC5tbQppbmRleCBkNDMyNGE4ZjZjNmE5ZGYyM2RlODg0YmY1OWE2NDYxMTVkMjg5MTBjLi5hNzlk
ZGE5YzFmY2EyYzg2M2I0YTU0NzNmOWQ5MzFmM2NmZTU4NTEyIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNy
YXNoLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJh
Y3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0KQEAgLTI5LDggKzI5LDggQEAKICNpbXBvcnQgIlRl
c3QuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RX
S1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbQppbmRleCA2YzJkN2I2ZjRlMDBl
Y2YwNTJkMTA1OTM4MTM4ZDdjMDZiZTEyNTlhLi5kMTZjYWYxN2RhMzg3ZGVkN2Y2YTRjOTZlZjBj
NDE2ZGJjYjllMmUwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFCdWZmZXJpbmdQb2xpY3kubW0KQEAgLTI5LDkgKzI5LDgg
QEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
UHJpdmF0ZS5oPgogCiBzdGF0aWMgdm9pZCB3YWl0VW50aWxCdWZmZXJpbmdQb2xpY3lJc0VxdWFs
VG8oV0tXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBleHBlY3RlZCkKIHsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWluZ0NvbnRy
b2xzVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1Bs
YXlpbmdDb250cm9sc1Rlc3RzLm1tCmluZGV4IDUwMDEyZjBmMTlkZmU1ZWNkOGVkZDVhY2IzM2Y3
YjU3ZTJiMTAwZjguLjhhYzVlYzUwNDRhMmIxNjdlZTA2NGZmZGFkMTIzYjM0YzQ0MDMzZjMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWlu
Z0NvbnRyb2xzVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbQpAQCAtMjcsOSArMjcsOCBAQAogCiAjaW1w
b3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVn
YXRlLm1tCmluZGV4IDVkYzFhMTk3ODk4NDQzMTlkMjYxOWE1YzdhMWY4ZmM5MmY2ZTg5MzguLmJm
NmUzY2U0YjliZGY4OGEzZTdjYThkMjBjMWJmZjkzZGNkMTFmOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURlbGVnYXRl
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUlu
UGljdHVyZURlbGVnYXRlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVdl
YlZpZXcuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQYWdlUHJpdmF0ZU1hYy5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW1w
b3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJM
Q0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0KaW5kZXgg
ODQ3YmZiNjdlZTZmMGI4MGQ5Mjc2YTQzNjliMTRkZjc3NjM0MDBiZS4uN2JmNGFhNTcyOTU4ZThi
MzM5ZmQ5MzEwYzgzMjU5M2UzOWY5MzRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRp
YUJ1ZmZlcmluZy5tbQpAQCAtMjksOSArMjksOCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdU
ZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKIFRFU1QoV2ViS2l0LCBQ
cm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nKQogewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRp
b24ubW0KaW5kZXggMTE1Nzc3ZTc0ZDliYmZkZmM0Y2UzZTAzYWM2MzIyMTg2ZjgzMjFlOC4uM2Nh
MjkzNDNjNzg5NTQ3NGQ3YzBjNjNjZTM1MmFlNDM1ZjhjMmI4MCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1w
b3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3Lmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tCYWNrRm9y
d2FyZExpc3RJdGVtUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0
U3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4K
QEAgLTM5LDcgKzQwLDYgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZUhhbmRsZXIuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCA1YjY2OWVhYjAyMzg5
ZjIxM2EwNTE3Zjc1ZGQ2YjhjNTQ2OGI5MTA5Li5kNzc5NjQwNTY4NGZiN2ZhYTU4ZTc0YTJkY2Mx
ZGQyMmM2MTcwNzBiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtMzEsMTIgKzMxLDEyIEBA
CiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAj
aW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lSGFuZGxl
ci5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUubW0KaW5kZXggNmMyZjg0MzJlOGFhYTY2Njc2
OTkxYWE3ZmJhZTFmYzA2MGM1N2U1NS4uYmNjMTAyNmJjYWE1ODg2YWJjZTJiMDE2Y2QyZjRhNmZl
NTgyMmNkZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TbmFwc2hvdFN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvU25hcHNob3RTdG9yZS5tbQpAQCAtMzIsMTEgKzMyLDExIEBACiAjaW1wb3J0ICJUZXN0
LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tX
ZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQv
V0tCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXcuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIGRpZEZvcmNlUmVwYWludDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5t
bQppbmRleCBkOWFkZWY0NDMyZDk4M2U0YjQ3MTAyMDc0MDY5YTYyZGE5YzFiN2MzLi5lYTI0MDFh
YzQyMzdiMDJkZDhkMmViNWU1MTc1NmM5YjQ4OWQ5YjNhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1tCkBAIC0zMCw4
ICszMCw4IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMu
aCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgIldL
V2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRlLmg+Ci0jaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5o
PgogCiBzdGF0aWMgYm9vbCBoYXNUcmlnZ2VySW5mbzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbQppbmRleCA3OTE3YjhmOWQyZjY3
OWExMTk5ODJiOGU1MDEyMmNhZWUxMmRmM2VjLi4xNjExODA4MzZkNTc1NjIwMjdlMDYxYzk3NTJm
NDcyODEyMWRjZGIxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1VJRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9VSURlbGVnYXRlLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0V0tX
ZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZp
Z3VyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQg
PFdlYktpdC9XS0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlTWFj
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tHZW9sb2NhdGlvbk1hbmFnZXIuaD4KQEAgLTM2LDcgKzM3
LDYgQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0
ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tIaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSW5zcGVjdG9yLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWls
ZWRTYW5kYm94Lm1tCmluZGV4IDNiODgzN2MxZGYzMzQ1YjJlNzhkYzkyMTFlYzQ0YTg1M2YyYjVk
ZGUuLjEwYjIwMjRiMWU1ZjE0Njc3OTQzNjgyNGMyZGIxN2EzOWIwMDk0NDYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVG
YWlsZWRTYW5kYm94Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCkBAIC0yOCw3ICsyOCw3IEBACiAj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAi
VGVzdFdLV2ViVmlldy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0
IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0KaW5kZXggN2EwODk2
M2YxMDY2MTE2YzAwNmUyOGJkMmE4NjZiZmNiYjA2MjU0Ni4uNzBkZmZlNzcwYTE3YmMzMWM2NjRh
MzgwOTViN2YzZDFkNjFjMmMxOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0yNyw5
ICsyNyw4IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0
V0tXZWJWaWV3LmgiCi0KKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tBdHRhY2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCmluZGV4IGI2ZmNkOTM1ODUwZWJkNjdiMmIxODYx
MGU0ODg5MDY2NWUzMTkyYWIuLmZkMzQyMGZlNzkzOGU4ODdhNTJiNWRiYTY5ZGQyZDE2YjNlODhm
N2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tB
dHRhY2htZW50VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW1wb3J0ICJU
ZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1w
b3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdU
ZXN0aW5nLmgiCiAjaW1wb3J0IDxDb250YWN0cy9Db250YWN0cy5oPgogI2ltcG9ydCA8TWFwS2l0
L01hcEtpdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+Ci0j
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFy
Y2hpdmUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQpp
bmRleCA5OTNmMGJiZmYzYWY1MmMzM2QzZWU2NzMxZWExNzVjMTY0NTAwYmM0Li45NTVlYmUwZTIz
ZmUxNmMxZGJjZjE0NTUxNmQ2MDZhZmJhOTU2YTllIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0
aXZhdGVkRWxlbWVudEluZm8ubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIlRlc3QuaCIK
ICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgIldLV2ViVmlld1Rl
c3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbQppbmRleCA4MTY1
MDAxZjNlODM0ZWQ2MjI0OGQ0NTVlMzlkMDczY2FmNTJiNjIzLi4xMGMxOWNiZjIxMzExNzc3MTJh
MDZlMzA5MTg2YWZiZjc5YWJmZTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0K
QEAgLTI5LDcgKzI5LDcgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBv
cnQgIlRlc3RXS1dlYlZpZXcuaCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2lt
cG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdFByaXZhdGUuaD4K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdFZGl0QWN0aW9ucy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0KaW5kZXggOWQxYjdjNjI1NDk4NGFmYTAxNGQyOTJl
ZmExNThiOGI4YTMxYjk5OC4uNmJhOWI5ZTQ2YjA3NDJiNTMxMjAwYWE5NzRlMDUxZjA4Mjg4Zjgx
MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdFZGl0QWN0aW9ucy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBv
cnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RS
ZXNwb25kZXJUZXN0cy5tbQppbmRleCA3ZDI1N2ZkNzMyYzQ3N2U3Y2FkNWRmOWI2YzJiMDllNjYz
MGJkOTYwLi5lYzE5MGM4ZDY0MjUzYTg1NTRkNmM0OGE2YzFmNGMzMDNmNGNmMzY0IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0
UmVzcG9uZGVyVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdElucHV0RGVsZWdhdGUu
aCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3Rpbmcu
aCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNj
ZXNzaWJpbGl0eVRlc3RzSU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNj
ZXNzaWJpbGl0eVRlc3RzSU9TLm1tCmluZGV4IDFmNmEwOTM3YjcwNjg4ZGJjNzM1MTViOTAxOTU0
M2VmMmY4YmYzNGUuLmRiMDgyNzMzNDYyOGYwNzM4Zjk1N2IxMGRmZDdjNzViMmRiM2QxMmYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0
c0lPUy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5
VGVzdHNJT1MubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1
cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVj
dEludGVyZmFjZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lmg+
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRl
c3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5t
bQppbmRleCBlODFmMTAyZWY2YzFiMzJhZTdkMzE5MWE1YzQ1OGE4NWMwYWM5NWNjLi42MGEwZTAw
ZmZjNGNhMjY1NTczOTZkMTY3NTFjNTkyZmVjNTBlNjE1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW0KQEAgLTM1LDkgKzM1LDkgQEAK
ICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXdDb250cm9s
bGVyLmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5o
IgogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLQWN0aXZhdGVkRWxlbWVudEluZm8u
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tFbGVtZW50QWN0aW9uLmg+CiAjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9j
b3JyZWN0aW9uVGVzdHNJT1MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRv
Y29ycmVjdGlvblRlc3RzSU9TLm1tCmluZGV4IGYwOTI5Zjg3YzJhYzE0Nzg4YTE5ODI1YjczNTBk
MmMxODE3NTRjMjAuLmUyYWFhYzA4NzA1ODM5NTdiNzQ3ODBiYjcxN2ViMjdiODFlNTM3NTcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0aW9uVGVz
dHNJT1MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rp
b25UZXN0c0lPUy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdElucHV0RGVsZWdh
dGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgogCiBAaW50ZXJmYWNlIFRlc3RXS1dlYlZpZXcgKEF1dG9jb3JyZWN0aW9uVGVzdHMp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZh
dGlvblRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2
YXRpb25UZXN0cy5tbQppbmRleCA0OTU2MjBjNDNlZGU3NzRhOWM5ZTM2YjczMDBhMTg1YmMzZmY0
YmQyLi4wYjZkOTNmODg4NGVmNjRmOGZhOTA4Yzc3NTg5NmZmZGNiMTc1OTQ5IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVz
dHMubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRlLmgiCiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAi
V0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tJbnB1dERlbGVnYXRlLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQ
dHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25E
ZWxlZ2F0ZS5tbQppbmRleCA5Njc2YTMzYmIyNmNhZjk5ZWI3YmMxOTJkMjgwOWZkODY2ZmVmZDJk
Li4wMzUwNzY2MzM0MTZhZGJiMzgzODQ1MDFiYjM2NDAxMDdiYmVmOTFjIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAKICNpbXBv
cnQgIlV0aWxpdGllcy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCiBAaW1wbGVtZW50YXRpb24gVGVzdE5hdmlnYXRpb25EZWxlZ2F0
ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0
b3JJT1MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklP
Uy5tbQppbmRleCA2OWNkNDk3ZGMxNjZiYmE2MmEyZWUyMDJmOTRhYzBmOTZjN2Q2N2YyLi4wZDY1
MjFkNjkwNjhjMTNjNjlmOGM1YTQ5OWEzYmZmMjZhODk5MDQ5IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQpAQCAtMzEsMTIgKzMx
LDExIEBACiAjaW1wb3J0ICJJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKLQorI2ltcG9ydCAiV0tXZWJW
aWV3VGVzdGluZy5oIgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24uaD4KICNpbXBv
cnQgPFVJS2l0L1VJRHJhZ0l0ZW0uaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJvcEludGVyYWN0aW9u
Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSUludGVyYWN0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0ZvY3VzZWRFbGVtZW50SW5mby5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS0Zvcm1JbnB1dFNlc3Npb24uaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmRE
cm9wU2ltdWxhdG9yTWFjLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BT
aW11bGF0b3JNYWMubW0KaW5kZXggMTAwNWVlNDc4YjU3ZGZmZWM4N2Y0NTNkNDIyNDQ5NDQxM2E5
M2Y0ZC4uODIxZDVkYzAwNzkyMzU0OTdmYzQyNjlmN2I3MDZhZDc3ZWZjOGE2NiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0KQEAg
LTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJU
ZXN0RHJhZ2dpbmdJbmZvLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxjbWF0aD4KICNpbXBvcnQgPHd0Zi9XZWFrT2Jq
Q1B0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWcKaW5kZXggODVjYjcyOGZkMzJmN2Y2NWVjNmEyNmI4NGVkYWY1MmQxMTA2
MjZlOC4uYzMzN2I3YjY4OTkwY2Y3N2IwNDk3MGM4YWUwYzNmOGE1MGE4NTk1ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpA
QCAtNTMsNyArNTMsNyBAQCBDTEFOR19BTkFMWVpFUl9MT0NBTElaQUJJTElUWV9OT05MT0NBTEla
RUQgPSBZRVM7CiBDTEFOR19XQVJOX1JBTkdFX0xPT1BfQU5BTFlTSVMgPSBZRVM7CiBDTEFOR19X
QVJOX1NVU1BJQ0lPVVNfTU9WRSA9IFlFUzsKIENMQU5HX1dBUk5fREVQUkVDQVRFRF9PQkpDX0lN
UExFTUVOVEFUSU9OUyA9IFlFUzsKLUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUgJChCVUlMVF9QUk9EVUNUU19ESVIpL1dlYkNvcmVU
ZXN0U3VwcG9ydCAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRl
cnMgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydCAkKFBM
QVRGT1JNX0hFQURFUl9TRUFSQ0hfUEFUSFMpOworSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
V2ViQ29yZVRlc3RTdXBwb3J0ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJLaXRUZXN0U3VwcG9y
dCAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChORVhU
X1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydCAkKFBMQVRGT1JNX0hF
QURFUl9TRUFSQ0hfUEFUSFMpOwogUExBVEZPUk1fSEVBREVSX1NFQVJDSF9QQVRIU1tzZGs9aXBo
b25lKl0gPSAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvczsK
IEdDQ19OT19DT01NT05fQkxPQ0tTID0gWUVTOwogR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9O
UyA9ICQoREVCVUdfREVGSU5FUykgVV9ESVNBQkxFX1JFTkFNSU5HPTEgVV9TSE9XX0NQTFVTUExV
U19BUEk9MDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENv
bnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRy
b2xsZXJDb2NvYS5tbQppbmRleCBlOTIzYjg1MWEzZTlkZDY0YzJkNjNhNGUyNjE0MzU0MTZkYzZi
YmRjLi45NWE2ODEzZDY5NDA3ZTJlZWI0YWQzZWI5Yjc0NWMzYzlkODQ2NWMwIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCkBA
IC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJUZXN0SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVz
dFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVGVzdFdlYnNpdGVEYXRhU3RvcmVEZWxlZ2F0
ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxTZWN1cml0eS9TZWNJdGVtLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZi5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4IGVjYTAwNmM2ODkzNGY4
ZjdjM2JmZTMzMzEzNzk3NTI3NjFjMjU4ZjIuLmM0MjkxMmRmYTBkNjgwODA3N2MzZjRkOGQ1ZTcx
NWI1NzRmNGU4MTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dFJ1bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rl
c3RSdW5uZXJXS1dlYlZpZXcubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5o
IgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogCisjaW1wb3J0ICJXS1dlYlZpZXdU
ZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvLmgiCiAjaW1w
b3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KQEAgLTM2LDYgKzM3LDcgQEAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9y
dCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisKIEBp
bnRlcmZhY2UgV0tXZWJWaWV3ICgpCiAKIC8vIEZJWE1FOiBtb3ZlIHRoZXNlIHRvIFdLV2ViVmll
d19Qcml2YXRlLmgKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJ
U2NyaXB0Q29udHJvbGxlckNvY29hLm1tCmluZGV4IGJlZTA0OTdiZjU2ZDIzNjAwNmEzODFiYTEx
NjFhNzBiOTMwZWZjZjMuLjBmYTE2ZGQ0ODljZGRjZDA2ZTMxM2M1OTQ3MzdhNzg1ZjZmYzhlMmMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENv
bnRyb2xsZXJDb2NvYS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdENvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJU2NyaXB0
Q29udGV4dC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250
cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJ
T1MubW0KaW5kZXggYWUyYTk0YTE1YjAwOTkyYjFlODk1Zjk0ODc2NjI1YTE4YzFhNDlmZi4uYjYw
MDc1MGZhOTc2ODY4M2RlNzUyZDU3NDg5MTE1M2YwMjFmNzE5ZCAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbXBvcnQgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3
LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgog
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggOTk5
Y2E4NzFlY2ExZWRiYTE4YjU1OGNhMjBlODViODUxZTcxMDdjZS4uZTA1MGQ1YjNiY2ExZWNkNTRk
MzgxZWZkMjA4MTQ3MzAwNjAxMTkzOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9y
dCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQg
IlVJU2NyaXB0Q29udGV4dC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL09wYXF1ZUpTU3RyaW5nLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCmluZGV4
IDZiZGUyNjE1ZWVmMDgyZDJkOTdmNTg0ZWI5NzE4MDE5ODc2MjUzYTMuLjI1ZWQ4NWNlNmRmOGEx
YmRiZDkxM2FmZjI3M2U5YzU0ODUwNzg2YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDEzICszMCwxMyBAQAog
I2ltcG9ydCAiRXZlbnRTZXJpYWxpemVyTWFjLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVZpZXdIZWxw
ZXJzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbXBvcnQgIlNoYXJlZEV2ZW50
U3RyZWFtc01hYy5oIgotI2ltcG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlBsYXRm
b3JtV2ViVmlldy5oIgorI2ltcG9ydCAiU2hhcmVkRXZlbnRTdHJlYW1zTWFjLmgiCiAjaW1wb3J0
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBvcnQgIlRlc3RDb250cm9sbGVyLmgiCiAjaW1wb3J0
ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRleHQuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29u
dGV4dC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385315</attachid>
            <date>2019-12-10 16:23:52 -0800</date>
            <delta_ts>2019-12-12 15:00:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191210162351.patch</filename>
            <type>text/plain</type>
            <size>306983</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGZiM2NlMTAwOWIzMmM2MzQz
M2VlZWQ2M2JhNjJkMjljNDA5ZGMzZWMuLjUwOWE5NGEzZDIzNjI4YzI3MmQzNDlhYzA0ZDQ3NTNk
OThjYzk5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQwIEBACisyMDE5LTEyLTEwICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgV0tXZWJWaWV3
IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5nIHRvIG5ldyBmaWxlcywgd2l0aCB0aGVpciBvd24gaGVh
ZGVycywgYW5kIHN0b3AgZXhwb3NpbmcgdGVzdC1vbmx5IGZ1bmN0aW9ucyBhcyBTUEkuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwMjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFN0b3Ag
ZXhwb3NpbmcgV0tXZWJWaWV3IChXS1Rlc3RpbmcpIGFzIFNQSSwgYmVjYXVzZSBldmVyeW9uZSBh
ZGRlZCBTUEkgaGVyZSBieSBtaXN0YWtlLCBhbmQKKyAgICAgICAgaW50ZXJuYWwgY2xpZW50cyBr
ZXB0IHVzaW5nIHRlc3RpbmcgU1BJLgorICAgICAgICAKKyAgICAgICAgSW5zdGVhZCwgbW92ZSB0
ZXN0aW5nLW9ubHkgZnVuY3Rpb25zIHRvIGludGVybmFsIGhlYWRlcnMgdGhhdCBhcmUgbm90IHBy
ZXNlbnQgaW4gdGhlIGJ1aWx0IGZyYW1ld29yaywKKyAgICAgICAgYW5kIG1vdmUgdG8gV0tXZWJW
aWV3IChXS1ByaXZhdGUpIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IHdlYmtpdCBjbGll
bnRzIHJlbHkgb24uCisgICAgICAgIAorICAgICAgICBBZGQgV0tXZWJWaWV3VGVzdGluZy9XS1dl
YlZpZXdUZXN0aW5nTWFjL1dLV2ViVmlld1Rlc3RpbmdJT1MgZm9yIHRlc3Qtb25seSBjb2RlLgor
ICAgICAgICAKKyAgICAgICAgV0tXZWJWaWV3VGVzdGluZyogaGVhZGVycyBhcmUgY29waWVkIHRv
IGEgIldlYktpdFRlc3RTdXBwb3J0IiBkaXJlY3RvcnkgaW4gdGhlIFByb2R1Y3RzIGRpcmVjdG9y
eSwgYW5kIFdUUi9EUlQgYW5kIFRlc3RXZWJLaXRBUEkKKyAgICAgICAgZ2V0IGhlYWRlciBzZWFy
Y2ggcGF0aHMgdG8gZmluZCB0aGUgaGVhZGVycyB0aGVyZS4KKworICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dLV2ViVmlldyBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp3
aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOndpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdXNlU3lzdGVtQXBwZWFyYW5jZV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlld10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2NhbkNoYW5nZUZyYW1lTGF5b3V0Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3RyeVRvU3dpcGVXaXRoRXZlbnQ6aWdub3JpbmdQaW5uZWRTdGF0ZTpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9pZ25vcmVzTm9uV2hlZWxFdmVudHNdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRJZ25vcmVzTm9uV2hlZWxFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9kaXNhYmxlRnJhbWVTaXplVXBkYXRlc10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9i
ZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmNdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZnVsbFNjcmVlbldpbmRvd10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VuZGVybGF5Q29s
b3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVbmRlcmxheUNvbG9yOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3aXBlVmlld3M6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NldEZyYW1lOmFuZFNjcm9sbEJ5Ol0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Rv
dGFsSGVpZ2h0T2ZCYW5uZXJzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udDpzZW5k
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udFNpemU6c2VuZGVyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRDb2xvcjpzZW5kZXI6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBpbnB1dEFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlucHV0
Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQ
b3NpdGlvbjpjb21wbGV0aW9uQmxvY2s6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVu
dFZpc2libGVSZWN0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udmVydFBvaW50RnJvbUNv
bnRlbnRzVG9WaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRQb2ludEZyb21W
aWV3VG9Db250ZW50czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRpZFN0YXJ0Rm9ybUNvbnRy
b2xJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlkRW5kRm9ybUNvbnRyb2xJ
bnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VpVGV4dENhcmV0UmVjdF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rp
b25PZmZzZXQ6d2l0aFRleHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
Y29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5z
cGVjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWFpbkZyYW1lXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaXNFZGl0YWJsZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEVkaXRh
YmxlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2V4ZWN1dGVFZGl0Q29tbWFuZDphcmd1bWVu
dDpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbmZpZ3VyYXRpb246Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21w
bGV0ZVRleHRNYW5pcHVsYXRpb246Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF90YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246XSk6CisgICAgICAgICgrW1dLV2ViVmlldyBf
c3RyaW5nRm9yRmluZF0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX3NldFN0cmluZ0ZvckZpbmQ6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVtb3RlT2JqZWN0UmVnaXN0cnldKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9vYnNlcnZl
ZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlzdG9y
eURlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SGlzdG9yeURlbGVnYXRlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFn
ZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfdG9nZ2xlUGljdHVyZUluUGljdHVyZV0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2Nsb3NlQWxsTWVkaWFQcmVzZW50YXRpb25zXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc3RvcE1lZGlhQ2FwdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N0b3BBbGxN
ZWRpYVBsYXliYWNrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3VzcGVuZEFsbE1lZGlhUGxh
eWJhY2tdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXN1bWVBbGxNZWRpYVBsYXliYWNrXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfdW5yZWFjaGFibGVVUkxdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9tYWluRnJhbWVVUkxdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkQWx0ZXJu
YXRlSFRNTFN0cmluZzpiYXNlVVJMOmZvclVucmVhY2hhYmxlVVJMOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2xvYWREYXRhOk1JTUVUeXBlOmNoYXJhY3RlckVuY29kaW5nTmFtZTpiYXNlVVJM
OnVzZXJEYXRhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2xvYWRSZXF1ZXN0OnNob3VsZE9w
ZW5FeHRlcm5hbFVSTHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2VydGlmaWNhdGVDaGFp
bl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbW1pdHRlZFVSTF0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX01JTUVUeXBlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdXNlckFnZW50XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2N1c3RvbVVzZXJBZ2VudF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3NldEN1c3RvbVVzZXJBZ2VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRV
c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJQ
cm9jZXNzSWRlbnRpZmllcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Byb3Zpc2lvbmFsV2Vi
UHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9raWxsV2ViQ29udGVu
dFByb2Nlc3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2Vyc10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbG9hZEV4cGlyZWRPbmx5XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZV0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3Q29vcmRpbmF0ZXM6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29udmVydFJlY3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZvY3VzVGV4dElucHV0Q29u
dGV4dDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90YWtlUERG
U25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9zZXRTaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlczpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGVdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdG
b3J3YXJkOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NuYXBz
aG90TGF5ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJkTGlzdEl0ZW06XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZGF0YURldGVjdGlvblJlc3VsdHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
Y2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rpb25Db250ZW50Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRBc3Npc3RhbnRJdGVtXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2Vzc2lvblN0YXRlRGF0YV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Np
b25TdGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Npb25TdGF0ZVdpdGhGaWx0ZXI6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVTZXNzaW9uU3RhdGU6YW5kTmF2aWdhdGU6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xvc2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOmNvbnRlbnRUeXBlOmRhdGE6b3B0aW9uczpj
b21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc2VydEF0dGFjaG1lbnRXaXRo
RmlsZVdyYXBwZXI6Y29udGVudFR5cGU6b3B0aW9uczpjb21wbGV0aW9uOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Y29udGVudFR5cGU6
Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hdHRhY2htZW50Rm9ySWRlbnRp
ZmllcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0ZURldmljZU9yaWVudGF0aW9u
Q2hhbmdlV2l0aEFscGhhOmJldGE6Z2FtbWE6XSk6CisgICAgICAgICgrW1dLV2ViVmlldyBfaGFu
ZGxlc1NhZmVCcm93c2luZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3dTYWZlQnJvd3Np
bmdXYXJuaW5nV2l0aFRpdGxlOndhcm5pbmc6ZGV0YWlsczpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6dGl0
bGU6d2FybmluZzpkZXRhaWxzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoK1tXS1dl
YlZpZXcgX2NvbmZpcm1NYWx3YXJlU2VudGluZWxdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF92
aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzSklU
RW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9ldmFsdWF0ZUphdmFTY3JpcHRXaXRo
b3V0VXNlckdlc3R1cmU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93
c1JlbW90ZUluc3BlY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbGxvd3NSZW1v
dGVJbnNwZWN0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW90ZUluc3BlY3Rpb25O
YW1lT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRSZW1vdGVJbnNwZWN0aW9u
TmFtZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZHNWaXNpdGVkTGlua3Nd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBZGRzVmlzaXRlZExpbmtzOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3NdKToKKyAgICAgICAgKGxh
eW91dE1pbGVzdG9uZXMpOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9ic2VydmVkUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZ2V0TWFpblJlc291
cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9n
ZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2dldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nV2l0aENvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dldEFwcGxpY2F0aW9uTWFu
aWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFn
aW5hdGlvbk1vZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRQYWdpbmF0aW9uTW9kZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlTGVuZ3RoXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0UGFnZUxlbmd0aDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nYXBCZXR3ZWVu
UGFnZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRHYXBCZXR3ZWVuUGFnZXM6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZF0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcGFnZUNvdW50XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3VwcG9y
dHNUZXh0Wm9vbV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RleHRab29tRmFjdG9yXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0VGV4dFpvb21GYWN0b3I6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBzZXRQYWdlWm9vbTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBhZ2Vab29tXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVpvb21GYWN0b3JdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRQYWdlWm9vbUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWFn
bm9zdGljTG9nZ2luZ0RlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlhZ25v
c3RpY0xvZ2dpbmdEZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9maW5kRGVsZWdh
dGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGaW5kRGVsZWdhdGU6XSk6CisgICAgICAg
ICh0b0ZpbmRPcHRpb25zKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb3VudFN0cmluZ01hdGNo
ZXM6b3B0aW9uczptYXhDb3VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9maW5kU3RyaW5n
Om9wdGlvbnM6bWF4Q291bnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZUZpbmRVSV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnB1dERlbGVnYXRlXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0SW5wdXREZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rp
c3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2lzRGlzcGxheWluZ1N0YW5kYWxvbmVNZWRpYURvY3VtZW50XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfaXNQbGF5aW5nQXVkaW9dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc1Nob3dpbmdO
YXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbGF5b3V0
TW9kZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldExheW91dE1vZGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZml4ZWRMYXlvdXRTaXplXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0Rml4ZWRMYXlvdXRTaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEJhY2tncm91
bmRFeHRlbmRzQmV5b25kUGFnZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iYWNrZ3JvdW5k
RXh0ZW5kc0JleW9uZFBhZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF92aWV3U2NhbGVdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRWaWV3U2NhbGU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0TWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX21pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aF0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsUGVyZm9ybWFuY2VEYXRhXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYlByb2Nlc3NJc1Jlc3BvbnNpdmVdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZnVsbHNjcmVlbkRlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNJ
bkZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9tZWRpYUNhcHR1cmVTdGF0ZV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfbWVkaWFDYXB0dXJlRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3NldFBhZ2VNdXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVEYXRh
RGV0ZWN0ZWRMaW5rczpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZGV0ZWN0RGF0YVdpdGhUeXBlczpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9taW5pbXVtTGF5b3V0U2l6ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9vYnNjdXJlZEluc2V0c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9ic2N1cmVkSW5z
ZXRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVk
QnlTYWZlQXJlYV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9ic2N1cmVkSW5zZXRFZGdl
c0FmZmVjdGVkQnlTYWZlQXJlYTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91bm9ic2N1cmVk
U2FmZUFyZWFJbnNldHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVbm9ic2N1cmVkU2Fm
ZUFyZWFJbnNldHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2FmZUFyZWFTaG91bGRBZmZl
Y3RPYnNjdXJlZEluc2V0c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NsZWFySW50ZXJmYWNl
T3JpZW50YXRpb25PdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWF4aW11bVVu
b2JzY3VyZWRTaXplT3ZlcnJpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWxsb3dz
Vmlld3BvcnRTaHJpbmtUb0ZpdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbGxvd3NWaWV3
cG9ydFNocmlua1RvRml0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVnaW5JbnRlcmFjdGl2
ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kSW50ZXJh
Y3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hpZGVD
b250ZW50VW50aWxOZXh0VXBkYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVnaW5Bbmlt
YXRlZFJlc2l6ZVdpdGhVcGRhdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuZEFuaW1h
dGVkUmVzaXplXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250
ZW50V2l0aFVwZGF0ZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3ZlcmxhaWRBY2Nl
c3NvcnlWaWV3c0luc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NuYXBzaG90UmVjdDpp
bnRvSW1hZ2VPZldpZHRoOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTptYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhck92
ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc10pOgorICAgICAgICAodmlld3BvcnRBcmd1bWVudHNGcm9t
RGljdGlvbmFyeSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhB
cmd1bWVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdmlld0ZvckZpbmRVSV0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2lzRGlzcGxheWluZ1BERl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2RhdGFGb3JEaXNwbGF5ZWRQREZdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdWdnZXN0
ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYlZp
ZXdQcmludEZvcm1hdHRlcl0pOgorICAgICAgICAodG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kcmF3c0JhY2tncm91bmRdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXREcmF3c0JhY2tncm91bmQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
YmFja2dyb3VuZENvbG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QmFja2dyb3VuZENv
bG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX292ZXJsYXlTY3JvbGxiYXJTdHlsZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3dpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWRdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgc2hhcmVTaGVldERpZERpc21pc3M6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9vdmVycmlkZURldmljZVNjYWxlRmFjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
VG9wQ29udGVudEluc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNl
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Bpbm5lZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcnViYmVyQmFuZGluZ0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRS
dWJiZXJCYW5kaW5nRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDp3aXRoVHlwZTp1c2VyRGF0
YTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRl
bnRJbnNldHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYXV0b21hdGljYWxseUFkanVzdHND
b250ZW50SW5zZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWluaW11bUxheW91dFdpZHRo
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWluaW11bUxheW91dFdpZHRoOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRv
TGF5b3V0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkRXhwYW5kQ29udGVudFRv
Vmlld0hlaWdodEZvckF1dG9MYXlvdXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWx3YXlz
U2hvd3NIb3Jpem9udGFsU2Nyb2xsZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdh
eXNTaG93c0hvcml6b250YWxTY3JvbGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcHJpbnRP
cGVyYXRpb25XaXRoUHJpbnRJbmZvOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaW50T3Bl
cmF0aW9uV2l0aFByaW50SW5mbzpmb3JGcmFtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNl
dFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
d2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jl
bW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9w
cmVwYXJlRm9yTW92ZVRvV2luZG93OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldFRodW1ibmFpbFZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdGh1
bWJuYWlsVmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElnbm9yZXNBbGxFdmVudHM6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc0FsbEV2ZW50c10pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBrZXlib2FyZEFjY2Vzc29yeUJhck5l
eHRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFy
UHJldmlvdXNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGFwcGx5QXV0b2NvcnJl
Y3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgZGlzbWlzc0Zvcm1BY2Nlc3NvcnlWaWV3XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0ZpbGVQaWNrZXJdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjptaW51dGU6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZV0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ10p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZm9ybUlucHV0TGFiZWxdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRTaG93Q29udGV4dE1lbnVdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWREaXNtaXNzQ29udGV4dE1lbnVdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnB1dFZpZXdCb3VuZHNdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c10pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Njcm9sbGluZ1RyZWVBc1RleHRdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9zdGFibGVTdGF0ZU92ZXJyaWRlXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNo
b3RGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RD
b250cm9sbGVkRWxlbWVudElEXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFu
ZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc10pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZFJlcXVlc3RDYW5kaWRhdGVzXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaW5zZXJ0VGV4dDpyZXBsYWNlbWVudFJh
bmdlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbmRpZGF0ZVJlY3RdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdEaWRDaGFuZ2VFZmZlY3RpdmVBcHBl
YXJhbmNlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SGVhZGVyQmFubmVy
SGVpZ2h0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEZvb3RlckJhbm5l
ckhlaWdodDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUHJvY2Vz
c2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9hY3RpdmVNZW51XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVz
dEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRQYWdlU2NhbGU6d2l0aE9yaWdpbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9wYWdlU2NhbGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc2FibGVCYWNrRm9yd2FyZFNu
YXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kcmFnQ2FyZXRSZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2lt
dWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NpbXVsYXRlVGV4dEVudGVyZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfZHluYW1pY1VzZXJJbnRlcmZhY2VUcmFpdERpZENoYW5nZV0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZ10pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZ10pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5n
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNoYXJlU2hlZXRDb21wbGV0
ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNJbnNwZWN0b3JGcm9udGVuZF0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3Rp
bmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBc3NlcnRpb25TdGF0ZUZv
clRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFzU2VydmljZVdv
cmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZ10p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVz
dF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RyaWdnZXJTeXN0ZW1QcmV2aWV3
QWN0aW9uT25FbGVtZW50OmRvY3VtZW50OnBhZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3VGVzdGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW06IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldFBhZ2VTY2FsZTp3aXRoT3JpZ2luOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VT
Y2FsZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmVO
b3dQbGF5aW5nU2Vzc2lvbkluZm86XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5n
VXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNj
cm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplRm9yVGVzdGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxl
QmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmddKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZ10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGVueU5leHRVc2Vy
TWVkaWFSZXF1ZXN0XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVz
dGluZ0lPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdU
ZXN0aW5nSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNz
b3J5QmFyTmV4dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5Ym9hcmRBY2Nlc3NvcnlCYXJQ
cmV2aW91c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0
cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkaXNt
aXNzRm9ybUFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNtaXNzRmls
ZVBpY2tlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0VGltZVBpY2tlclZhbHVlVG9Ib3Vy
Om1pbnV0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNr
ZXJSb3c6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBmb3JtSW5wdXRMYWJlbF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2RpZFNob3dDb250ZXh0TWVudV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZERpc21pc3ND
b250ZXh0TWVudV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lucHV0Vmlld0JvdW5kc10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3VpVGV4dFNlbGVjdGlvblJlY3RzXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2Nyb2xsaW5nVHJlZUFzVGV4dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3N0YWJsZVN0YXRlT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9wZXJ0aWVz
T2ZMYXllcldpdGhJRDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUmVzZXR0aW5n
U2luZ2xlVGFwR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUmVjZWl2
aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
ZHJhZ0NhcmV0UmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNz
QWN0aW9uQXRMb2NhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0ZVRleHRF
bnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2R5bmFtaWNVc2VySW50ZXJmYWNlVHJh
aXREaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90cmlnZ2VyU3lzdGVtUHJldmll
d0FjdGlvbk9uRWxlbWVudDpkb2N1bWVudDpwYWdlOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tOiBBZGRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZV0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXNdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2luc2VydFRleHQ6cmVwbGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jYW5kaWRhdGVSZWN0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkQ2hhbmdlRWZm
ZWN0aXZlQXBwZWFyYW5jZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhlYWRlckJhbm5l
ckhlaWdodDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91
c2VFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlTWVudV0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Z1bGxz
Y3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTEyLTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgTGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBXZWJQYWdlUHJveHkg
c3ViY2xhc3NlcyBJUEM6Ok1lc3NhZ2VTZW5kZXIgdG8gc2ltcGxpZnkgSVBDIHNlbmRpbmcgY29k
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDlkMjQyZTJhMDY0ZGZmNzJmNDljNDJmNTRkOTc4
MTNjYWQ5NGQ5MmMuLjFiMjVhN2I5ZDA5ZWEzNjViNzI0ZDA1YTk3ZGJmYzYzMGZkYWM3MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTMyMiwxMSArMzIyLDE1IEBAIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tVc2VyU2NyaXB0Lm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFS
ZWNvcmQubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdUZXN0aW5nLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24u
bW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXaW5kb3dGZWF0dXJlcy5tbQogCitVSVByb2Nlc3MvQVBJL2lvcy9XS1dl
YlZpZXdUZXN0aW5nSU9TLm1tCisKIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorVUlQcm9j
ZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQogCiBVSVByb2Nlc3MvQXV0aGVudGlj
YXRpb24vY29jb2EvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tCiBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vY29jb2EvU2VjS2V5UHJveHlTdG9yZS5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgK
aW5kZXggNTM2MmIxOGU4NTNmYTU0ODMxNjllZjRlMjIxZWUxOWYyOGM0OGViMi4uMjU5MDc4ZmY1
YzE0MWQ0YzBkZmUyYTgyNmFhNDg4YTJiOWE1ZGYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCkBAIC0zOSw2
ICszOSw3IEBACiBAY2xhc3MgX1dLQWN0aXZhdGVkRWxlbWVudEluZm87CiBAY2xhc3MgX1dLRWxl
bWVudEFjdGlvbjsKIEBjbGFzcyBfV0tGcmFtZUhhbmRsZTsKK0BjbGFzcyBfV0tJbnNwZWN0b3I7
CiAKICNpZiBUQVJHRVRfT1NfSU9TCiBAY2xhc3MgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb247
CkBAIC0xODIsNiArMTgzLDcgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIC0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YUludGVyYWN0aW9uOihpZClpbnRlcmFjdGlvbiBz
ZXNzaW9uOihpZClzZXNzaW9uIGRpZEVuZFdpdGhPcGVyYXRpb246KE5TVUludGVnZXIpb3BlcmF0
aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxlZDooQk9PTClo
YW5kbGVkIGZvclNlc3Npb246KGlkKXNlc3Npb24gaXRlbVByb3ZpZGVyczooTlNBcnJheSAqKWl0
ZW1Qcm92aWRlcnMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAoTlNVSW50ZWdlcilf
d2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsVXBkYXRlRGF0YUludGVyYWN0aW9uT3Bl
cmF0aW9uVG9PcGVyYXRpb246KE5TVUludGVnZXIpb3BlcmF0aW9uIGZvclNlc3Npb246KGlkKXNl
c3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOworCiAjaWYgVEFSR0VUX09TX0lPUwog
LSAoVUlEcm9wUHJvcG9zYWwgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsVXBk
YXRlRHJvcFByb3Bvc2FsVG9Qcm9wb3NhbDooVUlEcm9wUHJvcG9zYWwgKilwcm9wb3NhbCBmb3JT
ZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygx
Mi4yKSk7CiAtIChVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKilfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBwcmV2aWV3Rm9yTGlmdGluZ0l0ZW06KFVJRHJhZ0l0ZW0gKilpdGVtIHNlc3Npb246
KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsK
QEAgLTE5MCw2ICsxOTIsNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwogLSAoTlNJbnRlZ2VyKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFPd25lckZvckRyb3BTZXNzaW9uOihpZCA8
VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAtIChO
U0ludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YU93bmVyRm9yRHJhZ1Nl
c3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEx
LjApKTsKICNlbmRpZgorCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRp
ZENoYW5nZVNhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHM6KEJPT0wpc2FmZUFyZWFT
aG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cyBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAt
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFByZXNlbnRGb2N1c2VkRWxl
bWVudFZpZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopY29udHJvbGxlciBXS19BUElf
QVZBSUxBQkxFKGlvcygxMi4wKSk7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IGRpZERpc21pc3NGb2N1c2VkRWxlbWVudFZpZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9s
bGVyICopY29udHJvbGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7CkBAIC0yMDQsNiAr
MjA3LDcgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgc2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1Jl
cXVlc3RlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopcmVxdWVzdGluZ0ZyYW1lIGRlY2lzaW9uSGFu
ZGxlcjoodm9pZCAoXikoQk9PTCkpZGVjaXNpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEzLjApKTsKIAogI2Vsc2UgLy8gIVRBUkdFVF9PU19JUEhPTkUKKwogLSAodm9pZClfcHJlcGFy
ZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAtICh2b2lkKV9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOwpAQCAtMjM3LDYgKzI0MSw3IEBAIHN0cnVjdCBVSUVkZ2VJ
bnNldHM7CiAgICAgQHBhcmFtIGluc3BlY3RvciBUaGUgV2ViIEluc3BlY3RvciBpbnN0YW5jZSBh
dHRhY2hlZCB0byB0aGlzIFdLV2ViVmlldy4KICovCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGRpZEF0dGFjaEluc3BlY3RvcjooX1dLSW5zcGVjdG9yICopaW5zcGVjdG9y
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOworCiAjZW5kaWYgLy8gIVRBUkdF
VF9PU19JUEhPTkUKIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KaW5kZXggMzM1NGFjNmVlY2I1YThkNzE5OGFlOGE1OGNhMjk5NDRjODMw
ZTUxMC4uZGQ3NmQ4NjdkNDkwYmE2MzlhYzIyNTE0YTQxOGVlMDZkOTIxMjEwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC01Miw3ICs1
Miw2IEBACiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJTdGF0
ZS5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01h
bmFnZXIuaCIKICNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKICNpbXBvcnQgIlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCkBA
IC04MCw2ICs3OSw3IEBACiAjaW1wb3J0ICJXS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFs
LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKICNpbXBvcnQg
IldLV2ViVmlld0NvbnRlbnRQcm92aWRlci5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ0lP
Uy5oIgogI2ltcG9ydCAiV0tXZWJwYWdlUHJlZmVyZW5jZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlz
dC5oIgpAQCAtMTI0LDcgKzEyNCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlv
bkJ1YmJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uLmg+CkBAIC0yODIsMjkgKzI4MSwxOCBAQCBAaW1wbGVtZW50YXRpb24gV0tXZWJW
aWV3IHsKIAogICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVs
ZWdhdGU7CiAKLSAgICBPcHRpb25hbDxCT09MPiBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1l
ZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKICAgICBSZXRhaW5QdHI8V0tTYWZlQnJvd3NpbmdX
YXJuaW5nPiBfc2FmZUJyb3dzaW5nV2FybmluZzsKIAogICAgIEJPT0wgX3VzZVBsYXRmb3JtRmlu
ZFVJOwogCi0gICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4+
IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIFJldGFpblB0cjxfV0tSZW1vdGVPYmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJlZ2lz
dHJ5OwogCi0gICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7Ci0gICAgUmV0
YWluUHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKLQotI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKLSAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4gX2Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotI2VuZGlmCi0KICAgICBPcHRpb25hbDxDR1NpemU+
IF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0U2l6
ZT4gX2xhc3RTZW50Vmlld0xheW91dFNpemU7CiAgICAgT3B0aW9uYWw8Q0dTaXplPiBfbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRTaXpl
PiBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemU7CiAKLSAgICBDR1JlY3QgX2lucHV0Vmll
d0JvdW5kczsKICAgICBDR0Zsb2F0IF92aWV3cG9ydE1ldGFUYWdXaWR0aDsKICAgICBCT09MIF92
aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0OwogICAgIEJPT0wgX3ZpZXdwb3J0TWV0YVRh
Z0NhbWVGcm9tSW1hZ2VEb2N1bWVudDsKQEAgLTM0OSw3ICszMzcsNiBAQCBAaW1wbGVtZW50YXRp
b24gV0tXZWJWaWV3IHsKICAgICBPcHRpb25hbDxXZWJLaXQ6OlRyYW5zYWN0aW9uSUQ+IF9maXJz
dFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlOwogICAgIGRvdWJsZSBfc2NhbGVUb1Jlc3Rv
cmU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI+
IF9nZXN0dXJlQ29udHJvbGxlcjsKICAgICBCT09MIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRp
b25HZXN0dXJlczsKIAogICAgIFJldGFpblB0cjxVSVZpZXcgPFdLV2ViVmlld0NvbnRlbnRQcm92
aWRlcj4+IF9jdXN0b21Db250ZW50VmlldzsKQEAgLTM4MSw3ICszNjgsNiBAQCBAaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IHsKIAogICAgIEJPT0wgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBk
YXRlOwogICAgIEJPT0wgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxlZEZyb21TY3Jv
bGxWaWV3SW5TdGFibGVTdGF0ZTsKLSAgICBWZWN0b3I8QmxvY2tQdHI8dm9pZCAoKT4+IF92aXNp
YmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3M7CiAKICAgICBfV0tEcmFnSW50ZXJhY3Rpb25Q
b2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKIApAQCAtMzk3LDcgKzM4Myw2IEBAIEBpbXBs
ZW1lbnRhdGlvbiBXS1dlYlZpZXcgewogICAgIEJPT0wgX2hhc0VudGVyZWREZWFsbG9jOwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OldlYlZp
ZXdJbXBsPiBfaW1wbDsKICAgICBSZXRhaW5QdHI8V0tUZXh0RmluZGVyQ2xpZW50PiBfdGV4dEZp
bmRlckNsaWVudDsKICNlbmRpZgogICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgX3NlbGVjdGlv
bkF0dHJpYnV0ZXM7CkBAIC0xNDMwLDYgKzE0MTUsNDEgQEAgLSAodm9pZClfY2xlYXJTYWZlQnJv
d3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uCiAgICAgICAgIFtzZWxmIF9jbGVh
clNhZmVCcm93c2luZ1dhcm5pbmddOwogfQogCistICh2b2lkKV9pbnRlcm5hbERvQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayB3aXRob3V0V2Fp
dGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcgd2l0aG91dFdh
aXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVz
aXplCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFu
ZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKworICAgIGlmICh3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nKQorICAgICAgICBfcGFnZS0+
c2V0U2hvdWxkU2tpcFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRNb3ZlVG9XaW5kb3co
dHJ1ZSk7CisKKyAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVC
bG9jayk7CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKKyAg
ICBfcGFnZS0+Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbdXBkYXRlQmxvY2tDb3B5
LCB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplLCBzdHJvbmdTZWxmXShXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVCbG9ja0NvcHkp
CisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAg
ICBpZiAoIXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUgJiYgc3Ryb25nU2VsZi0+X2R5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlOjpOb3RSZXNpemluZykgeworICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2NhbGxiYWNrc0Rl
ZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbdXBkYXRlQmxvY2tDb3B5XSB7CisgICAgICAgICAg
ICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZWxzZQorICAgICAgICBVTlVTRURfUEFS
QU0od2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSk7CisjZW5kaWYKKworICAgICAgICB1
cGRhdGVCbG9ja0NvcHkoKTsKKyAgICB9KTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VM
RU1FTlQpCiAKIC0gKHZvaWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYp
YXR0YWNobWVudCB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTQ1OSwxMSArMTQ3
OSw2IEBAIC0gKHZvaWQpX2RpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudDooQVBJOjpBdHRh
Y2htZW50JilhdHRhY2htZW50CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0tIChCT09M
KV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gc2VsZi5fY3VycmVu
dENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Ci19Ci0KIC0gKEJPT0wpX3Nob3VsZEF2b2lk
UmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlCiB7CiAgICAgcmV0dXJuIFtfY29udGVu
dFZpZXcgX3Nob3VsZEF2b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlXTsKQEAg
LTM2NzUsNiArMzY5MCwxOCBAQCAtICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2VzcwogICAg
IF9pbXBsLT5oYW5kbGVET01QYXN0ZVJlcXVlc3RXaXRoUmVzdWx0KFdlYkNvcmU6OkRPTVBhc3Rl
QWNjZXNzUmVzcG9uc2U6OkdyYW50ZWRGb3JHZXN0dXJlKTsKIH0KIAorLSAodm9pZClfcHJlcGFy
ZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoreworfQorCistICh2b2lkKV9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfY29tcGxldGVJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb24KK3sKK30KKwogQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
QkVHSU4KIC0gKHZvaWQpcmVuZXdHU3RhdGUKIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORApAQCAtNDgzMCwyMzEzICs0ODU3LDE5NzggQEAgLSAodm9pZClfY2hhbmdlTGlzdFR5
cGU6KGlkKXNlbmRlcgogICAgIF9wYWdlLT5jaGFuZ2VMaXN0VHlwZSgpOwogfQogCi0jZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotRk9SX0VBQ0hf
UFJJVkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRFTlRW
SUVXKQotCi0tICh2b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjooaWQpc2VuZGVy
CistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCiB7Ci0gICAgaWYgKHNlbGYudXNlc1N0YW5k
YXJkQ29udGVudFZpZXcpCi0gICAgICAgIFtfY29udGVudFZpZXcgX3NldEZvbnRGb3JXZWJWaWV3
OmZvbnQgc2VuZGVyOnNlbmRlcl07CisgICAgcmV0dXJuIF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJh
bmNlKCk7CiB9CiAKLS0gKHZvaWQpX3NldEZvbnRTaXplOihDR0Zsb2F0KWZvbnRTaXplIHNlbmRl
cjooaWQpc2VuZGVyCistICh2b2lkKV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOihCT09MKXVzZVN5
c3RlbUFwcGVhcmFuY2UKIHsKLSAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldykK
LSAgICAgICAgW19jb250ZW50VmlldyBfc2V0Rm9udFNpemVGb3JXZWJWaWV3OmZvbnRTaXplIHNl
bmRlcjpzZW5kZXJdOworICAgIF9pbXBsLT5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3Rl
bUFwcGVhcmFuY2UpOwogfQogCi0tICh2b2lkKV9zZXRUZXh0Q29sb3I6KFVJQ29sb3IgKiljb2xv
ciBzZW5kZXI6KGlkKXNlbmRlcgorLSAoV0tQYWdlUmVmKV9wYWdlUmVmRm9yVHJhbnNpdGlvblRv
V0tXZWJWaWV3CiB7Ci0gICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCi0gICAg
ICAgIFtfY29udGVudFZpZXcgX3NldFRleHRDb2xvckZvcldlYlZpZXc6Y29sb3Igc2VuZGVyOnNl
bmRlcl07CisgICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdldCgpKTsKIH0KIAotLSAoVUlWaWV3ICop
aW5wdXRBY2Nlc3NvcnlWaWV3CistIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJh
bWVIYW5kbGUgKilmcmFtZUhhbmRsZQogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0
QWNjZXNzb3J5Vmlld0ZvcldlYlZpZXddOworICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0g
X3BhZ2UtPnByb2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQo
ZnJhbWVIYW5kbGUuX2ZyYW1lSUQpKSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5jYW5DaGFuZ2VG
cmFtZUxheW91dCgqd2ViRnJhbWVQcm94eSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi0tIChV
SVZpZXcgKilpbnB1dFZpZXcKKy0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQg
KilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKIHsK
LSAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dFZpZXdGb3JXZWJWaWV3XTsKKyAgICByZXR1
cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVkU3RhdGUp
OwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotLSAoQk9PTClfaXNFZGl0
YWJsZQorLSAoQk9PTClfaWdub3Jlc05vbldoZWVsRXZlbnRzCiB7Ci0gICAgcmV0dXJuIF9wYWdl
ICYmIF9wYWdlLT5pc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzTm9uV2hl
ZWxFdmVudHMoKTsKIH0KIAotLSAodm9pZClfc2V0RWRpdGFibGU6KEJPT0wpZWRpdGFibGUKKy0g
KHZvaWQpX3NldElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVu
dHMKIHsKLSAgICBib29sIHdhc0VkaXRhYmxlID0gX3BhZ2UtPmlzRWRpdGFibGUoKTsKLSAgICBf
cGFnZS0+c2V0RWRpdGFibGUoZWRpdGFibGUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAo
ZWRpdGFibGUpCi0gICAgICAgIF9pbXBsLT5kaWRCZWNvbWVFZGl0YWJsZSgpOwotI2VuZGlmCi0K
LSAgICBpZiAod2FzRWRpdGFibGUgPT0gZWRpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgW19jb250ZW50VmlldyBfZGlkQ2hhbmdlV2ViVmll
d0VkaXRhYmlsaXR5XTsKLSNlbmRpZgorICAgIF9pbXBsLT5zZXRJZ25vcmVzTm9uV2hlZWxFdmVu
dHMoaWdub3Jlc05vbldoZWVsRXZlbnRzKTsKIH0KIAotLSAodm9pZClfdGFrZUZpbmRTdHJpbmdG
cm9tU2VsZWN0aW9uOihpZClzZW5kZXIKKy0gKEJPT0wpX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJv
bHNNYW5hZ2VyCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIFtzZWxmIHRha2VGaW5kU3RyaW5n
RnJvbVNlbGVjdGlvbjpzZW5kZXJdOwotI2Vsc2UKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21t
YW5kKCJUYWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24iX3MpOwotI2VuZGlmCisgICAgcmV0dXJu
IF9wYWdlICYmIF9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpOwogfQog
Ci0rIChOU1N0cmluZyAqKV9zdHJpbmdGb3JGaW5kCistICh2b2lkKV9kaXNtaXNzQ29udGVudFJl
bGF0aXZlQ2hpbGRXaW5kb3dzCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6c3RyaW5nRm9yRmluZCgp
OworICAgIF9pbXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzRnJvbVZpZXdP
bmx5KCk7CiB9CiAKLSsgKHZvaWQpX3NldFN0cmluZ0ZvckZpbmQ6KE5TU3RyaW5nICopZmluZFN0
cmluZworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVu
dCAqKWV2ZW50CiB7Ci0gICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5kKGZpbmRTdHJpbmcp
OworICAgIF9pbXBsLT5nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlRnJvbVZpZXdP
bmx5KGV2ZW50KTsKIH0KIAotLSAoX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilfcmVtb3RlT2Jq
ZWN0UmVnaXN0cnkKKy0gKHZvaWQpX2Rpc2FibGVGcmFtZVNpemVVcGRhdGVzCiB7Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIHJldHVybiBfaW1wbC0+cmVtb3RlT2JqZWN0UmVnaXN0cnkoKTsKLSNl
bHNlCi0gICAgaWYgKCFfcmVtb3RlT2JqZWN0UmVnaXN0cnkpIHsKLSAgICAgICAgX3JlbW90ZU9i
amVjdFJlZ2lzdHJ5ID0gYWRvcHROUyhbW19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5IGFsbG9jXSBf
aW5pdFdpdGhXZWJQYWdlUHJveHk6Kl9wYWdlXSk7Ci0gICAgICAgIF9wYWdlLT5wcm9jZXNzKCku
cHJvY2Vzc1Bvb2woKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU9iamVjdFJl
Z2lzdHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIF9wYWdlLT5pZGVudGlmaWVyKCksIFtfcmVt
b3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0UmVnaXN0cnldKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5LmdldCgpOwotI2VuZGlmCisgICAgX2ltcGwtPmRp
c2FibGVGcmFtZVNpemVVcGRhdGVzKCk7CiB9CiAKLS0gKFdLQnJvd3NpbmdDb250ZXh0SGFuZGxl
ICopX2hhbmRsZQorLSAodm9pZClfZW5hYmxlRnJhbWVTaXplVXBkYXRlcwogewotICAgIHJldHVy
biBbW1tXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSBhbGxvY10gX2luaXRXaXRoUGFnZVByb3h5Oipf
cGFnZV0gYXV0b3JlbGVhc2VdOworICAgIF9pbXBsLT5lbmFibGVGcmFtZVNpemVVcGRhdGVzKCk7
CiB9CiAKLS0gKF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKV9vYnNlcnZlZFJlbmRlcmluZ1By
b2dyZXNzRXZlbnRzCistICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMK
IHsKLSAgICByZXR1cm4gX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7CisgICAgX2lt
cGwtPmJlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwogfQogCi0tIChpZCA8V0tI
aXN0b3J5RGVsZWdhdGVQcml2YXRlPilfaGlzdG9yeURlbGVnYXRlCistICh2b2lkKV9lbmREZWZl
cnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzCiB7Ci0gICAgcmV0dXJuIF9uYXZpZ2F0aW9uU3RhdGUt
Pmhpc3RvcnlEZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7CisgICAgX2ltcGwtPmVuZERlZmVycmlu
Z1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKIH0KIAotLSAodm9pZClfc2V0SGlzdG9yeURlbGVnYXRl
OihpZCA8V0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlPiloaXN0b3J5RGVsZWdhdGUKKy0gKHZvaWQp
X2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jCiB7Ci0gICAgX3BhZ2UtPnNldEhp
c3RvcnlDbGllbnQoX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRlSGlzdG9yeUNsaWVudCgpKTsKLSAg
ICBfbmF2aWdhdGlvblN0YXRlLT5zZXRIaXN0b3J5RGVsZWdhdGUoaGlzdG9yeURlbGVnYXRlKTsK
KyAgICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMoKTsKIH0KIAot
LSAodm9pZClfdXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgorLSAoTlNWaWV3ICop
X2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIF9pbXBsLT51cGRhdGVNZWRp
YVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwtPmZ1
bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcoKTsKIH0KIAotLSAoQk9PTClfY2FuVG9nZ2xlUGljdHVy
ZUluUGljdHVyZQorLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdwogewotI2lmIEhBVkUo
VE9VQ0hfQkFSKQotICAgIHJldHVybiBfaW1wbC0+Y2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZSgp
OwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwtPmZ1bGxT
Y3JlZW5XaW5kb3coKTsKIH0KIAotLSAoQk9PTClfaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlCist
IChOU0NvbG9yICopX3VuZGVybGF5Q29sb3IKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIHJldHVybiBfaW1wbC0+aXNQ
aWN0dXJlSW5QaWN0dXJlQWN0aXZlKCk7Ci0jZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgor
ICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xvcigpOwogfQogCi0tICh2b2lkKV90b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlCistICh2b2lkKV9zZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5k
ZXJsYXlDb2xvcgogewotI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi0gICAgX2ltcGwtPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsK
LSNlbmRpZgorICAgIF9pbXBsLT5zZXRVbmRlcmxheUNvbG9yKHVuZGVybGF5Q29sb3IpOwogfQog
Ci0tICh2b2lkKV9jbG9zZUFsbE1lZGlhUHJlc2VudGF0aW9ucworLSAodm9pZClfc2V0Q3VzdG9t
U3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKIHsKLSNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCi0gICAgaWYgKGF1dG8gdmlkZW9GdWxsc2NyZWVuTWFuYWdlciA9IF9wYWdl
LT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpIHsKLSAgICAgICAgdmlkZW9GdWxsc2NyZWVuTWFu
YWdlci0+Zm9yRWFjaFNlc3Npb24oW10gKGF1dG8mIG1vZGVsLCBhdXRvJiBpbnRlcmZhY2UpIHsK
LSAgICAgICAgICAgIG1vZGVsLnJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotCi0gICAgaWYgKGF1dG8gZnVsbFNjcmVlbk1hbmFnZXIgPSBfcGFnZS0+ZnVsbFNjcmVl
bk1hbmFnZXIoKTsgZnVsbFNjcmVlbk1hbmFnZXIgJiYgZnVsbFNjcmVlbk1hbmFnZXItPmlzRnVs
bFNjcmVlbigpKQotICAgICAgICBmdWxsU2NyZWVuTWFuYWdlci0+Y2xvc2UoKTsKLSNlbmRpZgor
ICAgIF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzKGN1c3RvbVN3aXBlVmlld3MpOwogfQogCi0t
ICh2b2lkKV9zdG9wTWVkaWFDYXB0dXJlCistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzVG9w
Q29udGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQKIHsKLSAgICBfcGFnZS0+c3RvcE1l
ZGlhQ2FwdHVyZSgpOworICAgIF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudElu
c2V0KHRvcENvbnRlbnRJbnNldCk7CiB9CiAKLS0gKHZvaWQpX3N0b3BBbGxNZWRpYVBsYXliYWNr
CistICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVj
dCkpY2FsbGJhY2sKIHsKLSAgICBfcGFnZS0+c3RvcEFsbE1lZGlhUGxheWJhY2soKTsKKyAgICBf
aW1wbC0+c2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayhjYWxsYmFjayk7CiB9CiAKLS0g
KHZvaWQpX3N1c3BlbmRBbGxNZWRpYVBsYXliYWNrCistICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0
KXJlY3QgYW5kU2Nyb2xsQnk6KE5TU2l6ZSlvZmZzZXQKIHsKLSAgICBfcGFnZS0+c3VzcGVuZEFs
bE1lZGlhUGxheWJhY2soKTsKKyAgICBfaW1wbC0+c2V0RnJhbWVBbmRTY3JvbGxCeShOU1JlY3RU
b0NHUmVjdChyZWN0KSwgTlNTaXplVG9DR1NpemUob2Zmc2V0KSk7CiB9CiAKLS0gKHZvaWQpX3Jl
c3VtZUFsbE1lZGlhUGxheWJhY2sKKy0gKHZvaWQpX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOihD
R0Zsb2F0KXRvdGFsSGVpZ2h0T2ZCYW5uZXJzCiB7Ci0gICAgX3BhZ2UtPnJlc3VtZUFsbE1lZGlh
UGxheWJhY2soKTsKKyAgICBfaW1wbC0+c2V0VG90YWxIZWlnaHRPZkJhbm5lcnModG90YWxIZWln
aHRPZkJhbm5lcnMpOwogfQogCi0tIChOU1VSTCAqKV91bnJlYWNoYWJsZVVSTAorLSAoQ0dGbG9h
dClfdG90YWxIZWlnaHRPZkJhbm5lcnMKIHsKLSAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0
aFdURlN0cmluZzpfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVucmVhY2hhYmxlVVJMKCldOworICAg
IHJldHVybiBfaW1wbC0+dG90YWxIZWlnaHRPZkJhbm5lcnMoKTsKIH0KIAotLSAoTlNVUkwgKilf
bWFpbkZyYW1lVVJMCi17Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgp
KQotICAgICAgICByZXR1cm4gZnJhbWUtPnVybCgpOwotICAgIHJldHVybiBuaWw7Ci19CisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQogCi0tICh2b2lkKV9sb2FkQWx0ZXJuYXRlSFRNTFN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIGZvclVucmVhY2hhYmxl
VVJMOihOU1VSTCAqKXVucmVhY2hhYmxlVVJMCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwor
Rk9SX0VBQ0hfUFJJVkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0FDVElPTl9UT19X
S0NPTlRFTlRWSUVXKQorCistICh2b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjoo
aWQpc2VuZGVyCiB7Ci0gICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBkYXRhVXNpbmdFbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgX3BhZ2UtPmxvYWRBbHRlcm5hdGVIVE1MKHsg
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCAi
VVRGLTgiX3MsIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJMKTsKKyAgICBpZiAoc2VsZi51c2VzU3Rh
bmRhcmRDb250ZW50VmlldykKKyAgICAgICAgW19jb250ZW50VmlldyBfc2V0Rm9udEZvcldlYlZp
ZXc6Zm9udCBzZW5kZXI6c2VuZGVyXTsKIH0KIAotLSAoV0tOYXZpZ2F0aW9uICopX2xvYWREYXRh
OihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIGNoYXJhY3RlckVu
Y29kaW5nTmFtZTooTlNTdHJpbmcgKiljaGFyYWN0ZXJFbmNvZGluZ05hbWUgYmFzZVVSTDooTlNV
UkwgKiliYXNlVVJMIHVzZXJEYXRhOihpZCl1c2VyRGF0YQorLSAodm9pZClfc2V0Rm9udFNpemU6
KENHRmxvYXQpZm9udFNpemUgc2VuZGVyOihpZClzZW5kZXIKIHsKLSAgICByZXR1cm4gd3JhcHBl
cihfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRl
cyksIGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBjaGFyYWN0ZXJFbmNvZGluZ05hbWUsIGJhc2VV
UkwuYWJzb2x1dGVTdHJpbmcsIFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRh
dGEpLnB0cigpKSk7CisgICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCisgICAg
ICAgIFtfY29udGVudFZpZXcgX3NldEZvbnRTaXplRm9yV2ViVmlldzpmb250U2l6ZSBzZW5kZXI6
c2VuZGVyXTsKIH0KIAotLSAoV0tOYXZpZ2F0aW9uICopX2xvYWRSZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKilyZXF1ZXN0IHNob3VsZE9wZW5FeHRlcm5hbFVSTHM6KEJPT0wpc2hvdWxkT3BlbkV4dGVy
bmFsVVJMcworLSAodm9pZClfc2V0VGV4dENvbG9yOihVSUNvbG9yICopY29sb3Igc2VuZGVyOihp
ZClzZW5kZXIKIHsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9hZFJlcXVlc3QocmVxdWVz
dCwgc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA/IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3k6OlNob3VsZEFsbG93IDogV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeTo6U2hvdWxkTm90QWxsb3cpKTsKKyAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50
VmlldykKKyAgICAgICAgW19jb250ZW50VmlldyBfc2V0VGV4dENvbG9yRm9yV2ViVmlldzpjb2xv
ciBzZW5kZXI6c2VuZGVyXTsKIH0KIAotLSAoTlNBcnJheSAqKV9jZXJ0aWZpY2F0ZUNoYWluCist
IChVSVZpZXcgKilpbnB1dEFjY2Vzc29yeVZpZXcKIHsKLSAgICBpZiAoV2ViS2l0OjpXZWJGcmFt
ZVByb3h5KiBtYWluRnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBt
YWluRnJhbWUtPmNlcnRpZmljYXRlSW5mbygpID8gKF9fYnJpZGdlIE5TQXJyYXkgKiltYWluRnJh
bWUtPmNlcnRpZmljYXRlSW5mbygpLT5jZXJ0aWZpY2F0ZUluZm8oKS5jZXJ0aWZpY2F0ZUNoYWlu
KCkgOiBuaWw7Ci0KLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlu
cHV0QWNjZXNzb3J5Vmlld0ZvcldlYlZpZXddOwogfQogCi0tIChOU1VSTCAqKV9jb21taXR0ZWRV
UkwKKy0gKFVJVmlldyAqKWlucHV0VmlldwogewotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCldOworICAgIHJldHVybiBb
X2NvbnRlbnRWaWV3IGlucHV0Vmlld0ZvcldlYlZpZXddOwogfQogCi0tIChOU1N0cmluZyAqKV9N
SU1FVHlwZQorLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcKIHsKLSAgICBp
ZiAoX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gX3BhZ2UtPm1haW5GcmFtZSgp
LT5taW1lVHlwZSgpOwotCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChbX2Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pCisgICAgICAgIHJldHVybiBb
X2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQbGFjZWhvbGRlcl07CisjZW5kaWYg
Ly8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKE5TU3Ry
aW5nICopX3VzZXJBZ2VudAorLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0
aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZh
dGVkRWxlbWVudEluZm8gKikpYmxvY2sKIHsKLSAgICByZXR1cm4gX3BhZ2UtPnVzZXJBZ2VudCgp
OwotfQorICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRp
b25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOworICAgIGluZm9S
ZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7CiAKLS0gKE5TU3RyaW5nICopX2FwcGxpY2F0
aW9uTmFtZUZvclVzZXJBZ2VudAotewotICAgIHJldHVybiBfcGFnZS0+YXBwbGljYXRpb25OYW1l
Rm9yVXNlckFnZW50KCk7CisgICAgW19jb250ZW50VmlldyBkb0FmdGVyUG9zaXRpb25JbmZvcm1h
dGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihibG9jayldIChXZWJLaXQ6
OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKSB7CisgICAgICAg
IGNhcHR1cmVkQmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFjdGl2YXRlZEVsZW1lbnRJ
bmZvV2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmluZm9ybWF0aW9uIHVzZXJJ
bmZvOm5pbF0pOworICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07CiB9CiAKLS0gKHZvaWQp
X3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDooTlNTdHJpbmcgKilhcHBsaWNhdGlvbk5h
bWVGb3JVc2VyQWdlbnQKKy0gKENHUmVjdClfY29udGVudFZpc2libGVSZWN0CiB7Ci0gICAgX3Bh
Z2UtPnNldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudChhcHBsaWNhdGlvbk5hbWVGb3JVc2Vy
QWdlbnQpOwotICAgIF9wYWdlLT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50
KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRS
ZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107CiB9CiAK
LS0gKE5TU3RyaW5nICopX2N1c3RvbVVzZXJBZ2VudAorLSAoQ0dQb2ludClfY29udmVydFBvaW50
RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50CiB7Ci0gICAgcmV0dXJuIHNlbGYuY3Vz
dG9tVXNlckFnZW50OworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZp
ZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKIH0KIAotLSAodm9pZClfc2V0Q3VzdG9tVXNl
ckFnZW50OihOU1N0cmluZyAqKWN1c3RvbVVzZXJBZ2VudAorLSAoQ0dQb2ludClfY29udmVydFBv
aW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50CiB7Ci0gICAgc2VsZi5jdXN0b21V
c2VyQWdlbnQgPSBjdXN0b21Vc2VyQWdlbnQ7CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2lu
dDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKIH0KIAotLSAodm9pZClf
c2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDooQk9PTCl1c2VyQ29udGVudEV4dGVuc2lv
bnNFbmFibGVkCistICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbgogewotICAg
IC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4KKyAg
ICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KIH0KIAotLSAoQk9PTClfdXNlckNvbnRl
bnRFeHRlbnNpb25zRW5hYmxlZAorLSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9u
CiB7Ci0gICAgLy8gVGhpcyBpcyBrZXB0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIGlP
UyA5LgotICAgIHJldHVybiB0cnVlOworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRl
LgogfQogCi0tIChwaWRfdClfd2ViUHJvY2Vzc0lkZW50aWZpZXIKKy0gKENHUmVjdClfdWlUZXh0
Q2FyZXRSZWN0CiB7Ci0gICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCi0gICAgICAgIHJldHVybiAw
OworICAgIC8vIEZvcmNlIHRoZSBzZWxlY3Rpb24gdmlldyB0byB1cGRhdGUgaWYgbmVlZGVkLgor
ICAgIFtfY29udGVudFZpZXcgX3VwZGF0ZUNoYW5nZWRTZWxlY3Rpb25dOwogCi0gICAgcmV0dXJu
IF9wYWdlLT5wcm9jZXNzSWRlbnRpZmllcigpOworICAgIHJldHVybiBbW19jb250ZW50VmlldyB2
YWx1ZUZvcktleVBhdGg6QCJpbnRlcmFjdGlvbkFzc2lzdGFudC5zZWxlY3Rpb25WaWV3LnNlbGVj
dGlvbi5jYXJldFJlY3QiXSBDR1JlY3RWYWx1ZV07CiB9CiAKLS0gKHBpZF90KV9wcm92aXNpb25h
bFdlYlByb2Nlc3NJZGVudGlmaWVyCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0
c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAq
KXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVj
dHMpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgYXV0byogcHJvdmlzaW9uYWxQYWdlID0gX3BhZ2UtPnByb3Zp
c2lvbmFsUGFnZVByb3h5KCk7Ci0gICAgaWYgKCFwcm92aXNpb25hbFBhZ2UpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHByb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NJ
ZGVudGlmaWVyKCk7CisgICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVj
dHNBdFNlbGVjdGlvbk9mZnNldDpvZmZzZXQgd2l0aFRleHQ6dGV4dCBjb21wbGV0aW9uSGFuZGxl
cjpbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFu
ZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mIHNlbGVjdGlvblJl
Y3RzKSB7CisgICAgICAgIGlmICghY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYXV0byByZWN0VmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNlbGVjdGlvblJlY3RzLnNpemUoKV0pOwor
ICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdGlvblJlY3QgOiBzZWxlY3Rpb25SZWN0cykKKyAgICAg
ICAgICAgIFtyZWN0VmFsdWVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6c2Vs
ZWN0aW9uUmVjdC5yZWN0KCldXTsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihy
ZWN0VmFsdWVzLmdldCgpKTsKKyAgICB9XTsKIH0KIAotLSAodm9pZClfa2lsbFdlYkNvbnRlbnRQ
cm9jZXNzCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24KIHsKLSAgICBpZiAo
IVtzZWxmIF9pc1ZhbGlkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPnByb2Nlc3Mo
KS50ZXJtaW5hdGUoKTsKKyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxl
Y3Rpb25dOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKQotLSAoTlNWaWV3ICopX3NhZmVCcm93c2lu
Z1dhcm5pbmcKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbgogewotICAgIHJl
dHVybiBfaW1wbC0+c2FmZUJyb3dzaW5nV2FybmluZygpOworICAgIFtfY29udGVudFZpZXcgX2Fj
Y2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07CiB9Ci0jZWxzZQotLSAoVUlWaWV3ICopX3NhZmVC
cm93c2luZ1dhcm5pbmcKKworLSAoQk9PTClfY29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyCiB7
Ci0gICAgcmV0dXJuIF9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOworICAgIHJldHVybiBzZWxm
Ll9jdXJyZW50Q29udGVudFZpZXcuaXNGaXJzdFJlc3BvbmRlcjsKIH0KLSNlbmRpZgogCi0tIChX
S05hdmlnYXRpb24gKilfcmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2VycworI2VuZGlmIC8vIFBM
QVRGT1JNKElPU19GQU1JTFkpCisKKy0gKF9XS0luc3BlY3RvciAqKV9pbnNwZWN0b3IKIHsKLSAg
ICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RGlz
YWJsZUNvbnRlbnRCbG9ja2VycykpOworICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+
aW5zcGVjdG9yKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKCppbnNwZWN0b3IpOworICAgIHJl
dHVybiBuaWw7CiB9CiAKLS0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRFeHBpcmVkT25seQorLSAo
X1dLRnJhbWVIYW5kbGUgKilfbWFpbkZyYW1lCiB7Ci0gICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2Ut
PnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KSk7CisgICAgaWYgKGF1
dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcihB
UEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUoZnJhbWUtPmZyYW1lSUQoKSkpOworICAgIHJldHVybiBu
aWw7CiB9CiAKLS0gKHZvaWQpX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGUKKy0g
KEJPT0wpX2lzRWRpdGFibGUKIHsKLSAgICBSZWY8V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk+IHBy
b3RlY3RlZFByb2Nlc3NQcm94eShfcGFnZS0+cHJvY2VzcygpKTsKLSAgICBwcm90ZWN0ZWRQcm9j
ZXNzUHJveHktPnJlcXVlc3RUZXJtaW5hdGlvbihXZWJLaXQ6OlByb2Nlc3NUZXJtaW5hdGlvblJl
YXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOwotCi0gICAgaWYgKGF1dG8qIHByb3Zpc2lvbmFsUGFn
ZVByb3h5ID0gX3BhZ2UtPnByb3Zpc2lvbmFsUGFnZVByb3h5KCkpIHsKLSAgICAgICAgUmVmPFdl
YktpdDo6V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRQcm9jZXNzUHJveHkocHJvdmlzaW9uYWxQ
YWdlUHJveHktPnByb2Nlc3MoKSk7Ci0gICAgICAgIHByb3RlY3RlZFByb2Nlc3NQcm94eS0+cmVx
dWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uOjpSZXF1ZXN0
ZWRCeUNsaWVudCk7Ci0gICAgfQorICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+aXNFZGl0YWJs
ZSgpOwogfQogCi0tIChDR1JlY3QpX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3Q29vcmRpbmF0ZXM6
KENHUmVjdClyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzCistICh2b2lkKV9zZXRFZGl0YWJsZToo
Qk9PTCllZGl0YWJsZQogewotICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgZWFzaWVyIHRvIHRh
bGsgYWJvdXQgV0tXZWJWaWV3IGNvb3JkaW5hdGVzIGluIGEgY29uc2lzdGVudCBhbmQgY3Jvc3Mt
cGxhdGZvcm0gd2F5LgotICAgIC8vIEN1cnJlbnRseSwgbmVpdGhlciAicm9vdCB2aWV3IiBub3Ig
IndpbmRvdyIgbWVhbiAiV0tXZWJWaWV3IGNvb3JkaW5hdGVzIiBvbiBib3RoIHBsYXRmb3Jtcy4K
LSAgICAvLyBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzNjQ5IGFuZCByZWxhdGVkIGJ1Z3Mu
CisgICAgYm9vbCB3YXNFZGl0YWJsZSA9IF9wYWdlLT5pc0VkaXRhYmxlKCk7CisgICAgX3BhZ2Ut
PnNldEVkaXRhYmxlKGVkaXRhYmxlKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKGVkaXRh
YmxlKQorICAgICAgICBfaW1wbC0+ZGlkQmVjb21lRWRpdGFibGUoKTsKKyNlbmRpZgorCisgICAg
aWYgKHdhc0VkaXRhYmxlID09IGVkaXRhYmxlKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0jZWxzZQotICAg
IHJldHVybiByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzOworICAgIFtfY29udGVudFZpZXcgX2Rp
ZENoYW5nZVdlYlZpZXdFZGl0YWJpbGl0eV07CiAjZW5kaWYKIH0KIAotLSAoQ0dSZWN0KV9jb252
ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJbldlYlZpZXdDb29yZGlu
YXRlcworLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJn
dW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29t
cGxldGlvbgogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFtzZWxmIGNv
bnZlcnRSZWN0OnJlY3RJbldlYlZpZXdDb29yZGluYXRlcyB0b1ZpZXc6X2NvbnRlbnRWaWV3Lmdl
dCgpXTsKLSNlbHNlCi0gICAgcmV0dXJuIHJlY3RJbldlYlZpZXdDb29yZGluYXRlczsKLSNlbmRp
ZgorICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0
dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpD
YWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIGlmIChjYXB0dXJlZENvbXBsZXRp
b25CbG9jaykKKyAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKGVycm9yID09IFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgfSk7CiB9CiAKLS0gKHZvaWQp
X3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0KXJlY3RJbldlYlZpZXdDb29y
ZGluYXRlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PF9XS1RleHRJbnB1dENv
bnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKIHsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKEBbXSk7CisgICAgcmV0dXJuIF90ZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Cit9CisKKy0gKHZvaWQpX3NldFRleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZTooaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUK
K3sKKyAgICBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKHZv
aWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlw
dWxhdGlvbkNvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXiko
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIHVzaW5nIEV4Y2x1c2lvblJ1bGUgPSBXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTsKKworICAgIGlmICgh
X3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSB8fCAhX3BhZ2UpIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSNlbmRpZgogCi0gICAgQ0dSZWN0
IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBbc2VsZiBfY29udmVydFJlY3RUb1Jvb3RWaWV3
Q29vcmRpbmF0ZXM6cmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzXTsKLSAgICBhdXRvIHdlYWtTZWxm
ID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKTsKLSAgICBfcGFnZS0+dGV4dElucHV0Q29u
dGV4dHNJblJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcywgW3dlYWtTZWxmLCBjYXB0dXJl
ZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4mIGNvbnRleHRzKSB7Ci0gICAgICAg
IFJldGFpblB0cjxOU011dGFibGVBcnJheT4gZWxlbWVudHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29udGV4dHMuc2l6ZSgpXSk7CisgICAgVmVj
dG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBl
eGNsdXNpb25SdWxlczsKKyAgICBpZiAoY29uZmlndXJhdGlvbikgeworICAgICAgICBmb3IgKF9X
S1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlvbi5l
eGNsdXNpb25SdWxlcykgeworICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhjbHVz
aW9uID8gRXhjbHVzaW9uUnVsZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5cGU6
OkluY2x1ZGU7CisgICAgICAgICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCisgICAgICAg
ICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpBdHRy
aWJ1dGVSdWxlIHsgd2tSdWxlLmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1ZSB9
IH0pOworICAgICAgICAgICAgZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKKyAgICAgICAgICAg
ICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNzUnVs
ZSB7IHdrUnVsZS5jbGFzc05hbWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRS
dWxlIHsgd2tSdWxlLmVsZW1lbnROYW1lIH0gfSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAg
ICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgY29udGV4dCA6IGNvbnRleHRzKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpFbGVtZW50
Q29udGV4dCBjb250ZXh0V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3QgPSBjb250ZXh0OwotICAgICAg
ICAgICAgY29udGV4dFdpdGhXZWJWaWV3Qm91bmRpbmdSZWN0LmJvdW5kaW5nUmVjdCA9IFtzdHJv
bmdTZWxmIF9jb252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOmNvbnRleHQuYm91bmRp
bmdSZWN0XTsKLSAgICAgICAgICAgIFtlbGVtZW50cyBhZGRPYmplY3Q6YWRvcHROUyhbW19XS1Rl
eHRJbnB1dENvbnRleHQgYWxsb2NdIF9pbml0V2l0aFRleHRJbnB1dENvbnRleHQ6Y29udGV4dFdp
dGhXZWJWaWV3Qm91bmRpbmdSZWN0XSkuZ2V0KCldOworICAgIF9wYWdlLT5zdGFydFRleHRNYW5p
cHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZp
ZXc+KHNlbGYpXSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVu
dGlmaWVyIGl0ZW1JRCwKKyAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBp
ZiAoIXdlYWtTZWxmKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWlu
ZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0YWlu
ZWRTZWxmIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOworICAgICAgICBpZiAoIWRlbGVnYXRl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2Vu
cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKKyAg
ICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAgYXV0byB3a1Rv
a2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwor
ICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5p
ZGVudGlmaWVyLnRvVUludDY0KCkpXTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6
dG9rZW4uY29udGVudF07CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5p
c0V4Y2x1ZGVkXTsKKyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQo
KV07CiAgICAgICAgIH0KIAotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKGVsZW1l
bnRzLmdldCgpKTsKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVs
YXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbUlE
LnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZp
ZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTppdGVtLmdl
dCgpXTsKKyAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKCk7
CiAgICAgfSk7CiB9CiAKLS0gKHZvaWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4dElu
cHV0Q29udGV4dCAqKXRleHRJbnB1dENvbnRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXiko
Qk9PTCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9P
TCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoTk8pOworICAgIHVzaW5nIE1hbmlwdWxhdGlvblJlc3VsdCA9IFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1bHQ7CisKKyAg
ICBpZiAoIV9wYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCiAKLSAgICBhdXRv
IHdlYkNvbnRleHQgPSBbdGV4dElucHV0Q29udGV4dCBfdGV4dElucHV0Q29udGV4dF07Ci0gICAg
aWYgKHdlYkNvbnRleHQud2ViUGFnZUlkZW50aWZpZXIgIT0gX3BhZ2UtPndlYlBhZ2VJRCgpKQot
ICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9y
bWF0OkAiVGhlIHByb3ZpZGVkIF9XS1RleHRJbnB1dENvbnRleHQgd2FzIG5vdCBjcmVhdGVkIGJ5
IHRoaXMgV0tXZWJWaWV3LiJdOworICAgIGF1dG8gaXRlbUlEID0gbWFrZU9iamVjdElkZW50aWZp
ZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlw
ZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikudG9VSW50NjQoKSk7CiAKLSAgICBbc2VsZiBiZWNv
bWVGaXJzdFJlc3BvbmRlcl07CisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8g
dG9rZW5JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVy
KS50b1VJbnQ2NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNv
bnRlbnQgfSk7CisgICAgfQogCi0gICAgX3BhZ2UtPmZvY3VzVGV4dElucHV0Q29udGV4dCh3ZWJD
b250ZXh0LCBbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildKGJvb2wgc3VjY2VzcykgewotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25I
YW5kbGVyKHN1Y2Nlc3MpOworICAgIF9wYWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRl
bUlELCB0b2tlbnMsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildIChNYW5pcHVsYXRpb25SZXN1bHQgcmVzdWx0KSB7CisgICAgICAgIGNh
cHR1cmVkQ29tcGxldGlvbkJsb2NrKHJlc3VsdCA9PSBNYW5pcHVsYXRpb25SZXN1bHQ6OlN1Y2Nl
c3MpOwogICAgIH0pOwogfQotCi0tICh2b2lkKV90YWtlUERGU25hcHNob3RXaXRoQ29uZmlndXJh
dGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyCistICh2b2lkKV90YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRlcgog
ewotICAgIFdLUERGQ29uZmlndXJhdGlvbiAqcGRmQ29uZmlndXJhdGlvbiA9IG5pbDsKLSAgICBp
ZiAoc25hcHNob3RDb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIHBkZkNvbmZpZ3VyYXRpb24gPSBb
W1tXS1BERkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAg
cGRmQ29uZmlndXJhdGlvbi5yZWN0ID0gc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3Q7Ci0gICAg
fQotCi0gICAgW3NlbGYgY3JlYXRlUERGV2l0aENvbmZpZ3VyYXRpb246cGRmQ29uZmlndXJhdGlv
biBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFtzZWxmIHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjpzZW5kZXJdOworI2Vsc2UK
KyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKCJUYWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rp
b24iX3MpOworI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0tICh2b2lkKV9zZXRTaG91
bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlczooQk9PTClzaG91bGRTdXBwcmVzcworKyAo
TlNTdHJpbmcgKilfc3RyaW5nRm9yRmluZAogewotICAgIF9pbXBsLT5zZXRTaG91bGRTdXBwcmVz
c0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcyhzaG91bGRTdXBwcmVzcyk7CisgICAgcmV0dXJuIFdlYktp
dDo6c3RyaW5nRm9yRmluZCgpOwogfQotI2VuZGlmCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotLSAodm9pZCAoXikodm9pZCkpX3JldGFpbkFjdGl2ZUZvY3VzZWRTdGF0ZQorKyAodm9pZClf
c2V0U3RyaW5nRm9yRmluZDooTlNTdHJpbmcgKilmaW5kU3RyaW5nCiB7Ci0gICAgKytfYWN0aXZl
Rm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7CisgICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5k
KGZpbmRTdHJpbmcpOworfQogCi0gICAgLy8gRklYTUU6IFVzZSBzb21ldGhpbmcgbGlrZSBDb21w
bGV0aW9uSGFuZGxlckNhbGxDaGVja2VyIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBibG9j
ayBpcyBjYWxsZWQgYmVmb3JlIGl0J3MgcmVsZWFzZWQuCi0gICAgcmV0dXJuIFtbW3NlbGZdIHsK
LSAgICAgICAgLS1fYWN0aXZlRm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7Ci0gICAgfSBjb3B5XSBh
dXRvcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVj
dGlvbk1vdmluZ0ZvcndhcmQ6KEJPT0wpc2VsZWN0aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoQk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcikpY29tcGxldGlvbkhhbmRs
ZXIKKy0gKF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICopX3JlbW90ZU9iamVjdFJlZ2lzdHJ5CiB7
Ci0gICAgdHlwZW9mKGNvbXBsZXRpb25IYW5kbGVyKSBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBu
aWw7Ci0gICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
ckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFtfY29udGVudFZp
ZXcgX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmluZ0ZvcndhcmQ6c2VsZWN0
aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxlcjpbY29tcGxldGlvbkhhbmRsZXJDb3B5XShCT09M
IGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSB7Ci0gICAgICAgIGlmICghY29tcGxldGlvbkhhbmRs
ZXJDb3B5KQotICAgICAgICAgICAgcmV0dXJuOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1
cm4gX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCk7CisjZWxzZQorICAgIGlmICghX3JlbW90
ZU9iamVjdFJlZ2lzdHJ5KSB7CisgICAgICAgIF9yZW1vdGVPYmplY3RSZWdpc3RyeSA9IGFkb3B0
TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoV2ViUGFnZVByb3h5
OipfcGFnZV0pOworICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBfcGFnZS0+aWRlbnRpZmllcigpLCBbX3JlbW90ZU9iamVjdFJlZ2lzdHJ5IHJl
bW90ZU9iamVjdFJlZ2lzdHJ5XSk7CisgICAgfQogCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
Q29weShkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcik7Ci0gICAgICAgIEJsb2NrX3JlbGVhc2UoY29t
cGxldGlvbkhhbmRsZXJDb3B5KTsKLSAgICB9XTsKKyAgICByZXR1cm4gX3JlbW90ZU9iamVjdFJl
Z2lzdHJ5LmdldCgpOworI2VuZGlmCiB9CiAKLS0gKGlkKV9zbmFwc2hvdExheWVyQ29udGVudHNG
b3JCYWNrRm9yd2FyZExpc3RJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCistIChX
S0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqKV9oYW5kbGUKIHsKLSAgICBpZiAoX3BhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCkgPT0gJml0ZW0uX2l0ZW0pCi0gICAgICAgIF9wYWdl
LT5yZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKl9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5jdXJy
ZW50SXRlbSgpKTsKLQotICAgIGlmIChhdXRvKiB2aWV3U25hcHNob3QgPSBpdGVtLl9pdGVtLnNu
YXBzaG90KCkpCi0gICAgICAgIHJldHVybiB2aWV3U25hcHNob3QtPmFzTGF5ZXJDb250ZW50cygp
OwotCi0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tbV0tCcm93c2luZ0NvbnRleHRIYW5k
bGUgYWxsb2NdIF9pbml0V2l0aFBhZ2VQcm94eToqX3BhZ2VdIGF1dG9yZWxlYXNlXTsKIH0KIAot
LSAoTlNBcnJheSAqKV9kYXRhRGV0ZWN0aW9uUmVzdWx0cworLSAoX1dLUmVuZGVyaW5nUHJvZ3Jl
c3NFdmVudHMpX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMKIHsKLSNpZiBFTkFCTEUo
REFUQV9ERVRFQ1RJT04pCi0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2RhdGFEZXRlY3Rpb25S
ZXN1bHRzXTsKLSNlbHNlCi0gICAgcmV0dXJuIG5pbDsKLSNlbmRpZgorICAgIHJldHVybiBfb2Jz
ZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czsKIH0KIAotLSAodm9pZClfYWNjZXNzaWJpbGl0
eVJldHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50CistIChpZCA8V0tIaXN0b3J5RGVsZWdhdGVQ
cml2YXRlPilfaGlzdG9yeURlbGVnYXRlCiB7Ci0gICAgW19jb250ZW50VmlldyBhY2Nlc3NpYmls
aXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdOworICAgIHJldHVybiBfbmF2aWdhdGlv
blN0YXRlLT5oaXN0b3J5RGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwogfQogCi0vLyBUaGlzIG1l
dGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLS8vIEN1cnJlbnRseSBpdCdzIG9u
bHkgaW4gVGVzdFJ1bm5lcldLV2ViVmlldy4KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlEaWRHZXRT
cGVha1NlbGVjdGlvbkNvbnRlbnQ6KE5TU3RyaW5nICopY29udGVudAorLSAodm9pZClfc2V0SGlz
dG9yeURlbGVnYXRlOihpZCA8V0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlPiloaXN0b3J5RGVsZWdh
dGUKIHsKKyAgICBfcGFnZS0+c2V0SGlzdG9yeUNsaWVudChfbmF2aWdhdGlvblN0YXRlLT5jcmVh
dGVIaXN0b3J5Q2xpZW50KCkpOworICAgIF9uYXZpZ2F0aW9uU3RhdGUtPnNldEhpc3RvcnlEZWxl
Z2F0ZShoaXN0b3J5RGVsZWdhdGUpOwogfQogCi0tIChVSVRleHRJbnB1dEFzc2lzdGFudEl0ZW0g
KilpbnB1dEFzc2lzdGFudEl0ZW0KKy0gKHZvaWQpX3VwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9s
c01hbmFnZXIKIHsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dEFzc2lzdGFudEl0ZW1G
b3JXZWJWaWV3XTsKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19D
T05UUk9MU19NQU5BR0VSKQorICAgIF9pbXBsLT51cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyKCk7CisjZW5kaWYKIH0KIAorLSAoQk9PTClfY2FuVG9nZ2xlUGljdHVyZUluUGljdHVy
ZQoreworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfaW1wbC0+Y2FuVG9nZ2xlUGlj
dHVyZUluUGljdHVyZSgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CiAjZW5kaWYKK30KIAotLSAo
TlNEYXRhICopX3Nlc3Npb25TdGF0ZURhdGEKKy0gKEJPT0wpX2lzUGljdHVyZUluUGljdHVyZUFj
dGl2ZQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgdXNlIHRoZSBsZWdhY3kgc2Vz
c2lvbiBzdGF0ZSBlbmNvZGVyLgotICAgIHJldHVybiB3cmFwcGVyKFdlYktpdDo6ZW5jb2RlTGVn
YWN5U2Vzc2lvblN0YXRlKF9wYWdlLT5zZXNzaW9uU3RhdGUoKSkpOworI2lmIEhBVkUoVE9VQ0hf
QkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgcmV0dXJu
IF9pbXBsLT5pc1BpY3R1cmVJblBpY3R1cmVBY3RpdmUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5P
OworI2VuZGlmCiB9CiAKLS0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGUKKy0gKHZv
aWQpX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmUKIHsKLSAgICByZXR1cm4gW1tbX1dLU2Vzc2lvblN0
YXRlIGFsbG9jXSBfaW5pdFdpdGhTZXNzaW9uU3RhdGU6X3BhZ2UtPnNlc3Npb25TdGF0ZSgpXSBh
dXRvcmVsZWFzZV07CisjaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKKyAgICBfaW1wbC0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwor
I2VuZGlmCiB9CiAKLS0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGVXaXRoRmlsdGVy
OihCT09MICheKShXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKml0ZW0pKWZpbHRlcgorLSAodm9pZClf
Y2xvc2VBbGxNZWRpYVByZXNlbnRhdGlvbnMKIHsKLSAgICBXZWJLaXQ6OlNlc3Npb25TdGF0ZSBz
ZXNzaW9uU3RhdGUgPSBfcGFnZS0+c2Vzc2lvblN0YXRlKFtmaWx0ZXJdKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkgewotICAgICAgICBpZiAoIWZpbHRlcikKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiAoYm9vbClmaWx0ZXIod3JhcHBlcihp
dGVtKSk7Ci0gICAgfSk7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChhdXRv
IHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBfcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigp
KSB7CisgICAgICAgIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXItPmZvckVhY2hTZXNzaW9uKFtdIChh
dXRvJiBtb2RlbCwgYXV0byYgaW50ZXJmYWNlKSB7CisgICAgICAgICAgICBtb2RlbC5yZXF1ZXN0
RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7CisgICAgICAgIH0pOworICAgIH0KIAotICAgIHJldHVybiBbW1tfV0tT
ZXNzaW9uU3RhdGUgYWxsb2NdIF9pbml0V2l0aFNlc3Npb25TdGF0ZTpzZXNzaW9uU3RhdGVdIGF1
dG9yZWxlYXNlXTsKKyAgICBpZiAoYXV0byBmdWxsU2NyZWVuTWFuYWdlciA9IF9wYWdlLT5mdWxs
U2NyZWVuTWFuYWdlcigpOyBmdWxsU2NyZWVuTWFuYWdlciAmJiBmdWxsU2NyZWVuTWFuYWdlci0+
aXNGdWxsU2NyZWVuKCkpCisgICAgICAgIGZ1bGxTY3JlZW5NYW5hZ2VyLT5jbG9zZSgpOworI2Vu
ZGlmCiB9CiAKLS0gKHZvaWQpX3Jlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YTooTlNEYXRhICop
c2Vzc2lvblN0YXRlRGF0YQorLSAodm9pZClfc3RvcE1lZGlhQ2FwdHVyZQogewotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBub3QgdXNlIHRoZSBsZWdhY3kgc2Vzc2lvbiBzdGF0ZSBkZWNvZGVy
LgotICAgIFdlYktpdDo6U2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZTsKLSAgICBpZiAoIVdlYktp
dDo6ZGVjb2RlTGVnYWN5U2Vzc2lvblN0YXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihz
ZXNzaW9uU3RhdGVEYXRhLmJ5dGVzKSwgc2Vzc2lvblN0YXRlRGF0YS5sZW5ndGgsIHNlc3Npb25T
dGF0ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5yZXN0b3JlRnJvbVNlc3Npb25T
dGF0ZShXVEZNb3ZlKHNlc3Npb25TdGF0ZSksIHRydWUpOworICAgIF9wYWdlLT5zdG9wTWVkaWFD
YXB0dXJlKCk7CiB9CiAKLS0gKFdLTmF2aWdhdGlvbiAqKV9yZXN0b3JlU2Vzc2lvblN0YXRlOihf
V0tTZXNzaW9uU3RhdGUgKilzZXNzaW9uU3RhdGUgYW5kTmF2aWdhdGU6KEJPT0wpbmF2aWdhdGUK
Ky0gKHZvaWQpX3N0b3BBbGxNZWRpYVBsYXliYWNrCiB7Ci0gICAgcmV0dXJuIHdyYXBwZXIoX3Bh
Z2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSA/IHNlc3Npb25TdGF0ZS0+
X3Nlc3Npb25TdGF0ZSA6IFdlYktpdDo6U2Vzc2lvblN0YXRlIHsgfSwgbmF2aWdhdGUpKTsKKyAg
ICBfcGFnZS0+c3RvcEFsbE1lZGlhUGxheWJhY2soKTsKIH0KIAotLSAodm9pZClfY2xvc2UKKy0g
KHZvaWQpX3N1c3BlbmRBbGxNZWRpYVBsYXliYWNrCiB7Ci0gICAgX3BhZ2UtPmNsb3NlKCk7Cisg
ICAgX3BhZ2UtPnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCk7CiB9CiAKLS0gKF9XS0F0dGFjaG1l
bnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSBj
b250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBkYXRhOihOU0RhdGEgKilkYXRhIG9w
dGlvbnM6KF9XS0F0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbjoo
dm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9yZXN1bWVB
bGxNZWRpYVBsYXliYWNrCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOwotICAgIGF1dG8g
ZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJG
aWxlV2l0aENvbnRlbnRzOmRhdGFdKTsKLSAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAgIFtmaWxl
V3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07Ci0gICAgcmV0dXJuIFtzZWxm
IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRl
bnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRpb246Y29tcGxldGlvbkhhbmRsZXJdOworICAgIF9w
YWdlLT5yZXN1bWVBbGxNZWRpYVBsYXliYWNrKCk7CiB9CiAKLS0gKF9XS0F0dGFjaG1lbnQgKilf
aW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooTlNGaWxlV3JhcHBlciAqKWZpbGVXcmFw
cGVyIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBlIG9wdGlvbnM6KF9XS0F0dGFj
aG1lbnREaXNwbGF5T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1
Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCistIChOU1VSTCAqKV91bnJlYWNoYWJsZVVSTAogewot
ICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICByZXR1cm4gW3NlbGYgX2luc2VydEF0dGFj
aG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIgY29udGVudFR5cGU6Y29udGVudFR5cGUg
Y29tcGxldGlvbjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VS
TFdpdGhXVEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51bnJlYWNoYWJsZVVSTCgpXTsK
IH0KIAotLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVy
OihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5cGU6KE5TU3RyaW5nICopY29u
dGVudFR5cGUgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5k
bGVyCistIChOU1VSTCAqKV9tYWluRnJhbWVVUkwKIHsKLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQotICAgIGF1dG8gaWRlbnRpZmllciA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KTsKLSAgICBhdXRvIGF0dGFjaG1lbnQgPSBBUEk6OkF0dGFjaG1lbnQ6OmNyZWF0ZShpZGVudGlm
aWVyLCAqX3BhZ2UpOwotICAgIGF0dGFjaG1lbnQtPnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29u
dGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRlbnRUeXBlKTsKLSAgICBfcGFnZS0+aW5zZXJ0QXR0
YWNobWVudChhdHRhY2htZW50LmNvcHlSZWYoKSwgW2NhcHR1cmVkSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJy
b3IpIHsKLSAgICAgICAgaWYgKGNhcHR1cmVkSGFuZGxlcikKLSAgICAgICAgICAgIGNhcHR1cmVk
SGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwotICAg
IH0pOwotCi0gICAgcmV0dXJuIHdyYXBwZXIoYXR0YWNobWVudCk7Ci0jZWxzZQorICAgIGlmIChh
dXRvKiBmcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT51
cmwoKTsKICAgICByZXR1cm4gbmlsOwotI2VuZGlmCiB9CiAKLS0gKF9XS0F0dGFjaG1lbnQgKilf
YXR0YWNobWVudEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgorLSAodm9pZClf
bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTCBmb3JVbnJlYWNoYWJsZVVSTDooTlNVUkwgKil1bnJlYWNoYWJsZVVSTAogewot
I2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAgaWYgKGF1dG8gYXR0YWNobWVudCA9
IF9wYWdlLT5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0
dXJuIHdyYXBwZXIoYXR0YWNobWVudCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbmlsOworICAgIE5T
RGF0YSAqZGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddOworICAgIF9wYWdlLT5sb2FkQWx0ZXJuYXRlSFRNTCh7IHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwgIlVURi04Il9zLCBiYXNlVVJMLCB1
bnJlYWNoYWJsZVVSTCk7CiB9CiAKLS0gKHZvaWQpX3NpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25D
aGFuZ2VXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YSBnYW1tYTooZG91
YmxlKWdhbW1hCistIChXS05hdmlnYXRpb24gKilfbG9hZERhdGE6KE5TRGF0YSAqKWRhdGEgTUlN
RVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOihOU1N0cmlu
ZyAqKWNoYXJhY3RlckVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgdXNlckRh
dGE6KGlkKXVzZXJEYXRhCiB7Ci0gICAgX3BhZ2UtPnNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25D
aGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1hKTsKKyAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9h
ZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVu
Z3RoIH0sIE1JTUVUeXBlLCBjaGFyYWN0ZXJFbmNvZGluZ05hbWUsIGJhc2VVUkwuYWJzb2x1dGVT
dHJpbmcsIFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpLnB0cigpKSk7
CiB9CiAKLSsgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKKy0gKFdLTmF2aWdhdGlvbiAqKV9s
b2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxz
OihCT09MKXNob3VsZE9wZW5FeHRlcm5hbFVSTHMKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9hZFJlcXVlc3QocmVxdWVzdCwgc2hvdWxkT3BlbkV4dGVy
bmFsVVJMcyA/IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFs
bG93IDogV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxs
b3cpKTsKIH0KIAotLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5T
U3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0
cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkp
Y29tcGxldGlvbkhhbmRsZXIKKy0gKE5TQXJyYXkgKilfY2VydGlmaWNhdGVDaGFpbgogewotICAg
IC8vIEZJWE1FOiBBZG9wdCBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMIGFuZCByZW1v
dmUgdGhpcyBmdW5jdGlvbi4KLSAgICBbc2VsZiBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRo
VVJMOm5pbCB0aXRsZTp0aXRsZSB3YXJuaW5nOndhcm5pbmcgZGV0YWlsczpkZXRhaWxzIGNvbXBs
ZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBpZiAoV2ViS2l0OjpXZWJGcmFt
ZVByb3h5KiBtYWluRnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBt
YWluRnJhbWUtPmNlcnRpZmljYXRlSW5mbygpID8gKF9fYnJpZGdlIE5TQXJyYXkgKiltYWluRnJh
bWUtPmNlcnRpZmljYXRlSW5mbygpLT5jZXJ0aWZpY2F0ZUluZm8oKS5jZXJ0aWZpY2F0ZUNoYWlu
KCkgOiBuaWw7CisKKyAgICByZXR1cm4gbmlsOwogfQogCi0tICh2b2lkKV9zaG93U2FmZUJyb3dz
aW5nV2FybmluZ1dpdGhVUkw6KE5TVVJMICopdXJsIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdh
cm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilk
ZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVy
CistIChOU1VSTCAqKV9jb21taXR0ZWRVUkwKIHsKLSAgICBhdXRvIHNhZmVCcm93c2luZ1dhcm5p
bmcgPSBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNyZWF0ZSh1cmwsIHRpdGxlLCB3YXJu
aW5nLCBkZXRhaWxzKTsKLSAgICBhdXRvIHdyYXBwZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZCwgVVJMPiYmIHZhcmlhbnQpIHsKLSAgICAgICAgc3dpdGNoT24odmFyaWFudCwg
WyZdIChXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCBjb250aW51ZVVuc2FmZUxvYWQpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoY29udGludWVVbnNhZmVMb2FkKSB7Ci0gICAgICAgICAgICBjYXNl
IFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKFlFUyk7Ci0gICAgICAgICAgICBjYXNlIFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkOjpObzoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoTk8pOwotICAgICAgICAgICAgfQotICAgICAgICB9LCBbJl0gKFVSTCkgewotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihO
Tyk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIF9pbXBsLT5z
aG93U2FmZUJyb3dzaW5nV2FybmluZyhzYWZlQnJvd3NpbmdXYXJuaW5nLCBXVEZNb3ZlKHdyYXBw
ZXIpKTsKLSNlbHNlCi0gICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOnNhZmVCcm93
c2luZ1dhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZSh3cmFwcGVyKV07Ci0jZW5kaWYK
KyAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpfcGFnZS0+cGFnZUxvYWRT
dGF0ZSgpLnVybCgpXTsKIH0KIAotKyAoTlNVUkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbAor
LSAoTlNTdHJpbmcgKilfTUlNRVR5cGUKIHsKLSAgICByZXR1cm4gV2ViS2l0OjpTYWZlQnJvd3Np
bmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCk7CisgICAgaWYgKF9wYWdlLT5tYWlu
RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIF9wYWdlLT5tYWluRnJhbWUoKS0+bWltZVR5cGUoKTsK
KworICAgIHJldHVybiBuaWw7CiB9CiAKLSsgKE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNl
bnRpbmVsCistIChOU1N0cmluZyAqKV91c2VyQWdlbnQKIHsKLSAgICByZXR1cm4gV2ViS2l0OjpT
YWZlQnJvd3NpbmdXYXJuaW5nOjp2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpOworICAgIHJl
dHVybiBfcGFnZS0+dXNlckFnZW50KCk7CiB9CiAKLS0gKHZvaWQpX2lzSklURW5hYmxlZDoodm9p
ZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgorLSAoTlNTdHJpbmcgKilfYXBwbGljYXRpb25O
YW1lRm9yVXNlckFnZW50CiB7Ci0gICAgX3BhZ2UtPmlzSklURW5hYmxlZChbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCBlbmFibGVkKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVuYWJsZWQpOwotICAgIH0pOworICAgIHJldHVy
biBfcGFnZS0+YXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KCk7CiB9CiAKLS0gKHZvaWQpX2V2
YWx1YXRlSmF2YVNjcmlwdFdpdGhvdXRVc2VyR2VzdHVyZTooTlNTdHJpbmcgKilqYXZhU2NyaXB0
U3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwgTlNFcnJvciAqKSljb21wbGV0
aW9uSGFuZGxlcgorLSAodm9pZClfc2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OihOU1N0
cmluZyAqKWFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudAogewotICAgIFtzZWxmIF9ldmFsdWF0
ZUphdmFTY3JpcHQ6amF2YVNjcmlwdFN0cmluZyBmb3JjZVVzZXJHZXN0dXJlOk5PIGNvbXBsZXRp
b25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBfcGFnZS0+c2V0QXBwbGljYXRpb25O
YW1lRm9yVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CisgICAgX3BhZ2Ut
PnNldEFwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9y
VXNlckFnZW50KTsKIH0KIAotLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOihfV0tXZWJz
aXRlUG9saWNpZXMgKil3ZWJzaXRlUG9saWNpZXMKKy0gKE5TU3RyaW5nICopX2N1c3RvbVVzZXJB
Z2VudAogewotICAgIGF1dG8gZGF0YSA9IHdlYnNpdGVQb2xpY2llcy53ZWJwYWdlUHJlZmVyZW5j
ZXMtPl93ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKLSAgICBpZiAoZGF0YS53ZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycykKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3Vt
ZW50RXhjZXB0aW9uIGZvcm1hdDpAIlVwZGF0aW5nIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBvbmx5
IHN1cHBvcnRlZCBkdXJpbmcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbi4iXTsKLSAg
ICBfcGFnZS0+dXBkYXRlV2Vic2l0ZVBvbGljaWVzKFdURk1vdmUoZGF0YSkpOworICAgIHJldHVy
biBzZWxmLmN1c3RvbVVzZXJBZ2VudDsKIH0KIAotLSAoQk9PTClfYWxsb3dzUmVtb3RlSW5zcGVj
dGlvbgorLSAodm9pZClfc2V0Q3VzdG9tVXNlckFnZW50OihOU1N0cmluZyAqKWN1c3RvbVVzZXJB
Z2VudAogewotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIHJldHVybiBfcGFnZS0+
YWxsb3dzUmVtb3RlSW5zcGVjdGlvbigpOwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYK
KyAgICBzZWxmLmN1c3RvbVVzZXJBZ2VudCA9IGN1c3RvbVVzZXJBZ2VudDsKIH0KIAotLSAodm9p
ZClfc2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlvbjooQk9PTClhbGxvdworLSAodm9pZClfc2V0VXNl
ckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDooQk9PTCl1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFi
bGVkCiB7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgX3BhZ2UtPnNldEFsbG93
c1JlbW90ZUluc3BlY3Rpb24oYWxsb3cpOwotI2VuZGlmCisgICAgLy8gVGhpcyBpcyBrZXB0IGZv
ciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIGlPUyA5LgogfQogCi0tIChOU1N0cmluZyAqKV9y
ZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlCistIChCT09MKV91c2VyQ29udGVudEV4dGVuc2lv
bnNFbmFibGVkCiB7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgcmV0dXJuIF9w
YWdlLT5yZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKCk7Ci0jZWxzZQotICAgIHJldHVybiBu
aWw7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5
IHdpdGggaU9TIDkuCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gKHZvaWQpX3NldFJlbW90ZUlu
c3BlY3Rpb25OYW1lT3ZlcnJpZGU6KE5TU3RyaW5nICopbmFtZQorLSAocGlkX3QpX3dlYlByb2Nl
c3NJZGVudGlmaWVyCiB7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgX3BhZ2Ut
PnNldFJlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGUobmFtZSk7Ci0jZW5kaWYKKyAgICBpZiAo
IVtzZWxmIF9pc1ZhbGlkXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gX3BhZ2Ut
PnByb2Nlc3NJZGVudGlmaWVyKCk7CiB9CiAKLS0gKEJPT0wpX2FkZHNWaXNpdGVkTGlua3MKKy0g
KHBpZF90KV9wcm92aXNpb25hbFdlYlByb2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgcmV0dXJuIF9w
YWdlLT5hZGRzVmlzaXRlZExpbmtzKCk7Ci19CisgICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCisg
ICAgICAgIHJldHVybiAwOwogCi0tICh2b2lkKV9zZXRBZGRzVmlzaXRlZExpbmtzOihCT09MKWFk
ZHNWaXNpdGVkTGlua3MKLXsKLSAgICBfcGFnZS0+c2V0QWRkc1Zpc2l0ZWRMaW5rcyhhZGRzVmlz
aXRlZExpbmtzKTsKLX0KKyAgICBhdXRvKiBwcm92aXNpb25hbFBhZ2UgPSBfcGFnZS0+cHJvdmlz
aW9uYWxQYWdlUHJveHkoKTsKKyAgICBpZiAoIXByb3Zpc2lvbmFsUGFnZSkKKyAgICAgICAgcmV0
dXJuIDA7CiAKLS0gKEJPT0wpX25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MKLXsKLSAgICByZXR1
cm4gX3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS5uZXR3b3JrUmVxdWVzdHNJblByb2dyZXNzKCk7Cisg
ICAgcmV0dXJuIHByb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVyKCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZT4g
bGF5b3V0TWlsZXN0b25lcyhfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyBldmVudHMpCistICh2
b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3MKIHsKLSAgICBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5
b3V0TWlsZXN0b25lPiBtaWxlc3RvbmVzOwotCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRGaXJzdExheW91dCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29y
ZTo6RGlkRmlyc3RMYXlvdXQpOwotCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dy
ZXNzRXZlbnRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCi0gICAgICAgIG1pbGVzdG9uZXMu
YWRkKFdlYkNvcmU6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7Ci0KLSAgICBpZiAo
ZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0UGFpbnRXaXRoU2lnbmlmaWNh
bnRBcmVhKQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRIaXRSZWxldmFudFJl
cGFpbnRlZE9iamVjdHNBcmVhVGhyZXNob2xkKTsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5k
ZXJpbmdQcm9ncmVzc0V2ZW50UmVhY2hlZFNlc3Npb25SZXN0b3JhdGlvblJlbmRlclRyZWVTaXpl
VGhyZXNob2xkKQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpSZWFjaGVkU2Vzc2lv
blJlc3RvcmF0aW9uUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpOwotCi0gICAgaWYgKGV2ZW50cyAm
IF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdExheW91dEFmdGVyU3VwcHJlc3NlZEluY3Jl
bWVudGFsUmVuZGVyaW5nKQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJz
dExheW91dEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFsUmVuZGVyaW5nKTsKLQotICAgIGlmIChl
dmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludEFmdGVyU3VwcHJlc3Nl
ZEluY3JlbWVudGFsUmVuZGVyaW5nKQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpE
aWRGaXJzdFBhaW50QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpOwotCi0gICAg
aWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnREaWRSZW5kZXJTaWduaWZpY2Fu
dEFtb3VudE9mVGV4dCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkUmVuZGVy
U2lnbmlmaWNhbnRBbW91bnRPZlRleHQpOwotCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRGaXJzdE1lYW5pbmdmdWxQYWludCkKLSAgICAgICAgbWlsZXN0b25lcy5h
ZGQoV2ViQ29yZTo6RGlkRmlyc3RNZWFuaW5nZnVsUGFpbnQpOworICAgIGlmICghW3NlbGYgX2lz
VmFsaWRdKQorICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gbWlsZXN0b25lczsKKyAgICBf
cGFnZS0+cHJvY2VzcygpLnRlcm1pbmF0ZSgpOwogfQogCi0tICh2b2lkKV9zZXRPYnNlcnZlZFJl
bmRlcmluZ1Byb2dyZXNzRXZlbnRzOihfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylvYnNlcnZl
ZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzCisjaWYgUExBVEZPUk0oTUFDKQorLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmcKIHsKLSAgICBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2
ZW50cyA9IG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7Ci0gICAgX3BhZ2UtPmxpc3Rl
bkZvckxheW91dE1pbGVzdG9uZXMobGF5b3V0TWlsZXN0b25lcyhvYnNlcnZlZFJlbmRlcmluZ1By
b2dyZXNzRXZlbnRzKSk7CisgICAgcmV0dXJuIF9pbXBsLT5zYWZlQnJvd3NpbmdXYXJuaW5nKCk7
CiB9Ci0KLS0gKHZvaWQpX2dldE1haW5SZXNvdXJjZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCisjZWxzZQor
LSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dhcm5pbmcKIHsKLSAgICBhdXRvIGhhbmRsZXIgPSBh
ZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CisgICAgcmV0dXJuIF9zYWZlQnJvd3Np
bmdXYXJuaW5nLmdldCgpOworfQorI2VuZGlmCiAKLSAgICBfcGFnZS0+Z2V0TWFpblJlc291cmNl
RGF0YU9mRnJhbWUoX3BhZ2UtPm1haW5GcmFtZSgpLCBbaGFuZGxlcl0oQVBJOjpEYXRhKiBkYXRh
LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgdm9pZCAoXmNv
bXBsZXRpb25IYW5kbGVyQmxvY2spKE5TRGF0YSAqLCBOU0Vycm9yICopID0gKHZvaWQgKF4pKE5T
RGF0YSAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBQaXBlIGEgcHJvcGVyIGVycm9yIGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyQmxvY2sobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46
V0tFcnJvckRvbWFpbiBjb2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3IpIHVzZXJJbmZvOm5pbF0p
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQmxvY2sod3Jh
cHBlcigqZGF0YSksIG5pbCk7Ci0gICAgfSk7CistIChXS05hdmlnYXRpb24gKilfcmVsb2FkV2l0
aG91dENvbnRlbnRCbG9ja2VycworeworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5yZWxvYWQo
V2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVudEJsb2NrZXJzKSk7CiB9CiAKLS0g
KHZvaWQpX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
U0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAoV0tOYXZpZ2F0aW9uICop
X3JlbG9hZEV4cGlyZWRPbmx5CiB7Ci0gICAgW3NlbGYgY3JlYXRlV2ViQXJjaGl2ZURhdGFXaXRo
Q29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIHJldHVybiB3cmFwcGVy
KF9wYWdlLT5yZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSkpOwogfQog
Ci0tICh2b2lkKV9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU1N0cmluZyAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9r
aWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlCiB7Ci0gICAgYXV0byBoYW5kbGVyID0g
bWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBSZWY8V2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShfcGFnZS0+cHJvY2VzcygpKTsKKyAgICBw
cm90ZWN0ZWRQcm9jZXNzUHJveHktPnJlcXVlc3RUZXJtaW5hdGlvbihXZWJLaXQ6OlByb2Nlc3NU
ZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOwogCi0gICAgX3BhZ2UtPmdldENv
bnRlbnRzQXNTdHJpbmcoW2hhbmRsZXJdKFN0cmluZyBzdHJpbmcsIFdlYktpdDo6Q2FsbGJhY2tC
YXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yOjpOb25lKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogUGlwZSBhIHByb3Bl
ciBlcnJvciBpbiBmcm9tIHRoZSBXZWJQYWdlUHJveHkuCi0gICAgICAgICAgICBoYW5kbGVyKG5p
bCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2Fz
dDxpbnQ+KGVycm9yKSB1c2VySW5mbzpuaWxdKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBoYW5kbGVyKHN0cmluZywgbmlsKTsKLSAgICB9KTsKKyAgICBpZiAoYXV0byogcHJvdmlzaW9u
YWxQYWdlUHJveHkgPSBfcGFnZS0+cHJvdmlzaW9uYWxQYWdlUHJveHkoKSkgeworICAgICAgICBS
ZWY8V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShwcm92aXNp
b25hbFBhZ2VQcm94eS0+cHJvY2VzcygpKTsKKyAgICAgICAgcHJvdGVjdGVkUHJvY2Vzc1Byb3h5
LT5yZXF1ZXN0VGVybWluYXRpb24oV2ViS2l0OjpQcm9jZXNzVGVybWluYXRpb25SZWFzb246OlJl
cXVlc3RlZEJ5Q2xpZW50KTsKKyAgICB9CiB9CiAKLS0gKHZvaWQpX2dldENvbnRlbnRzQXNBdHRy
aWJ1dGVkU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0F0dHJpYnV0ZWRT
dHJpbmcgKiwgTlNEaWN0aW9uYXJ5PE5TQXR0cmlidXRlZFN0cmluZ0RvY3VtZW50QXR0cmlidXRl
S2V5LCBpZD4gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAoQ0dSZWN0KV9jb252
ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOihDR1JlY3QpcmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlcwogewotICAgIF9wYWdlLT5nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhbaGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGF0dHJpYnV0ZWRT
dHJpbmcpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nKQotICAgICAgICAg
ICAgaGFuZGxlcihbW2F0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nLmdldCgpIHJldGFpbl0gYXV0b3Jl
bGVhc2VdLCBbW2F0dHJpYnV0ZWRTdHJpbmcuZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIHJldGFp
bl0gYXV0b3JlbGVhc2VdLCBuaWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVy
KG5pbCwgbmlsLCBjcmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKS5nZXQoKSk7Ci0gICAgfSk7
CisgICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBlYXNpZXIgdG8gdGFsayBhYm91dCBXS1dlYlZp
ZXcgY29vcmRpbmF0ZXMgaW4gYSBjb25zaXN0ZW50IGFuZCBjcm9zcy1wbGF0Zm9ybSB3YXkuCisg
ICAgLy8gQ3VycmVudGx5LCBuZWl0aGVyICJyb290IHZpZXciIG5vciAid2luZG93IiBtZWFuICJX
S1dlYlZpZXcgY29vcmRpbmF0ZXMiIG9uIGJvdGggcGxhdGZvcm1zLgorICAgIC8vIFNlZSBodHRw
czovL3dlYmtpdC5vcmcvYi8xOTM2NDkgYW5kIHJlbGF0ZWQgYnVncy4KKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisjZWxzZQorICAgIHJldHVy
biByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX2dldEFw
cGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0FwcGxp
Y2F0aW9uTWFuaWZlc3QgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKENHUmVjdClfY29udmVydFJl
Y3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMK
IHsKLSNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCi0gICAgX3BhZ2UtPmdldEFwcGxp
Y2F0aW9uTWFuaWZlc3QoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRp
b25IYW5kbGVyKV0oY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdD4m
IG1hbmlmZXN0LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKLSAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7Ci0g
ICAgICAgICAgICBpZiAobWFuaWZlc3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGFwaU1hbmlm
ZXN0ID0gQVBJOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpjcmVhdGUoKm1hbmlmZXN0KTsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKGFwaU1hbmlmZXN0KSk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwot
ICAgICAgICB9Ci0gICAgfSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1cm4g
W3NlbGYgY29udmVydFJlY3Q6cmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpfY29udGVu
dFZpZXcuZ2V0KCldOwogI2Vsc2UKLSAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CisgICAgcmV0dXJuIHJlY3RJbldlYlZpZXdDb29yZGlu
YXRlczsKICNlbmRpZgogfQogCi0tIChfV0tQYWdpbmF0aW9uTW9kZSlfcGFnaW5hdGlvbk1vZGUK
Ky0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0KXJlY3RJbldl
YlZpZXdDb29yZGluYXRlcyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PF9XS1Rl
eHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBzd2l0Y2ggKF9w
YWdlLT5wYWdpbmF0aW9uTW9kZSgpKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpV
bnBhZ2luYXRlZDoKLSAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7
Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDoKLSAg
ICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ7Ci0gICAgY2FzZSBXZWJD
b3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDoKLSAgICAgICAgcmV0dXJuIF9X
S1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9u
OjpUb3BUb0JvdHRvbVBhZ2luYXRlZDoKLSAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2Rl
VG9wVG9Cb3R0b207Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBh
Z2luYXRlZDoKLSAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRl
bnRWaWV3XSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihAW10pOworICAgICAgICByZXR1
cm47CiAgICAgfQorI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDsKKyAgICBDR1JlY3QgcmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcyA9IFtzZWxmIF9jb252ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczpy
ZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXNdOworICAgIGF1dG8gd2Vha1NlbGYgPSBXZWFrT2JqQ1B0
cjxXS1dlYlZpZXc+KHNlbGYpOworICAgIF9wYWdlLT50ZXh0SW5wdXRDb250ZXh0c0luUmVjdChy
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBbd2Vha1NlbGYsIGNhcHR1cmVkQ29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkVsZW1lbnRDb250ZXh0PiYgY29udGV4dHMpIHsKKyAgICAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBlbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpjb250ZXh0cy5zaXplKCldKTsKKworICAgICAgICBhdXRvIHN0cm9u
Z1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZXh0
IDogY29udGV4dHMpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IGNvbnRl
eHRXaXRoV2ViVmlld0JvdW5kaW5nUmVjdCA9IGNvbnRleHQ7CisgICAgICAgICAgICBjb250ZXh0
V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3QuYm91bmRpbmdSZWN0ID0gW3N0cm9uZ1NlbGYgX2NvbnZl
cnRSZWN0RnJvbVJvb3RWaWV3Q29vcmRpbmF0ZXM6Y29udGV4dC5ib3VuZGluZ1JlY3RdOworICAg
ICAgICAgICAgW2VsZW1lbnRzIGFkZE9iamVjdDphZG9wdE5TKFtbX1dLVGV4dElucHV0Q29udGV4
dCBhbGxvY10gX2luaXRXaXRoVGV4dElucHV0Q29udGV4dDpjb250ZXh0V2l0aFdlYlZpZXdCb3Vu
ZGluZ1JlY3RdKS5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBjYXB0dXJlZENvbXBsZXRp
b25IYW5kbGVyKGVsZW1lbnRzLmdldCgpKTsKKyAgICB9KTsKIH0KIAotLSAodm9pZClfc2V0UGFn
aW5hdGlvbk1vZGU6KF9XS1BhZ2luYXRpb25Nb2RlKXBhZ2luYXRpb25Nb2RlCistICh2b2lkKV9m
b2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKil0ZXh0SW5wdXRDb250
ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7
Ci0gICAgV2ViQ29yZTo6UGFnaW5hdGlvbjo6TW9kZSBtb2RlOwotICAgIHN3aXRjaCAocGFnaW5h
dGlvbk1vZGUpIHsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ6Ci0gICAg
ICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0OgotICAgICAgICBtb2Rl
ID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoKLSAgICAgICAgbW9k
ZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlJpZ2h0VG9MZWZ0UGFnaW5hdGVkOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b206Ci0gICAgICAgIG1v
ZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2luYXRlZDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgotICAgICAgICBt
b2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAo
IVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihOTyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjZW5kaWYKIAotICAgIF9wYWdlLT5z
ZXRQYWdpbmF0aW9uTW9kZShtb2RlKTsKKyAgICBhdXRvIHdlYkNvbnRleHQgPSBbdGV4dElucHV0
Q29udGV4dCBfdGV4dElucHV0Q29udGV4dF07CisgICAgaWYgKHdlYkNvbnRleHQud2ViUGFnZUlk
ZW50aWZpZXIgIT0gX3BhZ2UtPndlYlBhZ2VJRCgpKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVGhlIHByb3ZpZGVkIF9XS1Rl
eHRJbnB1dENvbnRleHQgd2FzIG5vdCBjcmVhdGVkIGJ5IHRoaXMgV0tXZWJWaWV3LiJdOworCisg
ICAgW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdOworCisgICAgX3BhZ2UtPmZvY3VzVGV4dElu
cHV0Q29udGV4dCh3ZWJDb250ZXh0LCBbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgc3VjY2VzcykgeworICAgICAgICBjYXB0
dXJlZENvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOworICAgIH0pOwogfQogCi0tIChCT09MKV9w
YWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCistICh2b2lkKV90YWtlUERGU25hcHNob3RXaXRo
Q29uZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3Vy
YXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdpbmF0aW9uQmVoYXZlc0xp
a2VDb2x1bW5zKCk7CisgICAgV0tQREZDb25maWd1cmF0aW9uICpwZGZDb25maWd1cmF0aW9uID0g
bmlsOworICAgIGlmIChzbmFwc2hvdENvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgcGRmQ29uZmln
dXJhdGlvbiA9IFtbW1dLUERGQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBwZGZDb25maWd1cmF0aW9uLnJlY3QgPSBzbmFwc2hvdENvbmZpZ3VyYXRpb24u
cmVjdDsKKyAgICB9CisKKyAgICBbc2VsZiBjcmVhdGVQREZXaXRoQ29uZmlndXJhdGlvbjpwZGZD
b25maWd1cmF0aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAot
LSAodm9pZClfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczooQk9PTCliZWhhdmVzTGlr
ZUNvbHVtbnMKKyNpZiBQTEFURk9STShNQUMpCistICh2b2lkKV9zZXRTaG91bGRTdXBwcmVzc0Zp
cnN0UmVzcG9uZGVyQ2hhbmdlczooQk9PTClzaG91bGRTdXBwcmVzcwogewotICAgIF9wYWdlLT5z
ZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKGJlaGF2ZXNMaWtlQ29sdW1ucyk7CisgICAg
X2ltcGwtPnNldFNob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzKHNob3VsZFN1cHBy
ZXNzKTsKIH0KKyNlbmRpZgogCi0tIChDR0Zsb2F0KV9wYWdlTGVuZ3RoCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKy0gKHZvaWQgKF4pKHZvaWQpKV9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUK
IHsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2VMZW5ndGgoKTsKKyAgICArK19hY3RpdmVGb2N1c2Vk
U3RhdGVSZXRhaW5Db3VudDsKKworICAgIC8vIEZJWE1FOiBVc2Ugc29tZXRoaW5nIGxpa2UgQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlciB0byBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgYmxv
Y2sgaXMgY2FsbGVkIGJlZm9yZSBpdCdzIHJlbGVhc2VkLgorICAgIHJldHVybiBbW1tzZWxmXSB7
CisgICAgICAgIC0tX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OworICAgIH0gY29weV0g
YXV0b3JlbGVhc2VdOwogfQogCi0tICh2b2lkKV9zZXRQYWdlTGVuZ3RoOihDR0Zsb2F0KXBhZ2VM
ZW5ndGgKKy0gKHZvaWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmluZ0Zv
cndhcmQ6KEJPT0wpc2VsZWN0aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
Qk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBf
cGFnZS0+c2V0UGFnZUxlbmd0aChwYWdlTGVuZ3RoKTsKKyAgICB0eXBlb2YoY29tcGxldGlvbkhh
bmRsZXIpIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG5pbDsKKyAgICBpZiAoY29tcGxldGlvbkhh
bmRsZXIpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2NrX2NvcHkoY29tcGxl
dGlvbkhhbmRsZXIpOworCisgICAgW19jb250ZW50VmlldyBfYmVjb21lRmlyc3RSZXNwb25kZXJX
aXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpzZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5k
bGVyOltjb21wbGV0aW9uSGFuZGxlckNvcHldKEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIp
IHsKKyAgICAgICAgaWYgKCFjb21wbGV0aW9uSGFuZGxlckNvcHkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KGRpZEJlY29tZUZpcnN0UmVzcG9u
ZGVyKTsKKyAgICAgICAgQmxvY2tfcmVsZWFzZShjb21wbGV0aW9uSGFuZGxlckNvcHkpOworICAg
IH1dOwogfQogCi0tIChDR0Zsb2F0KV9nYXBCZXR3ZWVuUGFnZXMKKy0gKGlkKV9zbmFwc2hvdExh
eWVyQ29udGVudHNGb3JCYWNrRm9yd2FyZExpc3RJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0g
KilpdGVtCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5nYXBCZXR3ZWVuUGFnZXMoKTsKKyAgICBpZiAo
X3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCkgPT0gJml0ZW0uX2l0ZW0pCisg
ICAgICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKl9wYWdlLT5iYWNrRm9yd2Fy
ZExpc3QoKS5jdXJyZW50SXRlbSgpKTsKKworICAgIGlmIChhdXRvKiB2aWV3U25hcHNob3QgPSBp
dGVtLl9pdGVtLnNuYXBzaG90KCkpCisgICAgICAgIHJldHVybiB2aWV3U25hcHNob3QtPmFzTGF5
ZXJDb250ZW50cygpOworCisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAodm9pZClfc2V0R2FwQmV0
d2VlblBhZ2VzOihDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcworLSAoTlNBcnJheSAqKV9kYXRhRGV0
ZWN0aW9uUmVzdWx0cwogewotICAgIF9wYWdlLT5zZXRHYXBCZXR3ZWVuUGFnZXMoZ2FwQmV0d2Vl
blBhZ2VzKTsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgcmV0dXJuIFtfY29udGVu
dFZpZXcgX2RhdGFEZXRlY3Rpb25SZXN1bHRzXTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNl
bmRpZgogfQogCi0tIChCT09MKV9wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkCistICh2b2lkKV9h
Y2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnQKIHsKLSAgICByZXR1cm4g
X3BhZ2UtPnBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQoKTsKKyAgICBbX2NvbnRlbnRWaWV3IGFj
Y2Vzc2liaWxpdHlSZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudF07CiB9CiAKLS0gKHZvaWQp
X3NldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6KEJPT0wpbGluZUdyaWRFbmFibGVkCisvLyBU
aGlzIG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKy8vIEN1cnJlbnRseSBp
dCdzIG9ubHkgaW4gVGVzdFJ1bm5lcldLV2ViVmlldy4KKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlE
aWRHZXRTcGVha1NlbGVjdGlvbkNvbnRlbnQ6KE5TU3RyaW5nICopY29udGVudAogewotICAgIF9w
YWdlLT5zZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKGxpbmVHcmlkRW5hYmxlZCk7CiB9CiAK
LS0gKE5TVUludGVnZXIpX3BhZ2VDb3VudAorLSAoVUlUZXh0SW5wdXRBc3Npc3RhbnRJdGVtICop
aW5wdXRBc3Npc3RhbnRJdGVtCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlQ291bnQoKTsKKyAg
ICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dEFzc2lzdGFudEl0ZW1Gb3JXZWJWaWV3XTsKIH0K
IAotLSAoQk9PTClfc3VwcG9ydHNUZXh0Wm9vbQorI2VuZGlmCisKKy0gKE5TRGF0YSAqKV9zZXNz
aW9uU3RhdGVEYXRhCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5zdXBwb3J0c1RleHRab29tKCk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgdGhlIGxlZ2FjeSBzZXNzaW9uIHN0YXRl
IGVuY29kZXIuCisgICAgcmV0dXJuIHdyYXBwZXIoV2ViS2l0OjplbmNvZGVMZWdhY3lTZXNzaW9u
U3RhdGUoX3BhZ2UtPnNlc3Npb25TdGF0ZSgpKSk7CiB9CiAKLS0gKGRvdWJsZSlfdGV4dFpvb21G
YWN0b3IKKy0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGUKIHsKLSAgICByZXR1cm4g
X3BhZ2UtPnRleHRab29tRmFjdG9yKCk7CisgICAgcmV0dXJuIFtbW19XS1Nlc3Npb25TdGF0ZSBh
bGxvY10gX2luaXRXaXRoU2Vzc2lvblN0YXRlOl9wYWdlLT5zZXNzaW9uU3RhdGUoKV0gYXV0b3Jl
bGVhc2VdOwogfQogCi0tICh2b2lkKV9zZXRUZXh0Wm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0
b3IKKy0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGVXaXRoRmlsdGVyOihCT09MIChe
KShXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKml0ZW0pKWZpbHRlcgogewotICAgIF9wYWdlLT5zZXRU
ZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKKyAgICBXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzZXNz
aW9uU3RhdGUgPSBfcGFnZS0+c2Vzc2lvblN0YXRlKFtmaWx0ZXJdKFdlYktpdDo6V2ViQmFja0Zv
cndhcmRMaXN0SXRlbSYgaXRlbSkgeworICAgICAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiAoYm9vbClmaWx0ZXIod3JhcHBlcihpdGVt
KSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gW1tbX1dLU2Vzc2lvblN0YXRlIGFsbG9jXSBfaW5p
dFdpdGhTZXNzaW9uU3RhdGU6c2Vzc2lvblN0YXRlXSBhdXRvcmVsZWFzZV07CiB9CiAKLS0gKHZv
aWQpc2V0UGFnZVpvb206KENHRmxvYXQpcGFnZVpvb20KKy0gKHZvaWQpX3Jlc3RvcmVGcm9tU2Vz
c2lvblN0YXRlRGF0YTooTlNEYXRhICopc2Vzc2lvblN0YXRlRGF0YQogewotICAgIF9wYWdlLT5z
ZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbSk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5v
dCB1c2UgdGhlIGxlZ2FjeSBzZXNzaW9uIHN0YXRlIGRlY29kZXIuCisgICAgV2ViS2l0OjpTZXNz
aW9uU3RhdGUgc2Vzc2lvblN0YXRlOworICAgIGlmICghV2ViS2l0OjpkZWNvZGVMZWdhY3lTZXNz
aW9uU3RhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlc3Npb25TdGF0ZURhdGEuYnl0
ZXMpLCBzZXNzaW9uU3RhdGVEYXRhLmxlbmd0aCwgc2Vzc2lvblN0YXRlKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgX3BhZ2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdURk1vdmUoc2Vzc2lv
blN0YXRlKSwgdHJ1ZSk7CiB9CiAKLS0gKENHRmxvYXQpcGFnZVpvb20KKy0gKFdLTmF2aWdhdGlv
biAqKV9yZXN0b3JlU2Vzc2lvblN0YXRlOihfV0tTZXNzaW9uU3RhdGUgKilzZXNzaW9uU3RhdGUg
YW5kTmF2aWdhdGU6KEJPT0wpbmF2aWdhdGUKIHsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2Vab29t
RmFjdG9yKCk7CisgICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0
YXRlKHNlc3Npb25TdGF0ZSA/IHNlc3Npb25TdGF0ZS0+X3Nlc3Npb25TdGF0ZSA6IFdlYktpdDo6
U2Vzc2lvblN0YXRlIHsgfSwgbmF2aWdhdGUpKTsKIH0KIAotLSAoZG91YmxlKV9wYWdlWm9vbUZh
Y3RvcgorLSAodm9pZClfY2xvc2UKIHsKLSAgICByZXR1cm4gW3NlbGYgcGFnZVpvb21dOworICAg
IF9wYWdlLT5jbG9zZSgpOwogfQogCi0tICh2b2lkKV9zZXRQYWdlWm9vbUZhY3RvcjooZG91Ymxl
KXpvb21GYWN0b3IKKy0gKF9XS0F0dGFjaG1lbnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxl
bmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50
VHlwZSBkYXRhOihOU0RhdGEgKilkYXRhIG9wdGlvbnM6KF9XS0F0dGFjaG1lbnREaXNwbGF5T3B0
aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRp
b25IYW5kbGVyCiB7Ci0gICAgW3NlbGYgc2V0UGFnZVpvb206em9vbUZhY3Rvcl07CisgICAgVU5V
U0VEX1BBUkFNKG9wdGlvbnMpOworICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNG
aWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdKTsKKyAg
ICBpZiAoZmlsZW5hbWUpCisgICAgICAgIFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFt
ZTpmaWxlbmFtZV07CisgICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVX
cmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRp
b246Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCi0tIChpZCA8X1dLRGlhZ25vc3RpY0xvZ2dpbmdE
ZWxlZ2F0ZT4pX2RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKKy0gKF9XS0F0dGFjaG1lbnQgKilf
aW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooTlNGaWxlV3JhcHBlciAqKWZpbGVXcmFw
cGVyIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBlIG9wdGlvbnM6KF9XS0F0dGFj
aG1lbnREaXNwbGF5T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1
Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgYXV0byogZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsKLSAgICBpZiAoIWRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50KQotICAgICAgICByZXR1cm4gbmlsOworICAgIFVOVVNFRF9QQVJB
TShvcHRpb25zKTsKKyAgICByZXR1cm4gW3NlbGYgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdy
YXBwZXI6ZmlsZVdyYXBwZXIgY29udGVudFR5cGU6Y29udGVudFR5cGUgY29tcGxldGlvbjpjb21w
bGV0aW9uSGFuZGxlcl07Cit9CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkuZGVsZWdhdGUo
KS5hdXRvcmVsZWFzZSgpOworLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0
aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5cGU6KE5T
U3RyaW5nICopY29udGVudFR5cGUgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNv
bXBsZXRpb25IYW5kbGVyCit7CisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICBh
dXRvIGlkZW50aWZpZXIgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgYXV0byBh
dHRhY2htZW50ID0gQVBJOjpBdHRhY2htZW50OjpjcmVhdGUoaWRlbnRpZmllciwgKl9wYWdlKTsK
KyAgICBhdHRhY2htZW50LT5zZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKGZpbGVX
cmFwcGVyLCBjb250ZW50VHlwZSk7CisgICAgX3BhZ2UtPmluc2VydEF0dGFjaG1lbnQoYXR0YWNo
bWVudC5jb3B5UmVmKCksIFtjYXB0dXJlZEhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXSAoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAg
IGlmIChjYXB0dXJlZEhhbmRsZXIpCisgICAgICAgICAgICBjYXB0dXJlZEhhbmRsZXIoZXJyb3Ig
PT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKKyAgICB9KTsKKworICAgIHJl
dHVybiB3cmFwcGVyKGF0dGFjaG1lbnQpOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlm
CiB9CiAKLS0gKHZvaWQpX3NldERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KGlkPF9XS0RpYWdu
b3N0aWNMb2dnaW5nRGVsZWdhdGU+KWRpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKKy0gKF9XS0F0
dGFjaG1lbnQgKilfYXR0YWNobWVudEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmll
cgogewotICAgIGF1dG8qIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gX3BhZ2UtPmRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KCk7Ci0gICAgaWYgKCFkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKLSAg
ICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgaWYgKGF1
dG8gYXR0YWNobWVudCA9IF9wYWdlLT5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihpZGVudGlmaWVy
KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoYXR0YWNobWVudCk7CisjZW5kaWYKKyAgICByZXR1
cm4gbmlsOworfQogCi0gICAgc3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkuc2V0RGVsZWdhdGUoZGlhZ25vc3RpY0xv
Z2dpbmdEZWxlZ2F0ZSk7CistICh2b2lkKV9zaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdl
V2l0aEFscGhhOihkb3VibGUpYWxwaGEgYmV0YTooZG91YmxlKWJldGEgZ2FtbWE6KGRvdWJsZSln
YW1tYQoreworICAgIF9wYWdlLT5zaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGFscGhh
LCBiZXRhLCBnYW1tYSk7CiB9CiAKLS0gKGlkIDxfV0tGaW5kRGVsZWdhdGU+KV9maW5kRGVsZWdh
dGUKKysgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViS2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQoKSkuZGVsZWdhdGUoKS5h
dXRvcmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCi0tICh2b2lkKV9zZXRGaW5kRGVs
ZWdhdGU6KGlkPF9XS0ZpbmREZWxlZ2F0ZT4pZmluZERlbGVnYXRlCistICh2b2lkKV9zaG93U2Fm
ZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0
cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHN0
YXRpY19jYXN0PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdlLT5maW5kQ2xpZW50KCkpLnNldERl
bGVnYXRlKGZpbmREZWxlZ2F0ZSk7CisgICAgLy8gRklYTUU6IEFkb3B0IF9zaG93U2FmZUJyb3dz
aW5nV2FybmluZ1dpdGhVUkwgYW5kIHJlbW92ZSB0aGlzIGZ1bmN0aW9uLgorICAgIFtzZWxmIF9z
aG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6bmlsIHRpdGxlOnRpdGxlIHdhcm5pbmc6d2Fy
bmluZyBkZXRhaWxzOmRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJd
OwogfQogCi1zdGF0aWMgaW5saW5lIFdlYktpdDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhf
V0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25zKQorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dh
cm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJuaW5n
OihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0YWls
cyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgogewot
ICAgIHVuc2lnbmVkIGZpbmRPcHRpb25zID0gMDsKKyAgICBhdXRvIHNhZmVCcm93c2luZ1dhcm5p
bmcgPSBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNyZWF0ZSh1cmwsIHRpdGxlLCB3YXJu
aW5nLCBkZXRhaWxzKTsKKyAgICBhdXRvIHdyYXBwZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZCwgVVJMPiYmIHZhcmlhbnQpIHsKKyAgICAgICAgc3dpdGNoT24odmFyaWFudCwg
WyZdIChXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCBjb250aW51ZVVuc2FmZUxvYWQpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29udGludWVVbnNhZmVMb2FkKSB7CisgICAgICAgICAgICBjYXNl
IFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKFlFUyk7CisgICAgICAgICAgICBjYXNlIFdlYktpdDo6Q29udGlu
dWVVbnNhZmVMb2FkOjpObzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoTk8pOworICAgICAgICAgICAgfQorICAgICAgICB9LCBbJl0gKFVSTCkgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihO
Tyk7CisgICAgICAgIH0pOworICAgIH07CisjaWYgUExBVEZPUk0oTUFDKQorICAgIF9pbXBsLT5z
aG93U2FmZUJyb3dzaW5nV2FybmluZyhzYWZlQnJvd3NpbmdXYXJuaW5nLCBXVEZNb3ZlKHdyYXBw
ZXIpKTsKKyNlbHNlCisgICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOnNhZmVCcm93
c2luZ1dhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZSh3cmFwcGVyKV07CisjZW5kaWYK
K30KIAotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRp
dmUpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNDYXNlSW5zZW5z
aXRpdmU7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0
cykKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0F0V29yZFN0YXJ0
czsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBp
dGFsQXNXb3JkU3RhcnQpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlv
bnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAm
IF9XS0ZpbmRPcHRpb25zQmFja3dhcmRzKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6
OkZpbmRPcHRpb25zQmFja3dhcmRzOwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9w
dGlvbnNXcmFwQXJvdW5kKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRp
b25zV3JhcEFyb3VuZDsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hv
d092ZXJsYXkpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93
T3ZlcmxheTsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd0ZpbmRJ
bmRpY2F0b3IpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93
RmluZEluZGljYXRvcjsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hv
d0hpZ2hsaWdodCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1No
b3dIaWdobGlnaHQ7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc05vSW5k
ZXhDaGFuZ2UpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNOb0lu
ZGV4Q2hhbmdlOwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNEZXRlcm1p
bmVNYXRjaEluZGV4KQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25z
RGV0ZXJtaW5lTWF0Y2hJbmRleDsKKysgKE5TVVJMICopX2NvbmZpcm1NYWx3YXJlU2VudGluZWwK
K3sKKyAgICByZXR1cm4gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjb25maXJtTWFsd2Fy
ZVNlbnRpbmVsKCk7Cit9CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kT3B0
aW9ucz4oZmluZE9wdGlvbnMpOworKyAoTlNVUkwgKilfdmlzaXRVbnNhZmVXZWJzaXRlU2VudGlu
ZWwKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjp2aXNpdFVuc2Fm
ZVdlYnNpdGVTZW50aW5lbCgpOwogfQogCi0tICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXM6KE5T
U3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6
KE5TVUludGVnZXIpbWF4Q291bnQKKy0gKHZvaWQpX2lzSklURW5hYmxlZDoodm9pZCheKShCT09M
KSljb21wbGV0aW9uSGFuZGxlcgogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYg
KF9jdXN0b21Db250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9j
b3VudFN0cmluZ01hdGNoZXM6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3Vu
dF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBfcGFnZS0+Y291bnRTdHJp
bmdNYXRjaGVzKHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4Q291bnQpOworICAg
IF9wYWdlLT5pc0pJVEVuYWJsZWQoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0gKGJvb2wgZW5hYmxlZCkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihlbmFibGVkKTsKKyAgICB9KTsKIH0KIAotLSAodm9pZClfZmluZFN0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcgb3B0aW9uczooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNV
SW50ZWdlciltYXhDb3VudAorLSAodm9pZClfZXZhbHVhdGVKYXZhU2NyaXB0V2l0aG91dFVzZXJH
ZXN0dXJlOihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKGlkLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAvLyBXaGlsZSBBcHBLaXQgY29udGFpbnMgbG9naWMgaW4gTlNCYXJU
ZXh0RmluZGVyIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBmaW5kIHBhc3RlYm9hcmQKLSAg
ICAvLyB3aGVuIHRoZSBmaW5kIHN0cmluZyBjaGFuZ2VzLCB0aGlzIChhbG9uZyB3aXRoIHRoZSBm
aW5kIHBhc3RlYm9hcmQgaXRzZWxmKSBhcmUgYm90aCBtaXNzaW5nCi0gICAgLy8gZnJvbSBpT1M7
IHRodXMsIG9uIGlPUywgd2UgdXBkYXRlIHRoZSBjdXJyZW50IGZpbmQtaW4tcGFnZSBzdHJpbmcg
aGVyZS4KLSAgICBXZWJLaXQ6OnVwZGF0ZVN0cmluZ0ZvckZpbmQoc3RyaW5nKTsKKyAgICBbc2Vs
ZiBfZXZhbHVhdGVKYXZhU2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTpO
TyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cit9CiAKLSAgICBpZiAoX2N1
c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2ZpbmRT
dHJpbmc6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CistICh2b2lkKV91cGRhdGVXZWJzaXRlUG9saWNpZXM6KF9XS1dlYnNp
dGVQb2xpY2llcyAqKXdlYnNpdGVQb2xpY2llcworeworICAgIGF1dG8gZGF0YSA9IHdlYnNpdGVQ
b2xpY2llcy53ZWJwYWdlUHJlZmVyZW5jZXMtPl93ZWJzaXRlUG9saWNpZXMtPmRhdGEoKTsKKyAg
ICBpZiAoZGF0YS53ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICAgICAgW05TRXhjZXB0
aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlVwZGF0aW5nIFdL
V2Vic2l0ZURhdGFTdG9yZSBpcyBvbmx5IHN1cHBvcnRlZCBkdXJpbmcgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbi4iXTsKKyAgICBfcGFnZS0+dXBkYXRlV2Vic2l0ZVBvbGljaWVzKFdU
Rk1vdmUoZGF0YSkpOworfQorCistIChCT09MKV9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uCit7Cisj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgcmV0dXJuIF9wYWdlLT5hbGxvd3NSZW1v
dGVJbnNwZWN0aW9uKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKICNlbmRpZgotICAgIF9wYWdl
LT5maW5kU3RyaW5nKHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4Q291bnQpOwog
fQogCi0tICh2b2lkKV9oaWRlRmluZFVJCistICh2b2lkKV9zZXRBbGxvd3NSZW1vdGVJbnNwZWN0
aW9uOihCT09MKWFsbG93CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoX2N1
c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2hpZGVG
aW5kVUldOwotICAgICAgICByZXR1cm47Ci0gICAgfQorI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQorICAgIF9wYWdlLT5zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uKGFsbG93KTsKICNlbmRp
ZgotICAgIF9wYWdlLT5oaWRlRmluZFVJKCk7CiB9CiAKLS0gKHZvaWQpX3NhdmVCYWNrRm9yd2Fy
ZFNuYXBzaG90Rm9ySXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbQorLSAoTlNTdHJp
bmcgKilfcmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZQogewotICAgIGlmICghaXRlbSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbS5f
aXRlbSk7CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgcmV0dXJuIF9wYWdlLT5y
ZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7Cisj
ZW5kaWYKIH0KIAotLSAoaWQgPF9XS0lucHV0RGVsZWdhdGU+KV9pbnB1dERlbGVnYXRlCistICh2
b2lkKV9zZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlOihOU1N0cmluZyAqKW5hbWUKIHsK
LSAgICByZXR1cm4gX2lucHV0RGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7CisjaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCisgICAgX3BhZ2UtPnNldFJlbW90ZUluc3BlY3Rpb25OYW1lT3Zl
cnJpZGUobmFtZSk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0SW5wdXREZWxlZ2F0ZTooaWQg
PF9XS0lucHV0RGVsZWdhdGU+KWlucHV0RGVsZWdhdGUKKy0gKEJPT0wpX2FkZHNWaXNpdGVkTGlu
a3MKIHsKLSAgICBfaW5wdXREZWxlZ2F0ZSA9IGlucHV0RGVsZWdhdGU7CisgICAgcmV0dXJuIF9w
YWdlLT5hZGRzVmlzaXRlZExpbmtzKCk7Cit9CiAKLSAgICBjbGFzcyBGb3JtQ2xpZW50IDogcHVi
bGljIEFQSTo6Rm9ybUNsaWVudCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgRm9ybUNsaWVudChXS1dlYlZpZXcgKndlYlZp
ZXcpCi0gICAgICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgICAgICB7Ci0gICAgICAg
IH0KKy0gKHZvaWQpX3NldEFkZHNWaXNpdGVkTGlua3M6KEJPT0wpYWRkc1Zpc2l0ZWRMaW5rcwor
eworICAgIF9wYWdlLT5zZXRBZGRzVmlzaXRlZExpbmtzKGFkZHNWaXNpdGVkTGlua3MpOworfQog
Ci0gICAgICAgIHZpcnR1YWwgfkZvcm1DbGllbnQoKSB7IH0KKy0gKEJPT0wpX25ldHdvcmtSZXF1
ZXN0c0luUHJvZ3Jlc3MKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS5uZXR3
b3JrUmVxdWVzdHNJblByb2dyZXNzKCk7Cit9CiAKLSAgICAgICAgdm9pZCB3aWxsU3VibWl0Rm9y
bShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIFdlYktpdDo6
V2ViRnJhbWVQcm94eSYgc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8V1RGOjpT
dHJpbmcsIFdURjo6U3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywgQVBJOjpPYmplY3QqIHVzZXJE
YXRhLCBXVEY6OkZ1bmN0aW9uPHZvaWQodm9pZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJy
aWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh1c2VyRGF0YSAmJiB1c2VyRGF0YS0+dHlw
ZSgpICE9IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCF1c2VyRGF0YSB8fCB1c2VyRGF0YS0+dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRh
KTsKLSAgICAgICAgICAgICAgICBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlv
bigpLT5tYXJrQ3VycmVudGx5RGlzcGF0Y2hlZE1lc3NhZ2VBc0ludmFsaWQoKTsKLSAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KK3N0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVz
dG9uZT4gbGF5b3V0TWlsZXN0b25lcyhfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyBldmVudHMp
Cit7CisgICAgT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZT4gbWlsZXN0b25lczsK
IAotICAgICAgICAgICAgYXV0byBpbnB1dERlbGVnYXRlID0gbV93ZWJWaWV3LT5faW5wdXREZWxl
Z2F0ZS5nZXQoKTsKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZp
cnN0TGF5b3V0KQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdExheW91
dCk7CiAKLSAgICAgICAgICAgIGlmICghW2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzp3aWxsU3VibWl0Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1p
c3Npb25IYW5kbGVyOildKSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgaWYgKGV2ZW50cyAm
IF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCisg
ICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCk7CiAKLSAgICAgICAgICAgIGF1dG8gdmFsdWVNYXAgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp0ZXh0RmllbGRWYWx1ZXMuc2l6ZSgp
XSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB0ZXh0RmllbGRWYWx1ZXMp
Ci0gICAgICAgICAgICAgICAgW3ZhbHVlTWFwIHNldE9iamVjdDpwYWlyLnNlY29uZCBmb3JLZXk6
cGFpci5maXJzdF07CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRG
aXJzdFBhaW50V2l0aFNpZ25pZmljYW50QXJlYSkKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2Vi
Q29yZTo6RGlkSGl0UmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCk7CiAKLSAg
ICAgICAgICAgIE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4gKnVzZXJPYmplY3QgPSBuaWw7Ci0g
ICAgICAgICAgICBpZiAoQVBJOjpEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8QVBJOjpEYXRhKj4o
dXNlckRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuc0RhdGEgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PGNvbnN0IHZvaWQqPihkYXRhLT5ieXRlcygpKSkgbGVuZ3RoOmRhdGEtPnNpemUoKSBmcmVl
V2hlbkRvbmU6Tk9dKTsKLSAgICAgICAgICAgICAgICBhdXRvIHVuYXJjaGl2ZXIgPSBzZWN1cmVV
bmFyY2hpdmVyRnJvbURhdGEobnNEYXRhLmdldCgpKTsKLSAgICAgICAgICAgICAgICBAdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGFsbG93ZWRDbGFzc2VzID0gbV93ZWJWaWV3
LT5fcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYWxsb3dlZENsYXNzZXNGb3JQYXJhbWV0
ZXJDb2RpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmplY3QgPSBbdW5hcmNo
aXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNzZXMgZm9yS2V5OkAidXNlck9i
amVjdCJdOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1c2VyT2JqZWN0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNPYmplY3Qg
Y2xhc3NdIGZvcktleTpAInVzZXJPYmplY3QiXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAo
TlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBkZWNvZGUgdXNlciBkYXRhOiAlQCIsIGV4Y2VwdGlvbik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQorICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9n
cmVzc0V2ZW50UmVhY2hlZFNlc3Npb25SZXN0b3JhdGlvblJlbmRlclRyZWVTaXplVGhyZXNob2xk
KQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpSZWFjaGVkU2Vzc2lvblJlc3RvcmF0
aW9uUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpOwogCi0gICAgICAgICAgICBhdXRvIGNoZWNrZXIg
PSBXZWJLaXQ6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShpbnB1dERlbGVn
YXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dXNlck9i
amVjdDpzdWJtaXNzaW9uSGFuZGxlcjopKTsKLSAgICAgICAgICAgIFtpbnB1dERlbGVnYXRlIF93
ZWJWaWV3Om1fd2ViVmlldyB3aWxsU3VibWl0Rm9ybVZhbHVlczp2YWx1ZU1hcC5nZXQoKSB1c2Vy
T2JqZWN0OnVzZXJPYmplY3Qgc3VibWlzc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92
ZShjaGVja2VyKV0gewotICAgICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFu
ZGxlckhhc0JlZW5DYWxsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICB9KS5nZXQoKV07Ci0gICAg
ICAgIH0KKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TGF5
b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpCisgICAgICAgIG1pbGVzdG9u
ZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TGF5b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxS
ZW5kZXJpbmcpOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7
Ci0gICAgfTsKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0
UGFpbnRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZykKKyAgICAgICAgbWlsZXN0
b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RQYWludEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFs
UmVuZGVyaW5nKTsKIAotICAgIGlmIChpbnB1dERlbGVnYXRlKQotICAgICAgICBfcGFnZS0+c2V0
Rm9ybUNsaWVudChtYWtlVW5pcXVlPEZvcm1DbGllbnQ+KHNlbGYpKTsKLSAgICBlbHNlCi0gICAg
ICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50KG51bGxwdHIpOworICAgIGlmIChldmVudHMgJiBfV0tS
ZW5kZXJpbmdQcm9ncmVzc0V2ZW50RGlkUmVuZGVyU2lnbmlmaWNhbnRBbW91bnRPZlRleHQpCisg
ICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZFJlbmRlclNpZ25pZmljYW50QW1vdW50
T2ZUZXh0KTsKKworICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmly
c3RNZWFuaW5nZnVsUGFpbnQpCisgICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZp
cnN0TWVhbmluZ2Z1bFBhaW50KTsKKworICAgIHJldHVybiBtaWxlc3RvbmVzOwogfQogCi0tIChC
T09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudAorLSAodm9pZClfc2V0T2Jz
ZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czooX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMp
b2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cwogewotICAgIGlmIChhdXRvKiBtYWluRnJh
bWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBtYWluRnJhbWUtPmlzRGlz
cGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50KCk7Ci0gICAgcmV0dXJuIE5POworICAgIF9v
YnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzID0gb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVz
c0V2ZW50czsKKyAgICBfcGFnZS0+bGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhsYXlvdXRNaWxl
c3RvbmVzKG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMpKTsKIH0KIAotLSAoQk9PTClf
aXNEaXNwbGF5aW5nU3RhbmRhbG9uZU1lZGlhRG9jdW1lbnQKKy0gKHZvaWQpX2dldE1haW5SZXNv
dXJjZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9wYWdl
LT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5nU3Rh
bmRhbG9uZU1lZGlhRG9jdW1lbnQoKTsKLSAgICByZXR1cm4gTk87CisgICAgYXV0byBoYW5kbGVy
ID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3BhZ2UtPmdldE1h
aW5SZXNvdXJjZURhdGFPZkZyYW1lKF9wYWdlLT5tYWluRnJhbWUoKSwgW2hhbmRsZXJdKEFQSTo6
RGF0YSogZGF0YSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAg
IHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlckJsb2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKSA9ICh2
b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICBpZiAo
ZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogUGlwZSBhIHByb3BlciBlcnJvciBpbiBmcm9tIHRoZSBXZWJQYWdlUHJveHku
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckJsb2NrKG5pbCwgW05TRXJyb3IgZXJyb3JX
aXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSB1c2Vy
SW5mbzpuaWxdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
ckJsb2NrKHdyYXBwZXIoKmRhdGEpLCBuaWwpOworICAgIH0pOwogfQogCi0tIChCT09MKV9pc1Bs
YXlpbmdBdWRpbworLSAodm9pZClfZ2V0V2ViQXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0g
ICAgcmV0dXJuIF9wYWdlLT5pc1BsYXlpbmdBdWRpbygpOworICAgIFtzZWxmIGNyZWF0ZVdlYkFy
Y2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAot
LSAoQk9PTClfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAorLSAodm9pZClfZ2V0
Q29udGVudHNBc1N0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcg
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHJldHVybiBfcGFnZS0+aXNT
aG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOworICAgIGF1dG8gaGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICBfcGFnZS0+Z2V0Q29udGVudHNB
c1N0cmluZyhbaGFuZGxlcl0oU3RyaW5nIHN0cmluZywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVy
cm9yIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3I6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQaXBlIGEgcHJvcGVyIGVycm9y
IGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNF
cnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOnN0YXRpY19jYXN0PGludD4o
ZXJyb3IpIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhhbmRs
ZXIoc3RyaW5nLCBuaWwpOworICAgIH0pOwogfQogCi0tIChfV0tMYXlvdXRNb2RlKV9sYXlvdXRN
b2RlCistICh2b2lkKV9nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZ1dpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoTlNBdHRyaWJ1dGVkU3RyaW5nICosIE5TRGljdGlvbmFyeTxOU0F0
dHJpYnV0ZWRTdHJpbmdEb2N1bWVudEF0dHJpYnV0ZUtleSwgaWQ+ICosIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgc3dpdGNoIChfaW1wbC0+
bGF5b3V0TW9kZSgpKSB7Ci0gICAgY2FzZSBrV0tMYXlvdXRNb2RlRml4ZWRTaXplOgotICAgICAg
ICByZXR1cm4gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZTsKLSAgICBjYXNlIGtXS0xheW91dE1vZGVE
eW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZToKLSAgICAgICAgcmV0dXJuIF9XS0xheW91
dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZTsKLSAgICBjYXNlIGtXS0xheW91
dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU6Ci0gICAgICAg
IHJldHVybiBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1l
bnRTaXplOwotICAgIGNhc2Uga1dLTGF5b3V0TW9kZVZpZXdTaXplOgotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlVmlld1NpemU7Ci0gICAgfQorICAgIF9wYWdlLT5n
ZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhbaGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildKGF1dG8mIGF0dHJpYnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgaWYgKGF0
dHJpYnV0ZWRTdHJpbmcuc3RyaW5nKQorICAgICAgICAgICAgaGFuZGxlcihbW2F0dHJpYnV0ZWRT
dHJpbmcuc3RyaW5nLmdldCgpIHJldGFpbl0gYXV0b3JlbGVhc2VdLCBbW2F0dHJpYnV0ZWRTdHJp
bmcuZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIHJldGFpbl0gYXV0b3JlbGVhc2VdLCBuaWwpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgbmlsLCBjcmVhdGVOU0Vycm9y
KFdLRXJyb3JVbmtub3duKS5nZXQoKSk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX2dldEFwcGxp
Y2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0FwcGxpY2F0
aW9uTWFuaWZlc3QgKikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyNpZiBFTkFCTEUoQVBQTElDQVRJ
T05fTUFOSUZFU1QpCisgICAgX3BhZ2UtPmdldEFwcGxpY2F0aW9uTWFuaWZlc3QoW2NvbXBsZXRp
b25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdD4mIG1hbmlmZXN0LCBXZWJLaXQ6OkNhbGxi
YWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAg
ICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgICAgICBpZiAobWFuaWZlc3Qp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGFwaU1hbmlmZXN0ID0gQVBJOjpBcHBsaWNhdGlvbk1h
bmlmZXN0OjpjcmVhdGUoKm1hbmlmZXN0KTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcih3cmFwcGVyKGFwaU1hbmlmZXN0KSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgICAgICB9CisgICAgfSk7CiAjZWxz
ZQotICAgIHJldHVybiBfcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSA/IF9XS0xheW91dE1vZGVGaXhl
ZFNpemUgOiBfV0tMYXlvdXRNb2RlVmlld1NpemU7CisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVy
KQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwogI2VuZGlmCiB9CiAKLS0gKHZvaWQp
X3NldExheW91dE1vZGU6KF9XS0xheW91dE1vZGUpbGF5b3V0TW9kZQorLSAoX1dLUGFnaW5hdGlv
bk1vZGUpX3BhZ2luYXRpb25Nb2RlCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIFdLTGF5b3V0
TW9kZSB3a1ZpZXdMYXlvdXRNb2RlOwotICAgIHN3aXRjaCAobGF5b3V0TW9kZSkgewotICAgIGNh
c2UgX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZToKLSAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtX
S0xheW91dE1vZGVGaXhlZFNpemU7CisgICAgc3dpdGNoIChfcGFnZS0+cGFnaW5hdGlvbk1vZGUo
KSkgeworICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ6CisgICAgICAg
IHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOworICAgIGNhc2UgV2ViQ29yZTo6
UGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ6CisgICAgICAgIHJldHVybiBfV0tQYWdp
bmF0aW9uTW9kZUxlZnRUb1JpZ2h0OworICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6Umln
aHRUb0xlZnRQYWdpbmF0ZWQ6CisgICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVJpZ2h0
VG9MZWZ0OworICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0
ZWQ6CisgICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOworICAgIGNh
c2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ6CisgICAgICAgIHJl
dHVybiBfV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOwor
fQorCistICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooX1dLUGFnaW5hdGlvbk1vZGUpcGFnaW5h
dGlvbk1vZGUKK3sKKyAgICBXZWJDb3JlOjpQYWdpbmF0aW9uOjpNb2RlIG1vZGU7CisgICAgc3dp
dGNoIChwYWdpbmF0aW9uTW9kZSkgeworICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2lu
YXRlZDoKKyAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVk
RnJvbVZpZXdTY2FsZToKLSAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVE
eW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZTsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25N
b2RlTGVmdFRvUmlnaHQ6CisgICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpMZWZ0
VG9SaWdodFBhZ2luYXRlZDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tMYXlvdXRNb2Rl
RHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOgotICAgICAgICB3a1Zp
ZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11
bURvY3VtZW50U2l6ZTsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6Cisg
ICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tMYXlvdXRNb2RlVmlld1NpemU6Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVWaWV3U2l6ZTsK
KyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b206CisgICAgICAgIG1vZGUgPSBX
ZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2luYXRlZDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgorICAgICAgICBtb2RlID0g
V2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ7CiAgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgX2ltcGwtPnNldExh
eW91dE1vZGUod2tWaWV3TGF5b3V0TW9kZSk7Ci0jZWxzZQotICAgIF9wYWdlLT5zZXRVc2VGaXhl
ZExheW91dChsYXlvdXRNb2RlID09IF9XS0xheW91dE1vZGVGaXhlZFNpemUgfHwgbGF5b3V0TW9k
ZSA9PSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGUpOwotI2Vu
ZGlmCisKKyAgICBfcGFnZS0+c2V0UGFnaW5hdGlvbk1vZGUobW9kZSk7CiB9CiAKLS0gKENHU2l6
ZSlfZml4ZWRMYXlvdXRTaXplCistIChCT09MKV9wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5z
CiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5maXhlZExheW91dFNpemUoKTsKKyAgICByZXR1cm4gX3Bh
Z2UtPnBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoKTsKIH0KIAotLSAodm9pZClfc2V0Rml4
ZWRMYXlvdXRTaXplOihDR1NpemUpZml4ZWRMYXlvdXRTaXplCistICh2b2lkKV9zZXRQYWdpbmF0
aW9uQmVoYXZlc0xpa2VDb2x1bW5zOihCT09MKWJlaGF2ZXNMaWtlQ29sdW1ucwogewotICAgIF9w
YWdlLT5zZXRGaXhlZExheW91dFNpemUoV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6
OkZsb2F0U2l6ZShmaXhlZExheW91dFNpemUpKSk7CisgICAgX3BhZ2UtPnNldFBhZ2luYXRpb25C
ZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKTsKIH0KIAotLSAodm9pZClfc2V0
QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlOihCT09MKWJhY2tncm91bmRFeHRlbmRzCistIChD
R0Zsb2F0KV9wYWdlTGVuZ3RoCiB7Ci0gICAgX3BhZ2UtPnNldEJhY2tncm91bmRFeHRlbmRzQmV5
b25kUGFnZShiYWNrZ3JvdW5kRXh0ZW5kcyk7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdlTGVuZ3Ro
KCk7CiB9CiAKLS0gKEJPT0wpX2JhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZQorLSAodm9pZClf
c2V0UGFnZUxlbmd0aDooQ0dGbG9hdClwYWdlTGVuZ3RoCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5i
YWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKTsKKyAgICBfcGFnZS0+c2V0UGFnZUxlbmd0aChw
YWdlTGVuZ3RoKTsKIH0KIAotLSAoQ0dGbG9hdClfdmlld1NjYWxlCistIChDR0Zsb2F0KV9nYXBC
ZXR3ZWVuUGFnZXMKIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIF9wYWdlLT52aWV3
U2NhbGVGYWN0b3IoKTsKLSNlbHNlCi0gICAgcmV0dXJuIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVG
YWN0b3IoKTsKLSNlbmRpZgorICAgIHJldHVybiBfcGFnZS0+Z2FwQmV0d2VlblBhZ2VzKCk7CiB9
CiAKLS0gKHZvaWQpX3NldFZpZXdTY2FsZTooQ0dGbG9hdCl2aWV3U2NhbGUKKy0gKHZvaWQpX3Nl
dEdhcEJldHdlZW5QYWdlczooQ0dGbG9hdClnYXBCZXR3ZWVuUGFnZXMKIHsKLSAgICBpZiAodmll
d1NjYWxlIDw9IDAgfHwgaXNuYW4odmlld1NjYWxlKSB8fCBpc2luZih2aWV3U2NhbGUpKQotICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0
OkAiVmlldyBzY2FsZSBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXIiXTsKLQotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBfaW1wbC0+c2V0Vmlld1NjYWxlKHZpZXdTY2FsZSk7Ci0jZWxzZQotICAg
IGlmIChfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCkgPT0gdmlld1NjYWxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uVmlld0xheW91
dFNpemUoW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdLCB2aWV3U2NhbGUs
IF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKSk7Ci0jZW5kaWYKKyAgICBfcGFn
ZS0+c2V0R2FwQmV0d2VlblBhZ2VzKGdhcEJldHdlZW5QYWdlcyk7CiB9CiAKLS0gKHZvaWQpX3Nl
dE1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aDooQ0dGbG9hdCltaW5pbXVtRWZmZWN0aXZlRGV2
aWNlV2lkdGgKKy0gKEJPT0wpX3BhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQKIHsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGlmIChfcGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdp
ZHRoKCkgPT0gbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uVmlld0xheW91dFNpemUoW3NlbGYg
YWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdLCBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxl
RmFjdG9yKCksIG1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCk7Ci0jZW5kaWYKKyAgICByZXR1
cm4gX3BhZ2UtPnBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQoKTsKIH0KIAotLSAoQ0dGbG9hdClf
bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoCistICh2b2lkKV9zZXRQYWdpbmF0aW9uTGluZUdy
aWRFbmFibGVkOihCT09MKWxpbmVHcmlkRW5hYmxlZAogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgcmV0dXJuIF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKTsKLSNl
bHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKKyAgICBfcGFnZS0+c2V0UGFnaW5hdGlvbkxpbmVH
cmlkRW5hYmxlZChsaW5lR3JpZEVuYWJsZWQpOwogfQogCi0jcHJhZ21hIG1hcmsgc2Nyb2xscGVy
ZiBtZXRob2RzCi0KLS0gKHZvaWQpX3NldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25F
bmFibGVkOihCT09MKWVuYWJsZWQKKy0gKE5TVUludGVnZXIpX3BhZ2VDb3VudAogewotICAgIF9w
YWdlLT5zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZChlbmFibGVkKTsK
KyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VDb3VudCgpOwogfQogCi0tIChCT09MKV9zY3JvbGxQZXJm
b3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZAorLSAoQk9PTClfc3VwcG9ydHNUZXh0Wm9vbQog
ewotICAgIHJldHVybiBfcGFnZS0+c2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJs
ZWQoKTsKKyAgICByZXR1cm4gX3BhZ2UtPnN1cHBvcnRzVGV4dFpvb20oKTsKIH0KIAotLSAoTlNB
cnJheSAqKV9zY3JvbGxQZXJmb3JtYW5jZURhdGEKKy0gKGRvdWJsZSlfdGV4dFpvb21GYWN0b3IK
IHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChXZWJLaXQ6OlJlbW90ZUxheWVy
VHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSogc2Nyb2xsUGVyZkRhdGEgPSBfcGFnZS0+c2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxQZXJmRGF0YS0+
ZGF0YSgpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gX3BhZ2UtPnRleHRa
b29tRmFjdG9yKCk7CiB9CiAKLSNwcmFnbWEgbWFyayBtZWRpYSBwbGF5YmFjayByZXN0cmljdGlv
bnMKLQotLSAoQk9PTClfYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrCi17Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gX3BhZ2UtPmFsbG93c01lZGlhRG9jdW1l
bnRJbmxpbmVQbGF5YmFjaygpOwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYKLX0KLQot
LSAodm9pZClfc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOihCT09MKWZsYWcK
LXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIF9wYWdlLT5zZXRBbGxvd3NNZWRpYURv
Y3VtZW50SW5saW5lUGxheWJhY2soZmxhZyk7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTClfd2ViUHJv
Y2Vzc0lzUmVzcG9uc2l2ZQotewotICAgIHJldHVybiBfcGFnZS0+cHJvY2VzcygpLmlzUmVzcG9u
c2l2ZSgpOwotfQotCi0tICh2b2lkKV9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6KGlkPF9XS0Z1bGxz
Y3JlZW5EZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0g
ICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGll
bnQoKSkpCi0gICAgICAgIGRvd25jYXN0PFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2Ut
PmZ1bGxzY3JlZW5DbGllbnQoKSkuc2V0RGVsZWdhdGUoZGVsZWdhdGUpOwotI2VuZGlmCi19Ci0K
LS0gKGlkPF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZT4pX2Z1bGxzY3JlZW5EZWxlZ2F0ZQotewotI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoaXM8V2ViS2l0OjpGdWxsc2NyZWVuQ2xp
ZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkuZGVs
ZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
Qk9PTClfaXNJbkZ1bGxzY3JlZW4KLXsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAg
cmV0dXJuIF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpICYmIF9wYWdlLT5mdWxsU2NyZWVuTWFu
YWdlcigpLT5pc0Z1bGxTY3JlZW4oKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLS0gKF9XS01lZGlhQ2FwdHVyZVN0YXRlKV9tZWRpYUNhcHR1cmVTdGF0ZQotewotICAg
IHJldHVybiBXZWJLaXQ6OnRvV0tNZWRpYUNhcHR1cmVTdGF0ZShfcGFnZS0+bWVkaWFTdGF0ZUZs
YWdzKCkpOwotfQotCi0tICh2b2lkKV9zZXRNZWRpYUNhcHR1cmVFbmFibGVkOihCT09MKWVuYWJs
ZWQKLXsKLSAgICBfcGFnZS0+c2V0TWVkaWFDYXB0dXJlRW5hYmxlZChlbmFibGVkKTsKLX0KLQot
LSAoQk9PTClfbWVkaWFDYXB0dXJlRW5hYmxlZAotewotICAgIHJldHVybiBfcGFnZS0+bWVkaWFD
YXB0dXJlRW5hYmxlZCgpOwotfQotCi0tICh2b2lkKV9zZXRQYWdlTXV0ZWQ6KF9XS01lZGlhTXV0
ZWRTdGF0ZSltdXRlZFN0YXRlCi17Ci0gICAgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TXV0ZWRT
dGF0ZUZsYWdzIGNvcmVTdGF0ZSA9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok5vbmVNdXRlZDsK
LQotICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFBdWRpb011dGVkKQotICAgICAgICBjb3Jl
U3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6QXVkaW9Jc011dGVkOwotICAgIGlmICht
dXRlZFN0YXRlICYgX1dLTWVkaWFDYXB0dXJlRGV2aWNlc011dGVkKQotICAgICAgICBjb3JlU3Rh
dGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6QXVkaW9BbmRWaWRlb0NhcHR1cmVJc011dGVk
OwotICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFTY3JlZW5DYXB0dXJlTXV0ZWQpCi0gICAg
ICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpTY3JlZW5DYXB0dXJlSXNN
dXRlZDsKLQotICAgIF9wYWdlLT5zZXRNdXRlZChjb3JlU3RhdGUpOwotfQotCi0tICh2b2lkKV9y
ZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uCi17Ci0j
aWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotICAgIF9wYWdlLT5yZW1vdmVEYXRhRGV0ZWN0ZWRM
aW5rcyhbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwgcGFnZSA9IG1ha2VX
ZWFrUHRyKF9wYWdlLmdldCgpKV0gKGF1dG8mIHJlc3VsdCkgewotICAgICAgICBpZiAocGFnZSkK
LSAgICAgICAgICAgIHBhZ2UtPnNldERhdGFEZXRlY3Rpb25SZXN1bHQocmVzdWx0KTsKLSAgICAg
ICAgaWYgKGNvbXBsZXRpb24pCi0gICAgICAgICAgICBjb21wbGV0aW9uKCk7Ci0gICAgfSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uKTsKLSNlbmRpZgotfQotCi0jcHJhZ21h
IG1hcmsgaU9TLXNwZWNpZmljIG1ldGhvZHMKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0K
LS0gKHZvaWQpX2RldGVjdERhdGFXaXRoVHlwZXM6KFdLRGF0YURldGVjdG9yVHlwZXMpdHlwZXMg
Y29tcGxldGlvbkhhbmRsZXI6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgotewotI2lmIEVO
QUJMRShEQVRBX0RFVEVDVElPTikKLSAgICBfcGFnZS0+ZGV0ZWN0RGF0YUluQWxsRnJhbWVzKGZy
b21XS0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbiksIHBhZ2UgPSBtYWtlV2Vha1B0cihfcGFnZS5nZXQoKSldIChhdXRvJiByZXN1
bHQpIHsKLSAgICAgICAgaWYgKHBhZ2UpCi0gICAgICAgICAgICBwYWdlLT5zZXREYXRhRGV0ZWN0
aW9uUmVzdWx0KHJlc3VsdCk7Ci0gICAgICAgIGlmIChjb21wbGV0aW9uKQotICAgICAgICAgICAg
Y29tcGxldGlvbigpOwotICAgIH0pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odHlwZXMpOwot
ICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotLSAodm9pZClyZW1vdmVGcm9tU3VwZXJ2aWV3Ci17Ci0gICAgW3N1cGVy
IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIgaXNGdWxsU2NyZWVuXSkKLSAgICAgICAgW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ciB3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1cGVydmlld1doaWxlSW5GdWxsc2NyZWVuXTsKLX0KLSNl
bmRpZgotCi0vLyBEZXByZWNhdGVkIFNQSS4KLS0gKENHU2l6ZSlfbWluaW11bUxheW91dFNpemVP
dmVycmlkZQotewotICAgIEFTU0VSVChfdmlld0xheW91dFNpemVPdmVycmlkZSk7Ci0gICAgcmV0
dXJuIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlLnZhbHVlT3IoQ0dTaXplWmVybyk7Ci19Ci0KLS0g
KHZvaWQpX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6KENHU2l6ZSl2aWV3TGF5b3V0U2l6ZU92
ZXJyaWRlCi17Ci0gICAgX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUgPSB2aWV3TGF5b3V0U2l6ZU92
ZXJyaWRlOwotCi0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6
RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCi0gICAgICAgIFtzZWxmIF9k
aXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZSh2aWV3TGF5b3V0U2l6
ZU92ZXJyaWRlKV07Ci19Ci0KLS0gKFVJRWRnZUluc2V0cylfb2JzY3VyZWRJbnNldHMKLXsKLSAg
ICByZXR1cm4gX29ic2N1cmVkSW5zZXRzOwotfQotCi0tICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0
czooVUlFZGdlSW5zZXRzKW9ic2N1cmVkSW5zZXRzCi17Ci0gICAgQVNTRVJUKG9ic2N1cmVkSW5z
ZXRzLnRvcCA+PSAwKTsKLSAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMubGVmdCA+PSAwKTsKLSAg
ICBBU1NFUlQob2JzY3VyZWRJbnNldHMuYm90dG9tID49IDApOwotICAgIEFTU0VSVChvYnNjdXJl
ZEluc2V0cy5yaWdodCA+PSAwKTsKLQotICAgIF9oYXZlU2V0T2JzY3VyZWRJbnNldHMgPSBZRVM7
Ci0KLSAgICBpZiAoVUlFZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMoX29ic2N1cmVkSW5zZXRz
LCBvYnNjdXJlZEluc2V0cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9vYnNjdXJlZEluc2V0
cyA9IG9ic2N1cmVkSW5zZXRzOwotCi0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlXTsKLX0KLQotLSAoVUlSZWN0RWRnZSlfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0
ZWRCeVNhZmVBcmVhCi17Ci0gICAgcmV0dXJuIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5
U2FmZUFyZWE7Ci19Ci0KLS0gKHZvaWQpX3NldE9ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlT
YWZlQXJlYTooVUlSZWN0RWRnZSllZGdlcwotewotICAgIGlmIChlZGdlcyA9PSBfb2JzY3VyZWRJ
bnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfb2Jz
Y3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhID0gZWRnZXM7Ci0KLSAgICBbc2VsZiBf
c2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwotfQotCi0tIChVSUVkZ2VJbnNldHMp
X3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0cwotewotICAgIHJldHVybiBfdW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXRzOwotfQotCi0tICh2b2lkKV9zZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHM6KFVJ
RWRnZUluc2V0cyl1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMKLXsKLSAgICBBU1NFUlQodW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXRzLnRvcCA+PSAwKTsKLSAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXRzLmxlZnQgPj0gMCk7Ci0gICAgQVNTRVJUKHVub2JzY3VyZWRTYWZlQXJlYUluc2V0
cy5ib3R0b20gPj0gMCk7Ci0gICAgQVNTRVJUKHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5yaWdo
dCA+PSAwKTsKLQotICAgIF9oYXZlU2V0VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gWUVTOwot
Ci0gICAgaWYgKFVJRWRnZUluc2V0c0VxdWFsVG9FZGdlSW5zZXRzKF91bm9ic2N1cmVkU2FmZUFy
ZWFJbnNldHMsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7
Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwotfQotCi0t
IChCT09MKV9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzCi17Ci0gICAgaWYgKCFb
c2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBy
ZXR1cm4gX2F2b2lkc1Vuc2FmZUFyZWE7Ci19Ci0KLS0gKHZvaWQpX3NldEludGVyZmFjZU9yaWVu
dGF0aW9uT3ZlcnJpZGU6KFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRp
b24KLXsKLSAgICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBZRVM7Ci0gICAgX2lu
dGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBpbnRlcmZhY2VPcmllbnRhdGlvbjsKLQotICAg
IGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXREZXZp
Y2VPcmllbnRhdGlvbjpkZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNlT3JpZW50YXRpb24o
X2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUpXTsKLX0KLQotLSAoVUlJbnRlcmZhY2VPcmll
bnRhdGlvbilfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZQotewotICAgIEFTU0VSVChfb3Zl
cnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24pOwotICAgIHJldHVybiBfaW50ZXJmYWNlT3JpZW50
YXRpb25PdmVycmlkZTsKLX0KLQotLSAodm9pZClfY2xlYXJJbnRlcmZhY2VPcmllbnRhdGlvbk92
ZXJyaWRlCi17Ci0gICAgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uID0gTk87Ci0gICAg
X2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBVSUludGVyZmFjZU9yaWVudGF0aW9uUG9y
dHJhaXQ7Ci19Ci0KLS8vIERlcHJlY2F0ZWQgU1BJCi0tIChDR1NpemUpX21heGltdW1Vbm9ic2N1
cmVkU2l6ZU92ZXJyaWRlCi17Ci0gICAgQVNTRVJUKF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVy
cmlkZSk7Ci0gICAgcmV0dXJuIF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZS52YWx1ZU9y
KENHU2l6ZVplcm8pOwotfQotCi0tICh2b2lkKV9zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVy
cmlkZTooQ0dTaXplKXNpemUKLXsKLSAgICBBU1NFUlQoc2l6ZS53aWR0aCA8PSBzZWxmLmJvdW5k
cy5zaXplLndpZHRoICYmIHNpemUuaGVpZ2h0IDw9IHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0KTsK
LSAgICBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUgPSBzaXplOwotCi0gICAgaWYgKF9k
eW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZTo6Tm90UmVzaXppbmcpCi0gICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGltdW1Vbm9i
c2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUoc2l6ZSldOwotfQotCi0tICh2b2lkKV9zZXRB
bGxvd3NWaWV3cG9ydFNocmlua1RvRml0OihCT09MKWFsbG93U2hyaW5rVG9GaXQKLXsKLSAgICBf
YWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdCA9IGFsbG93U2hyaW5rVG9GaXQ7Ci19Ci0KLS0gKEJP
T0wpX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQKLXsKLSAgICByZXR1cm4gX2FsbG93c1ZpZXdw
b3J0U2hyaW5rVG9GaXQ7Ci19Ci0KLS0gKHZvaWQpX2JlZ2luSW50ZXJhY3RpdmVPYnNjdXJlZElu
c2V0c0NoYW5nZQotewotICAgIEFTU0VSVCghX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVy
YWN0aXZlbHkpOwotICAgIF9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0g
WUVTOwotfQotCi0tICh2b2lkKV9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlCi17
Ci0gICAgQVNTRVJUKF9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5KTsKLSAg
ICBfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSA9IE5POwotICAgIFtzZWxm
IF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci19Ci0KLS0gKHZvaWQpX2hpZGVD
b250ZW50VW50aWxOZXh0VXBkYXRlCi17Ci0gICAgaWYgKGF1dG8qIGFyZWEgPSBfcGFnZS0+ZHJh
d2luZ0FyZWEoKSkKLSAgICAgICAgYXJlYS0+aGlkZUNvbnRlbnRVbnRpbEFueVVwZGF0ZSgpOwot
fQotCi0tICh2b2lkKV9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6KHZvaWQgKF4pKHZv
aWQpKXVwZGF0ZUJsb2NrCi17Ci0gICAgQ0dSZWN0IG9sZEJvdW5kcyA9IHNlbGYuYm91bmRzOwot
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QgPSBfcGFnZS0+
dW5vYnNjdXJlZENvbnRlbnRSZWN0KCk7Ci0KLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENv
bnRlbnRWaWV3XSB8fCAhX2hhc0NvbW1pdHRlZExvYWRGb3JNYWluRnJhbWUgfHwgQ0dSZWN0SXNF
bXB0eShvbGRCb3VuZHMpIHx8IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOildKQotICAgICAgICAgICAg
W19jdXN0b21Db250ZW50VmlldyB3ZWJfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOnVw
ZGF0ZUJsb2NrXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBkYXRlQmxvY2soKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChw
YWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRh
dGVzOl0iLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkpOwotCi0gICAgX2R5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGU6OlJlc2l6aW5nV2l0aEFuaW1hdGlvbjsKLQotICAgIGF1dG8gb2xkVmlld0xheW91dFNpemUg
PSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc107Ci0gICAgYXV0byBvbGRN
YXhpbXVtVW5vYnNjdXJlZFNpemUgPSBhY3RpdmVNYXhpbXVtVW5vYnNjdXJlZFNpemUoc2VsZiwg
b2xkQm91bmRzKTsKLSAgICBpbnQzMl90IG9sZE9yaWVudGF0aW9uID0gYWN0aXZlT3JpZW50YXRp
b24oc2VsZik7Ci0gICAgVUlFZGdlSW5zZXRzIG9sZE9ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVk
SW5zZXRzOwotCi0gICAgdXBkYXRlQmxvY2soKTsKLQotICAgIENHUmVjdCBuZXdCb3VuZHMgPSBz
ZWxmLmJvdW5kczsKLSAgICBhdXRvIG5ld1ZpZXdMYXlvdXRTaXplID0gW3NlbGYgYWN0aXZlVmll
d0xheW91dFNpemU6bmV3Qm91bmRzXTsKLSAgICBhdXRvIG5ld01heGltdW1Vbm9ic2N1cmVkU2l6
ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShzZWxmLCBuZXdCb3VuZHMpOwotICAgIGlu
dDMyX3QgbmV3T3JpZW50YXRpb24gPSBhY3RpdmVPcmllbnRhdGlvbihzZWxmKTsKLSAgICBVSUVk
Z2VJbnNldHMgbmV3T2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7Ci0gICAgQ0dSZWN0
IGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMgPSBVSUVkZ2VJbnNldHNJbnNl
dFJlY3QobmV3Qm91bmRzLCBfb2JzY3VyZWRJbnNldHMpOwotICAgIENHUmVjdCBjb250ZW50Vmll
d0JvdW5kcyA9IFtfY29udGVudFZpZXcgYm91bmRzXTsKLQotICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIShfdmlld0xheW91dFNpemVPdmVycmlkZSAmJiBuZXdWaWV3TGF5b3V0U2l6ZS5pc0VtcHR5
KCkpLCAiQ2xpZW50cyBjb250cm9sbGluZyB0aGUgbGF5b3V0IHNpemUgc2hvdWxkIG1haW50YWlu
IGEgdmFsaWQgbGF5b3V0IHNpemUgdG8gbWluaW1pemUgbGF5b3V0cy4iKTsKLSAgICBpZiAoQ0dS
ZWN0SXNFbXB0eShuZXdCb3VuZHMpIHx8IG5ld1ZpZXdMYXlvdXRTaXplLmlzRW1wdHkoKSB8fCBD
R1JlY3RJc0VtcHR5KGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMpIHx8IENH
UmVjdElzRW1wdHkoY29udGVudFZpZXdCb3VuZHMpKSB7Ci0gICAgICAgIFtzZWxmIF9jYW5jZWxB
bmltYXRlZFJlc2l6ZV07Ci0gICAgICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07Ci0g
ICAgICAgIGlmIChfdmlld0xheW91dFNpemVPdmVycmlkZSkKLSAgICAgICAgICAgIFtzZWxmIF9k
aXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOm5ld1ZpZXdMYXlvdXRTaXplXTsKLSAgICAgICAgaWYg
KF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSkKLSAgICAgICAgICAgIFtzZWxmIF9kaXNw
YXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUobmV3TWF4aW11
bVVub2JzY3VyZWRTaXplKV07Ci0gICAgICAgIGlmIChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50
YXRpb24pCi0gICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpu
ZXdPcmllbnRhdGlvbl07Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChDR1Jl
Y3RFcXVhbFRvUmVjdChvbGRCb3VuZHMsIG5ld0JvdW5kcykKLSAgICAgICAgJiYgb2xkVmlld0xh
eW91dFNpemUgPT0gbmV3Vmlld0xheW91dFNpemUKLSAgICAgICAgJiYgb2xkTWF4aW11bVVub2Jz
Y3VyZWRTaXplID09IG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZQotICAgICAgICAmJiBvbGRPcmll
bnRhdGlvbiA9PSBuZXdPcmllbnRhdGlvbgotICAgICAgICAmJiBVSUVkZ2VJbnNldHNFcXVhbFRv
RWRnZUluc2V0cyhvbGRPYnNjdXJlZEluc2V0cywgbmV3T2JzY3VyZWRJbnNldHMpKSB7Ci0gICAg
ICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6ZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMgPSBDQVRyYW5zZm9y
bTNESWRlbnRpdHk7Ci0KLSAgICBpZiAoIV9yZXNpemVBbmltYXRpb25WaWV3KSB7Ci0gICAgICAg
IE5TVUludGVnZXIgaW5kZXhPZkNvbnRlbnRWaWV3ID0gW1tfc2Nyb2xsVmlldyBzdWJ2aWV3c10g
aW5kZXhPZk9iamVjdDpfY29udGVudFZpZXcuZ2V0KCldOwotICAgICAgICBfcmVzaXplQW5pbWF0
aW9uVmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW19yZXNp
emVBbmltYXRpb25WaWV3IGxheWVyXS5uYW1lID0gQCJSZXNpemVBbmltYXRpb24iOwotICAgICAg
ICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3VidmlldzpfcmVzaXplQW5pbWF0aW9uVmlldy5nZXQoKSBh
dEluZGV4OmluZGV4T2ZDb250ZW50Vmlld107Ci0gICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmll
dyBhZGRTdWJ2aWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0gICAgICAgIFtfcmVzaXplQW5pbWF0
aW9uVmlldyBhZGRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5zY2FsZWRWaWV3XV07Ci0gICAgfQot
Ci0gICAgQ0dTaXplIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzID0gY29udGVu
dFZpZXdCb3VuZHMuc2l6ZTsKLSAgICBbX3Njcm9sbFZpZXcgc2V0TWluaW11bVpvb21TY2FsZTpz
dGQ6Om1pbihuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gY29udGVudFNpemVJbkNvbnRlbnRW
aWV3Q29vcmRpbmF0ZXMud2lkdGgsIFtfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXSldOwot
ICAgIFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVtWm9vbVNjYWxlOnN0ZDo6bWF4KG5ld1ZpZXdMYXlv
dXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0
aCwgW19zY3JvbGxWaWV3IG1heGltdW1ab29tU2NhbGVdKV07Ci0KLSAgICAvLyBDb21wdXRlIHRo
ZSBuZXcgc2NhbGUgdG8ga2VlcCB0aGUgY3VycmVudCBjb250ZW50IHdpZHRoIGluIHRoZSBzY3Jv
bGx2aWV3LgotICAgIENHRmxvYXQgb2xkV2ViVmlld1dpZHRoSW5Db250ZW50Vmlld0Nvb3JkaW5h
dGVzID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LndpZHRoKCk7Ci0gICAgX2FuaW1hdGVkUmVz
aXplT3JpZ2luYWxDb250ZW50V2lkdGggPSBzdGQ6Om1pbihjb250ZW50U2l6ZUluQ29udGVudFZp
ZXdDb29yZGluYXRlcy53aWR0aCwgb2xkV2ViVmlld1dpZHRoSW5Db250ZW50Vmlld0Nvb3JkaW5h
dGVzKTsKLSAgICBDR0Zsb2F0IHRhcmdldFNjYWxlID0gbmV3Vmlld0xheW91dFNpemUud2lkdGgo
KSAvIF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoOwotICAgIENHRmxvYXQgcmVz
aXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxlID0gdGFyZ2V0U2NhbGUgLyBjb250ZW50Wm9v
bVNjYWxlKHNlbGYpOwotICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyBzZXRUcmFuc2Zvcm06Q0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocmVzaXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxl
LCByZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUpXTsKLQotICAgIC8vIENvbXB1dGUg
YSBuZXcgcG9zaXRpb24gdG8ga2VlcCB0aGUgY29udGVudCBjZW50ZXJlZC4KLSAgICBDR1BvaW50
IG9yaWdpbmFsQ29udGVudENlbnRlciA9IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC5jZW50ZXIo
KTsKLSAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVudENlbnRlckluU2VsZkNvb3JkaW5hdGVzID0g
W3NlbGYgY29udmVydFBvaW50Om9yaWdpbmFsQ29udGVudENlbnRlciBmcm9tVmlldzpfY29udGVu
dFZpZXcuZ2V0KCldOwotICAgIENHUG9pbnQgZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNl
bGZDb29yZGluYXRlcyA9IENHUG9pbnRNYWtlKGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29v
cmRpbmF0ZXMub3JpZ2luLnggKyBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVz
LnNpemUud2lkdGggLyAyLCBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLm9y
aWdpbi55ICsgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5zaXplLmhlaWdo
dCAvIDIpOwotCi0gICAgQ0dQb2ludCBvcmlnaW5hbENvbnRlbnRPZmZzZXQgPSBbX3Njcm9sbFZp
ZXcgY29udGVudE9mZnNldF07Ci0gICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0ID0gb3JpZ2luYWxD
b250ZW50T2Zmc2V0OwotICAgIGNvbnRlbnRPZmZzZXQueCArPSAob3JpZ2luYWxDb250ZW50Q2Vu
dGVySW5TZWxmQ29vcmRpbmF0ZXMueCAtIGZ1dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxm
Q29vcmRpbmF0ZXMueCk7Ci0gICAgY29udGVudE9mZnNldC55ICs9IChvcmlnaW5hbENvbnRlbnRD
ZW50ZXJJblNlbGZDb29yZGluYXRlcy55IC0gZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNl
bGZDb29yZGluYXRlcy55KTsKLQotICAgIC8vIExpbWl0IHRoZSBuZXcgb2Zmc2V0IHdpdGhpbiB0
aGUgc2Nyb2xsdmlldywgd2UgZG8gbm90IHdhbnQgdG8gcnViYmVyIGJhbmQgcHJvZ3JhbW1hdGlj
YWxseS4KLSAgICBDR1NpemUgZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcyA9IENH
U2l6ZU1ha2UoY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGggKiB0YXJn
ZXRTY2FsZSwgY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMuaGVpZ2h0ICogdGFy
Z2V0U2NhbGUpOwotICAgIENHRmxvYXQgbWF4SG9yaXpvbnRhbE9mZnNldCA9IGZ1dHVyZUNvbnRl
bnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMud2lkdGggLSBuZXdCb3VuZHMuc2l6ZS53aWR0aCArIF9v
YnNjdXJlZEluc2V0cy5yaWdodDsKLSAgICBjb250ZW50T2Zmc2V0LnggPSBzdGQ6Om1pbihjb250
ZW50T2Zmc2V0LngsIG1heEhvcml6b250YWxPZmZzZXQpOwotICAgIENHRmxvYXQgbWF4VmVydGlj
YWxPZmZzZXQgPSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzLmhlaWdodCAtIG5l
d0JvdW5kcy5zaXplLmhlaWdodCArIF9vYnNjdXJlZEluc2V0cy5ib3R0b207Ci0gICAgY29udGVu
dE9mZnNldC55ID0gc3RkOjptaW4oY29udGVudE9mZnNldC55LCBtYXhWZXJ0aWNhbE9mZnNldCk7
Ci0KLSAgICBjb250ZW50T2Zmc2V0LnggPSBzdGQ6Om1heChjb250ZW50T2Zmc2V0LngsIC1fb2Jz
Y3VyZWRJbnNldHMubGVmdCk7Ci0gICAgY29udGVudE9mZnNldC55ID0gc3RkOjptYXgoY29udGVu
dE9mZnNldC55LCAtX29ic2N1cmVkSW5zZXRzLnRvcCk7Ci0KLSAgICAvLyBNYWtlIHRoZSB0b3Av
Ym90dG9tIGVkZ2VzICJzdGlja3kiIHdpdGhpbiAxIHBpeGVsLgotICAgIGlmIChvbGRVbm9ic2N1
cmVkQ29udGVudFJlY3QubWF4WSgpID4gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0
ZXMuaGVpZ2h0IC0gMSkKLSAgICAgICAgY29udGVudE9mZnNldC55ID0gbWF4VmVydGljYWxPZmZz
ZXQ7Ci0gICAgaWYgKG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC55KCkgPCAxKQotICAgICAgICBj
b250ZW50T2Zmc2V0LnkgPSBbc2VsZiBfaW5pdGlhbENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3
XS55OwotCi0gICAgLy8gRklYTUU6IGlmIHdlIGhhdmUgY29udGVudCBjZW50ZXJlZCBhZnRlciBk
b3VibGUgdGFwIHRvIHpvb20sIHdlIHNob3VsZCBhbHNvIHRyeSB0byBrZWVwIHRoYXQgcmVjdCBp
biB2aWV3LgotICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdD
b250ZW50U2l6ZSgqX3BhZ2UsIGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMpXTsK
LSAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpjb250ZW50T2Zmc2V0XTsKLQotICAg
IENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJl
Y3Q6bmV3Qm91bmRzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotICAgIENHUmVjdCB1bm9i
c2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6ZnV0dXJl
VW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgp
XTsKLQotICAgIFVJRWRnZUluc2V0cyB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBbc2VsZiBf
Y29tcHV0ZWRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldF07Ci0gICAgV2ViQ29yZTo6RmxvYXRCb3hF
eHRlbnQgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0ZW50KHVub2JzY3VyZWRTYWZlQXJlYUlu
c2V0cy50b3AsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5yaWdodCwgdW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXRzLmJvdHRvbSwgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmxlZnQpOwotCi0gICAg
X2xhc3RTZW50Vmlld0xheW91dFNpemUgPSBuZXdWaWV3TGF5b3V0U2l6ZTsKLSAgICBfbGFzdFNl
bnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemU7Ci0gICAg
X2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gPSBuZXdPcmllbnRhdGlvbjsKLQotICAgIF9wYWdl
LT5keW5hbWljVmlld3BvcnRTaXplVXBkYXRlKG5ld1ZpZXdMYXlvdXRTaXplLCBuZXdNYXhpbXVt
VW5vYnNjdXJlZFNpemUsIHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMsIHVub2JzY3Vy
ZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMsIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29v
cmRpbmF0ZXMsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0c0V4dGVudCwgdGFyZ2V0U2NhbGUsIG5l
d09yaWVudGF0aW9uLCArK19jdXJyZW50RHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEKTsKLSAg
ICBpZiAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IF9wYWdlLT5kcmF3
aW5nQXJlYSgpKQotICAgICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXpl
KG5ld0JvdW5kcy5zaXplKSk7Ci0KLSAgICBfd2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRS
ZXNpemUgPSBZRVM7Ci0gICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IFlFUzsKLX0K
LQotLSAodm9pZClfZW5kQW5pbWF0ZWRSZXNpemUKLXsKLSAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXpl
XSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAlZCIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVy
KCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUpOwotCi0gICAgLy8gSWYg
d2UgYWxyZWFkeSBoYXZlIGFuIHVwLXRvLWRhdGUgbGF5ZXIgdHJlZSwgaW1tZWRpYXRlbHkgY29t
cGxldGUKLSAgICAvLyB0aGUgcmVzaXplLiBPdGhlcndpc2UsIHdlIHdpbGwgZGVmZXIgY29tcGxl
dGlvbiB1bnRpbCB3ZSBkby4KLSAgICBfd2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gTk87
Ci0gICAgaWYgKCFfd2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUpCi0gICAgICAg
IFtzZWxmIF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXTsKLX0KLQotLSAodm9pZClfcmVzaXpl
V2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXM6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2Nr
Ci17Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1b
V0tXZWJWaWV3IF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpdIiwgc2VsZiwg
X3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKLQotICAgIFtzZWxmIF9iZWdpbkFuaW1h
dGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxvY2tdOwotICAgIGlmIChfZHluYW1pY1ZpZXdw
b3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJlc2l6
aW5nV2l0aEFuaW1hdGlvbikgewotICAgICAgICBbX2NvbnRlbnRWaWV3IHNldEhpZGRlbjpZRVNd
OwotICAgICAgICBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoRG9jdW1lbnRIaWRkZW47Ci0gICAgICAgIAot
ICAgICAgICAvLyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXMgaXMgdXNlZCBi
eSBpdHNlbGY7IHRoZSBjbGllbnQgd2lsbAotICAgICAgICAvLyBub3QgY2FsbCBlbmRBbmltYXRl
ZFJlc2l6ZSwgc28gd2UgY2FuJ3Qgd2FpdCBmb3IgaXQuCi0gICAgICAgIF93YWl0aW5nRm9yRW5k
QW5pbWF0ZWRSZXNpemUgPSBOTzsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX3NldE92ZXJsYWlkQWNj
ZXNzb3J5Vmlld3NJbnNldDooQ0dTaXplKWluc2V0Ci17Ci0gICAgW19jdXN0b21Db250ZW50Vmll
dyB3ZWJfc2V0T3ZlcmxhaWRBY2Nlc3NvcnlWaWV3c0luc2V0Omluc2V0XTsKLX0KLQotLSAodm9p
ZClfc25hcHNob3RSZWN0OihDR1JlY3QpcmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFnZU9m
V2lkdGg6KENHRmxvYXQpaW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShDR0lt
YWdlUmVmKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBk
YXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5n
KSB7Ci0gICAgICAgIC8vIERlZmVyIHNuYXBzaG90dGluZyB1bnRpbCBhZnRlciB0aGUgY3VycmVu
dCByZXNpemUgY29tcGxldGVzLgotICAgICAgICB2b2lkICheY29waWVkQ29tcGxldGlvbkhhbmRs
ZXIpKENHSW1hZ2VSZWYpID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwotICAgICAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFNlbGYgPSBzZWxmOwotICAgICAgICBfY2FsbGJhY2tz
RGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFtyZXRhaW5lZFNlbGYsIHJlY3RJblZpZXdDb29y
ZGluYXRlcywgaW1hZ2VXaWR0aCwgY29waWVkQ29tcGxldGlvbkhhbmRsZXJdIHsKLSAgICAgICAg
ICAgIFtyZXRhaW5lZFNlbGYgX3NuYXBzaG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50
b0ltYWdlT2ZXaWR0aDppbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOmNvcGllZENvbXBsZXRp
b25IYW5kbGVyXTsKLSAgICAgICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNl
XTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDR1JlY3Qgc25h
cHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5W
aWV3Q29vcmRpbmF0ZXMgdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Ci0gICAgQ0dG
bG9hdCBpbWFnZVNjYWxlID0gaW1hZ2VXaWR0aCAvIHNuYXBzaG90UmVjdEluQ29udGVudENvb3Jk
aW5hdGVzLnNpemUud2lkdGg7Ci0gICAgQ0dGbG9hdCBpbWFnZUhlaWdodCA9IGltYWdlU2NhbGUg
KiBzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5zaXplLmhlaWdodDsKLSAgICBDR1Np
emUgaW1hZ2VTaXplID0gQ0dTaXplTWFrZShpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7Ci0KLSAg
ICBpZiAoW1tfY3VzdG9tQ29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1c3RvbVNuYXBz
aG90dGluZ10pIHsKLSAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc25hcHNob3RSZWN0
SW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzOnNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVz
IHNuYXBzaG90V2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFu
ZGxlcl07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBIQVZFKENPUkVfQU5JTUFUSU9O
X1JFTkRFUl9TRVJWRVIpICYmIEhBVkUoSU9TVVJGQUNFKQotICAgIC8vIElmIHdlIGFyZSBwYXJl
bnRlZCBhbmQgbm90IGhpZGRlbiwgYW5kIHRodXMgd29uJ3QgaW5jdXIgYSBzaWduaWZpY2FudCBw
ZW5hbHR5IGZyb20gcGFnaW5nIGluIHRpbGVzLCBzbmFwc2hvdCB0aGUgdmlldyBoaWVyYXJjaHkg
ZGlyZWN0bHkuCi0gICAgTlNTdHJpbmcgKmRpc3BsYXlOYW1lID0gc2VsZi53aW5kb3cuc2NyZWVu
LmRpc3BsYXlDb25maWd1cmF0aW9uLm5hbWU7Ci0gICAgaWYgKGRpc3BsYXlOYW1lICYmICFzZWxm
LndpbmRvdy5oaWRkZW4pIHsKLSAgICAgICAgYXV0byBzdXJmYWNlID0gV2ViQ29yZTo6SU9TdXJm
YWNlOjpjcmVhdGUoV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShp
bWFnZVNpemUpKSwgV2ViQ29yZTo6c1JHQkNvbG9yU3BhY2VSZWYoKSk7Ci0gICAgICAgIGlmICgh
c3VyZmFjZSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgQ0dGbG9hdCBpbWFnZVNjYWxlSW5W
aWV3Q29vcmRpbmF0ZXMgPSBpbWFnZVdpZHRoIC8gcmVjdEluVmlld0Nvb3JkaW5hdGVzLnNpemUu
d2lkdGg7Ci0gICAgICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1h
a2VTY2FsZShpbWFnZVNjYWxlSW5WaWV3Q29vcmRpbmF0ZXMsIGltYWdlU2NhbGVJblZpZXdDb29y
ZGluYXRlcywgMSk7Ci0gICAgICAgIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RUcmFuc2xhdGUo
dHJhbnNmb3JtLCAtcmVjdEluVmlld0Nvb3JkaW5hdGVzLm9yaWdpbi54LCAtcmVjdEluVmlld0Nv
b3JkaW5hdGVzLm9yaWdpbi55LCAwKTsKLSAgICAgICAgQ0FSZW5kZXJTZXJ2ZXJSZW5kZXJEaXNw
bGF5TGF5ZXJXaXRoVHJhbnNmb3JtQW5kVGltZU9mZnNldChNQUNIX1BPUlRfTlVMTCwgKENGU3Ry
aW5nUmVmKWRpc3BsYXlOYW1lLCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElkLCByZWludGVy
cHJldF9jYXN0PHVpbnQ2NF90PihzZWxmLmxheWVyKSwgc3VyZmFjZS0+c3VyZmFjZSgpLCAwLCAw
LCAmdHJhbnNmb3JtLCAwKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6SU9T
dXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1vdmUoc3VyZmFjZSkpLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKF9jdXN0b21Db250ZW50Vmlldykgewot
ICAgICAgICBBU1NFUlQoIVtbX2N1c3RvbUNvbnRlbnRWaWV3IGNsYXNzXSB3ZWJfcmVxdWlyZXND
dXN0b21TbmFwc2hvdHRpbmddKTsKLSAgICAgICAgVUlHcmFwaGljc0JlZ2luSW1hZ2VDb250ZXh0
V2l0aE9wdGlvbnMoaW1hZ2VTaXplLCBZRVMsIDEpOwotCi0gICAgICAgIFVJVmlldyAqY3VzdG9t
Q29udGVudFZpZXcgPSBfY3VzdG9tQ29udGVudFZpZXcuZ2V0KCk7Ci0gICAgICAgIFtjdXN0b21D
b250ZW50Vmlldy5iYWNrZ3JvdW5kQ29sb3Igc2V0XTsKLSAgICAgICAgVUlSZWN0RmlsbChDR1Jl
Y3RNYWtlKDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KSk7Ci0KLSAgICAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBVSUdyYXBoaWNzR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1zbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29y
ZGluYXRlcy5vcmlnaW4ueCAqIGltYWdlU2NhbGUsIC1zbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29y
ZGluYXRlcy5vcmlnaW4ueSAqIGltYWdlU2NhbGUpOwotICAgICAgICBDR0NvbnRleHRTY2FsZUNU
TShjb250ZXh0LCBpbWFnZVNjYWxlLCBpbWFnZVNjYWxlKTsKLSAgICAgICAgW2N1c3RvbUNvbnRl
bnRWaWV3LmxheWVyIHJlbmRlckluQ29udGV4dDpjb250ZXh0XTsKLQotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihbVUlHcmFwaGljc0dldEltYWdlRnJvbUN1cnJlbnRJbWFnZUNvbnRleHQoKSBD
R0ltYWdlXSk7Ci0KLSAgICAgICAgVUlHcmFwaGljc0VuZEltYWdlQ29udGV4dCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgdm9pZCheY29waWVkQ29tcGxldGlvbkhhbmRsZXIpKENH
SW1hZ2VSZWYpID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwotICAgIF9wYWdlLT50YWtlU25h
cHNob3QoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29y
ZGluYXRlcyksIFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoaW1h
Z2VTaXplKSksIFdlYktpdDo6U25hcHNob3RPcHRpb25zRXhjbHVkZURldmljZVNjYWxlRmFjdG9y
LCBbPV0oY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VIYW5kbGUs
IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBpZiAoaW1hZ2VIYW5kbGUu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwotICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBiaXRtYXAgPSBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGltYWdlSGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgICAgIGlmICghYml0bWFwKSB7Ci0gICAg
ICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICAgICAgICAgIFtj
b3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlOwotICAgICAg
ICBjZ0ltYWdlID0gYml0bWFwLT5tYWtlQ0dJbWFnZSgpOwotICAgICAgICBjb3BpZWRDb21wbGV0
aW9uSGFuZGxlcihjZ0ltYWdlLmdldCgpKTsKLSAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5k
bGVyIHJlbGVhc2VdOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9vdmVycmlkZUxheW91dFBhcmFt
ZXRlcnNXaXRoTWluaW11bUxheW91dFNpemU6KENHU2l6ZSltaW5pbXVtTGF5b3V0U2l6ZSBtYXhp
bXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTooQ0dTaXplKW1heGltdW1Vbm9ic2N1cmVkU2l6ZU92
ZXJyaWRlCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICIt
W1dLV2ViVmlldyAiIDw8IF9wYWdlLT5pZGVudGlmaWVyKCkgPDwgIiBfb3ZlcnJpZGVMYXlvdXRQ
YXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOiIgPDwgV2ViQ29yZTo6RmxvYXRTaXplKG1p
bmltdW1MYXlvdXRTaXplKSA8PCAiIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOiIgPDwg
V2ViQ29yZTo6RmxvYXRTaXplKG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKSA8PCAiXSIp
OwotCi0gICAgW3NlbGYgX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6bWluaW11bUxheW91dFNp
emVdOwotICAgIFtzZWxmIF9zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTptYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZV07Ci19Ci0KLS0gKHZvaWQpX2NsZWFyT3ZlcnJpZGVMYXlv
dXRQYXJhbWV0ZXJzCi17Ci0gICAgX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxv
cHQ7Ci0gICAgX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlID0gV1RGOjpudWxsb3B0Owot
fQotCi1zdGF0aWMgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cz4gdmll
d3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNT
dHJpbmcgKj4gKnZpZXdwb3J0QXJndW1lbnRQYWlycywgYm9vbCB2aWV3cG9ydEZpdEVuYWJsZWQp
Ci17Ci0gICAgaWYgKCF2aWV3cG9ydEFyZ3VtZW50UGFpcnMpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3Vt
ZW50cyhXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6Vmlld3BvcnRNZXRhKTsKLQotICAgIFt2
aWV3cG9ydEFyZ3VtZW50UGFpcnMgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOm1h
a2VCbG9ja1B0cihbJl0gKE5TU3RyaW5nICprZXksIE5TU3RyaW5nICp2YWx1ZSwgQk9PTCogc3Rv
cCkgewotICAgICAgICBpZiAoIVtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8
fCAhW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCi0gICAgICAgICAgICBb
TlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiLVtX
S1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06IEtleXMgYW5kIHZhbHVl
cyBtdXN0IGFsbCBiZSBOU1N0cmluZ3MuIl07Ci0gICAgICAgIFN0cmluZyBrZXlTdHJpbmcgPSBr
ZXk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyA9IHZhbHVlOwotICAgICAgICBXZWJDb3Jl
OjpzZXRWaWV3cG9ydEZlYXR1cmUodmlld3BvcnRBcmd1bWVudHMsIGtleVN0cmluZywgdmFsdWVT
dHJpbmcsIHZpZXdwb3J0Rml0RW5hYmxlZCwgW10gKFdlYkNvcmU6OlZpZXdwb3J0RXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgTlNMb2coQCItW1dL
V2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogRXJyb3IgcGFyc2luZyB2
aWV3cG9ydCBhcmd1bWVudDogJXMiLCBlcnJvck1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgIH0pOwotICAgIH0pLmdldCgpXTsKLQotICAgIHJldHVybiB2aWV3cG9ydEFyZ3VtZW50czsK
LX0KLQotLSAodm9pZClfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqKWFyZ3VtZW50cwotewotICAgIGlmICghX3BhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5zZXRPdmVycmlkZVZpZXdwb3J0QXJndW1l
bnRzKHZpZXdwb3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkoYXJndW1lbnRzLCBfcGFnZS0+cHJl
ZmVyZW5jZXMoKS52aWV3cG9ydEZpdEVuYWJsZWQoKSkpOwotfQotCi0tIChVSVZpZXcgKilfdmll
d0ZvckZpbmRVSQotewotICAgIHJldHVybiBbc2VsZiB2aWV3Rm9yWm9vbWluZ0luU2Nyb2xsVmll
dzpbc2VsZiBzY3JvbGxWaWV3XV07Ci19Ci0KLS0gKEJPT0wpX2lzRGlzcGxheWluZ1BERgotewot
ICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpwZGZN
SU1FVHlwZXMoKSkgewotICAgICAgICBDbGFzcyBwcm92aWRlckNsYXNzID0gW1tfY29uZmlndXJh
dGlvbiBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldIHByb3ZpZGVyRm9yTUlNRVR5cGU6bWltZVR5
cGVdOwotICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyBpc0tpbmRPZkNsYXNzOnByb3Zp
ZGVyQ2xhc3NdKQotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Tk87Ci19Ci0KLS0gKE5TRGF0YSAqKV9kYXRhRm9yRGlzcGxheWVkUERGCi17Ci0gICAgaWYgKCFb
c2VsZiBfaXNEaXNwbGF5aW5nUERGXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
W19jdXN0b21Db250ZW50VmlldyB3ZWJfZGF0YVJlcHJlc2VudGF0aW9uXTsKLX0KLQotLSAoTlNT
dHJpbmcgKilfc3VnZ2VzdGVkRmlsZW5hbWVGb3JEaXNwbGF5ZWRQREYKLXsKLSAgICBpZiAoIVtz
ZWxmIF9pc0Rpc3BsYXlpbmdQREZdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBb
X2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zdWdnZXN0ZWRGaWxlbmFtZV07Ci19Ci0KLS0gKF9XS1dl
YlZpZXdQcmludEZvcm1hdHRlciAqKV93ZWJWaWV3UHJpbnRGb3JtYXR0ZXIKKy0gKHZvaWQpX3Nl
dFRleHRab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3RvcgogewotICAgIFVJVmlld1ByaW50Rm9y
bWF0dGVyICp2aWV3UHJpbnRGb3JtYXR0ZXIgPSBzZWxmLnZpZXdQcmludEZvcm1hdHRlcjsKLSAg
ICBBU1NFUlQoW3ZpZXdQcmludEZvcm1hdHRlciBpc0tpbmRPZkNsYXNzOltfV0tXZWJWaWV3UHJp
bnRGb3JtYXR0ZXIgY2xhc3NdXSk7Ci0gICAgcmV0dXJuIChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0
ZXIgKil2aWV3UHJpbnRGb3JtYXR0ZXI7CisgICAgX3BhZ2UtPnNldFRleHRab29tRmFjdG9yKHpv
b21GYWN0b3IpOwogfQogCi1zdGF0aWMgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbiB0b1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oVUlTZW1hbnRpY0NvbnRlbnRBdHRy
aWJ1dGUgY29udGVudEF0dHJpYnV0ZSkKKy0gKHZvaWQpc2V0UGFnZVpvb206KENHRmxvYXQpcGFn
ZVpvb20KIHsKLSAgICBhdXRvIGRpcmVjdGlvbiA9IFtVSVZpZXcgdXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbkZvclNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsK
LSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgVUlVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uTGVmdFRvUmlnaHQ6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7Ci0gICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb246OlJUTDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRS
OworICAgIF9wYWdlLT5zZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbSk7CiB9CiAKLS0gKHZvaWQp
c2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0ZSlj
b250ZW50QXR0cmlidXRlCistIChDR0Zsb2F0KXBhZ2Vab29tCiB7Ci0gICAgW3N1cGVyIHNldFNl
bWFudGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKLQotICAgIF9wYWdlLT5z
ZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHRvVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbihjb250ZW50QXR0cmlidXRlKSk7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdlWm9vbUZhY3Rv
cigpOwogfQogCi0jZWxzZSAvLyAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI3ByYWdtYSBt
YXJrIC0gT1MgWC1zcGVjaWZpYyBtZXRob2RzCi0KLS0gKEJPT0wpX2RyYXdzQmFja2dyb3VuZAor
LSAoZG91YmxlKV9wYWdlWm9vbUZhY3RvcgogewotICAgIHJldHVybiBfaW1wbC0+ZHJhd3NCYWNr
Z3JvdW5kKCk7CisgICAgcmV0dXJuIFtzZWxmIHBhZ2Vab29tXTsKIH0KIAotLSAodm9pZClfc2V0
RHJhd3NCYWNrZ3JvdW5kOihCT09MKWRyYXdzQmFja2dyb3VuZAorLSAodm9pZClfc2V0UGFnZVpv
b21GYWN0b3I6KGRvdWJsZSl6b29tRmFjdG9yCiB7Ci0gICAgX2ltcGwtPnNldERyYXdzQmFja2dy
b3VuZChkcmF3c0JhY2tncm91bmQpOworICAgIFtzZWxmIHNldFBhZ2Vab29tOnpvb21GYWN0b3Jd
OwogfQogCi0tIChOU0NvbG9yICopX2JhY2tncm91bmRDb2xvcgorLSAoaWQgPF9XS0RpYWdub3N0
aWNMb2dnaW5nRGVsZWdhdGU+KV9kaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlCiB7Ci0gICAgcmV0
dXJuIF9pbXBsLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBhdXRvKiBkaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCA9IF9wYWdlLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOworICAgIGlmICghZGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCY+KCpkaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudCkuZGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwogfQogCi0tICh2b2lkKV9z
ZXRCYWNrZ3JvdW5kQ29sb3I6KE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IKKy0gKHZvaWQpX3Nl
dERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KGlkPF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdh
dGU+KWRpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKIHsKLSAgICBfaW1wbC0+c2V0QmFja2dyb3Vu
ZENvbG9yKGJhY2tncm91bmRDb2xvcik7CisgICAgYXV0byogZGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsKKyAgICBpZiAoIWRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWNfY2FzdDxXZWJL
aXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Jj4oKmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KS5z
ZXREZWxlZ2F0ZShkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlKTsKIH0KIAotLSAodm9pZClfc2V0
RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZHJhd3NUcmFuc3BhcmVudEJhY2tncm91
bmQKKy0gKGlkIDxfV0tGaW5kRGVsZWdhdGU+KV9maW5kRGVsZWdhdGUKIHsKLSAgICBzdGF0aWMg
Qk9PTCBoYXNMb2dnZWREZXByZWNhdGlvbldhcm5pbmc7Ci0gICAgaWYgKCFoYXNMb2dnZWREZXBy
ZWNhdGlvbldhcm5pbmcpIHsKLSAgICAgICAgLy8gU2VlIGJ1ZyAxNTU1NTAgZm9yIGRldGFpbHMu
Ci0gICAgICAgIE5TTG9nKEAiLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kOl0gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiIpOwotICAgICAgICBo
YXNMb2dnZWREZXByZWNhdGlvbldhcm5pbmcgPSBZRVM7Ci0gICAgfQotICAgIFtzZWxmIF9zZXRE
cmF3c0JhY2tncm91bmQ6IWRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kXTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQoKSkuZGVs
ZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwogfQogCi0tIChOU1ZpZXcgKilfaW5zcGVjdG9yQXR0YWNo
bWVudFZpZXcKKy0gKHZvaWQpX3NldEZpbmREZWxlZ2F0ZTooaWQ8X1dLRmluZERlbGVnYXRlPilm
aW5kRGVsZWdhdGUKIHsKLSAgICByZXR1cm4gX2ltcGwtPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7CisgICAgc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGll
bnQoKSkuc2V0RGVsZWdhdGUoZmluZERlbGVnYXRlKTsKIH0KIAotLSAodm9pZClfc2V0SW5zcGVj
dG9yQXR0YWNobWVudFZpZXc6KE5TVmlldyAqKW5ld1ZpZXcKK3N0YXRpYyBpbmxpbmUgV2ViS2l0
OjpGaW5kT3B0aW9ucyB0b0ZpbmRPcHRpb25zKF9XS0ZpbmRPcHRpb25zIHdrRmluZE9wdGlvbnMp
CiB7Ci0gICAgX2ltcGwtPnNldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3KG5ld1ZpZXcpOworICAg
IHVuc2lnbmVkIGZpbmRPcHRpb25zID0gMDsKKworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dL
RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktp
dDo6RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBf
V0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cykKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0
OjpGaW5kT3B0aW9uc0F0V29yZFN0YXJ0czsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0Zp
bmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpCisgICAgICAgIGZpbmRPcHRp
b25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsK
KyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQmFja3dhcmRzKQorICAgICAg
ICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQmFja3dhcmRzOworICAgIGlmICh3
a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kKQorICAgICAgICBmaW5kT3B0
aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zV3JhcEFyb3VuZDsKKyAgICBpZiAod2tGaW5kT3B0
aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd092ZXJsYXkpCisgICAgICAgIGZpbmRPcHRpb25zIHw9
IFdlYktpdDo6RmluZE9wdGlvbnNTaG93T3ZlcmxheTsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAm
IF9XS0ZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpCisgICAgICAgIGZpbmRPcHRpb25zIHw9
IFdlYktpdDo6RmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcjsKKyAgICBpZiAod2tGaW5kT3B0
aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodCkKKyAgICAgICAgZmluZE9wdGlvbnMg
fD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQ7CisgICAgaWYgKHdrRmluZE9wdGlv
bnMgJiBfV0tGaW5kT3B0aW9uc05vSW5kZXhDaGFuZ2UpCisgICAgICAgIGZpbmRPcHRpb25zIHw9
IFdlYktpdDo6RmluZE9wdGlvbnNOb0luZGV4Q2hhbmdlOworICAgIGlmICh3a0ZpbmRPcHRpb25z
ICYgX1dLRmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4KQorICAgICAgICBmaW5kT3B0aW9u
cyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleDsKKworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyk7CiB9CiAKLS0g
KHZvaWQpX3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTooX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxl
KXNjcm9sbGJhclN0eWxlCistICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXM6KE5TU3RyaW5nICop
c3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVn
ZXIpbWF4Q291bnQKIHsKLSAgICBfaW1wbC0+c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlKHRvQ29y
ZVNjcm9sbGJhclN0eWxlKHNjcm9sbGJhclN0eWxlKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVu
dFZpZXcgd2ViX2NvdW50U3RyaW5nTWF0Y2hlczpzdHJpbmcgb3B0aW9uczpvcHRpb25zIG1heENv
dW50Om1heENvdW50XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIF9wYWdl
LT5jb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhD
b3VudCk7CiB9CiAKLS0gKF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSlfb3ZlcmxheVNjcm9sbGJh
clN0eWxlCistICh2b2lkKV9maW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihf
V0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50CiB7Ci0g
ICAgcmV0dXJuIHRvQVBJU2Nyb2xsYmFyU3R5bGUoX2ltcGwtPm92ZXJsYXlTY3JvbGxiYXJTdHls
ZSgpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIFdoaWxlIEFwcEtpdCBjb250
YWlucyBsb2dpYyBpbiBOU0JhclRleHRGaW5kZXIgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgdGhl
IGZpbmQgcGFzdGVib2FyZAorICAgIC8vIHdoZW4gdGhlIGZpbmQgc3RyaW5nIGNoYW5nZXMsIHRo
aXMgKGFsb25nIHdpdGggdGhlIGZpbmQgcGFzdGVib2FyZCBpdHNlbGYpIGFyZSBib3RoIG1pc3Np
bmcKKyAgICAvLyBmcm9tIGlPUzsgdGh1cywgb24gaU9TLCB3ZSB1cGRhdGUgdGhlIGN1cnJlbnQg
ZmluZC1pbi1wYWdlIHN0cmluZyBoZXJlLgorICAgIFdlYktpdDo6dXBkYXRlU3RyaW5nRm9yRmlu
ZChzdHJpbmcpOworCisgICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgeworICAgICAgICBbX2N1
c3RvbUNvbnRlbnRWaWV3IHdlYl9maW5kU3RyaW5nOnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbWF4
Q291bnQ6bWF4Q291bnRdOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgX3Bh
Z2UtPmZpbmRTdHJpbmcoc3RyaW5nLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhDb3VudCk7
CiB9CiAKLS0gKEJPT0wpX3dpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQKKy0gKHZvaWQp
X2hpZGVGaW5kVUkKIHsKLSAgICByZXR1cm4gX2ltcGwtPndpbmRvd09jY2x1c2lvbkRldGVjdGlv
bkVuYWJsZWQoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChfY3VzdG9tQ29u
dGVudFZpZXcpIHsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfaGlkZUZpbmRVSV07
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBfcGFnZS0+aGlkZUZpbmRVSSgp
OwogfQogCi0tICh2b2lkKV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOihCT09M
KWVuYWJsZWQKKy0gKHZvaWQpX3NhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTooV0tCYWNr
Rm9yd2FyZExpc3RJdGVtICopaXRlbQogewotICAgIF9pbXBsLT5zZXRXaW5kb3dPY2NsdXNpb25E
ZXRlY3Rpb25FbmFibGVkKGVuYWJsZWQpOworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJu
OworICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbS5faXRlbSk7CiB9CiAK
LS0gKHZvaWQpc2hhcmVTaGVldERpZERpc21pc3M6KFdLU2hhcmVTaGVldCAqKXNoYXJlU2hlZXQK
Ky0gKGlkIDxfV0tJbnB1dERlbGVnYXRlPilfaW5wdXREZWxlZ2F0ZQogewotICAgIF9pbXBsLT5z
aGFyZVNoZWV0RGlkRGlzbWlzcyhzaGFyZVNoZWV0KTsKKyAgICByZXR1cm4gX2lucHV0RGVsZWdh
dGUuZ2V0QXV0b3JlbGVhc2VkKCk7CiB9CiAKLS0gKHZvaWQpX3NldE92ZXJyaWRlRGV2aWNlU2Nh
bGVGYWN0b3I6KENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3IKKy0gKHZvaWQpX3NldElucHV0RGVs
ZWdhdGU6KGlkIDxfV0tJbnB1dERlbGVnYXRlPilpbnB1dERlbGVnYXRlCiB7Ci0gICAgX2ltcGwt
PnNldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIF9p
bnB1dERlbGVnYXRlID0gaW5wdXREZWxlZ2F0ZTsKKworICAgIGNsYXNzIEZvcm1DbGllbnQgOiBw
dWJsaWMgQVBJOjpGb3JtQ2xpZW50IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBGb3JtQ2xpZW50KFdLV2ViVmlldyAqd2Vi
VmlldykKKyAgICAgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgfkZvcm1DbGllbnQoKSB7IH0KKworICAgICAgICB2b2lk
IHdpbGxTdWJtaXRGb3JtKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVBy
b3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiBzb3VyY2VGcmFtZSwgY29uc3QgVmVjdG9yPHN0
ZDo6cGFpcjxXVEY6OlN0cmluZywgV1RGOjpTdHJpbmc+PiYgdGV4dEZpZWxkVmFsdWVzLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEsIFdURjo6RnVuY3Rpb248dm9pZCh2b2lkKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVzZXJEYXRhICYm
IHVzZXJEYXRhLT50eXBlKCkgIT0gQVBJOjpPYmplY3Q6OlR5cGU6OkRhdGEpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIXVzZXJEYXRhIHx8IHVzZXJEYXRhLT50eXBlKCkgPT0gQVBJOjpPYmpl
Y3Q6OlR5cGU6OkRhdGEpOworICAgICAgICAgICAgICAgIG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nl
c3MoKS5jb25uZWN0aW9uKCktPm1hcmtDdXJyZW50bHlEaXNwYXRjaGVkTWVzc2FnZUFzSW52YWxp
ZCgpOworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIGlucHV0RGVsZWdh
dGUgPSBtX3dlYlZpZXctPl9pbnB1dERlbGVnYXRlLmdldCgpOworCisgICAgICAgICAgICBpZiAo
IVtpbnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2ls
bFN1Ym1pdEZvcm1WYWx1ZXM6dXNlck9iamVjdDpzdWJtaXNzaW9uSGFuZGxlcjopXSkgeworICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHZhbHVlTWFwID0gYWRvcHROUyhb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dGV4dEZpZWxkVmFs
dWVzLnNpemUoKV0pOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdGV4dEZp
ZWxkVmFsdWVzKQorICAgICAgICAgICAgICAgIFt2YWx1ZU1hcCBzZXRPYmplY3Q6cGFpci5zZWNv
bmQgZm9yS2V5OnBhaXIuZmlyc3RdOworCisgICAgICAgICAgICBOU09iamVjdCA8TlNTZWN1cmVD
b2Rpbmc+ICp1c2VyT2JqZWN0ID0gbmlsOworICAgICAgICAgICAgaWYgKEFQSTo6RGF0YSogZGF0
YSA9IHN0YXRpY19jYXN0PEFQSTo6RGF0YSo+KHVzZXJEYXRhKSkgeworICAgICAgICAgICAgICAg
IGF1dG8gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29w
eTpjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oZGF0YS0+Ynl0ZXMo
KSkpIGxlbmd0aDpkYXRhLT5zaXplKCkgZnJlZVdoZW5Eb25lOk5PXSk7CisgICAgICAgICAgICAg
ICAgYXV0byB1bmFyY2hpdmVyID0gc2VjdXJlVW5hcmNoaXZlckZyb21EYXRhKG5zRGF0YS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgQHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBhbGxvd2VkQ2xhc3NlcyA9IG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9v
bCgpLmFsbG93ZWRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kaW5nKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VyT2JqZWN0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOmFs
bG93ZWRDbGFzc2VzIGZvcktleTpAInVzZXJPYmplY3QiXTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRl
Y29kZU9iamVjdE9mQ2xhc3M6W05TT2JqZWN0IGNsYXNzXSBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07
CisgICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIHVzZXIgZGF0YTog
JUAiLCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYXV0byBjaGVja2VyID0gV2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyOjpjcmVhdGUoaW5wdXREZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OndpbGxT
dWJtaXRGb3JtVmFsdWVzOnVzZXJPYmplY3Q6c3VibWlzc2lvbkhhbmRsZXI6KSk7CisgICAgICAg
ICAgICBbaW5wdXREZWxlZ2F0ZSBfd2ViVmlldzptX3dlYlZpZXcgd2lsbFN1Ym1pdEZvcm1WYWx1
ZXM6dmFsdWVNYXAuZ2V0KCkgdXNlck9iamVjdDp1c2VyT2JqZWN0IHN1Ym1pc3Npb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICAgICAgfSkuZ2V0KCldOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBXS1dl
YlZpZXcgKm1fd2ViVmlldzsKKyAgICB9OworCisgICAgaWYgKGlucHV0RGVsZWdhdGUpCisgICAg
ICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50KG1ha2VVbmlxdWU8Rm9ybUNsaWVudD4oc2VsZikpOwor
ICAgIGVsc2UKKyAgICAgICAgX3BhZ2UtPnNldEZvcm1DbGllbnQobnVsbHB0cik7CiB9CiAKLS0g
KENHRmxvYXQpX292ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IKKy0gKEJPT0wpX2lzRGlzcGxheWlu
Z1N0YW5kYWxvbmVJbWFnZURvY3VtZW50CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5vdmVycmlkZURl
dmljZVNjYWxlRmFjdG9yKCk7CisgICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9wYWdlLT5tYWlu
RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5nU3RhbmRhbG9u
ZUltYWdlRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gTk87CiB9CiAKLS0gKHZvaWQpX3NldFRvcENv
bnRlbnRJbnNldDooQ0dGbG9hdCljb250ZW50SW5zZXQKKy0gKEJPT0wpX2lzRGlzcGxheWluZ1N0
YW5kYWxvbmVNZWRpYURvY3VtZW50CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5zZXRUb3BDb250ZW50
SW5zZXQoY29udGVudEluc2V0KTsKKyAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2UtPm1h
aW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFs
b25lTWVkaWFEb2N1bWVudCgpOworICAgIHJldHVybiBOTzsKIH0KIAotLSAoQ0dGbG9hdClfdG9w
Q29udGVudEluc2V0CistIChCT09MKV9pc1BsYXlpbmdBdWRpbwogewotICAgIHJldHVybiBfaW1w
bC0+dG9wQ29udGVudEluc2V0KCk7CisgICAgcmV0dXJuIF9wYWdlLT5pc1BsYXlpbmdBdWRpbygp
OwogfQogCi0tIChOU0NvbG9yICopX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcgorLSAoQk9P
TClfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAogewotICAgIHJldHVybiBfaW1w
bC0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7CisgICAgcmV0dXJuIF9wYWdlLT5pc1No
b3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CiB9CiAKLS0gKF9XS1JlY3RFZGdlKV9w
aW5uZWRTdGF0ZQorLSAoX1dLTGF5b3V0TW9kZSlfbGF5b3V0TW9kZQogewotICAgIHJldHVybiBf
aW1wbC0+cGlubmVkU3RhdGUoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgc3dpdGNoIChfaW1w
bC0+bGF5b3V0TW9kZSgpKSB7CisgICAgY2FzZSBrV0tMYXlvdXRNb2RlRml4ZWRTaXplOgorICAg
ICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZTsKKyAgICBjYXNlIGtXS0xheW91dE1v
ZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZToKKyAgICAgICAgcmV0dXJuIF9XS0xh
eW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZTsKKyAgICBjYXNlIGtXS0xh
eW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU6CisgICAg
ICAgIHJldHVybiBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9j
dW1lbnRTaXplOworICAgIGNhc2Uga1dLTGF5b3V0TW9kZVZpZXdTaXplOgorICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlVmlld1NpemU7CisgICAgfQorI2Vsc2UKKyAg
ICByZXR1cm4gX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkgPyBfV0tMYXlvdXRNb2RlRml4ZWRTaXpl
IDogX1dLTGF5b3V0TW9kZVZpZXdTaXplOworI2VuZGlmCiB9CiAKLS0gKF9XS1JlY3RFZGdlKV9y
dWJiZXJCYW5kaW5nRW5hYmxlZAorLSAodm9pZClfc2V0TGF5b3V0TW9kZTooX1dLTGF5b3V0TW9k
ZSlsYXlvdXRNb2RlCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5ydWJiZXJCYW5kaW5nRW5hYmxlZCgp
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBXS0xheW91dE1vZGUgd2tWaWV3TGF5b3V0TW9kZTsK
KyAgICBzd2l0Y2ggKGxheW91dE1vZGUpIHsKKyAgICBjYXNlIF9XS0xheW91dE1vZGVGaXhlZFNp
emU6CisgICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRml4ZWRTaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVk
RnJvbVZpZXdTY2FsZToKKyAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVE
eW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXpl
OgorICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29t
cHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBf
V0tMYXlvdXRNb2RlVmlld1NpemU6CisgICAgZGVmYXVsdDoKKyAgICAgICAgd2tWaWV3TGF5b3V0
TW9kZSA9IGtXS0xheW91dE1vZGVWaWV3U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IF9pbXBsLT5zZXRMYXlvdXRNb2RlKHdrVmlld0xheW91dE1vZGUpOworI2Vsc2UKKyAgICBfcGFn
ZS0+c2V0VXNlRml4ZWRMYXlvdXQobGF5b3V0TW9kZSA9PSBfV0tMYXlvdXRNb2RlRml4ZWRTaXpl
IHx8IGxheW91dE1vZGUgPT0gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmll
d1NjYWxlKTsKKyNlbmRpZgogfQogCi0tICh2b2lkKV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDoo
X1dLUmVjdEVkZ2Upc3RhdGUKKy0gKENHU2l6ZSlfZml4ZWRMYXlvdXRTaXplCiB7Ci0gICAgX2lt
cGwtPnNldFJ1YmJlckJhbmRpbmdFbmFibGVkKHN0YXRlKTsKKyAgICByZXR1cm4gX3BhZ2UtPmZp
eGVkTGF5b3V0U2l6ZSgpOwogfQogCi0tIChpZClfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6KF9XS0hpdFRlc3RSZXN1bHQgKiloaXRUZXN0UmVzdWx0
IHdpdGhUeXBlOihfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKXR5cGUgdXNlckRhdGE6KGlkPE5TU2Vj
dXJlQ29kaW5nPil1c2VyRGF0YQorLSAodm9pZClfc2V0Rml4ZWRMYXlvdXRTaXplOihDR1NpemUp
Zml4ZWRMYXlvdXRTaXplCiB7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICBfcGFnZS0+c2V0Rml4ZWRM
YXlvdXRTaXplKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoZml4
ZWRMYXlvdXRTaXplKSkpOwogfQogCi0tICh2b2lkKV9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0Nv
bnRlbnRJbnNldHM6KEJPT0wpYXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzCistICh2
b2lkKV9zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2U6KEJPT0wpYmFja2dyb3VuZEV4dGVu
ZHMKIHsKLSAgICBfaW1wbC0+c2V0QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKGF1
dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cyk7CisgICAgX3BhZ2UtPnNldEJhY2tncm91
bmRFeHRlbmRzQmV5b25kUGFnZShiYWNrZ3JvdW5kRXh0ZW5kcyk7CiB9CiAKLS0gKEJPT0wpX2F1
dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cworLSAoQk9PTClfYmFja2dyb3VuZEV4dGVu
ZHNCZXlvbmRQYWdlCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5hdXRvbWF0aWNhbGx5QWRqdXN0c0Nv
bnRlbnRJbnNldHMoKTsKKyAgICByZXR1cm4gX3BhZ2UtPmJhY2tncm91bmRFeHRlbmRzQmV5b25k
UGFnZSgpOwogfQogCi0tIChDR0Zsb2F0KV9taW5pbXVtTGF5b3V0V2lkdGgKKy0gKENHRmxvYXQp
X3ZpZXdTY2FsZQogewotICAgIHJldHVybiBfcGFnZS0+bWluaW11bVNpemVGb3JBdXRvTGF5b3V0
KCkud2lkdGgoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIF9wYWdlLT52aWV3U2Nh
bGVGYWN0b3IoKTsKKyNlbHNlCisgICAgcmV0dXJuIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0
b3IoKTsKKyNlbmRpZgogfQogCi0tICh2b2lkKV9zZXRNaW5pbXVtTGF5b3V0V2lkdGg6KENHRmxv
YXQpd2lkdGgKKy0gKHZvaWQpX3NldFZpZXdTY2FsZTooQ0dGbG9hdCl2aWV3U2NhbGUKIHsKLSAg
ICBCT09MIGV4cGFuZHNUb0ZpdCA9IHdpZHRoID4gMDsKKyAgICBpZiAodmlld1NjYWxlIDw9IDAg
fHwgaXNuYW4odmlld1NjYWxlKSB8fCBpc2luZih2aWV3U2NhbGUpKQorICAgICAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVmlldyBzY2Fs
ZSBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXIiXTsKIAotICAgIF9wYWdlLT5zZXRNaW5pbXVt
U2l6ZUZvckF1dG9MYXlvdXQoV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgMCkpOwotICAgIF9wYWdl
LT5zZXRNYWluRnJhbWVJc1Njcm9sbGFibGUoIWV4cGFuZHNUb0ZpdCk7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIF9pbXBsLT5zZXRWaWV3U2NhbGUodmlld1NjYWxlKTsKKyNlbHNlCisgICAgaWYg
KF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKSA9PSB2aWV3U2NhbGUpCisgICAgICAgIHJl
dHVybjsKIAotICAgIF9pbXBsLT5zZXRDbGlwc1RvVmlzaWJsZVJlY3QoZXhwYW5kc1RvRml0KTsK
KyAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uVmlld0xheW91dFNpemUoW3NlbGYg
YWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdLCB2aWV3U2NhbGUsIF9wYWdlLT5taW5p
bXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKSk7CisjZW5kaWYKIH0KIAotLSAoQk9PTClfc2hvdWxk
RXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQKKy0gKHZvaWQpX3NldE1pbmlt
dW1FZmZlY3RpdmVEZXZpY2VXaWR0aDooQ0dGbG9hdCltaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lk
dGgKIHsKLSAgICByZXR1cm4gX2ltcGwtPnNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9M
YXlvdXQoKTsKLX0KKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChfcGFnZS0+bWlu
aW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkgPT0gbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRo
KQorICAgICAgICByZXR1cm47CiAKLS0gKHZvaWQpX3NldFNob3VsZEV4cGFuZENvbnRlbnRUb1Zp
ZXdIZWlnaHRGb3JBdXRvTGF5b3V0OihCT09MKXNob3VsZEV4cGFuZAotewotICAgIHJldHVybiBf
aW1wbC0+c2V0U2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dChzaG91bGRFeHBh
bmQpOworICAgIF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5b3V0U2l6ZShb
c2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc10sIF9wYWdlLT5sYXlvdXRTaXpl
U2NhbGVGYWN0b3IoKSwgbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKTsKKyNlbmRpZgogfQog
Ci0tIChCT09MKV9hbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcgorLSAoQ0dGbG9hdClfbWlu
aW11bUVmZmVjdGl2ZURldmljZVdpZHRoCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5hbHdheXNTaG93
c0hvcml6b250YWxTY3JvbGxlcigpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgcmV0
dXJuIF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKTsKKyNlbHNlCisgICAgcmV0
dXJuIDA7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Ny
b2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIKKyNwcmFnbWEgbWFyayBz
Y3JvbGxwZXJmIG1ldGhvZHMKKworLSAodm9pZClfc2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29s
bGVjdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogewotICAgIF9wYWdlLT5zZXRBbHdheXNTaG93
c0hvcml6b250YWxTY3JvbGxlcihhbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcik7CisgICAg
X3BhZ2UtPnNldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkKGVuYWJsZWQp
OwogfQogCi0tIChCT09MKV9hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKKy0gKEJPT0wpX3Nj
cm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkCiB7Ci0gICAgcmV0dXJuIF9wYWdl
LT5hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoKTsKKyAgICByZXR1cm4gX3BhZ2UtPnNjcm9s
bFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkKCk7CiB9CiAKLS0gKHZvaWQpX3NldEFs
d2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcjooQk9PTClhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xs
ZXIKKy0gKE5TQXJyYXkgKilfc2Nyb2xsUGVyZm9ybWFuY2VEYXRhCiB7Ci0gICAgX3BhZ2UtPnNl
dEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcihhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIp
OworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFdlYktpdDo6UmVtb3RlTGF5ZXJU
cmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhKiBzY3JvbGxQZXJmRGF0YSA9IF9wYWdlLT5zY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbFBlcmZEYXRhLT5k
YXRhKCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmlsOwogfQogCi0tIChOU1ByaW50T3BlcmF0aW9u
ICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8K
KyNwcmFnbWEgbWFyayBtZWRpYSBwbGF5YmFjayByZXN0cmljdGlvbnMKKworLSAoQk9PTClfYWxs
b3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHByaW50
T3BlcmF0aW9uV2l0aFByaW50SW5mbzpwcmludEluZm9dOworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgcmV0dXJuIF9wYWdlLT5hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2so
KTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCiB9CiAKLS0gKE5TUHJpbnRPcGVyYXRp
b24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5m
byBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZQorLSAodm9pZClfc2V0QWxs
b3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOihCT09MKWZsYWcKIHsKLSAgICBpZiAoYXV0
byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJh
bWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCi0gICAgICAgIHJldHVy
biBfaW1wbC0+cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKHByaW50SW5mbywgKndlYkZyYW1l
UHJveHkpOwotICAgIHJldHVybiBuaWw7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBf
cGFnZS0+c2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKGZsYWcpOworI2VuZGlm
CiB9CiAKLS0gKHZvaWQpc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjooTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKXVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24KKy0gKEJP
T0wpX3dlYlByb2Nlc3NJc1Jlc3BvbnNpdmUKIHsKLSAgICBbc3VwZXIgc2V0VXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbjp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uXTsKLQotICAgIF9p
bXBsLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24pOworICAgIHJldHVybiBfcGFnZS0+cHJvY2VzcygpLmlzUmVzcG9uc2l2ZSgpOwog
fQogCi0tIChCT09MKV93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKKy0gKHZvaWQpX3Nl
dEZ1bGxzY3JlZW5EZWxlZ2F0ZTooaWQ8X1dLRnVsbHNjcmVlbkRlbGVnYXRlPilkZWxlZ2F0ZQog
ewotI2lmIEhBVkUoVE9VQ0hfQkFSKQotICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KCk7Ci0jZWxzZQotICAgIHJldHVybiBOTzsKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4o
X3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkpCisgICAgICAgIGRvd25jYXN0PFdlYktpdDo6RnVs
bHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkuc2V0RGVsZWdhdGUoZGVs
ZWdhdGUpOwogI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldzooQk9PTCl3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKKy0gKGlkPF9XS0Z1
bGxzY3JlZW5EZWxlZ2F0ZT4pX2Z1bGxzY3JlZW5EZWxlZ2F0ZQogewotI2lmIEhBVkUoVE9VQ0hf
QkFSKQotICAgIF9pbXBsLT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXco
d2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisgICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3Jl
ZW5DbGllbnQoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXQ6OkZ1bGxzY3JlZW5D
bGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLmRlbGVnYXRlKCkuYXV0b3JlbGVhc2Uo
KTsKICNlbmRpZgorICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKGlkKV9tZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3CistIChCT09MKV9pc0luRnVsbHNjcmVlbgogewotI2lmIEhBVkUoVE9VQ0hfQkFS
KQotICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
KCkgPyBfaW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIDogbmlsOworI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKKyAgICByZXR1cm4gX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCkg
JiYgX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmlzRnVsbFNjcmVlbigpOwogI2Vsc2UKLSAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQogCi0vLyBUaGlzIG1l
dGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLS0gKHZvaWQpX2FkZE1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KGlkKW1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKKy0gKF9XS01l
ZGlhQ2FwdHVyZVN0YXRlKV9tZWRpYUNhcHR1cmVTdGF0ZQogeworICAgIHJldHVybiBXZWJLaXQ6
OnRvV0tNZWRpYUNhcHR1cmVTdGF0ZShfcGFnZS0+bWVkaWFTdGF0ZUZsYWdzKCkpOwogfQogCi0v
LyBUaGlzIG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLS0gKHZvaWQpX3Jl
bW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKKy0gKHZvaWQpX3NldE1lZGlhQ2FwdHVyZUVu
YWJsZWQ6KEJPT0wpZW5hYmxlZAogeworICAgIF9wYWdlLT5zZXRNZWRpYUNhcHR1cmVFbmFibGVk
KGVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9wcmVwYXJlRm9yTW92ZVRvV2luZG93OihOU1dpbmRv
dyAqKXRhcmdldFdpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgorLSAoQk9PTClfbWVkaWFDYXB0dXJlRW5hYmxlZAogewotICAgIGF1dG8gY29t
cGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKLSAg
ICBfaW1wbC0+cHJlcGFyZUZvck1vdmVUb1dpbmRvdyh0YXJnZXRXaW5kb3csIFtjb21wbGV0aW9u
SGFuZGxlckNvcHldIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KCk7Ci0gICAgfSk7
CisgICAgcmV0dXJuIF9wYWdlLT5tZWRpYUNhcHR1cmVFbmFibGVkKCk7CiB9CiAKLS0gKHZvaWQp
X3NldFRodW1ibmFpbFZpZXc6KF9XS1RodW1ibmFpbFZpZXcgKil0aHVtYm5haWxWaWV3CistICh2
b2lkKV9zZXRQYWdlTXV0ZWQ6KF9XS01lZGlhTXV0ZWRTdGF0ZSltdXRlZFN0YXRlCiB7Ci0gICAg
X2ltcGwtPnNldFRodW1ibmFpbFZpZXcodGh1bWJuYWlsVmlldyk7Ci19CisgICAgV2ViQ29yZTo6
TWVkaWFQcm9kdWNlcjo6TXV0ZWRTdGF0ZUZsYWdzIGNvcmVTdGF0ZSA9IFdlYkNvcmU6Ok1lZGlh
UHJvZHVjZXI6Ok5vbmVNdXRlZDsKIAotLSAoX1dLVGh1bWJuYWlsVmlldyAqKV90aHVtYm5haWxW
aWV3Ci17Ci0gICAgaWYgKCFfaW1wbCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
X2ltcGwtPnRodW1ibmFpbFZpZXcoKTsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQXVk
aW9NdXRlZCkKKyAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1
ZGlvSXNNdXRlZDsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQ2FwdHVyZURldmljZXNN
dXRlZCkKKyAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1ZGlv
QW5kVmlkZW9DYXB0dXJlSXNNdXRlZDsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhU2Ny
ZWVuQ2FwdHVyZU11dGVkKQorICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9k
dWNlcjo6U2NyZWVuQ2FwdHVyZUlzTXV0ZWQ7CisKKyAgICBfcGFnZS0+c2V0TXV0ZWQoY29yZVN0
YXRlKTsKIH0KIAotLSAodm9pZClfc2V0SWdub3Jlc0FsbEV2ZW50czooQk9PTClpZ25vcmVzQWxs
RXZlbnRzCistICh2b2lkKV9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczooZGlzcGF0Y2hfYmxvY2tf
dCljb21wbGV0aW9uCiB7Ci0gICAgX2ltcGwtPnNldElnbm9yZXNBbGxFdmVudHMoaWdub3Jlc0Fs
bEV2ZW50cyk7CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgIF9wYWdlLT5yZW1vdmVE
YXRhRGV0ZWN0ZWRMaW5rcyhbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwg
cGFnZSA9IG1ha2VXZWFrUHRyKF9wYWdlLmdldCgpKV0gKGF1dG8mIHJlc3VsdCkgeworICAgICAg
ICBpZiAocGFnZSkKKyAgICAgICAgICAgIHBhZ2UtPnNldERhdGFEZXRlY3Rpb25SZXN1bHQocmVz
dWx0KTsKKyAgICAgICAgaWYgKGNvbXBsZXRpb24pCisgICAgICAgICAgICBjb21wbGV0aW9uKCk7
CisgICAgfSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uKTsKKyNlbmRpZgog
fQogCi0tIChCT09MKV9pZ25vcmVzQWxsRXZlbnRzCisvLyBFeGVjdXRlIHRoZSBzdXBwbGllZCBi
bG9jayBhZnRlciB0aGUgbmV4dCB0cmFuc2FjdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzLgorLSAo
dm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0
ZUJsb2NrCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzQWxsRXZlbnRzKCk7CisgICAgW3Nl
bGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0
aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
Ok5PXTsKIH0KIAotLSAoTlNJbnRlZ2VyKV9zcGVsbENoZWNrZXJEb2N1bWVudFRhZworLSAodm9p
ZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5n
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIHJldHVybiBfaW1wbC0+c3BlbGxD
aGVja2VyRG9jdW1lbnRUYWcoKTsKKyAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOllFUyB3
aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOk5PXTsKIH0KIAotI2VuZGlmCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9u
VXBkYXRlOihkaXNwYXRjaF9ibG9ja190KXVwZGF0ZUJsb2NrCit7CisgICAgaWYgKCFbc2VsZiB1
c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAg
fQogCi1AZW5kCisgICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIodXBkYXRl
QmxvY2spOwogCi0jdW5kZWYgRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklFVworICAgIGlm
IChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MpCisgICAgICAgIFtfc3Rh
YmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgYWRkT2JqZWN0OnVwZGF0ZUJsb2Nr
Q29weS5nZXQoKV07CisgICAgZWxzZSB7CisgICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlv
blVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmlsXSk7CisgICAgICAgIFtzZWxmIF9m
aXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2Fs
bGJhY2tzXTsKKyAgICB9Cit9CisjZW5kaWYKIAotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAo
V0tUZXN0aW5nKQorI3ByYWdtYSBtYXJrIGlPUy1zcGVjaWZpYyBtZXRob2RzCiAKLS0gKHZvaWQp
X3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wpZW5hYmxl
ZAotewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgW19jb250ZW50VmlldyBzZXRDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ6ZW5hYmxlZF07Ci0jZWxzZQotICAgIF9pbXBsLT5z
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCk7Ci0jZW5kaWYKLX0KIAot
LSAoTlNEaWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcg
Kil1c2VySW50ZXJmYWNlSXRlbQorLSAodm9pZClfZGV0ZWN0RGF0YVdpdGhUeXBlczooV0tEYXRh
RGV0ZWN0b3JUeXBlcyl0eXBlcyBjb21wbGV0aW9uSGFuZGxlcjooZGlzcGF0Y2hfYmxvY2tfdClj
b21wbGV0aW9uCiB7Ci0gICAgaWYgKFt1c2VySW50ZXJmYWNlSXRlbSBpc0VxdWFsVG9TdHJpbmc6
QCJ2YWxpZGF0aW9uQnViYmxlIl0pIHsKLSAgICAgICAgYXV0byogdmFsaWRhdGlvbkJ1YmJsZSA9
IF9wYWdlLT52YWxpZGF0aW9uQnViYmxlKCk7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFs
aWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25CdWJibGUtPm1lc3NhZ2UoKSA6IGVtcHR5U3RyaW5n
KCk7Ci0gICAgICAgIGRvdWJsZSBmb250U2l6ZSA9IHZhbGlkYXRpb25CdWJibGUgPyB2YWxpZGF0
aW9uQnViYmxlLT5mb250U2l6ZSgpIDogMDsKLSAgICAgICAgcmV0dXJuIEB7IHVzZXJJbnRlcmZh
Y2VJdGVtOiBAeyBAIm1lc3NhZ2UiOiAoTlNTdHJpbmcgKiltZXNzYWdlLCBAImZvbnRTaXplIjog
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Zm9udFNpemVdIH0gfTsKLSAgICB9Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9jb250ZW50c09m
VXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW1dOworI2lmIEVO
QUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBfcGFnZS0+ZGV0ZWN0RGF0YUluQWxsRnJhbWVzKGZy
b21XS0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbiksIHBhZ2UgPSBtYWtlV2Vha1B0cihfcGFnZS5nZXQoKSldIChhdXRvJiByZXN1
bHQpIHsKKyAgICAgICAgaWYgKHBhZ2UpCisgICAgICAgICAgICBwYWdlLT5zZXREYXRhRGV0ZWN0
aW9uUmVzdWx0KHJlc3VsdCk7CisgICAgICAgIGlmIChjb21wbGV0aW9uKQorICAgICAgICAgICAg
Y29tcGxldGlvbigpOworICAgIH0pOwogI2Vsc2UKLSAgICByZXR1cm4gbmlsOworICAgIFVOVVNF
RF9QQVJBTSh0eXBlcyk7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOwogI2VuZGlmCiB9
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVs
ZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAo
XikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sKKyNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCistICh2b2lkKXJlbW92ZUZyb21TdXBlcnZpZXcKIHsKLSAgICBhdXRvIGluZm9SZXF1
ZXN0ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdChXZWJDb3JlOjpyb3Vu
ZGVkSW50UG9pbnQocG9zaXRpb24pKTsKLSAgICBpbmZvUmVxdWVzdC5pbmNsdWRlU25hcHNob3Qg
PSB0cnVlOworICAgIFtzdXBlciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKIAotICAgIFtfY29udGVu
dFZpZXcgZG9BZnRlclBvc2l0aW9uSW5mb3JtYXRpb25VcGRhdGU6W2NhcHR1cmVkQmxvY2sgPSBt
YWtlQmxvY2tQdHIoYmxvY2spXSAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbiBpbmZvcm1hdGlvbikgewotICAgICAgICBjYXB0dXJlZEJsb2NrKFtfV0tBY3RpdmF0ZWRF
bGVtZW50SW5mbyBhY3RpdmF0ZWRFbGVtZW50SW5mb1dpdGhJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbjppbmZvcm1hdGlvbiB1c2VySW5mbzpuaWxdKTsKLSAgICB9IGZvclJlcXVlc3Q6
aW5mb1JlcXVlc3RdOworICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVs
bFNjcmVlbl0pCisgICAgICAgIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld0Rp
ZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbl07CiB9CisjZW5kaWYKIAotLSAo
dm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRl
Z2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFuZGxlcgorLy8g
RGVwcmVjYXRlZCBTUEkuCistIChDR1NpemUpX21pbmltdW1MYXlvdXRTaXplT3ZlcnJpZGUKIHsK
LSAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9u
T2Zmc2V0Om9mZnNldCB3aXRoVGV4dDp0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENv
bXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKLSAgICAg
ICAgaWYgKCFjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBhdXRvIHJlY3RWYWx1ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6c2VsZWN0aW9uUmVjdHMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAo
YXV0byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzKQotICAgICAgICAgICAgW3JlY3RW
YWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJl
Y3QoKV1dOwotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0
KCkpOwotICAgIH1dOworICAgIEFTU0VSVChfdmlld0xheW91dFNpemVPdmVycmlkZSk7CisgICAg
cmV0dXJuIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlLnZhbHVlT3IoQ0dTaXplWmVybyk7CiB9CiAK
LS0gKHZvaWQpX3NldERldmljZU9yaWVudGF0aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9yVGVz
dGluZzooQk9PTCAoXikoKSloYW5kbGVyCistICh2b2lkKV9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJy
aWRlOihDR1NpemUpdmlld0xheW91dFNpemVPdmVycmlkZQogewotICAgIEZ1bmN0aW9uPGJvb2wo
KT4gaGFuZGxlcldyYXBwZXI7Ci0gICAgaWYgKGhhbmRsZXIpCi0gICAgICAgIGhhbmRsZXJXcmFw
cGVyID0gW2hhbmRsZXIgPSBtYWtlQmxvY2tQdHIoaGFuZGxlcildIHsgcmV0dXJuIGhhbmRsZXIo
KTsgfTsKLSAgICBfcGFnZS0+c2V0RGV2aWNlT3JpZW50YXRpb25Vc2VyUGVybWlzc2lvbkhhbmRs
ZXJGb3JUZXN0aW5nKFdURk1vdmUoaGFuZGxlcldyYXBwZXIpKTsKKyAgICBfdmlld0xheW91dFNp
emVPdmVycmlkZSA9IHZpZXdMYXlvdXRTaXplT3ZlcnJpZGU7CisKKyAgICBpZiAoX2R5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpO
b3RSZXNpemluZykKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmlld0xheW91dFNpemU6V2Vi
Q29yZTo6RmxvYXRTaXplKHZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpXTsKIH0KIAotLSAodm9pZClf
YWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uCistIChVSUVkZ2VJbnNldHMpX29ic2N1cmVkSW5z
ZXRzCiB7Ci0gICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXTsK
KyAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRzOwogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5
Q2xlYXJTZWxlY3Rpb24KKy0gKHZvaWQpX3NldE9ic2N1cmVkSW5zZXRzOihVSUVkZ2VJbnNldHMp
b2JzY3VyZWRJbnNldHMKIHsKLSAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJT
ZWxlY3Rpb25dOworICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy50b3AgPj0gMCk7CisgICAgQVNT
RVJUKG9ic2N1cmVkSW5zZXRzLmxlZnQgPj0gMCk7CisgICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRz
LmJvdHRvbSA+PSAwKTsKKyAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMucmlnaHQgPj0gMCk7CisK
KyAgICBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzID0gWUVTOworCisgICAgaWYgKFVJRWRnZUluc2V0
c0VxdWFsVG9FZGdlSW5zZXRzKF9vYnNjdXJlZEluc2V0cywgb2JzY3VyZWRJbnNldHMpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBfb2JzY3VyZWRJbnNldHMgPSBvYnNjdXJlZEluc2V0czsKKwor
ICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CiB9CiAKLS0gKFVJ
VmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3CistIChVSVJlY3RFZGdlKV9vYnNjdXJl
ZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEKIHsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCi0gICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkK
LSAgICAgICAgcmV0dXJuIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNl
aG9sZGVyXTsKLSNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTsKIH0K
IAotLSAoQ0dSZWN0KV9jb250ZW50VmlzaWJsZVJlY3QKKy0gKHZvaWQpX3NldE9ic2N1cmVkSW5z
ZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTooVUlSZWN0RWRnZSllZGdlcwogewotICAgIHJldHVy
biBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9jdXJyZW50Q29u
dGVudFZpZXddOwotfQorICAgIGlmIChlZGdlcyA9PSBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0
ZWRCeVNhZmVBcmVhKQorICAgICAgICByZXR1cm47CiAKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2lu
dEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludAotewotICAgIHJldHVybiBbc2VsZiBj
b252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLX0K
KyAgICBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhID0gZWRnZXM7CiAKLS0g
KENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludAot
ewotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3OnNlbGYuX2N1cnJl
bnRDb250ZW50Vmlld107CisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlXTsKIH0KIAotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQKKy0gKFVJRWRnZUlu
c2V0cylfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzCiB7Ci0gICAgW19jb250ZW50VmlldyBhY2Nl
c3NvcnlUYWI6WUVTXTsKKyAgICByZXR1cm4gX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKIH0K
IAotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhclByZXZpb3VzCistICh2b2lkKV9zZXRVbm9i
c2N1cmVkU2FmZUFyZWFJbnNldHM6KFVJRWRnZUluc2V0cyl1bm9ic2N1cmVkU2FmZUFyZWFJbnNl
dHMKIHsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107Ci19CisgICAgQVNTRVJU
KHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy50b3AgPj0gMCk7CisgICAgQVNTRVJUKHVub2JzY3Vy
ZWRTYWZlQXJlYUluc2V0cy5sZWZ0ID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFy
ZWFJbnNldHMuYm90dG9tID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNl
dHMucmlnaHQgPj0gMCk7CiAKLS0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcg
KiluZXdTdHJpbmcgdG9TdHJpbmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbX2NvbnRl
bnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3
aXRoQ29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3Rz
KSB7Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9XTsKKyAgICBf
aGF2ZVNldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFlFUzsKKworICAgIGlmIChVSUVkZ2VJ
bnNldHNFcXVhbFRvRWRnZUluc2V0cyhfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLCB1bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBfdW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzID0gdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOworCisgICAgW3NlbGYgX3Nj
aGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKIH0KIAotLSAodm9pZClkaXNtaXNzRm9y
bUFjY2Vzc29yeVZpZXcKKy0gKEJPT0wpX3NhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNl
dHMKIHsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeURvbmVdOworICAgIGlmICghW3NlbGYg
dXNlc1N0YW5kYXJkQ29udGVudFZpZXddKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJu
IF9hdm9pZHNVbnNhZmVBcmVhOwogfQogCi0tICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgorLSAo
dm9pZClfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTooVUlJbnRlcmZhY2VPcmllbnRh
dGlvbilpbnRlcmZhY2VPcmllbnRhdGlvbgogewotICAgIFtfY29udGVudFZpZXcgZGlzbWlzc0Zp
bGVQaWNrZXJdOworICAgIF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA9IFlFUzsKKyAg
ICBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IGludGVyZmFjZU9yaWVudGF0aW9uOwor
CisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCisgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNl
dERldmljZU9yaWVudGF0aW9uOmRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRh
dGlvbihfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSldOwogfQogCi0tICh2b2lkKXNldFRp
bWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWlu
dXRlCistIChVSUludGVyZmFjZU9yaWVudGF0aW9uKV9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJy
aWRlCiB7Ci0gICAgW19jb250ZW50VmlldyBzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6aG91ciBt
aW51dGU6bWludXRlXTsKKyAgICBBU1NFUlQoX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9u
KTsKKyAgICByZXR1cm4gX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU7CiB9CiAKLS0gKHZv
aWQpc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4CistICh2b2lkKV9j
bGVhckludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUKIHsKLSAgICBbX2NvbnRlbnRWaWV3IHNl
bGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6cm93SW5kZXhdOworICAgIF9vdmVycmlkZXNJbnRl
cmZhY2VPcmllbnRhdGlvbiA9IE5POworICAgIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRl
ID0gVUlJbnRlcmZhY2VPcmllbnRhdGlvblBvcnRyYWl0OwogfQogCi0tIChOU1N0cmluZyAqKXNl
bGVjdEZvcm1Qb3BvdmVyVGl0bGUKKy8vIERlcHJlY2F0ZWQgU1BJCistIChDR1NpemUpX21heGlt
dW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlCiB7Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgc2Vs
ZWN0Rm9ybVBvcG92ZXJUaXRsZV07CisgICAgQVNTRVJUKF9tYXhpbXVtVW5vYnNjdXJlZFNpemVP
dmVycmlkZSk7CisgICAgcmV0dXJuIF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZS52YWx1
ZU9yKENHU2l6ZVplcm8pOwogfQogCi0tIChOU1N0cmluZyAqKXRleHRDb250ZW50VHlwZUZvclRl
c3RpbmcKKy0gKHZvaWQpX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUp
c2l6ZQogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IHRleHRDb250ZW50VHlwZUZvclRlc3Rp
bmddOworICAgIEFTU0VSVChzaXplLndpZHRoIDw9IHNlbGYuYm91bmRzLnNpemUud2lkdGggJiYg
c2l6ZS5oZWlnaHQgPD0gc2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQpOworICAgIF9tYXhpbXVtVW5v
YnNjdXJlZFNpemVPdmVycmlkZSA9IHNpemU7CisKKyAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVw
ZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemlu
ZykKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11bVVub2JzY3VyZWRTaXplOldlYkNv
cmU6OkZsb2F0U2l6ZShzaXplKV07CiB9CiAKLS0gKE5TU3RyaW5nICopZm9ybUlucHV0TGFiZWwK
Ky0gKHZvaWQpX3NldEFsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQ6KEJPT0wpYWxsb3dTaHJpbmtU
b0ZpdAogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGZvcm1JbnB1dExhYmVsXTsKKyAgICBf
YWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdCA9IGFsbG93U2hyaW5rVG9GaXQ7CiB9CiAKLS0gKHZv
aWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uCistIChCT09MKV9hbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0CiB7Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCisgICAg
cmV0dXJuIF9hbGxvd3NWaWV3cG9ydFNocmlua1RvRml0OwogfQogCi0tICh2b2lkKWRpZEVuZEZv
cm1Db250cm9sSW50ZXJhY3Rpb24KKy0gKHZvaWQpX2JlZ2luSW50ZXJhY3RpdmVPYnNjdXJlZElu
c2V0c0NoYW5nZQogewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgIEFT
U0VSVCghX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOworICAgIF9pc0No
YW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gWUVTOwogfQogCi0tICh2b2lkKV9k
aWRTaG93Q29udGV4dE1lbnUKKy0gKHZvaWQpX2VuZEludGVyYWN0aXZlT2JzY3VyZWRJbnNldHND
aGFuZ2UKIHsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKyAgICBBU1NFUlQo
X2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOworICAgIF9pc0NoYW5naW5n
T2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gTk87CisgICAgW3NlbGYgX3NjaGVkdWxlVmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKIH0KIAotLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRN
ZW51CistICh2b2lkKV9oaWRlQ29udGVudFVudGlsTmV4dFVwZGF0ZQogewotICAgIC8vIEZvciBz
dWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgIGlmIChhdXRvKiBhcmVhID0gX3BhZ2UtPmRyYXdp
bmdBcmVhKCkpCisgICAgICAgIGFyZWEtPmhpZGVDb250ZW50VW50aWxBbnlVcGRhdGUoKTsKIH0K
IAotLSAoQ0dSZWN0KV91aVRleHRDYXJldFJlY3QKKy0gKHZvaWQpX2JlZ2luQW5pbWF0ZWRSZXNp
emVXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKIHsKLSAgICAvLyBGb3Jj
ZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KLSAgICBbX2NvbnRlbnRW
aWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKKyAgICBDR1JlY3Qgb2xkQm91bmRzID0gc2Vs
Zi5ib3VuZHM7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG9sZFVub2JzY3VyZWRDb250ZW50UmVj
dCA9IF9wYWdlLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKTsKIAotICAgIHJldHVybiBbW19jb250
ZW50VmlldyB2YWx1ZUZvcktleVBhdGg6QCJpbnRlcmFjdGlvbkFzc2lzdGFudC5zZWxlY3Rpb25W
aWV3LnNlbGVjdGlvbi5jYXJldFJlY3QiXSBDR1JlY3RWYWx1ZV07Ci19CisgICAgaWYgKCFbc2Vs
ZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gfHwgIV9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZy
YW1lIHx8IENHUmVjdElzRW1wdHkob2xkQm91bmRzKSB8fCBvbGRVbm9ic2N1cmVkQ29udGVudFJl
Y3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczop
XSkKKyAgICAgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2JlZ2luQW5pbWF0ZWRSZXNp
emVXaXRoVXBkYXRlczp1cGRhdGVCbG9ja107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVw
ZGF0ZUJsb2NrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLS0gKENHUmVjdClfaW5wdXRW
aWV3Qm91bmRzCi17Ci0gICAgcmV0dXJuIF9pbnB1dFZpZXdCb3VuZHM7Ci19CisgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9iZWdp
bkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6XSIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCku
dG9VSW50NjQoKSk7CiAKLS0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKV91aVRleHRTZWxlY3Rpb25S
ZWN0cwotewotICAgIC8vIEZvcmNlIHRoZSBzZWxlY3Rpb24gdmlldyB0byB1cGRhdGUgaWYgbmVl
ZGVkLgotICAgIFtfY29udGVudFZpZXcgX3VwZGF0ZUNoYW5nZWRTZWxlY3Rpb25dOworICAgIF9k
eW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlOjpSZXNpemluZ1dpdGhBbmltYXRpb247CiAKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBf
dWlUZXh0U2VsZWN0aW9uUmVjdHNdOwotfQorICAgIGF1dG8gb2xkVmlld0xheW91dFNpemUgPSBb
c2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc107CisgICAgYXV0byBvbGRNYXhp
bXVtVW5vYnNjdXJlZFNpemUgPSBhY3RpdmVNYXhpbXVtVW5vYnNjdXJlZFNpemUoc2VsZiwgb2xk
Qm91bmRzKTsKKyAgICBpbnQzMl90IG9sZE9yaWVudGF0aW9uID0gYWN0aXZlT3JpZW50YXRpb24o
c2VsZik7CisgICAgVUlFZGdlSW5zZXRzIG9sZE9ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5z
ZXRzOwogCi0tIChOU1N0cmluZyAqKV9zY3JvbGxpbmdUcmVlQXNUZXh0Ci17Ci0gICAgV2ViS2l0
OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5z
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7Ci0gICAgaWYgKCFjb29yZGluYXRvcikKLSAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICB1cGRhdGVCbG9jaygpOworCisgICAgQ0dSZWN0IG5ld0JvdW5k
cyA9IHNlbGYuYm91bmRzOworICAgIGF1dG8gbmV3Vmlld0xheW91dFNpemUgPSBbc2VsZiBhY3Rp
dmVWaWV3TGF5b3V0U2l6ZTpuZXdCb3VuZHNdOworICAgIGF1dG8gbmV3TWF4aW11bVVub2JzY3Vy
ZWRTaXplID0gYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG5ld0JvdW5kcyk7Cisg
ICAgaW50MzJfdCBuZXdPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYpOworICAg
IFVJRWRnZUluc2V0cyBuZXdPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsKKyAgICBD
R1JlY3QgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcyA9IFVJRWRnZUluc2V0
c0luc2V0UmVjdChuZXdCb3VuZHMsIF9vYnNjdXJlZEluc2V0cyk7CisgICAgQ0dSZWN0IGNvbnRl
bnRWaWV3Qm91bmRzID0gW19jb250ZW50VmlldyBib3VuZHNdOworCisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlICYmIG5ld1ZpZXdMYXlvdXRTaXplLmlz
RW1wdHkoKSksICJDbGllbnRzIGNvbnRyb2xsaW5nIHRoZSBsYXlvdXQgc2l6ZSBzaG91bGQgbWFp
bnRhaW4gYSB2YWxpZCBsYXlvdXQgc2l6ZSB0byBtaW5pbWl6ZSBsYXlvdXRzLiIpOworICAgIGlm
IChDR1JlY3RJc0VtcHR5KG5ld0JvdW5kcykgfHwgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgp
IHx8IENHUmVjdElzRW1wdHkoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcykg
fHwgQ0dSZWN0SXNFbXB0eShjb250ZW50Vmlld0JvdW5kcykpIHsKKyAgICAgICAgW3NlbGYgX2Nh
bmNlbEFuaW1hdGVkUmVzaXplXTsKKyAgICAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2Vk
XTsKKyAgICAgICAgaWYgKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKQorICAgICAgICAgICAgW3Nl
bGYgX2Rpc3BhdGNoU2V0Vmlld0xheW91dFNpemU6bmV3Vmlld0xheW91dFNpemVdOworICAgICAg
ICBpZiAoX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKQorICAgICAgICAgICAgW3NlbGYg
X2Rpc3BhdGNoU2V0TWF4aW11bVVub2JzY3VyZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShuZXdN
YXhpbXVtVW5vYnNjdXJlZFNpemUpXTsKKyAgICAgICAgaWYgKF9vdmVycmlkZXNJbnRlcmZhY2VP
cmllbnRhdGlvbikKKyAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0
aW9uOm5ld09yaWVudGF0aW9uXTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KENHUmVjdEVxdWFsVG9SZWN0KG9sZEJvdW5kcywgbmV3Qm91bmRzKQorICAgICAgICAmJiBvbGRW
aWV3TGF5b3V0U2l6ZSA9PSBuZXdWaWV3TGF5b3V0U2l6ZQorICAgICAgICAmJiBvbGRNYXhpbXVt
VW5vYnNjdXJlZFNpemUgPT0gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplCisgICAgICAgICYmIG9s
ZE9yaWVudGF0aW9uID09IG5ld09yaWVudGF0aW9uCisgICAgICAgICYmIFVJRWRnZUluc2V0c0Vx
dWFsVG9FZGdlSW5zZXRzKG9sZE9ic2N1cmVkSW5zZXRzLCBuZXdPYnNjdXJlZEluc2V0cykpIHsK
KyAgICAgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cyA9IENBVHJh
bnNmb3JtM0RJZGVudGl0eTsKKworICAgIGlmICghX3Jlc2l6ZUFuaW1hdGlvblZpZXcpIHsKKyAg
ICAgICAgTlNVSW50ZWdlciBpbmRleE9mQ29udGVudFZpZXcgPSBbW19zY3JvbGxWaWV3IHN1YnZp
ZXdzXSBpbmRleE9mT2JqZWN0Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgICAgIF9yZXNpemVB
bmltYXRpb25WaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOworICAgICAgICBb
X3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdLm5hbWUgPSBAIlJlc2l6ZUFuaW1hdGlvbiI7Cisg
ICAgICAgIFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3Ol9yZXNpemVBbmltYXRpb25WaWV3Lmdl
dCgpIGF0SW5kZXg6aW5kZXhPZkNvbnRlbnRWaWV3XTsKKyAgICAgICAgW19yZXNpemVBbmltYXRp
b25WaWV3IGFkZFN1YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICAgICAgW19yZXNpemVB
bmltYXRpb25WaWV3IGFkZFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXddXTsKKyAg
ICB9CisKKyAgICBDR1NpemUgY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBj
b250ZW50Vmlld0JvdW5kcy5zaXplOworICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNj
YWxlOnN0ZDo6bWluKG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUluQ29u
dGVudFZpZXdDb29yZGluYXRlcy53aWR0aCwgW19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVd
KV07CisgICAgW19zY3JvbGxWaWV3IHNldE1heGltdW1ab29tU2NhbGU6c3RkOjptYXgobmV3Vmll
d0xheW91dFNpemUud2lkdGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVz
LndpZHRoLCBbX3Njcm9sbFZpZXcgbWF4aW11bVpvb21TY2FsZV0pXTsKKworICAgIC8vIENvbXB1
dGUgdGhlIG5ldyBzY2FsZSB0byBrZWVwIHRoZSBjdXJyZW50IGNvbnRlbnQgd2lkdGggaW4gdGhl
IHNjcm9sbHZpZXcuCisgICAgQ0dGbG9hdCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29v
cmRpbmF0ZXMgPSBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKTsKKyAgICBfYW5pbWF0
ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aCA9IHN0ZDo6bWluKGNvbnRlbnRTaXplSW5Db250
ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29v
cmRpbmF0ZXMpOworICAgIENHRmxvYXQgdGFyZ2V0U2NhbGUgPSBuZXdWaWV3TGF5b3V0U2l6ZS53
aWR0aCgpIC8gX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGg7CisgICAgQ0dGbG9h
dCByZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUgPSB0YXJnZXRTY2FsZSAvIGNvbnRl
bnRab29tU2NhbGUoc2VsZik7CisgICAgW19yZXNpemVBbmltYXRpb25WaWV3IHNldFRyYW5zZm9y
bTpDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShyZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9u
U2NhbGUsIHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSldOworCisgICAgLy8gQ29t
cHV0ZSBhIG5ldyBwb3NpdGlvbiB0byBrZWVwIHRoZSBjb250ZW50IGNlbnRlcmVkLgorICAgIENH
UG9pbnQgb3JpZ2luYWxDb250ZW50Q2VudGVyID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmNl
bnRlcigpOworICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0
ZXMgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6b3JpZ2luYWxDb250ZW50Q2VudGVyIGZyb21WaWV3Ol9j
b250ZW50Vmlldy5nZXQoKV07CisgICAgQ0dQb2ludCBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRl
ckluU2VsZkNvb3JkaW5hdGVzID0gQ0dQb2ludE1ha2UoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNl
bGZDb29yZGluYXRlcy5vcmlnaW4ueCArIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRp
bmF0ZXMuc2l6ZS53aWR0aCAvIDIsIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0
ZXMub3JpZ2luLnkgKyBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLnNpemUu
aGVpZ2h0IC8gMik7CisKKyAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVudE9mZnNldCA9IFtfc2Ny
b2xsVmlldyBjb250ZW50T2Zmc2V0XTsKKyAgICBDR1BvaW50IGNvbnRlbnRPZmZzZXQgPSBvcmln
aW5hbENvbnRlbnRPZmZzZXQ7CisgICAgY29udGVudE9mZnNldC54ICs9IChvcmlnaW5hbENvbnRl
bnRDZW50ZXJJblNlbGZDb29yZGluYXRlcy54IC0gZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJ
blNlbGZDb29yZGluYXRlcy54KTsKKyAgICBjb250ZW50T2Zmc2V0LnkgKz0gKG9yaWdpbmFsQ29u
dGVudENlbnRlckluU2VsZkNvb3JkaW5hdGVzLnkgLSBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRl
ckluU2VsZkNvb3JkaW5hdGVzLnkpOworCisgICAgLy8gTGltaXQgdGhlIG5ldyBvZmZzZXQgd2l0
aGluIHRoZSBzY3JvbGx2aWV3LCB3ZSBkbyBub3Qgd2FudCB0byBydWJiZXIgYmFuZCBwcm9ncmFt
bWF0aWNhbGx5LgorICAgIENHU2l6ZSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVz
ID0gQ0dTaXplTWFrZShjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0aCAq
IHRhcmdldFNjYWxlLCBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy5oZWlnaHQg
KiB0YXJnZXRTY2FsZSk7CisgICAgQ0dGbG9hdCBtYXhIb3Jpem9udGFsT2Zmc2V0ID0gZnV0dXJl
Q29udGVudFNpemVJblNlbGZDb29yZGluYXRlcy53aWR0aCAtIG5ld0JvdW5kcy5zaXplLndpZHRo
ICsgX29ic2N1cmVkSW5zZXRzLnJpZ2h0OworICAgIGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWlu
KGNvbnRlbnRPZmZzZXQueCwgbWF4SG9yaXpvbnRhbE9mZnNldCk7CisgICAgQ0dGbG9hdCBtYXhW
ZXJ0aWNhbE9mZnNldCA9IGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMuaGVpZ2h0
IC0gbmV3Qm91bmRzLnNpemUuaGVpZ2h0ICsgX29ic2N1cmVkSW5zZXRzLmJvdHRvbTsKKyAgICBj
b250ZW50T2Zmc2V0LnkgPSBzdGQ6Om1pbihjb250ZW50T2Zmc2V0LnksIG1heFZlcnRpY2FsT2Zm
c2V0KTsKKworICAgIGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWF4KGNvbnRlbnRPZmZzZXQueCwg
LV9vYnNjdXJlZEluc2V0cy5sZWZ0KTsKKyAgICBjb250ZW50T2Zmc2V0LnkgPSBzdGQ6Om1heChj
b250ZW50T2Zmc2V0LnksIC1fb2JzY3VyZWRJbnNldHMudG9wKTsKKworICAgIC8vIE1ha2UgdGhl
IHRvcC9ib3R0b20gZWRnZXMgInN0aWNreSIgd2l0aGluIDEgcGl4ZWwuCisgICAgaWYgKG9sZFVu
b2JzY3VyZWRDb250ZW50UmVjdC5tYXhZKCkgPiBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29y
ZGluYXRlcy5oZWlnaHQgLSAxKQorICAgICAgICBjb250ZW50T2Zmc2V0LnkgPSBtYXhWZXJ0aWNh
bE9mZnNldDsKKyAgICBpZiAob2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LnkoKSA8IDEpCisgICAg
ICAgIGNvbnRlbnRPZmZzZXQueSA9IFtzZWxmIF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9s
bFZpZXddLnk7CisKKyAgICAvLyBGSVhNRTogaWYgd2UgaGF2ZSBjb250ZW50IGNlbnRlcmVkIGFm
dGVyIGRvdWJsZSB0YXAgdG8gem9vbSwgd2Ugc2hvdWxkIGFsc28gdHJ5IHRvIGtlZXAgdGhhdCBy
ZWN0IGluIHZpZXcuCisgICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRTaXplOnJvdW5kU2Nyb2xs
Vmlld0NvbnRlbnRTaXplKCpfcGFnZSwgZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRl
cyldOworICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXRdOwor
CisgICAgQ0dSZWN0IHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252
ZXJ0UmVjdDpuZXdCb3VuZHMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgQ0dSZWN0
IHVub2JzY3VyZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpm
dXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzIHRvVmlldzpfY29udGVudFZpZXcu
Z2V0KCldOworCisgICAgVUlFZGdlSW5zZXRzIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFtz
ZWxmIF9jb21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0XTsKKyAgICBXZWJDb3JlOjpGbG9h
dEJveEV4dGVudCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQodW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXRzLnRvcCwgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0LCB1bm9ic2N1cmVk
U2FmZUFyZWFJbnNldHMuYm90dG9tLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMubGVmdCk7CisK
KyAgICBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZSA9IG5ld1ZpZXdMYXlvdXRTaXplOworICAgIF9s
YXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZTsK
KyAgICBfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiA9IG5ld09yaWVudGF0aW9uOworCisgICAg
X3BhZ2UtPmR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUobmV3Vmlld0xheW91dFNpemUsIG5ld01h
eGltdW1Vbm9ic2N1cmVkU2l6ZSwgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgdW5v
YnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNl
bGZDb29yZGluYXRlcywgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0ZW50LCB0YXJnZXRTY2Fs
ZSwgbmV3T3JpZW50YXRpb24sICsrX2N1cnJlbnREeW5hbWljVmlld3BvcnRTaXplVXBkYXRlSUQp
OworICAgIGlmIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gX3BhZ2Ut
PmRyYXdpbmdBcmVhKCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6Oklu
dFNpemUobmV3Qm91bmRzLnNpemUpKTsKIAotICAgIHJldHVybiBjb29yZGluYXRvci0+c2Nyb2xs
aW5nVHJlZUFzVGV4dCgpOworICAgIF93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6
ZSA9IFlFUzsKKyAgICBfd2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gWUVTOwogfQogCi0t
IChOU051bWJlciAqKV9zdGFibGVTdGF0ZU92ZXJyaWRlCistICh2b2lkKV9lbmRBbmltYXRlZFJl
c2l6ZQogewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotICAgIHJldHVybiBu
aWw7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1b
V0tXZWJWaWV3IF9lbmRBbmltYXRlZFJlc2l6ZV0gX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUg
JWQiLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIF9keW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlKTsKKworICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiB1cC10by1kYXRl
IGxheWVyIHRyZWUsIGltbWVkaWF0ZWx5IGNvbXBsZXRlCisgICAgLy8gdGhlIHJlc2l6ZS4gT3Ro
ZXJ3aXNlLCB3ZSB3aWxsIGRlZmVyIGNvbXBsZXRpb24gdW50aWwgd2UgZG8uCisgICAgX3dhaXRp
bmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IE5POworICAgIGlmICghX3dhaXRpbmdGb3JDb21taXRB
ZnRlckFuaW1hdGVkUmVzaXplKQorICAgICAgICBbc2VsZiBfZGlkQ29tcGxldGVBbmltYXRlZFJl
c2l6ZV07CiB9CiAKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRl
OihkaXNwYXRjaF9ibG9ja190KXVwZGF0ZUJsb2NrCistICh2b2lkKV9yZXNpemVXaGlsZUhpZGlu
Z0NvbnRlbnRXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKIHsKLSAgICBp
ZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgewotICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1
cGRhdGVCbG9jayk7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlE
PSVsbHUpIC1bV0tXZWJWaWV3IF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpd
Iiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKIAotICAgIGlmIChfc3Rh
YmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MpCi0gICAgICAgIFtfc3RhYmxlU3Rh
dGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgYWRkT2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5n
ZXQoKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0
ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmpl
Y3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmlsXSk7Ci0gICAgICAgIFtzZWxmIF9maXJlUHJl
c2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tz
XTsKKyAgICBbc2VsZiBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOnVwZGF0ZUJsb2Nr
XTsKKyAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWlj
Vmlld3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dpdGhBbmltYXRpb24pIHsKKyAgICAgICAgW19j
b250ZW50VmlldyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0
ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJlc2l6aW5nV2l0aERv
Y3VtZW50SGlkZGVuOworICAgICAgICAKKyAgICAgICAgLy8gX3Jlc2l6ZVdoaWxlSGlkaW5nQ29u
dGVudFdpdGhVcGRhdGVzIGlzIHVzZWQgYnkgaXRzZWxmOyB0aGUgY2xpZW50IHdpbGwKKyAgICAg
ICAgLy8gbm90IGNhbGwgZW5kQW5pbWF0ZWRSZXNpemUsIHNvIHdlIGNhbid0IHdhaXQgZm9yIGl0
LgorICAgICAgICBfd2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gTk87CiAgICAgfQogfQog
CkBAIC03MTUxLDY0MyArNjg0Myw0NTkgQEAgLSAodm9pZClfZmlyZVByZXNlbnRhdGlvblVwZGF0
ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrcwogICAgIH1dOwogfQog
Ci0tIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxv
bmcgbG9uZylsYXllcklECi17Ci0gICAgQ0FMYXllciogbGF5ZXIgPSBkb3duY2FzdDxXZWJLaXQ6
OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSku
bGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxheWVySUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gQHsKLSAgICAgICAgQCJib3VuZHMiIDogQHsKLSAg
ICAgICAgICAgIEAieCIgOiBAKGxheWVyLmJvdW5kcy5vcmlnaW4ueCksCi0gICAgICAgICAgICBA
InkiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAotICAgICAgICAgICAgQCJ3aWR0aCIgOiBA
KGxheWVyLmJvdW5kcy5zaXplLndpZHRoKSwKLSAgICAgICAgICAgIEAiaGVpZ2h0IiA6IEAobGF5
ZXIuYm91bmRzLnNpemUuaGVpZ2h0KSwKLQotICAgICAgICB9LAotICAgICAgICBAInBvc2l0aW9u
IiA6IEB7Ci0gICAgICAgICAgICBAIngiIDogQChsYXllci5wb3NpdGlvbi54KSwKLSAgICAgICAg
ICAgIEAieSIgOiBAKGxheWVyLnBvc2l0aW9uLnkpLAotICAgICAgICB9LAotICAgICAgICBAInpQ
b3NpdGlvbiIgOiBAKGxheWVyLnpQb3NpdGlvbiksCi0gICAgICAgIEAiYW5jaG9yUG9pbnQiIDog
QHsKLSAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmFuY2hvclBvaW50LngpLAotICAgICAgICAg
ICAgQCJ5IiA6IEAobGF5ZXIuYW5jaG9yUG9pbnQueSksCi0gICAgICAgIH0sCi0gICAgICAgIEAi
YW5jaG9yUG9pbnRaIiA6IEAobGF5ZXIuYW5jaG9yUG9pbnRaKSwKLSAgICAgICAgQCJ0cmFuc2Zv
cm0iIDogQHsKLSAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMSksCi0g
ICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTIpLAotICAgICAgICAgICAg
QCJtMTMiIDogQChsYXllci50cmFuc2Zvcm0ubTEzKSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAo
bGF5ZXIudHJhbnNmb3JtLm0xNCksCi0KLSAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIudHJh
bnNmb3JtLm0yMSksCi0gICAgICAgICAgICBAIm0yMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjIp
LAotICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci50cmFuc2Zvcm0ubTIzKSwKLSAgICAgICAg
ICAgIEAibTI0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yNCksCi0KLSAgICAgICAgICAgIEAibTMx
IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMSksCi0gICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVy
LnRyYW5zZm9ybS5tMzIpLAotICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci50cmFuc2Zvcm0u
bTMzKSwKLSAgICAgICAgICAgIEAibTM0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zNCksCi0KLSAg
ICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MSksCi0gICAgICAgICAgICBA
Im00MiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDIpLAotICAgICAgICAgICAgQCJtNDMiIDogQChs
YXllci50cmFuc2Zvcm0ubTQzKSwKLSAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIudHJhbnNm
b3JtLm00NCksCi0gICAgICAgIH0sCi0gICAgICAgIEAic3VibGF5ZXJUcmFuc2Zvcm0iIDogQHsK
LSAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTExKSwKLSAg
ICAgICAgICAgIEAibTEyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEyKSwKLSAgICAg
ICAgICAgIEAibTEzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEzKSwKLSAgICAgICAg
ICAgIEAibTE0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTE0KSwKLQotICAgICAgICAg
ICAgQCJtMjEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjEpLAotICAgICAgICAgICAg
QCJtMjIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJt
MjMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjMpLAotICAgICAgICAgICAgQCJtMjQi
IDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjQpLAotCi0gICAgICAgICAgICBAIm0zMSIg
OiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMSksCi0gICAgICAgICAgICBAIm0zMiIgOiBA
KGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMiksCi0gICAgICAgICAgICBAIm0zMyIgOiBAKGxh
eWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMyksCi0gICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVy
LnN1YmxheWVyVHJhbnNmb3JtLm0zNCksCi0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIu
c3VibGF5ZXJUcmFuc2Zvcm0ubTQxKSwKLSAgICAgICAgICAgIEAibTQyIiA6IEAobGF5ZXIuc3Vi
bGF5ZXJUcmFuc2Zvcm0ubTQyKSwKLSAgICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIuc3VibGF5
ZXJUcmFuc2Zvcm0ubTQzKSwKLSAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIuc3VibGF5ZXJU
cmFuc2Zvcm0ubTQ0KSwKLSAgICAgICAgfSwKLQotICAgICAgICBAImhpZGRlbiIgOiBAKGxheWVy
LmhpZGRlbiksCi0gICAgICAgIEAiZG91YmxlU2lkZWQiIDogQChsYXllci5kb3VibGVTaWRlZCks
Ci0gICAgICAgIEAibWFza3NUb0JvdW5kcyIgOiBAKGxheWVyLm1hc2tzVG9Cb3VuZHMpLAotICAg
ICAgICBAImNvbnRlbnRzU2NhbGUiIDogQChsYXllci5jb250ZW50c1NjYWxlKSwKLSAgICAgICAg
QCJyYXN0ZXJpemF0aW9uU2NhbGUiIDogQChsYXllci5yYXN0ZXJpemF0aW9uU2NhbGUpLAotICAg
ICAgICBAIm9wYXF1ZSIgOiBAKGxheWVyLm9wYXF1ZSksCi0gICAgICAgIEAib3BhY2l0eSIgOiBA
KGxheWVyLm9wYWNpdHkpLAotICAgIH07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdT
aW5nbGVUYXBHZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgorLSAodm9pZClfc2V0T3Zl
cmxhaWRBY2Nlc3NvcnlWaWV3c0luc2V0OihDR1NpemUpaW5zZXQKIHsKLSAgICBbX2NvbnRlbnRW
aWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTphY3Rpb25dOworICAgIFtfY3Vz
dG9tQ29udGVudFZpZXcgd2ViX3NldE92ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07
CiB9CiAKLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGlu
ZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KKy0gKHZvaWQpX3NuYXBzaG90UmVjdDooQ0dSZWN0
KXJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldpZHRoOihDR0Zsb2F0KWltYWdlV2lk
dGggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQ0dJbWFnZVJlZikpY29tcGxldGlvbkhhbmRs
ZXIKIHsKLSAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hv
dEZvclRlc3Rpbmc6YWN0aW9uXTsKLX0KKyAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykgewor
ICAgICAgICAvLyBEZWZlciBzbmFwc2hvdHRpbmcgdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVz
aXplIGNvbXBsZXRlcy4KKyAgICAgICAgdm9pZCAoXmNvcGllZENvbXBsZXRpb25IYW5kbGVyKShD
R0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKKyAgICAgICAgUmV0YWluUHRy
PFdLV2ViVmlldz4gcmV0YWluZWRTZWxmID0gc2VsZjsKKyAgICAgICAgX2NhbGxiYWNrc0RlZmVy
cmVkRHVyaW5nUmVzaXplLmFwcGVuZChbcmV0YWluZWRTZWxmLCByZWN0SW5WaWV3Q29vcmRpbmF0
ZXMsIGltYWdlV2lkdGgsIGNvcGllZENvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgICAgICBb
cmV0YWluZWRTZWxmIF9zbmFwc2hvdFJlY3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFn
ZU9mV2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpjb3BpZWRDb21wbGV0aW9uSGFu
ZGxlcl07CisgICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Cisg
ICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jZW5kaWYgLy8gUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBDR1JlY3Qgc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMg
PSBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgdG9WaWV3OnNlbGYuX2N1
cnJlbnRDb250ZW50Vmlld107CisgICAgQ0dGbG9hdCBpbWFnZVNjYWxlID0gaW1hZ2VXaWR0aCAv
IHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLnNpemUud2lkdGg7CisgICAgQ0dGbG9h
dCBpbWFnZUhlaWdodCA9IGltYWdlU2NhbGUgKiBzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGlu
YXRlcy5zaXplLmhlaWdodDsKKyAgICBDR1NpemUgaW1hZ2VTaXplID0gQ0dTaXplTWFrZShpbWFn
ZVdpZHRoLCBpbWFnZUhlaWdodCk7CiAKLSNpZiBQTEFURk9STShNQUMpCi0tIChXS1BhZ2VSZWYp
X3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZpZXcKLXsKLSAgICByZXR1cm4gdG9BUEkoX3Bh
Z2UuZ2V0KCkpOwotfQorICAgIGlmIChbW19jdXN0b21Db250ZW50VmlldyBjbGFzc10gd2ViX3Jl
cXVpcmVzQ3VzdG9tU25hcHNob3R0aW5nXSkgeworICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3
IHdlYl9zbmFwc2hvdFJlY3RJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXM6c25hcHNob3RSZWN0SW5D
b250ZW50Q29vcmRpbmF0ZXMgc25hcHNob3RXaWR0aDppbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5k
bGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotLSAodm9p
ZClfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cwotewotICAgIF9pbXBsLT5kaXNt
aXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzRnJvbVZpZXdPbmx5KCk7Ci19CisjaWYgSEFW
RShDT1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKSAmJiBIQVZFKElPU1VSRkFDRSkKKyAgICAv
LyBJZiB3ZSBhcmUgcGFyZW50ZWQgYW5kIG5vdCBoaWRkZW4sIGFuZCB0aHVzIHdvbid0IGluY3Vy
IGEgc2lnbmlmaWNhbnQgcGVuYWx0eSBmcm9tIHBhZ2luZyBpbiB0aWxlcywgc25hcHNob3QgdGhl
IHZpZXcgaGllcmFyY2h5IGRpcmVjdGx5LgorICAgIE5TU3RyaW5nICpkaXNwbGF5TmFtZSA9IHNl
bGYud2luZG93LnNjcmVlbi5kaXNwbGF5Q29uZmlndXJhdGlvbi5uYW1lOworICAgIGlmIChkaXNw
bGF5TmFtZSAmJiAhc2VsZi53aW5kb3cuaGlkZGVuKSB7CisgICAgICAgIGF1dG8gc3VyZmFjZSA9
IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJD
b3JlOjpGbG9hdFNpemUoaW1hZ2VTaXplKSksIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkp
OworICAgICAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENHRmxv
YXQgaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzID0gaW1hZ2VXaWR0aCAvIHJlY3RJblZpZXdD
b29yZGluYXRlcy5zaXplLndpZHRoOworICAgICAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9
IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzLCBpbWFn
ZVNjYWxlSW5WaWV3Q29vcmRpbmF0ZXMsIDEpOworICAgICAgICB0cmFuc2Zvcm0gPSBDQVRyYW5z
Zm9ybTNEVHJhbnNsYXRlKHRyYW5zZm9ybSwgLXJlY3RJblZpZXdDb29yZGluYXRlcy5vcmlnaW4u
eCwgLXJlY3RJblZpZXdDb29yZGluYXRlcy5vcmlnaW4ueSwgMCk7CisgICAgICAgIENBUmVuZGVy
U2VydmVyUmVuZGVyRGlzcGxheUxheWVyV2l0aFRyYW5zZm9ybUFuZFRpbWVPZmZzZXQoTUFDSF9Q
T1JUX05VTEwsIChDRlN0cmluZ1JlZilkaXNwbGF5TmFtZSwgc2VsZi5sYXllci5jb250ZXh0LmNv
bnRleHRJZCwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oc2VsZi5sYXllciksIHN1cmZhY2Ut
PnN1cmZhY2UoKSwgMCwgMCwgJnRyYW5zZm9ybSwgMCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdlYkNvcmU6OklPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKHN1cmZhY2UpKS5n
ZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAotLSAodm9pZClfc2V0RnJh
bWU6KE5TUmVjdClyZWN0IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0Ci17Ci0gICAgX2ltcGwt
PnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNSZWN0VG9DR1JlY3QocmVjdCksIE5TU2l6ZVRvQ0dTaXpl
KG9mZnNldCkpOwotfQorICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsKKyAgICAgICAgQVNT
RVJUKCFbW19jdXN0b21Db250ZW50VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3VzdG9tU25hcHNo
b3R0aW5nXSk7CisgICAgICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dFdpdGhPcHRpb25z
KGltYWdlU2l6ZSwgWUVTLCAxKTsKIAotLSAodm9pZClfc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6
KENHRmxvYXQpdG90YWxIZWlnaHRPZkJhbm5lcnMKLXsKLSAgICBfaW1wbC0+c2V0VG90YWxIZWln
aHRPZkJhbm5lcnModG90YWxIZWlnaHRPZkJhbm5lcnMpOwotfQorICAgICAgICBVSVZpZXcgKmN1
c3RvbUNvbnRlbnRWaWV3ID0gX2N1c3RvbUNvbnRlbnRWaWV3LmdldCgpOworICAgICAgICBbY3Vz
dG9tQ29udGVudFZpZXcuYmFja2dyb3VuZENvbG9yIHNldF07CisgICAgICAgIFVJUmVjdEZpbGwo
Q0dSZWN0TWFrZSgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCkpOwogCi0tIChDR0Zsb2F0
KV90b3RhbEhlaWdodE9mQmFubmVycwotewotICAgIHJldHVybiBfaW1wbC0+dG90YWxIZWlnaHRP
ZkJhbm5lcnMoKTsKLX0KKyAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBVSUdyYXBoaWNz
R2V0Q3VycmVudENvbnRleHQoKTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIC1zbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5vcmlnaW4ueCAqIGltYWdlU2Nh
bGUsIC1zbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5vcmlnaW4ueSAqIGltYWdlU2Nh
bGUpOworICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBpbWFnZVNjYWxlLCBpbWFn
ZVNjYWxlKTsKKyAgICAgICAgW2N1c3RvbUNvbnRlbnRWaWV3LmxheWVyIHJlbmRlckluQ29udGV4
dDpjb250ZXh0XTsKIAotLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2Vz
Ci17Ci0gICAgX2ltcGwtPmJlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwotfQor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbVUlHcmFwaGljc0dldEltYWdlRnJvbUN1cnJlbnRJ
bWFnZUNvbnRleHQoKSBDR0ltYWdlXSk7CiAKLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldp
bmRvd0NoYW5nZXMKLXsKLSAgICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdl
cygpOwotfQorICAgICAgICBVSUdyYXBoaWNzRW5kSW1hZ2VDb250ZXh0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNT
eW5jCi17Ci0gICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jKCk7
Ci19CisgICAgdm9pZCheY29waWVkQ29tcGxldGlvbkhhbmRsZXIpKENHSW1hZ2VSZWYpID0gW2Nv
bXBsZXRpb25IYW5kbGVyIGNvcHldOworICAgIF9wYWdlLT50YWtlU25hcHNob3QoV2ViQ29yZTo6
ZW5jbG9zaW5nSW50UmVjdChzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyksIFdlYkNv
cmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoaW1hZ2VTaXplKSksIFdlYktp
dDo6U25hcHNob3RPcHRpb25zRXhjbHVkZURldmljZVNjYWxlRmFjdG9yLCBbPV0oY29uc3QgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIFdlYktpdDo6Q2FsbGJh
Y2tCYXNlOjpFcnJvcikgeworICAgICAgICBpZiAoaW1hZ2VIYW5kbGUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAg
W2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKLS0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6
KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVk
QnlXZWJDb3JlRnJvbVZpZXdPbmx5KGV2ZW50KTsKLX0KKyAgICAgICAgYXV0byBiaXRtYXAgPSBX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGltYWdlSGFuZGxlLCBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwogCi0tICh2b2lkKV9zZXRJZ25vcmVzTm9u
V2hlZWxFdmVudHM6KEJPT0wpaWdub3Jlc05vbldoZWVsRXZlbnRzCi17Ci0gICAgX2ltcGwtPnNl
dElnbm9yZXNOb25XaGVlbEV2ZW50cyhpZ25vcmVzTm9uV2hlZWxFdmVudHMpOwotfQorICAgICAg
ICBpZiAoIWJpdG1hcCkgeworICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CisgICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotLSAoQk9PTClfaWdub3Jlc05vbldoZWVs
RXZlbnRzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzTm9uV2hlZWxFdmVudHMoKTsKKyAg
ICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2U7CisgICAgICAgIGNnSW1hZ2UgPSBi
aXRtYXAtPm1ha2VDR0ltYWdlKCk7CisgICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKGNn
SW1hZ2UuZ2V0KCkpOworICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07
CisgICAgfSk7CiB9CiAKLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKilj
dXN0b21Td2lwZVZpZXdzCistICh2b2lkKV9vdmVycmlkZUxheW91dFBhcmFtZXRlcnNXaXRoTWlu
aW11bUxheW91dFNpemU6KENHU2l6ZSltaW5pbXVtTGF5b3V0U2l6ZSBtYXhpbXVtVW5vYnNjdXJl
ZFNpemVPdmVycmlkZTooQ0dTaXplKW1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlCiB7Ci0g
ICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Ci19CisgICAg
TE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICItW1dLV2ViVmlldyAiIDw8
IF9wYWdlLT5pZGVudGlmaWVyKCkgPDwgIiBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1p
bmltdW1MYXlvdXRTaXplOiIgPDwgV2ViQ29yZTo6RmxvYXRTaXplKG1pbmltdW1MYXlvdXRTaXpl
KSA8PCAiIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOiIgPDwgV2ViQ29yZTo6RmxvYXRT
aXplKG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKSA8PCAiXSIpOwogCi0tICh2b2lkKV9z
ZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQK
LXsKLSAgICBfaW1wbC0+c2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldCh0b3BDb250
ZW50SW5zZXQpOworICAgIFtzZWxmIF9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOm1pbmltdW1M
YXlvdXRTaXplXTsKKyAgICBbc2VsZiBfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6
bWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGVdOwogfQogCi0tIChCT09MKV90cnlUb1N3aXBl
V2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25v
cmluZ1Bpbm5lZFN0YXRlCistICh2b2lkKV9jbGVhck92ZXJyaWRlTGF5b3V0UGFyYW1ldGVycwog
ewotICAgIHJldHVybiBfaW1wbC0+dHJ5VG9Td2lwZVdpdGhFdmVudChldmVudCwgaWdub3JpbmdQ
aW5uZWRTdGF0ZSk7CisgICAgX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxvcHQ7
CisgICAgX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlID0gV1RGOjpudWxsb3B0OwogfQog
Ci0tICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVj
dCkpY2FsbGJhY2sKK3N0YXRpYyBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzPiB2aWV3cG9ydEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBOU1N0cmluZyAqPiAqdmlld3BvcnRBcmd1bWVudFBhaXJzLCBib29sIHZpZXdwb3J0Rml0
RW5hYmxlZCkKIHsKLSAgICBfaW1wbC0+c2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayhj
YWxsYmFjayk7Ci19CisgICAgaWYgKCF2aWV3cG9ydEFyZ3VtZW50UGFpcnMpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7Ci19
CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHMoV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZpZXdwb3J0TWV0YSk7CiAKLS0gKE5TV2luZG93ICopX2Z1
bGxTY3JlZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3coKTsK
LX0KKyAgICBbdmlld3BvcnRBcmd1bWVudFBhaXJzIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNp
bmdCbG9jazptYWtlQmxvY2tQdHIoWyZdIChOU1N0cmluZyAqa2V5LCBOU1N0cmluZyAqdmFsdWUs
IEJPT0wqIHN0b3ApIHsKKyAgICAgICAgaWYgKCFba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5n
IGNsYXNzXV0gfHwgIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAg
ICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZv
cm1hdDpAIi1bV0tXZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBLZXlz
IGFuZCB2YWx1ZXMgbXVzdCBhbGwgYmUgTlNTdHJpbmdzLiJdOworICAgICAgICBTdHJpbmcga2V5
U3RyaW5nID0ga2V5OworICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSB2YWx1ZTsKKyAgICAg
ICAgV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKHZpZXdwb3J0QXJndW1lbnRzLCBrZXlTdHJp
bmcsIHZhbHVlU3RyaW5nLCB2aWV3cG9ydEZpdEVuYWJsZWQsIFtdIChXZWJDb3JlOjpWaWV3cG9y
dEVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgICAgIE5T
TG9nKEAiLVtXS1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06IEVycm9y
IHBhcnNpbmcgdmlld3BvcnQgYXJndW1lbnQ6ICVzIiwgZXJyb3JNZXNzYWdlLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICB9KTsKKyAgICB9KS5nZXQoKV07CiAKLS0gKHZvaWQpX2Rpc2FibGVGcmFt
ZVNpemVVcGRhdGVzCi17Ci0gICAgX2ltcGwtPmRpc2FibGVGcmFtZVNpemVVcGRhdGVzKCk7Cisg
ICAgcmV0dXJuIHZpZXdwb3J0QXJndW1lbnRzOwogfQogCi0tICh2b2lkKV9lbmFibGVGcmFtZVNp
emVVcGRhdGVzCistICh2b2lkKV9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopYXJndW1lbnRzCiB7Ci0gICAgX2ltcGwt
PmVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKLX0KKyAgICBpZiAoIV9wYWdlKQorICAgICAgICBy
ZXR1cm47CiAKLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KLXsK
KyAgICBfcGFnZS0+c2V0T3ZlcnJpZGVWaWV3cG9ydEFyZ3VtZW50cyh2aWV3cG9ydEFyZ3VtZW50
c0Zyb21EaWN0aW9uYXJ5KGFyZ3VtZW50cywgX3BhZ2UtPnByZWZlcmVuY2VzKCkudmlld3BvcnRG
aXRFbmFibGVkKCkpKTsKIH0KIAotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0
aW9uCistIChVSVZpZXcgKilfdmlld0ZvckZpbmRVSQogeworICAgIHJldHVybiBbc2VsZiB2aWV3
Rm9yWm9vbWluZ0luU2Nyb2xsVmlldzpbc2VsZiBzY3JvbGxWaWV3XV07CiB9CiAKLS0gKHZvaWQp
X2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCistIChCT09MKV9pc0Rpc3BsYXlpbmdQ
REYKIHsKLX0KKyAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogV2ViQ29yZTo6TUlNRVR5cGVSZWdp
c3RyeTo6cGRmTUlNRVR5cGVzKCkpIHsKKyAgICAgICAgQ2xhc3MgcHJvdmlkZXJDbGFzcyA9IFtb
X2NvbmZpZ3VyYXRpb24gX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5XSBwcm92aWRlckZvck1JTUVU
eXBlOm1pbWVUeXBlXTsKKyAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgaXNLaW5kT2ZD
bGFzczpwcm92aWRlckNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgfQogCi0t
IChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRs
ZQotewotICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0gX3BhZ2UtPnByb2Nlc3MoKS53ZWJG
cmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoZnJhbWVIYW5kbGUuX2ZyYW1lSUQp
KSkKLSAgICAgICAgcmV0dXJuIF9pbXBsLT5jYW5DaGFuZ2VGcmFtZUxheW91dCgqd2ViRnJhbWVQ
cm94eSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBOTzsKIH0KIAotLSAoTlNDb2xv
ciAqKV91bmRlcmxheUNvbG9yCistIChOU0RhdGEgKilfZGF0YUZvckRpc3BsYXllZFBERgogewot
ICAgIHJldHVybiBfaW1wbC0+dW5kZXJsYXlDb2xvcigpOworICAgIGlmICghW3NlbGYgX2lzRGlz
cGxheWluZ1BERl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtfY3VzdG9tQ29u
dGVudFZpZXcgd2ViX2RhdGFSZXByZXNlbnRhdGlvbl07CiB9CiAKLS0gKHZvaWQpX3NldFVuZGVy
bGF5Q29sb3I6KE5TQ29sb3IgKil1bmRlcmxheUNvbG9yCistIChOU1N0cmluZyAqKV9zdWdnZXN0
ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERgogewotICAgIF9pbXBsLT5zZXRVbmRlcmxheUNvbG9y
KHVuZGVybGF5Q29sb3IpOworICAgIGlmICghW3NlbGYgX2lzRGlzcGxheWluZ1BERl0pCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3N1Z2dl
c3RlZEZpbGVuYW1lXTsKIH0KIAotLSAoQk9PTClfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01h
bmFnZXIKKy0gKF9XS1dlYlZpZXdQcmludEZvcm1hdHRlciAqKV93ZWJWaWV3UHJpbnRGb3JtYXR0
ZXIKIHsKLSAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJv
bHNNYW5hZ2VyKCk7CisgICAgVUlWaWV3UHJpbnRGb3JtYXR0ZXIgKnZpZXdQcmludEZvcm1hdHRl
ciA9IHNlbGYudmlld1ByaW50Rm9ybWF0dGVyOworICAgIEFTU0VSVChbdmlld1ByaW50Rm9ybWF0
dGVyIGlzS2luZE9mQ2xhc3M6W19XS1dlYlZpZXdQcmludEZvcm1hdHRlciBjbGFzc11dKTsKKyAg
ICByZXR1cm4gKF9XS1dlYlZpZXdQcmludEZvcm1hdHRlciAqKXZpZXdQcmludEZvcm1hdHRlcjsK
IH0KIAotLSAodm9pZClfcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQKK3N0YXRpYyBXZWJDb3Jl
OjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHRvVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0ZSBjb250ZW50QXR0cmlidXRlKQogewotICAg
IGlmIChfcGFnZSkKLSAgICAgICAgX3BhZ2UtPnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7
Ci19CisgICAgYXV0byBkaXJlY3Rpb24gPSBbVUlWaWV3IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25Gb3JTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGU6Y29udGVudEF0dHJpYnV0ZV07CisgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFVJVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbkxlZnRUb1JpZ2h0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjo6TFRSOworICAgIGNhc2UgVUlVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uUmlnaHRUb0xlZnQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOjpSVEw7CisgICAgfQogCi0tICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcgotewotICAgIC8vIE92ZXJyaWRk
ZW4gYnkgc3ViY2xhc3Nlcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
V2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOwogfQogCi0tICh2b2lk
KV9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRh
dGUKKy0gKHZvaWQpc2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOihVSVNlbWFudGljQ29udGVu
dEF0dHJpYnV0ZSljb250ZW50QXR0cmlidXRlCiB7Ci0gICAgX2ltcGwtPmhhbmRsZUFjY2VwdGVk
Q2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci19CisgICAgW3N1cGVyIHNldFNlbWFudGljQ29udGVudEF0
dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKIAotLSAodm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgX3BhZ2Ut
PnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odG9Vc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uKGNvbnRlbnRBdHRyaWJ1dGUpKTsKIH0KIAotLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlk
YXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZQotewotICAgIC8vIE92ZXJyaWRkZW4gYnkg
c3ViY2xhc3Nlcy4KLX0KKyNlbHNlIC8vICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0tICh2
b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzCi17Ci0gICAgX2ltcGwtPmZvcmNlUmVxdWVzdENh
bmRpZGF0ZXNGb3JUZXN0aW5nKCk7Ci19CisjcHJhZ21hIG1hcmsgLSBPUyBYLXNwZWNpZmljIG1l
dGhvZHMKIAotLSAoQk9PTClfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKKy0gKEJPT0wpX2RyYXdz
QmFja2dyb3VuZAogewotICAgIHJldHVybiBfaW1wbC0+c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMo
KTsKKyAgICByZXR1cm4gX2ltcGwtPmRyYXdzQmFja2dyb3VuZCgpOwogfQogCi0tICh2b2lkKV9p
bnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVu
dFJhbmdlCistICh2b2lkKV9zZXREcmF3c0JhY2tncm91bmQ6KEJPT0wpZHJhd3NCYWNrZ3JvdW5k
CiB7Ci0gICAgW3NlbGYgaW5zZXJ0VGV4dDpzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTpyZXBsYWNl
bWVudFJhbmdlXTsKKyAgICBfaW1wbC0+c2V0RHJhd3NCYWNrZ3JvdW5kKGRyYXdzQmFja2dyb3Vu
ZCk7CiB9CiAKLS0gKE5TUmVjdClfY2FuZGlkYXRlUmVjdAorLSAoTlNDb2xvciAqKV9iYWNrZ3Jv
dW5kQ29sb3IKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERh
dGEoKS5mb2N1c2VkRWxlbWVudFJlY3Q7CisgICAgcmV0dXJuIF9pbXBsLT5iYWNrZ3JvdW5kQ29s
b3IoKTsKIH0KIAotLSAoQk9PTClfdXNlU3lzdGVtQXBwZWFyYW5jZQorLSAodm9pZClfc2V0QmFj
a2dyb3VuZENvbG9yOihOU0NvbG9yICopYmFja2dyb3VuZENvbG9yCiB7Ci0gICAgcmV0dXJuIF9p
bXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7CisgICAgX2ltcGwtPnNldEJhY2tncm91bmRDb2xv
cihiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi0tICh2b2lkKV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNl
OihCT09MKXVzZVN5c3RlbUFwcGVhcmFuY2UKKy0gKHZvaWQpX3NldERyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kOihCT09MKWRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kCiB7Ci0gICAgX2ltcGwt
PnNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSk7CisgICAgc3RhdGlj
IEJPT0wgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nOworICAgIGlmICghaGFzTG9nZ2VkRGVw
cmVjYXRpb25XYXJuaW5nKSB7CisgICAgICAgIC8vIFNlZSBidWcgMTU1NTUwIGZvciBkZXRhaWxz
LgorICAgICAgICBOU0xvZyhAIi1bV0tXZWJWaWV3IF9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZDpdIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAgICAgICAg
aGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nID0gWUVTOworICAgIH0KKyAgICBbc2VsZiBfc2V0
RHJhd3NCYWNrZ3JvdW5kOiFkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZF07CiB9CiAKLS0gKHZv
aWQpdmlld0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2UKKy0gKE5TVmlldyAqKV9pbnNwZWN0
b3JBdHRhY2htZW50VmlldwogewotICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBkdXJpbmcgW3N1
cGVyIGluaXRXaXRoQ29kZXI6XSBhbmQgW3N1cGVyIGluaXRXaXRoRnJhbWU6XS4KLSAgICAvLyBU
aGF0IGlzIGJlZm9yZSBfaW1wbCBpcyByZWFkeSB0byBiZSB1c2VkLCBzbyBjaGVjay4gPHJkYXI6
Ly9wcm9ibGVtLzM5NjExMjM2PgotICAgIGlmICghX2ltcGwpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIF9pbXBsLT5lZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCk7CisgICAgcmV0dXJuIF9p
bXBsLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwogfQogCi0tICh2b2lkKV9zZXRIZWFkZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnaHQKKy0gKHZvaWQpX3NldEluc3BlY3RvckF0dGFjaG1lbnRW
aWV3OihOU1ZpZXcgKiluZXdWaWV3CiB7Ci0gICAgX3BhZ2UtPnNldEhlYWRlckJhbm5lckhlaWdo
dEZvclRlc3RpbmcoaGVpZ2h0KTsKKyAgICBfaW1wbC0+c2V0SW5zcGVjdG9yQXR0YWNobWVudFZp
ZXcobmV3Vmlldyk7CiB9CiAKLS0gKHZvaWQpX3NldEZvb3RlckJhbm5lckhlaWdodDooaW50KWhl
aWdodAorLSAodm9pZClfc2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlOihfV0tPdmVybGF5U2Nyb2xs
YmFyU3R5bGUpc2Nyb2xsYmFyU3R5bGUKIHsKLSAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVySGVp
Z2h0Rm9yVGVzdGluZyhoZWlnaHQpOworICAgIF9pbXBsLT5zZXRPdmVybGF5U2Nyb2xsYmFyU3R5
bGUodG9Db3JlU2Nyb2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5bGUpKTsKIH0KIAotLSAodm9pZClf
ZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3Qp
YWN0aW9uCistIChfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUpX292ZXJsYXlTY3JvbGxiYXJTdHls
ZQogewotICAgIF9pbXBsLT5kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50cyhh
Y3Rpb24pOworICAgIHJldHVybiB0b0FQSVNjcm9sbGJhclN0eWxlKF9pbXBsLT5vdmVybGF5U2Ny
b2xsYmFyU3R5bGUoKSk7CiB9CiAKLS0gKE5TTWVudSAqKV9hY3RpdmVNZW51CistIChCT09MKV93
aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkCiB7Ci0gICAgLy8gRklYTUU6IE9ubHkgdGhl
IERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVy
ZSwgaXQgY291bGQgYmUKLSAgICAvLyBleHRlbmRlZCB0byByZWNvZ25pemUgdGhlIHJlZ3VsYXIg
Y29udGV4dCBtZW51IGFzIHdlbGwuCi0gICAgcmV0dXJuIF9pbXBsLT5kb21QYXN0ZU1lbnUoKTsK
KyAgICByZXR1cm4gX2ltcGwtPndpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQoKTsKIH0K
IAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotLSAodm9pZClfcmVxdWVzdEFjdGl2ZU5vd1Bs
YXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0cmluZyosIGRvdWJsZSwg
ZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrCistICh2b2lkKV9zZXRXaW5kb3dPY2NsdXNpb25E
ZXRlY3Rpb25FbmFibGVkOihCT09MKWVuYWJsZWQKIHsKLSAgICBpZiAoIV9wYWdlKSB7Ci0gICAg
ICAgIGNhbGxiYWNrKE5PLCBOTywgQCIiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpLCAwKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gaGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjYWxsYmFjayk7Ci0gICAgYXV0byBsb2NhbENhbGxiYWNrID0gV2ViS2l0OjpOb3dQbGF5aW5n
SW5mb0NhbGxiYWNrOjpjcmVhdGUoW2hhbmRsZXJdKGJvb2wgYWN0aXZlLCBib29sIHJlZ2lzdGVy
ZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgU3RyaW5nIHRpdGxlLCBkb3VibGUgZHVyYXRpb24s
IGRvdWJsZSBlbGFwc2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRlbnRpZmllciwgV2ViS2l0OjpD
YWxsYmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAgIGhhbmRsZXIoYWN0aXZlLCByZWdpc3RlcmVk
QXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwgZWxhcHNlZFRpbWUsIHVu
aXF1ZUlkZW50aWZpZXIpOwotICAgIH0pOwotCi0gICAgX3BhZ2UtPnJlcXVlc3RBY3RpdmVOb3dQ
bGF5aW5nU2Vzc2lvbkluZm8oV1RGTW92ZShsb2NhbENhbGxiYWNrKSk7CisgICAgX2ltcGwtPnNl
dFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQp
X3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbgor
LSAodm9pZClzaGFyZVNoZWV0RGlkRGlzbWlzczooV0tTaGFyZVNoZWV0ICopc2hhcmVTaGVldAog
ewotICAgIF9wYWdlLT5zY2FsZVBhZ2Uoc2NhbGUsIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChv
cmlnaW4pKTsKKyAgICBfaW1wbC0+c2hhcmVTaGVldERpZERpc21pc3Moc2hhcmVTaGVldCk7CiB9
CiAKLS0gKENHRmxvYXQpX3BhZ2VTY2FsZQorLSAodm9pZClfc2V0T3ZlcnJpZGVEZXZpY2VTY2Fs
ZUZhY3RvcjooQ0dGbG9hdClkZXZpY2VTY2FsZUZhY3RvcgogewotICAgIHJldHVybiBfcGFnZS0+
cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgX2ltcGwtPnNldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0
b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCi0tICh2b2lkKV9pbnRlcm5hbERvQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayB3aXRob3V0V2Fp
dGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcgd2l0aG91dFdh
aXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVz
aXplCistIChDR0Zsb2F0KV9vdmVycmlkZURldmljZVNjYWxlRmFjdG9yCiB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkg
ewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRh
dGVCbG9jayk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICh3aXRo
b3V0V2FpdGluZ0ZvclBhaW50aW5nKQotICAgICAgICBfcGFnZS0+c2V0U2hvdWxkU2tpcFdhaXRp
bmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRNb3ZlVG9XaW5kb3codHJ1ZSk7Ci0KLSAgICBhdXRv
IHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7Ci0KLSAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKLSAgICBfcGFnZS0+Y2FsbEFmdGVy
TmV4dFByZXNlbnRhdGlvblVwZGF0ZShbdXBkYXRlQmxvY2tDb3B5LCB3aXRob3V0V2FpdGluZ0Zv
ckFuaW1hdGVkUmVzaXplLCBzdHJvbmdTZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKLSAgICAgICAgaWYgKCF1cGRhdGVCbG9ja0NvcHkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoIXdpdGhvdXRXYWl0
aW5nRm9yQW5pbWF0ZWRSZXNpemUgJiYgc3Ryb25nU2VsZi0+X2R5bmFtaWNWaWV3cG9ydFVwZGF0
ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykg
ewotICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXpl
LmFwcGVuZChbdXBkYXRlQmxvY2tDb3B5XSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlQmxvY2tD
b3B5KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0od2l0aG91dFdhaXRpbmdG
b3JBbmltYXRlZFJlc2l6ZSk7Ci0jZW5kaWYKLQotICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsK
LSAgICB9KTsKKyAgICByZXR1cm4gX2ltcGwtPm92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IoKTsK
IH0KIAotLSAoQk9PTClfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZworLSAodm9p
ZClfc2V0VG9wQ29udGVudEluc2V0OihDR0Zsb2F0KWNvbnRlbnRJbnNldAogewotICAgIC8vIEZv
ciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlOwotICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2lt
cGwtPnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQpOwogfQogCi0tICh2b2lkKV9zZXRT
Y3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOihCT09MKWRpc2FibGVkCistIChDR0Zs
b2F0KV90b3BDb250ZW50SW5zZXQKIHsKKyAgICByZXR1cm4gX2ltcGwtPnRvcENvbnRlbnRJbnNl
dCgpOwogfQogCi0vLyBFeGVjdXRlIHRoZSBzdXBwbGllZCBibG9jayBhZnRlciB0aGUgbmV4dCB0
cmFuc2FjdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzLgotLSAodm9pZClfZG9BZnRlck5leHRQcmVz
ZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistIChOU0NvbG9yICop
X3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcgogewotICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0
ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107CisgICAgcmV0dXJu
IF9pbXBsLT5wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKTsKIH0KIAotLSAodm9pZClfZG9B
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
Rm9yVGVzdGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKKy0gKF9XS1JlY3RFZGdlKV9w
aW5uZWRTdGF0ZQogewotICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9u
VXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdh
aXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpZRVNdOworICAgIHJldHVybiBfaW1wbC0+cGlubmVkU3Rh
dGUoKTsKIH0KIAotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0
V2FpdGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworLSAoX1dLUmVj
dEVkZ2UpX3J1YmJlckJhbmRpbmdFbmFibGVkCiB7Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRl
ck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWlu
dGluZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107CisgICAgcmV0dXJu
IF9pbXBsLT5ydWJiZXJCYW5kaW5nRW5hYmxlZCgpOwogfQogCi0tICh2b2lkKV9kb0FmdGVyTmV4
dFZpc2libGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKKy0g
KHZvaWQpX3NldFJ1YmJlckJhbmRpbmdFbmFibGVkOihfV0tSZWN0RWRnZSlzdGF0ZQogewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxi
YWNrcy5hcHBlbmQobWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKSk7Ci0gICAgW3NlbGYgX3NjaGVk
dWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLSNlbHNlCi0gICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotI2VuZGlmCisgICAgX2lt
cGwtPnNldFJ1YmJlckJhbmRpbmdFbmFibGVkKHN0YXRlKTsKIH0KIAotLSAodm9pZClfZGlzYWJs
ZUJhY2tGb3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZworLSAoaWQpX2ltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OihfV0tIaXRUZXN0UmVz
dWx0ICopaGl0VGVzdFJlc3VsdCB3aXRoVHlwZTooX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSl0eXBl
IHVzZXJEYXRhOihpZDxOU1NlY3VyZUNvZGluZz4pdXNlckRhdGEKIHsKLSAgICBXZWJLaXQ6OlZp
ZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5zZXREaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5
Rm9yVGVzdGluZyh0cnVlKTsKKyAgICByZXR1cm4gbmlsOwogfQogCi0tICh2b2lkKV9leGVjdXRl
RWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1
bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9uCistICh2b2lkKV9zZXRB
dXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6KEJPT0wpYXV0b21hdGljYWxseUFkanVz
dHNDb250ZW50SW5zZXRzCiB7Ci0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5k
LCBhcmd1bWVudCwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb24pXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgaWYg
KGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKQotICAgICAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9u
QmxvY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKLSAgICB9
KTsKKyAgICBfaW1wbC0+c2V0QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKGF1dG9t
YXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cyk7CiB9CiAKLS0gKGlkIDxfV0tUZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKKy0gKEJPT0wpX2F1dG9t
YXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cwogewotICAgIHJldHVybiBfdGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworICAgIHJldHVybiBfaW1wbC0+YXV0b21h
dGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKCk7CiB9CiAKLS0gKHZvaWQpX3NldFRleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZTooaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdh
dGUKKy0gKENHRmxvYXQpX21pbmltdW1MYXlvdXRXaWR0aAogewotICAgIF90ZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICByZXR1cm4gX3BhZ2UtPm1pbmltdW1TaXplRm9y
QXV0b0xheW91dCgpLndpZHRoKCk7CiB9CiAKLS0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlv
bnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilj
b25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikoKSljb21wbGV0aW9uSGFuZGxlcgorLSAo
dm9pZClfc2V0TWluaW11bUxheW91dFdpZHRoOihDR0Zsb2F0KXdpZHRoCiB7Ci0gICAgdXNpbmcg
RXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNs
dXNpb25SdWxlOwotCi0gICAgaWYgKCFfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFn
ZSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNs
dXNpb25SdWxlPiBleGNsdXNpb25SdWxlczsKLSAgICBpZiAoY29uZmlndXJhdGlvbikgewotICAg
ICAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29u
ZmlndXJhdGlvbi5leGNsdXNpb25SdWxlcykgewotICAgICAgICAgICAgYXV0byB0eXBlID0gd2tS
dWxlLmlzRXhjbHVzaW9uID8gRXhjbHVzaW9uUnVsZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lv
blJ1bGU6OlR5cGU6OkluY2x1ZGU7Ci0gICAgICAgICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5h
bWUpCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNp
b25SdWxlOjpBdHRyaWJ1dGVSdWxlIHsgd2tSdWxlLmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRy
aWJ1dGVWYWx1ZSB9IH0pOwotICAgICAgICAgICAgZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkK
LSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1
bGU6OkNsYXNzUnVsZSB7IHdrUnVsZS5jbGFzc05hbWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1
bGU6OkVsZW1lbnRSdWxlIHsgd2tSdWxlLmVsZW1lbnROYW1lIH0gfSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBfcGFnZS0+c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywg
W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+JiB0b2tlbnMpIHsKLSAgICAgICAgaWYgKCF3ZWFrU2VsZikKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBhdXRvIHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOwot
ICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFpbmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlXTsKLSAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICBCT09MIGV4cGFuZHNUb0ZpdCA9IHdpZHRoID4gMDsKIAotICAgICAgICBOU011dGFibGVBcnJh
eSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNp
emUoKV07Ci0gICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKLSAgICAgICAgICAg
IGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2Nd
IGluaXRdKTsKLSAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1i
ZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICBbd2tUb2tlbiBz
ZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVk
ZWQ6dG9rZW4uaXNFeGNsdWRlZF07Ci0gICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0Ondr
VG9rZW4uZ2V0KCldOwotICAgICAgICB9CisgICAgX3BhZ2UtPnNldE1pbmltdW1TaXplRm9yQXV0
b0xheW91dChXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCAwKSk7CisgICAgX3BhZ2UtPnNldE1haW5G
cmFtZUlzU2Nyb2xsYWJsZSghZXhwYW5kc1RvRml0KTsKIAotICAgICAgICBhdXRvIGl0ZW0gPSBh
ZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpTdHJpbmc6Om51bWJlcihpdGVtSUQudG9VSW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7Ci0g
ICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRN
YW5pcHVsYXRpb25JdGVtOml0ZW0uZ2V0KCldOwotICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25C
bG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildICgpIHsKLSAgICAgICAgY2Fw
dHVyZWRDb21wbGV0aW9uQmxvY2soKTsKLSAgICB9KTsKKyAgICBfaW1wbC0+c2V0Q2xpcHNUb1Zp
c2libGVSZWN0KGV4cGFuZHNUb0ZpdCk7CiB9CiAKLS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQo
XikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgorLSAoQk9PTClfc2hvdWxkRXhwYW5k
Q29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQKIHsKLSAgICB1c2luZyBNYW5pcHVsYXRp
b25SZXN1bHQgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uUmVzdWx0OwotCi0gICAgaWYgKCFfcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBpdGVtSUQgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXJUeXBlPihTdHJpbmcoaXRlbS5pZGVudGlmaWVyKS50
b1VJbnQ2NCgpKTsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuczsKLSAgICBmb3IgKF9XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbiAqd2tUb2tlbiBpbiBpdGVtLnRva2VucykgewotICAgICAgICBhdXRvIHRva2Vu
SUQgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6VG9rZW5JZGVudGlmaWVyVHlwZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllcikudG9V
SW50NjQoKSk7Ci0gICAgICAgIHRva2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250ZW50
IH0pOwotICAgIH0KLQotICAgIF9wYWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRlbUlE
LCB0b2tlbnMsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildIChNYW5pcHVsYXRpb25SZXN1bHQgcmVzdWx0KSB7Ci0gICAgICAgIGNhcHR1
cmVkQ29tcGxldGlvbkJsb2NrKHJlc3VsdCA9PSBNYW5pcHVsYXRpb25SZXN1bHQ6OlN1Y2Nlc3Mp
OwotICAgIH0pOworICAgIHJldHVybiBfaW1wbC0+c2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0Rm9y
QXV0b0xheW91dCgpOwogfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotLSAoQ0dSZWN0
KV9kcmFnQ2FyZXRSZWN0CistICh2b2lkKV9zZXRTaG91bGRFeHBhbmRDb250ZW50VG9WaWV3SGVp
Z2h0Rm9yQXV0b0xheW91dDooQk9PTClzaG91bGRFeHBhbmQKIHsKLSNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQotICAgIHJldHVybiBfcGFnZS0+Y3VycmVudERyYWdDYXJldFJlY3QoKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIENHUmVjdFplcm87Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwtPnNldFNo
b3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQoc2hvdWxkRXhwYW5kKTsKIH0KIAot
LSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1BvaW50KWxvY2F0
aW9uCistIChCT09MKV9hbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcgogewotICAgIFtfY29u
dGVudFZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpsb2NhdGlvbl07Cisg
ICAgcmV0dXJuIF9wYWdlLT5hbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcigpOwogfQogCi0t
ICh2b2lkKV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAqKXRleHQKKy0gKHZvaWQpX3Nl
dEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyOihCT09MKWFsd2F5c1Nob3dzSG9yaXpvbnRh
bFNjcm9sbGVyCiB7Ci0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVUZXh0RW50ZXJlZDp0ZXh0
XTsKKyAgICBfcGFnZS0+c2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYWx3YXlzU2hv
d3NIb3Jpem9udGFsU2Nyb2xsZXIpOwogfQogCi0tICh2b2lkKV9keW5hbWljVXNlckludGVyZmFj
ZVRyYWl0RGlkQ2hhbmdlCistIChCT09MKV9hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKIHsK
LSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgX3BhZ2UtPmVmZmVjdGl2ZUFw
cGVhcmFuY2VEaWRDaGFuZ2UoKTsKLSAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91
bmRdOworICAgIHJldHVybiBfcGFnZS0+YWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKCk7CiB9
CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChCT09MKV9iZWdpbkJhY2tT
d2lwZUZvclRlc3RpbmcKKy0gKHZvaWQpX3NldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcjoo
Qk9PTClhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKIHsKLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgcmV0dXJuIF9pbXBsLT5iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcoKTsKLSNlbHNlCi0gICAg
aWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4g
X2dlc3R1cmVDb250cm9sbGVyLT5iZWdpblNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0
aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7
Ci0jZW5kaWYKKyAgICBfcGFnZS0+c2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKGFsd2F5
c1Nob3dzVmVydGljYWxTY3JvbGxlcik7CiB9CiAKLS0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBl
Rm9yVGVzdGluZworLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmlu
dEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IHJldHVybiBfaW1wbC0+Y29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nKCk7Ci0jZWxzZQotICAg
IGlmICghX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgcmV0dXJu
IF9nZXN0dXJlQ29udHJvbGxlci0+Y29tcGxldGVTaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9y
VGVzdGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJh
Y2spOwotI2VuZGlmCisgICAgcmV0dXJuIFtzZWxmIHByaW50T3BlcmF0aW9uV2l0aFByaW50SW5m
bzpwcmludEluZm9dOwogfQogCi0tICh2b2lkKV9zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzoo
Qk9PTClkZWZlcnNMb2FkaW5nCistIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9u
V2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1l
SGFuZGxlICopZnJhbWVIYW5kbGUKIHsKLSAgICBfcGFnZS0+c2V0RGVmZXJzTG9hZGluZ0ZvclRl
c3RpbmcoZGVmZXJzTG9hZGluZyk7CisgICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFn
ZS0+cHJvY2VzcygpLndlYkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFt
ZUhhbmRsZS5fZnJhbWVJRCkpKQorICAgICAgICByZXR1cm4gX2ltcGwtPnByaW50T3BlcmF0aW9u
V2l0aFByaW50SW5mbyhwcmludEluZm8sICp3ZWJGcmFtZVByb3h5KTsKKyAgICByZXR1cm4gbmls
OwogfQogCi0tICh2b2lkKV9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVz
b2x1dGlvbkZvclRlc3Rpbmc6KEJPT0wpcmVzb2x2ZWQKKy0gKHZvaWQpc2V0VXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbjooTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKXVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24KIHsKLSAgICBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1l
ZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZyA9IHJlc29sdmVkOworICAgIFtzdXBlciBzZXRVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25dOwor
CisgICAgX2ltcGwtPnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbik7CiB9CiAKLS0gKEJPT0wpX2hhc0luc3BlY3RvckZyb250ZW5kCist
IChCT09MKV93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKIHsKLSAgICByZXR1cm4gX3Bh
Z2UgJiYgX3BhZ2UtPmhhc0luc3BlY3RvckZyb250ZW5kKCk7CisjaWYgSEFWRShUT1VDSF9CQVIp
CisgICAgcmV0dXJuIF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXco
KTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCiB9CiAKLS0gKF9XS0luc3BlY3RvciAq
KV9pbnNwZWN0b3IKKy0gKHZvaWQpX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzoo
Qk9PTCl3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKIHsKLSAgICBpZiAoYXV0byogaW5z
cGVjdG9yID0gX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICByZXR1cm4gd3JhcHBlcigqaW5z
cGVjdG9yKTsKLSAgICByZXR1cm4gbmlsOworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIF9pbXBs
LT5zZXRDbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3KTsKKyNlbmRpZgogfQogCi0tIChfV0tGcmFtZUhhbmRsZSAqKV9tYWlu
RnJhbWUKKy0gKGlkKV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgaWYgKGF1dG8q
IGZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6
OkZyYW1lSGFuZGxlOjpjcmVhdGUoZnJhbWUtPmZyYW1lSUQoKSkpOworI2lmIEhBVkUoVE9VQ0hf
QkFSKQorICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3KCkgPyBfaW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIDogbmlsOworI2Vsc2UK
ICAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHlGb3JUZXN0aW5nCisvLyBUaGlzIG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0
byBvdmVycmlkZS4KKy0gKHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KGlkKW1l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKIHsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdl
LT5wcm9jZXNzKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoV2ViS2l0OjpJc1N1c3BlbnNpb25JbW1p
bmVudDo6WWVzLCBbXSB7IH0pOwogfQogCi0tICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9yVGVz
dGluZworLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCistICh2
b2lkKV9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgaWYgKF9wYWdlKQot
ICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAKLS0g
KHZvaWQpX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzooaW50KXZhbHVlCistICh2b2lkKV9w
cmVwYXJlRm9yTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXRhcmdldFdpbmRvdyBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Bh
Z2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7CisgICAgX2ltcGwtPnByZXBhcmVGb3JNb3Zl
VG9XaW5kb3codGFyZ2V0V2luZG93LCBbY29tcGxldGlvbkhhbmRsZXJDb3B5XSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyQ29weSgpOworICAgIH0pOworfQogCi0gICAgX3BhZ2UtPnByb2Nl
c3MoKS5zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rpbmcoc3RhdGljX2Nhc3Q8V2ViS2l0OjpBc3Nl
cnRpb25TdGF0ZT4odmFsdWUpKTsKKy0gKHZvaWQpX3NldFRodW1ibmFpbFZpZXc6KF9XS1RodW1i
bmFpbFZpZXcgKil0aHVtYm5haWxWaWV3Cit7CisgICAgX2ltcGwtPnNldFRodW1ibmFpbFZpZXco
dGh1bWJuYWlsVmlldyk7CiB9CiAKLS0gKEJPT0wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nCistIChfV0tUaHVtYm5haWxWaWV3ICopX3RodW1ibmFpbFZpZXcK
IHsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgcmV0dXJuIF9wYWdlID8gX3BhZ2Ut
PnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZp
dHlGb3JUZXN0aW5nKCkgOiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gX2ltcGwt
PnRodW1ibmFpbFZpZXcoKTsKIH0KIAotLSAoQk9PTClfaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3RpbmcKKy0gKHZvaWQpX3NldElnbm9yZXNBbGxFdmVudHM6KEJPT0wp
aWdub3Jlc0FsbEV2ZW50cwogewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICByZXR1
cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtl
ckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOwotI2Vsc2UKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKKyAgICBfaW1wbC0+c2V0SWdub3Jlc0FsbEV2ZW50cyhpZ25vcmVz
QWxsRXZlbnRzKTsKIH0KIAotLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0CistIChC
T09MKV9pZ25vcmVzQWxsRXZlbnRzCiB7Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBX
ZWJLaXQ6OlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5kZW55TmV4dFVzZXJN
ZWRpYVJlcXVlc3QoKTsKLSNlbmRpZgorICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc0FsbEV2ZW50
cygpOwogfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLS0gKHZvaWQpX3RyaWdnZXJTeXN0
ZW1QcmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVp
bnQ2NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlECistIChOU0ludGVnZXIpX3Nw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnCiB7Ci0jaWYgVVNFKFNZU1RFTV9QUkVWSUVXKQotICAgIGlm
IChfcGFnZSkgewotICAgICAgICBpZiAoYXV0byogcHJldmlld0NvbnRyb2xsZXIgPSBfcGFnZS0+
c3lzdGVtUHJldmlld0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIHByZXZpZXdDb250cm9sbGVy
LT50cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbldpdGhUYXJnZXRGb3JUZXN0aW5nKGVsZW1lbnRJ
RCwgZG9jdW1lbnRJRCwgcGFnZUlEKTsKLSAgICB9Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwt
PnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCk7CiB9CisKICNlbmRpZgogCiBAZW5kCiAKKyN1bmRl
ZiBGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRFTlRWSUVXCisKICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZp
ZXcgKEZ1bGxTY3JlZW5BUElfUHJpdmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKaW5kZXggNDM1MDgwZjMyNDQ1Y2U4
ZTdmNTZlZTVkYzAwNDM5NGJjZjFhYTVkOS4uOGEyODdlZjcyMGE4MjliYWM1ZGU5OWJjMTFkZTcw
MTQxYzI0ZThhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgPHd0Zi9S
ZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WYXJpYW50
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTY4LDE4ICs2OSw0NyBAQCBjbGFzcyBTYWZl
QnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2ViUGFnZVByb3h5
Owogc3RydWN0IFByaW50SW5mbzsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBXZWJWaWV3SW1w
bDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitjbGFzcyBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI7CisjZW5kaWYKIH0KIAogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJl
Z2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxlOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitAY2xhc3MgV0tTY3JvbGxWaWV3OworQGNsYXNzIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKK0Bwcm90b2NvbCBfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU7CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIFdLX1dFQl9WSUVX
X1BST1RPQ09MUyB7CiAKIEBwYWNrYWdlCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24+IF9jb25maWd1cmF0aW9uOwotCiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5
PiBfcGFnZTsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
Pj4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKKyAgICBPcHRpb25hbDxCT09MPiBfcmVzb2x1
dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpXZWJWaWV3SW1wbD4gX2lt
cGw7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgUmV0YWluUHRyPFdL
U2Nyb2xsVmlldz4gX3Njcm9sbFZpZXc7CisgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IF9j
b250ZW50VmlldzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRy
b2xsZXI+IF9nZXN0dXJlQ29udHJvbGxlcjsKKyAgICBWZWN0b3I8QmxvY2tQdHI8dm9pZCAoKT4+
IF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3M7CisKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgUmV0YWluUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI+IF9m
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKKyNlbmRpZgorCisgICAgQ0dSZWN0IF9pbnB1dFZp
ZXdCb3VuZHM7CisjZW5kaWYKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04Nyw2
ICsxMTcsOCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAodm9pZClfcHJvY2Vzc1dpbGxTd2FwOwog
LSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzOwogCistIChVSVZpZXcgKilfY3VycmVudENvbnRl
bnRWaWV3OworCiAtICh2b2lkKV9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lOwogLSAodm9pZClf
ZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbjsKIC0gKHZvaWQpX2xheWVyVHJlZUNvbW1pdENvbXBs
ZXRlOwpAQCAtOTksOCArMTMxLDEwIEBAIHN0cnVjdCBQcmludEluZm87CiAKIC0gKHZvaWQpX3Nj
cm9sbFRvQ29udGVudFNjcm9sbFBvc2l0aW9uOihXZWJDb3JlOjpGbG9hdFBvaW50KXNjcm9sbFBv
c2l0aW9uIHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6SW50UG9pbnQpc2Nyb2xsT3JpZ2luOwogLSAo
Qk9PTClfc2Nyb2xsVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmlnaW46
KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQp
bWluaW11bVNjcm9sbERpc3RhbmNlOworCiAtIChkb3VibGUpX2luaXRpYWxTY2FsZUZhY3RvcjsK
IC0gKGRvdWJsZSlfY29udGVudFpvb21TY2FsZTsKKwogLSAoZG91YmxlKV90YXJnZXRDb250ZW50
Wm9vbVNjYWxlRm9yUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jil0YXJnZXRSZWN0IGN1
cnJlbnRTY2FsZTooZG91YmxlKWN1cnJlbnRTY2FsZSBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVu
dGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZToo
ZG91YmxlKW1heGltdW1TY2FsZTsKIC0gKHZvaWQpX3pvb21Ub0ZvY3VzUmVjdDooY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jilmb2N1c2VkRWxlbWVudFJlY3Qgc2VsZWN0aW9uUmVjdDooY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JilzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGlu
c2lkZUZpeGVkOihCT09MKWluc2lkZUZpeGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5p
bXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11
bVNjYWxlIGFsbG93U2NhbGluZzooQk9PTClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wp
Zm9yY2VTY3JvbGw7CiAtIChCT09MKV96b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFy
Z2V0UmVjdCB3aXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVS
ZWN0OihCT09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxl
IG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6
KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKQEAgLTE1NiwxMyArMTkwLDEwIEBAIHN0cnVj
dCBQcmludEluZm87CiAtICh2b2lkKV9yZXNldEZvY3VzUHJlc2VydmF0aW9uQ291bnQ7CiAKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tQYXNzd29yZFZpZXcgKl9wYXNzd29yZFZp
ZXc7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNCYWNrZ3JvdW5k
OwotCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlld0NvbnRlbnRQcm92
aWRlclJlZ2lzdHJ5ICpfY29udGVudFByb3ZpZGVyUmVnaXN0cnk7Ci0KIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgV0tTZWxlY3Rpb25HcmFudWxhcml0eSBfc2VsZWN0aW9uR3JhbnVs
YXJpdHk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNCYWNrZ3Jv
dW5kOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9hbGxvd3NEb3VibGVU
YXBHZXN0dXJlczsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc3R5bHVz
VGFwR2VzdHVyZVNob3VsZENyZWF0ZUVkaXRhYmxlSW1hZ2U7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgX2hhdmVTZXRPYnNjdXJlZEluc2V0czsKQEAgLTE3Miw2ICsyMDMs
NyBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogCiAtIChCT09MKV9lZmZlY3RpdmVBcHBlYXJhbmNlSXNE
YXJrOwogLSAoQk9PTClfZWZmZWN0aXZlVXNlckludGVyZmFjZUxldmVsSXNFbGV2YXRlZDsKKwog
I2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQpAQCAtMTgwLDYgKzIxMiw4IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9k
aWRJbnZhbGlkYXRlRGF0YUZvckF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVu
dDsKICNlbmRpZgogCistICh2b2lkKV9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBk
YXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5n
OihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRl
ZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOworCiAtICh2b2lk
KV9zaG93U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJu
aW5nJil3YXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZh
cmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFVSTD4mJik+JiYpY29tcGxldGlvbkhh
bmRsZXI7CiAtICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmc7CiAtICh2b2lkKV9jbGVh
clNhZmVCcm93c2luZ1dhcm5pbmdJZkZvck1haW5GcmFtZU5hdmlnYXRpb247CkBAIC0xOTAsNyAr
MjI0LDE0IEBAIHN0cnVjdCBQcmludEluZm87CiAtIChXZWJLaXQ6OldlYlBhZ2VQcm94eSopX3Bh
Z2U7CiAKICNpZiBQTEFURk9STShNQUMpCisKKy0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lk
KV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMy40KSk7CistICh2b2lkKV9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClpbnNlcnRUZXh0OihpZClz
dHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlOwogLSAodm9p
ZClfd2ViX2dyYW50RE9NUGFzdGVBY2Nlc3M7CisKICNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRl
eCA3M2Q3ODcxNWI5YjgzMDVjODgxNDBjMmM5Mzc1ZGZmZjBkNjYxZWFmLi45YTcxMzgwNzBkMmFj
ZWZmOTZkOTExNmQwNzI2NDMwM2RmYmJhZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTE3Miw2ICsxNzIsMTIg
QEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEFsbG93c1JlbW90ZUluc3BlY3Rpb246KSBCT09M
IF9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNl
dHRlcj1fc2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZTopIE5TU3RyaW5nICpfcmVtb3Rl
SW5zcGVjdGlvbk5hbWVPdmVycmlkZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9z
KDEwLjApKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpf
aW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1l
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CisKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTop
IGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
Ky0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29tcGxl
dGlvbjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfY29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoo
dm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBzZXR0ZXI9X3NldEFkZHNWaXNpdGVkTGlua3M6KSBCT09MIF9hZGRzVmlzaXRlZExpbmtz
OwogCkBAIC0yMTIsNiArMjE4LDE0IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWRnZSkgewogLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVGl0bGU6
KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5T
QXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9P
TCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9z
KDEyLjIpKTsKIC0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTDooTlNVUkwg
Kil1cmwgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5n
IGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNC40KSwgaW9zKDEyLjIpKTsKIAorLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25V
cGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTIpLCBpb3MoMTAuMCkpOworLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRh
dGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOworI2lmIFRBUkdFVF9P
U19JUEhPTkUKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlOihk
aXNwYXRjaF9ibG9ja190KXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsK
KyNlbmRpZgorCistICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFu
ZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09M
KSljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7
CisKIC0gKHZvaWQpX2lzSklURW5hYmxlZDoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxl
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAodm9pZClf
cmVtb3ZlRGF0YURldGVjdGVkTGlua3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbiBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogCkBAIC0yMzgsNiArMjUy
LDEwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogCiAj
aWYgVEFSR0VUX09TX0lQSE9ORQogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENH
UmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKKy0g
KENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludCBX
S19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9t
Vmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkp
OworCiAtICh2b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjooaWQpc2VuZGVyIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKIC0gKHZvaWQpX3NldEZvbnRTaXplOihDR0Zsb2F0
KWZvbnRTaXplIHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsK
IC0gKHZvaWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQpc2VuZGVy
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKQEAgLTI3Niw2ICsyOTQsMTQgQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBzZXR0ZXI9X3NldERyYWdJbnRlcmFjdGlvblBvbGljeTopIF9XS0RyYWdJbnRlcmFj
dGlvblBvbGljeSBfZHJhZ0ludGVyYWN0aW9uUG9saWN5IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEx
LjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc2hvdWxkQXZvaWRS
ZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2UgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMu
MCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9jb250ZW50Vmlld0lz
Rmlyc3RSZXNwb25kZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMikpOworCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfdWlUZXh0Q2FyZXRSZWN0IFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEwLjMpKTsKKworLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBv
c2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0
aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwor
CistICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbiBXS19BUElfQVZBSUxBQkxF
KGlvcygxMC4zKSk7CistICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTAuMykpOwogCiAtICh2b2lkKV9iZWdpbkludGVyYWN0aXZlT2JzY3Vy
ZWRJbnNldHNDaGFuZ2U7CiAtICh2b2lkKV9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hh
bmdlOwpAQCAtMzA2LDE4ICszMzIsMzMgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIs
IF9XS1JlY3RFZGdlKSB7CiAtIChpZClfc25hcHNob3RMYXllckNvbnRlbnRzRm9yQmFja0Zvcndh
cmRMaXN0SXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbSBXS19BUElfQVZBSUxBQkxF
KGlvcyg5XzApKTsKIC0gKE5TQXJyYXkgKilfZGF0YURldGVjdGlvblJlc3VsdHM7CiAKKy0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdl
cilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTEuMykpOworLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0
aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlD
bGVhclNlbGVjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7CisKIC0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlSZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudCBXS19BUElfQVZBSUxBQkxF
KGlvcygxMS4wKSk7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rpb25D
b250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwog
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlldyAqX3NhZmVCcm93c2luZ1dh
cm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKKworLSAo
VUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTIuMCkpOworCiAjZWxzZQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1ZpZXcg
Kl9zYWZlQnJvd3NpbmdXYXJuaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlv
cygxMi4yKSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tQYWdlUmVmIF9w
YWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3ICBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzQWN0aXZl
VmlkZW9Gb3JDb250cm9sc01hbmFnZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMikpOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRJZ25vcmVzTm9uV2hl
ZWxFdmVudHM6KSBCT09MIF9pZ25vcmVzTm9uV2hlZWxFdmVudHMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNWaWV3
ICpfc2FmZUJyb3dzaW5nV2FybmluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpKTsK
IAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tSZWN0RWRnZSBfcGlubmVkU3Rh
dGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDopIF9XS1JlY3RFZGdlIF9ydWJiZXJC
YW5kaW5nRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIAogQHByb3Bl
cnR5IChyZWFkb25seSkgTlNDb2xvciAqX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcjsKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEJhY2tncm91bmRDb2xvcjopIE5TQ29sb3Ig
Kl9iYWNrZ3JvdW5kQ29sb3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCkpOworQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0VW5kZXJsYXlDb2xvcjopIE5TQ29sb3Ig
Kl91bmRlcmxheUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworCitAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczopIENHRmxv
YXQgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkp
OwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0RHJhd3NCYWNrZ3JvdW5kOikgQk9P
TCBfZHJhd3NCYWNrZ3JvdW5kOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VG9w
Q29udGVudEluc2V0OikgQ0dGbG9hdCBfdG9wQ29udGVudEluc2V0OwogCkBAIC0zMzEsNiArMzcy
LDI3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0ludGVnZXIgX3NwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKIAogLSAodm9pZClfc2V0U2hv
dWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3VwcHJlc3M7Cist
IChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRs
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKEJPT0wpX3RyeVRvU3dpcGVX
aXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9y
aW5nUGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZv
aWQpX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7CistICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJlY3QgYW5kU2Nyb2xs
Qnk6KE5TU2l6ZSlvZmZzZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0g
KHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVu
dCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClfZGlzYWJsZUZy
YW1lU2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lk
KV9lbmFibGVGcmFtZVNpemVVcGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkp
OworCistICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5k
b3dDaGFuZ2VzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZW5k
RGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMy40KSk7CisKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0
b21Td2lwZVZpZXdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClf
c2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9pZCheKShDR1JlY3QpKWNhbGxiYWNr
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfc2V0Q3VzdG9tU3dp
cGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistIChOU1ZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKE5TV2luZG93ICop
X2Z1bGxTY3JlZW5XaW5kb3cgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAKIC8v
IENsaWVudHMgdGhhdCB3YW50IHRvIG1haW50YWluIGRlZmF1bHQgYmVoYXZpb3IgY2FuIHJldHVy
biBuaWwuIFRvIGRpc2FibGUgdGhlIGltbWVkaWF0ZSBhY3Rpb24gZW50aXJlbHksIHJldHVybiBO
U051bGwuIEFuZCB0bwogLy8gZG8gc29tZXRoaW5nIGN1c3RvbSwgcmV0dXJuIGFuIG9iamVjdCB0
aGF0IGNvbmZvcm1zIHRvIHRoZSBOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXIg
cHJvdG9jb2wuCkBAIC0zNDYsNyArNDA4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVn
ZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRBbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6KSBCT09MIF9hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAKIC0gKE5TUHJpbnRPcGVyYXRp
b24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5m
bzsKLS0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihO
U1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhh
bmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKKy0gKE5TUHJp
bnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAq
KXByaW50SW5mbyBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEyKSk7CiAKIC8vIEZJWE1FOiBUaGlzIFNQSSBzaG91bGQgYmVj
b21lIGEgcGFydCBvZiB0aGUgV0tVSURlbGVnYXRlLiByZGFyOi8vcHJvYmxlbS8yNjU2MTUzNwog
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7CkBAIC0zNTYsNiArNDE4LDcgQEAgdHlw
ZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKIC0gKHZvaWQpX3By
ZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopdGFyZ2V0V2luZG93IGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMpKTsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVy
PV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBwZWFyYW5jZSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVy
PV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUgX292
ZXJsYXlTY3JvbGxiYXJTdHlsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIEBw
cm9wZXJ0eSAoc3Ryb25nLCBub25hdG9taWMsIHNldHRlcj1fc2V0SW5zcGVjdG9yQXR0YWNobWVu
dFZpZXc6KSBOU1ZpZXcgKl9pbnNwZWN0b3JBdHRhY2htZW50VmlldyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKIApAQCAtNDUxLDE0MiArNTE0LDQgQEAgdHlwZWRlZiBOU19PUFRJ
T05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8
VUlSZXNwb25kZXJTdGFuZGFyZEVkaXRBY3Rpb25zPgogQGVuZAogCi0jZW5kaWYKLQotQGludGVy
ZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZykKLQotLSAodm9pZClfc2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tIChOU0RpY3Rpb25hcnkgKilf
Y29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVt
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7Ci0KLSNpZiBUQVJH
RVRfT1NfSVBIT05FCi0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9j
b250ZW50VmlzaWJsZVJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAoQ0dQb2lu
dClfY29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50IFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDEwLjApKTsKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9D
b250ZW50czooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0KLS0g
KHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjAp
KTsKLS0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91cyBXS19BUElfQVZBSUxBQkxF
KGlvcygxMC4wKSk7Ci0tICh2b2lkKWRpc21pc3NGb3JtQWNjZXNzb3J5VmlldyBXS19BUElfQVZB
SUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlciBXS19BUElfQVZB
SUxBQkxFKGlvcygxMy4wKSk7Ci0tICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6
KGludClyb3dJbmRleCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICp0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNTdHJpbmcgKnNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTIuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqZm9ybUlu
cHV0TGFiZWwgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwotLSAodm9pZClzZXRUaW1lUGlj
a2VyVmFsdWVUb0hvdXI6KE5TSW50ZWdlcilob3VyIG1pbnV0ZTooTlNJbnRlZ2VyKW1pbnV0ZSBX
S19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci0KLS0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlv
bjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJpbmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdp
dGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotCi0tICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRyb2xJ
bnRlcmFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKWRpZEVuZEZv
cm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi0tICh2
b2lkKV9kaWRTaG93Q29udGV4dE1lbnUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAo
dm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsK
LS0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9i
bG9ja190KXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKHZvaWQp
X2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNBcnJheTxOU1ZhbHVlICo+ICpfdWlUZXh0U2VsZWN0aW9uUmVjdHMg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBDR1JlY3QgX3VpVGV4dENhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfaW5wdXRWaWV3Qm91bmRz
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBOU1N0cmluZyAqX3Njcm9sbGluZ1RyZWVBc1RleHQgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTAuMykpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTnVtYmVyICpf
c3RhYmxlU3RhdGVPdmVycmlkZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLS0gKE5T
RGljdGlvbmFyeSAqKV9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5zaWduZWQgbG9uZyBsb25n
KWxheWVySUQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotLSAodm9pZClfc2ltdWxhdGVM
b25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDExLjApKTsKLS0gKHZvaWQpX3NpbXVsYXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICop
dGV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQ0dSZWN0IF9kcmFnQ2FyZXRSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEx
LjApKTsKLQotLSAodm9pZClfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0
aW5nOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7
Ci0KLS0gKHZvaWQpX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjooQ0dQb2ludClw
b3NpdGlvbiBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZv
ICopKWJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKLS0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJh
eTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTEuMykpOwotLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjMpKTsKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlv
biBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Ci0tIChVSVZpZXcgKilfZnVsbFNjcmVlblBs
YWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci0KLS0gKHZvaWQpX3Ry
aWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9j
dW1lbnQ6KHVpbnQ2NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlEIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsKLQotLSAodm9pZClfc2V0RGV2aWNlT3JpZW50YXRp
b25Vc2VyUGVybWlzc2lvbkhhbmRsZXJGb3JUZXN0aW5nOihCT09MICheKSgpKWhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIEJPT0wgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlciBXS19BUElfQVZBSUxB
QkxFKGlvcygxMi4yKSk7Ci0jZWxzZQotLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNo
aWxkV2luZG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX3Nl
dEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldCBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2lu
ZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2Vu
ZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7Ci0tICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYyBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05v
dEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEzLjQpKTsKLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0
b21Td2lwZVZpZXdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClf
c2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAoTlNWaWV3ICopX2Z1bGxTY3Jl
ZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChO
U1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCkpOwotLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQp
X2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpKTsKLS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlv
dXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMy40KSk7Ci0tIChCT09MKV90cnlUb1N3aXBlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQg
aWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bpbm5lZFN0YXRlIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjazoodm9pZCheKShDR1JlY3QpKWNhbGxiYWNrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VG90YWxIZWlnaHRP
ZkJhbm5lcnM6KSBDR0Zsb2F0IF90b3RhbEhlaWdodE9mQmFubmVycyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3Nl
dFVuZGVybGF5Q29sb3I6KSBOU0NvbG9yICpfdW5kZXJsYXlDb2xvciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRl
cj1fc2V0SWdub3Jlc05vbldoZWVsRXZlbnRzOikgQk9PTCBfaWdub3Jlc05vbldoZWVsRXZlbnRz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZpZXcgIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEyKSk7Ci0tICh2b2lkKV9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJ
RCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2hhbmRsZUNvbnRy
b2xsZWRFbGVtZW50SURSZXNwb25zZTooTlNTdHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU6
KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTIuMykpOwotLSAodm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfZGlkVXBkYXRlQ2Fu
ZGlkYXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEyLjMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc2hvdWxk
UmVxdWVzdENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2
b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBs
YWNlbWVudFJhbmdlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAoTlNSZWN0
KV9jYW5kaWRhdGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpKTsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTop
IEJPT0wgX3VzZVN5c3RlbUFwcGVhcmFuY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCkp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU01lbnUgKl9hY3RpdmVNZW51IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOwotCi0tICh2b2lkKV9zZXRIZWFkZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnaHQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7
Ci0tICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRp
bmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNC40KSk7Ci0jZW5kaWYKLQotLSAodm9pZClfcmVxdWVzdEFjdGl2ZU5vd1BsYXlp
bmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0cmluZyosIGRvdWJsZSwgZG91
YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCks
IGlvcygxMS4zKSk7Ci0KLS0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRo
T3JpZ2luOihDR1BvaW50KW9yaWdpbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tIChD
R0Zsb2F0KV9wYWdlU2NhbGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi0tICh2b2lk
KV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxv
Y2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7Ci0tICh2b2lkKV9k
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNp
emVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRl
QmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwgaW9zKDEwLjMpKTsKLS0gKHZv
aWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1
cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKLQot
LSAodm9pZClfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZyBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwotLSAodm9pZClfZXhl
Y3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICop
YXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbiBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwotCi0tICh2b2lkKV9kZW55TmV4dFVz
ZXJNZWRpYVJlcXVlc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7
Ci0KLS0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZzsKLS0gKEJPT0wpX2NvbXBsZXRl
QmFja1N3aXBlRm9yVGVzdGluZzsKLS0gKHZvaWQpX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5n
OihCT09MKWRlZmVyc0xvYWRpbmc7Ci0KLS0gKHZvaWQpX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJ
bW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzooQk9PTClyZXNvbHZlZCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotCi1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0luc3BlY3RvckZyb250ZW5kIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIF9XS0luc3BlY3RvciAqX2luc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjE0LjQpLCBpb3MoMTIuMikpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tG
cmFtZUhhbmRsZSAqX21haW5GcmFtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaywgc2V0dGVyPV9zZXRUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGU6KSBpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPiBf
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uICopc25hcHNo
b3RDb25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
LS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxpbmdVcGRhdGVzRGlz
YWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGlu
ZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLQotLSAodm9pZClf
cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7Ci0tICh2b2lkKV9wcm9jZXNz
RGlkUmVzdW1lRm9yVGVzdGluZzsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9P
TCBfaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKLS0gKHZvaWQpX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzooaW50KXN0
YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
Ci0KLUBlbmQKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWEzY2RhZGUzYTY5MjVhMmE5MzljNDgyZGZhYzRlYTIwOGQ4MTQ4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcuaApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ0lP
Uy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ01hYy5oIgorCitAaW50ZXJmYWNlIFdLV2Vi
VmlldyAoV0tUZXN0aW5nKQorCistICh2b2lkKV9zZXRQYWdlU2NhbGU6KENHRmxvYXQpc2NhbGUg
d2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW47CistIChDR0Zsb2F0KV9wYWdlU2NhbGU7CisKKy0g
KHZvaWQpX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6KEJPT0wp
ZW5hYmxlZDsKKy0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06
KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW07CisKKy0gKHZvaWQpX3JlcXVlc3RBY3RpdmVO
b3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9PTCwgTlNTdHJpbmcqLCBkb3Vi
bGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjazsKKworLSAodm9pZClfZG9BZnRlck5leHRQ
cmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplRm9yVGVzdGlu
Zzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2s7CistICh2b2lkKV9kb0FmdGVyTmV4dFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2s7CisKKy0gKHZv
aWQpX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3Rpbmc7CisKKy0g
KHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdDsKKworLSAoQk9PTClfYmVnaW5CYWNrU3dp
cGVGb3JUZXN0aW5nOworLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nOworLSAo
dm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZzsKKwor
LSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25G
b3JUZXN0aW5nOihCT09MKXJlc29sdmVkOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIEJPT0wgX2hhc0luc3BlY3RvckZyb250ZW5kOworCitAcHJvcGVydHkgKG5vbmF0b21pYywg
c2V0dGVyPV9zZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Ny
b2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzsKKworLSAodm9pZClfcHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7CistICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9y
VGVzdGluZzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2Vydmlj
ZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3Rpbmc7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgX2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nOworLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpc3RhdGU7
CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdUZXN0aW5nLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld1Rlc3RpbmcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGYwMTlhODMxMDM2YWU0MTY3MTU1YTVhYzc2
ZTE4NWEwZDdjNzk1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3Rpbmcu
aCIKKworI2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCIKKyNpbXBvcnQgIlZpZXdH
ZXN0dXJlQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKKyNpbXBvcnQgIl9X
S0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgi
CisjaW1wb3J0IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4KKworCitAaW1wbGVtZW50YXRp
b24gV0tXZWJWaWV3IChXS1Rlc3RpbmcpCisKKy0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9h
dClzY2FsZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbgoreworICAgIF9wYWdlLT5zY2FsZVBh
Z2Uoc2NhbGUsIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChvcmlnaW4pKTsKK30KKworLSAoQ0dG
bG9hdClfcGFnZVNjYWxlCit7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsK
K30KKworLSAodm9pZClfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGlu
ZzooQk9PTCllbmFibGVkCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBbX2NvbnRl
bnRWaWV3IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDplbmFibGVkXTsKKyNlbHNl
CisgICAgX2ltcGwtPnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsK
KyNlbmRpZgorfQorCistIChOU0RpY3Rpb25hcnkgKilfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJ
dGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtCit7CisgICAgaWYgKFt1c2VySW50ZXJm
YWNlSXRlbSBpc0VxdWFsVG9TdHJpbmc6QCJ2YWxpZGF0aW9uQnViYmxlIl0pIHsKKyAgICAgICAg
YXV0byogdmFsaWRhdGlvbkJ1YmJsZSA9IF9wYWdlLT52YWxpZGF0aW9uQnViYmxlKCk7CisgICAg
ICAgIFN0cmluZyBtZXNzYWdlID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25CdWJibGUt
Pm1lc3NhZ2UoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIGRvdWJsZSBmb250U2l6ZSA9IHZh
bGlkYXRpb25CdWJibGUgPyB2YWxpZGF0aW9uQnViYmxlLT5mb250U2l6ZSgpIDogMDsKKyAgICAg
ICAgcmV0dXJuIEB7IHVzZXJJbnRlcmZhY2VJdGVtOiBAeyBAIm1lc3NhZ2UiOiAoTlNTdHJpbmcg
KiltZXNzYWdlLCBAImZvbnRTaXplIjogW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Zm9udFNp
emVdIH0gfTsKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHJldHVybiBb
X2NvbnRlbnRWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNl
ckludGVyZmFjZUl0ZW1dOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKKy0g
KHZvaWQpX3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwg
Qk9PTCwgTlNTdHJpbmcqLCBkb3VibGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjaworewor
ICAgIGlmICghX3BhZ2UpIHsKKyAgICAgICAgY2FsbGJhY2soTk8sIE5PLCBAIiIsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNhbGxiYWNrKTsKKyAgICBhdXRvIGxvY2FsQ2FsbGJh
Y2sgPSBXZWJLaXQ6Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2s6OmNyZWF0ZShbaGFuZGxlcl0oYm9v
bCBhY3RpdmUsIGJvb2wgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCBTdHJpbmcg
dGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lLCB1aW50NjRfdCB1bmlx
dWVJZGVudGlmaWVyLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgaGFu
ZGxlcihhY3RpdmUsIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1
cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRpZmllcik7CisgICAgfSk7CisKKyAgICBf
cGFnZS0+cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhXVEZNb3ZlKGxvY2FsQ2Fs
bGJhY2spKTsKK30KKworLSAoQk9PTClfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGlu
ZworeworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlOworICAgIHJldHVybiBOTzsK
K30KKworLSAodm9pZClfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzooQk9P
TClkaXNhYmxlZAoreworfQorCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jaworeworICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91
dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpZRVNdOworfQorCistICh2b2lkKV9kb0FmdGVyTmV4
dFZpc2libGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKK3sK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVD
YWxsYmFja3MuYXBwZW5kKG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jaykpOworICAgIFtzZWxmIF9z
Y2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CisjZWxzZQorICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKKyNlbmRpZgorfQor
CistICh2b2lkKV9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5n
Cit7CisgICAgV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkuc2V0RGlzYWJs
ZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcodHJ1ZSk7Cit9CisKKy0gKEJPT0wpX2JlZ2lu
QmFja1N3aXBlRm9yVGVzdGluZworeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2lt
cGwtPmJlZ2luQmFja1N3aXBlRm9yVGVzdGluZygpOworI2Vsc2UKKyAgICBpZiAoIV9nZXN0dXJl
Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBfZ2VzdHVyZUNvbnRy
b2xsZXItPmJlZ2luU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKKyNlbmRpZgorfQor
CistIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcKK3sKKyNpZiBQTEFURk9STShN
QUMpCisgICAgcmV0dXJuIF9pbXBsLT5jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoKTsKKyNl
bHNlCisgICAgaWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBOTzsKKyAg
ICByZXR1cm4gX2dlc3R1cmVDb250cm9sbGVyLT5jb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJl
Y3Rpb25Gb3JUZXN0aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVj
dGlvbjo6QmFjayk7CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRl
c3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZworeworICAgIF9wYWdlLT5zZXREZWZlcnNMb2FkaW5n
Rm9yVGVzdGluZyhkZWZlcnNMb2FkaW5nKTsKK30KKworLSAodm9pZClfc2V0U2hhcmVTaGVldENv
bXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVk
Cit7CisgICAgX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRl
c3RpbmcgPSByZXNvbHZlZDsKK30KKworLSAoQk9PTClfaGFzSW5zcGVjdG9yRnJvbnRlbmQKK3sK
KyAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0luc3BlY3RvckZyb250ZW5kKCk7Cit9CisK
Ky0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nCit7CisgICAg
aWYgKF9wYWdlKQorICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5k
KFdlYktpdDo6SXNTdXNwZW5zaW9uSW1taW5lbnQ6OlllcywgW10geyB9KTsKK30KKworLSAodm9p
ZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3RpbmcKK3sKKyAgICBpZiAoX3BhZ2UpCisgICAgICAg
IF9wYWdlLT5wcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClf
c2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpdmFsdWUKK3sKKyAgICBpZiAoIV9wYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBfcGFnZS0+cHJvY2VzcygpLnNldEFzc2VydGlvblN0
YXRlRm9yVGVzdGluZyhzdGF0aWNfY2FzdDxXZWJLaXQ6OkFzc2VydGlvblN0YXRlPih2YWx1ZSkp
OworfQorCistIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZworeworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICByZXR1cm4gX3BhZ2UgPyBf
cGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRB
Y3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKworLSAoQk9PTClfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZv
clRlc3RpbmcKK3sKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgcmV0dXJuIF9wYWdl
ID8gX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3Jv
dW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgOiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy0gKHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdAoreworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdl
cjo6c2luZ2xldG9uKCkuZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0KCk7CisjZW5kaWYKK30KKwor
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZp
ZXdUZXN0aW5nSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmll
d1Rlc3RpbmdJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjUyNmM1NTNiYTNkNDJjNTUwMDA4MDY3YTA1ODk1
MjQ2MjMzZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKworI2lmIFRBUkdFVF9PU19JUEhPTkUKKwor
QGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZ0lPUykKKworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZzsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnNlbGVjdEZvcm1Qb3BvdmVyVGl0
bGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpmb3JtSW5wdXRM
YWJlbDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxOU1ZhbHVlICo+
ICpfdWlUZXh0U2VsZWN0aW9uUmVjdHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IENHUmVjdCBfaW5wdXRWaWV3Qm91bmRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU1N0cmluZyAqX3Njcm9sbGluZ1RyZWVBc1RleHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TTnVtYmVyICpfc3RhYmxlU3RhdGVPdmVycmlkZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9kcmFnQ2FyZXRSZWN0OworCistICh2b2lkKWtleWJv
YXJkQWNjZXNzb3J5QmFyTmV4dDsKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91
czsKKy0gKHZvaWQpZGlzbWlzc0Zvcm1BY2Nlc3NvcnlWaWV3OworLSAodm9pZClfZGlzbWlzc0Zp
bGVQaWNrZXI7CistICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6KGludClyb3dJ
bmRleDsKKworLSAodm9pZClzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6KE5TSW50ZWdlcilob3Vy
IG1pbnV0ZTooTlNJbnRlZ2VyKW1pbnV0ZTsKKworLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9u
OihOU1N0cmluZyAqKW5ld1N0cmluZyB0b1N0cmluZzooTlNTdHJpbmcgKilvbGRTdHJpbmcgd2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKwor
LSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51OworLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRN
ZW51OworLSAodm9pZClfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6KGRpc3BhdGNo
X2Jsb2NrX3QpYWN0aW9uOworCistIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJX
aXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklEOworLSAodm9pZClfc2ltdWxhdGVMb25n
UHJlc3NBY3Rpb25BdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uOworLSAodm9pZClfc2ltdWxh
dGVUZXh0RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0OworCistICh2b2lkKV9kb0FmdGVyUmVjZWl2
aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uOwor
CistICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3Qp
ZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBh
Z2VJRDsKKworLSAodm9pZClfc2V0RGV2aWNlT3JpZW50YXRpb25Vc2VyUGVybWlzc2lvbkhhbmRs
ZXJGb3JUZXN0aW5nOihCT09MICheKSgpKWhhbmRsZXI7CisKK0BlbmQKKworI2VuZGlmIC8vIFRB
UkdFVF9PU19JUEhPTkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGFiYzZmYzBkMzVkMGE0ZWQw
MjhmNjg1ZWM0MDFhMDUzYzY4M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCkBAIC0wLDAgKzEsMjY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLV2ViVmll
d1Rlc3RpbmdJT1MuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgIlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHkuaCIKKyNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJv
eHkuaCIKKyNpbXBvcnQgIl9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKKworQGlt
cGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nSU9TKQorCistICh2b2lkKWtleWJvYXJk
QWNjZXNzb3J5QmFyTmV4dAoreworICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5VGFiOllFU107
Cit9CisKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91cworeworICAgIFtfY29u
dGVudFZpZXcgYWNjZXNzb3J5VGFiOk5PXTsKK30KKworLSAodm9pZClhcHBseUF1dG9jb3JyZWN0
aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0b1N0cmluZzooTlNTdHJpbmcgKilvbGRTdHJpbmcg
d2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIFtfY29udGVudFZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjpuZXdTdHJpbmcgdG9TdHJp
bmc6b2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjpbY2FwdHVyZWRDb21wbGV0aW9uSGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChVSVdLQXV0b2NvcnJlY3Rp
b25SZWN0cyAqcmVjdHMpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgIH1dOworfQorCistICh2b2lkKWRpc21pc3NGb3JtQWNjZXNzb3J5VmlldworeworICAgIFtf
Y29udGVudFZpZXcgYWNjZXNzb3J5RG9uZV07Cit9CisKKy0gKHZvaWQpX2Rpc21pc3NGaWxlUGlj
a2VyCit7CisgICAgW19jb250ZW50VmlldyBkaXNtaXNzRmlsZVBpY2tlcl07Cit9CisKKy0gKHZv
aWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50
ZWdlciltaW51dGUKK3sKKyAgICBbX2NvbnRlbnRWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91
cjpob3VyIG1pbnV0ZTptaW51dGVdOworfQorCistICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQ
aWNrZXJSb3c6KGludClyb3dJbmRleAoreworICAgIFtfY29udGVudFZpZXcgc2VsZWN0Rm9ybUFj
Y2Vzc29yeVBpY2tlclJvdzpyb3dJbmRleF07Cit9CisKKy0gKE5TU3RyaW5nICopc2VsZWN0Rm9y
bVBvcG92ZXJUaXRsZQoreworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1Qb3Bv
dmVyVGl0bGVdOworfQorCistIChOU1N0cmluZyAqKXRleHRDb250ZW50VHlwZUZvclRlc3RpbmcK
K3sKKyAgICByZXR1cm4gW19jb250ZW50VmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXTsK
K30KKworLSAoTlNTdHJpbmcgKilmb3JtSW5wdXRMYWJlbAoreworICAgIHJldHVybiBbX2NvbnRl
bnRWaWV3IGZvcm1JbnB1dExhYmVsXTsKK30KKworLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51
Cit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCit9CisKKy0gKHZvaWQpX2Rp
ZERpc21pc3NDb250ZXh0TWVudQoreworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRl
LgorfQorCistIChDR1JlY3QpX2lucHV0Vmlld0JvdW5kcworeworICAgIHJldHVybiBfaW5wdXRW
aWV3Qm91bmRzOworfQorCistIChOU0FycmF5PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9u
UmVjdHMKK3sKKyAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5l
ZWRlZC4KKyAgICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKKworICAg
IHJldHVybiBbX2NvbnRlbnRWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c107Cit9CisKKy0gKE5T
U3RyaW5nICopX3Njcm9sbGluZ1RyZWVBc1RleHQKK3sKKyAgICBXZWJLaXQ6OlJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHkoKTsKKyAgICBpZiAoIWNvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm4gQCIi
OworCisgICAgcmV0dXJuIGNvb3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Cit9CisK
Ky0gKE5TTnVtYmVyICopX3N0YWJsZVN0YXRlT3ZlcnJpZGUKK3sKKyAgICAvLyBGb3Igc3ViY2xh
c3NlcyB0byBvdmVycmlkZS4KKyAgICByZXR1cm4gbmlsOworfQorCistIChOU0RpY3Rpb25hcnkg
KilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklECit7
CisgICAgQ0FMYXllciogbGF5ZXIgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubGF5ZXJXaXRoSURGb3JUZXN0
aW5nKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICByZXR1cm4gQHsKKyAgICAgICAgQCJib3VuZHMiIDogQHsKKyAgICAgICAgICAgIEAieCIgOiBA
KGxheWVyLmJvdW5kcy5vcmlnaW4ueCksCisgICAgICAgICAgICBAInkiIDogQChsYXllci5ib3Vu
ZHMub3JpZ2luLngpLAorICAgICAgICAgICAgQCJ3aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5zaXpl
LndpZHRoKSwKKyAgICAgICAgICAgIEAiaGVpZ2h0IiA6IEAobGF5ZXIuYm91bmRzLnNpemUuaGVp
Z2h0KSwKKworICAgICAgICB9LAorICAgICAgICBAInBvc2l0aW9uIiA6IEB7CisgICAgICAgICAg
ICBAIngiIDogQChsYXllci5wb3NpdGlvbi54KSwKKyAgICAgICAgICAgIEAieSIgOiBAKGxheWVy
LnBvc2l0aW9uLnkpLAorICAgICAgICB9LAorICAgICAgICBAInpQb3NpdGlvbiIgOiBAKGxheWVy
LnpQb3NpdGlvbiksCisgICAgICAgIEAiYW5jaG9yUG9pbnQiIDogQHsKKyAgICAgICAgICAgIEAi
eCIgOiBAKGxheWVyLmFuY2hvclBvaW50LngpLAorICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIu
YW5jaG9yUG9pbnQueSksCisgICAgICAgIH0sCisgICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IEAo
bGF5ZXIuYW5jaG9yUG9pbnRaKSwKKyAgICAgICAgQCJ0cmFuc2Zvcm0iIDogQHsKKyAgICAgICAg
ICAgIEAibTExIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMSksCisgICAgICAgICAgICBAIm0xMiIg
OiBAKGxheWVyLnRyYW5zZm9ybS5tMTIpLAorICAgICAgICAgICAgQCJtMTMiIDogQChsYXllci50
cmFuc2Zvcm0ubTEzKSwKKyAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0x
NCksCisKKyAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMSksCisgICAg
ICAgICAgICBAIm0yMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjIpLAorICAgICAgICAgICAgQCJt
MjMiIDogQChsYXllci50cmFuc2Zvcm0ubTIzKSwKKyAgICAgICAgICAgIEAibTI0IiA6IEAobGF5
ZXIudHJhbnNmb3JtLm0yNCksCisKKyAgICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIudHJhbnNm
b3JtLm0zMSksCisgICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzIpLAor
ICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci50cmFuc2Zvcm0ubTMzKSwKKyAgICAgICAgICAg
IEAibTM0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zNCksCisKKyAgICAgICAgICAgIEAibTQxIiA6
IEAobGF5ZXIudHJhbnNmb3JtLm00MSksCisgICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnRy
YW5zZm9ybS5tNDIpLAorICAgICAgICAgICAgQCJtNDMiIDogQChsYXllci50cmFuc2Zvcm0ubTQz
KSwKKyAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm00NCksCisgICAgICAg
IH0sCisgICAgICAgIEAic3VibGF5ZXJUcmFuc2Zvcm0iIDogQHsKKyAgICAgICAgICAgIEAibTEx
IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTExKSwKKyAgICAgICAgICAgIEAibTEyIiA6
IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEyKSwKKyAgICAgICAgICAgIEAibTEzIiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEzKSwKKyAgICAgICAgICAgIEAibTE0IiA6IEAobGF5
ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTE0KSwKKworICAgICAgICAgICAgQCJtMjEiIDogQChsYXll
ci5zdWJsYXllclRyYW5zZm9ybS5tMjEpLAorICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci5z
dWJsYXllclRyYW5zZm9ybS5tMjIpLAorICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci5zdWJs
YXllclRyYW5zZm9ybS5tMjMpLAorICAgICAgICAgICAgQCJtMjQiIDogQChsYXllci5zdWJsYXll
clRyYW5zZm9ybS5tMjQpLAorCisgICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm0zMSksCisgICAgICAgICAgICBAIm0zMiIgOiBAKGxheWVyLnN1YmxheWVyVHJh
bnNmb3JtLm0zMiksCisgICAgICAgICAgICBAIm0zMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm0zMyksCisgICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3Jt
Lm0zNCksCisKKyAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTQxKSwKKyAgICAgICAgICAgIEAibTQyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQy
KSwKKyAgICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQzKSwK
KyAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwKKyAg
ICAgICAgfSwKKworICAgICAgICBAImhpZGRlbiIgOiBAKGxheWVyLmhpZGRlbiksCisgICAgICAg
IEAiZG91YmxlU2lkZWQiIDogQChsYXllci5kb3VibGVTaWRlZCksCisgICAgICAgIEAibWFza3NU
b0JvdW5kcyIgOiBAKGxheWVyLm1hc2tzVG9Cb3VuZHMpLAorICAgICAgICBAImNvbnRlbnRzU2Nh
bGUiIDogQChsYXllci5jb250ZW50c1NjYWxlKSwKKyAgICAgICAgQCJyYXN0ZXJpemF0aW9uU2Nh
bGUiIDogQChsYXllci5yYXN0ZXJpemF0aW9uU2NhbGUpLAorICAgICAgICBAIm9wYXF1ZSIgOiBA
KGxheWVyLm9wYXF1ZSksCisgICAgICAgIEAib3BhY2l0eSIgOiBAKGxheWVyLm9wYWNpdHkpLAor
ICAgIH07Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihk
aXNwYXRjaF9ibG9ja190KWFjdGlvbgoreworICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNl
dHRpbmdTaW5nbGVUYXBHZXN0dXJlOmFjdGlvbl07Cit9CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZWNl
aXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24K
K3sKKyAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZv
clRlc3Rpbmc6YWN0aW9uXTsKK30KKworLSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0Cit7CisjaWYg
RU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICByZXR1cm4gX3BhZ2UtPmN1cnJlbnREcmFnQ2FyZXRS
ZWN0KCk7CisjZWxzZQorICAgIHJldHVybiBDR1JlY3RaZXJvOworI2VuZGlmCit9CisKKy0gKHZv
aWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgor
eworICAgIFtfY29udGVudFZpZXcgX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjps
b2NhdGlvbl07Cit9CisKKy0gKHZvaWQpX3NpbXVsYXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICop
dGV4dAoreworICAgIFtfY29udGVudFZpZXcgX3NpbXVsYXRlVGV4dEVudGVyZWQ6dGV4dF07Cit9
CisKKy0gKHZvaWQpX2R5bmFtaWNVc2VySW50ZXJmYWNlVHJhaXREaWRDaGFuZ2UKK3sKKyAgICBp
ZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPmVmZmVjdGl2ZUFwcGVhcmFu
Y2VEaWRDaGFuZ2UoKTsKKyAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOwor
fQorCistICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0
X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90
KXBhZ2VJRAoreworI2lmIFVTRShTWVNURU1fUFJFVklFVykKKyAgICBpZiAoX3BhZ2UpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3BhZ2UtPnN5c3RlbVByZXZpZXdD
b250cm9sbGVyKCkpCisgICAgICAgICAgICBwcmV2aWV3Q29udHJvbGxlci0+dHJpZ2dlclN5c3Rl
bVByZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVtZW50SUQsIGRvY3VtZW50SUQs
IHBhZ2VJRCk7CisgICAgfQorI2VuZGlmCit9CisKKy0gKHZvaWQpX3NldERldmljZU9yaWVudGF0
aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9yVGVzdGluZzooQk9PTCAoXikoKSloYW5kbGVyCit7
CisgICAgRnVuY3Rpb248Ym9vbCgpPiBoYW5kbGVyV3JhcHBlcjsKKyAgICBpZiAoaGFuZGxlcikK
KyAgICAgICAgaGFuZGxlcldyYXBwZXIgPSBbaGFuZGxlciA9IG1ha2VCbG9ja1B0cihoYW5kbGVy
KV0geyByZXR1cm4gaGFuZGxlcigpOyB9OworICAgIF9wYWdlLT5zZXREZXZpY2VPcmllbnRhdGlv
blVzZXJQZXJtaXNzaW9uSGFuZGxlckZvclRlc3RpbmcoV1RGTW92ZShoYW5kbGVyV3JhcHBlcikp
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZmQxNTZhMjU2ZDQ1MTI1MzJiOTgzYmZmNmIzNmYxYzgwZWYyMGEyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdU
ZXN0aW5nTWFjLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLQmFzZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorCisjaWYgIVRB
UkdFVF9PU19JUEhPTkUKKworQGNsYXNzIF9XS0ZyYW1lSGFuZGxlOworCitAaW50ZXJmYWNlIFdL
V2ViVmlldyAoV0tUZXN0aW5nTWFjKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBCT09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlczsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNNZW51ICpfYWN0aXZlTWVudTsKKworLSAodm9pZClf
cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQ7CistICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxl
bWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKKworLSAodm9pZClfaGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlOworLSAo
dm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU7CisKKy0gKHZvaWQpX2ZvcmNlUmVxdWVz
dENhbmRpZGF0ZXM7CistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eToo
Qk9PTCl2aXNpYmxlOworCistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1l
bnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlOworLSAoTlNSZWN0KV9jYW5kaWRhdGVS
ZWN0OworCistICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistICh2
b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQ7CistICh2b2lkKV9kb0FmdGVy
UHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247
CisKK0BlbmQKKworI2VuZGlmIC8vICFUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWYyNzk3ZTRlYzk5ODMzY2UwNTRhMzkxOTAxYTJiNjAzYzFhZjc2ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGlu
Z01hYy5tbQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCisKKyNpZiBQTEFURk9STShN
QUMpCisKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJfV0tGcmFtZUhh
bmRsZUludGVybmFsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVGVzdGluZ01h
YykKKworLSAodm9pZClfcmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQKK3sKKyAgICBpZiAoX3Bh
Z2UpCisgICAgICAgIF9wYWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworfQorCist
ICh2b2lkKV9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6KE5TU3RyaW5nICopaWRl
bnRpZmllcgoreworICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KK30KKworLSAodm9p
ZClfaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlk
YXRlCit7CisgICAgX2ltcGwtPmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Cit9
CisKKy0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlCit7CisgICAgLy8gT3ZlcnJp
ZGRlbiBieSBzdWJjbGFzc2VzLgorfQorCistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0
VmlzaWJpbGl0eTooQk9PTCl2aXNpYmxlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFz
c2VzLgorfQorCistICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgX2ltcGwt
PmZvcmNlUmVxdWVzdENhbmRpZGF0ZXNGb3JUZXN0aW5nKCk7Cit9CisKKy0gKEJPT0wpX3Nob3Vs
ZFJlcXVlc3RDYW5kaWRhdGVzCit7CisgICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2Fu
ZGlkYXRlcygpOworfQorCistICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1l
bnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCit7CisgICAgW3NlbGYgaW5zZXJ0VGV4
dDpzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTpyZXBsYWNlbWVudFJhbmdlXTsKK30KKworLSAoTlNS
ZWN0KV9jYW5kaWRhdGVSZWN0Cit7CisgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBv
c3RMYXlvdXREYXRhKCkuZm9jdXNlZEVsZW1lbnRSZWN0OworfQorCistICh2b2lkKXZpZXdEaWRD
aGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1
cmluZyBbc3VwZXIgaW5pdFdpdGhDb2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdpdGhGcmFtZTpdLgor
ICAgIC8vIFRoYXQgaXMgYmVmb3JlIF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVzZWQsIHNvIGNoZWNr
LiA8cmRhcjovL3Byb2JsZW0vMzk2MTEyMzY+CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgX2ltcGwtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKK30KKwor
LSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2Ut
PnNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClf
c2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Cit7CisgICAgX3BhZ2UtPnNldEZvb3Rl
ckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsKK30KKworLSAodm9pZClfZG9BZnRlclBy
b2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCit7
CisgICAgX2ltcGwtPmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzKGFjdGlv
bik7Cit9CisKKy0gKE5TTWVudSAqKV9hY3RpdmVNZW51Cit7CisgICAgLy8gRklYTUU6IE9ubHkg
dGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gSW4gdGhlIGZ1
dHVyZSwgaXQgY291bGQgYmUKKyAgICAvLyBleHRlbmRlZCB0byByZWNvZ25pemUgdGhlIHJlZ3Vs
YXIgY29udGV4dCBtZW51IGFzIHdlbGwuCisgICAgcmV0dXJuIF9pbXBsLT5kb21QYXN0ZU1lbnUo
KTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KaW5kZXggZjU4
OWU5ZDMzNjFmYTFmYjYwMzVkYWExMzkyMTUyMjAxNjZiY2UxMC4uN2Q4OTAyZWViOTY2ZGZkYmFk
Nzg3ZDgyYmIyZDhlZGZjOWJiN2NmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAjaW1wb3J0ICJXS1dlYlZp
ZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLm1tCmluZGV4IGRjOWY3NGM0OWE2YmVhOWVkYzE1MDZjNWFiOTU3ZTAwNmEyMDdhNWUu
LjBjNWUwZjdmNmM2MGY3YTRjM2Y2ODFlMjlkZDQzMGQ1M2QxYzA5ZGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ5LDYgKzQ5
LDcgQEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9y
dCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKICNpbXBvcnQgIldLV2ViVmll
d0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJD
b250ZXh0TWVudVByb3h5LmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRv
d25JT1MuaCIKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmlu
ZGV4IGJjOGFlMDIyMWM0ZTYxYjY0YTk3Y2U1ZDQyOGYzMTZkNGUwNzgwY2MuLjA1Yjg4ZDE5ZDNh
ZDAzODljZTA3YmE1M2FlNWJhMmVkMDEzYzgxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNzEsNiAr
NzEsNyBAQAogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKICNpbXBv
cnQgIldLV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nSU9TLmgiCiAjaW1wb3J0ICJXZWJBdXRvY29ycmVjdGlv
bkNvbnRleHQuaCIKICNpbXBvcnQgIldlYkF1dG9jb3JyZWN0aW9uRGF0YS5oIgogI2ltcG9ydCAi
V2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duSU9TLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNTYy
OGNmMzViOGNjYjJkMWZiOTE5ZDFjMmE3MDg0M2Y3Njg3ODg3ZC4uNDQxMGI3ZDEzZjA2YzEyYzZh
YmVhZDhhMzY3NTIwMDZkNjlkMjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMjUsNiArMjUsNyBAQAog
CiAjaWYgSEFWRShIT1ZFUl9HRVNUVVJFX1JFQ09HTklaRVIpCiAKKyNpbXBvcnQgPFVJS2l0L1VJ
R2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKIAog
QGludGVyZmFjZSBXS01vdXNlR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQppbmRleCAx
YTJiZmQ4NzUyZTc3NjEyZDM4MDlhZjIyZTkwNWVkZTY5MzFlN2NkLi4zOGI3YzRmMGY2YmJhZTZi
Mzg5OTZkZWIxY2I2MzY0NDc3ZGNhOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJJT1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKICNpbXBvcnQgIldLRnVsbHNj
cmVlblN0YWNrVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZp
ZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tX
ZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgog
I2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5t
bQppbmRleCAyMjY1M2Q3NDM5ODg2ZGJmNWVjZGNkZGFmZTcyZDAyZDdiODMxZDAwLi4wMmRlZDE4
N2QzMmJkNjJhNDNhMTBkMmU5YTYzNjgyYTMzYTc0OTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCkBAIC00OCw2ICs0OCw3IEBACiAj
aW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9y
dCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdNYWMuaCIK
ICNpbXBvcnQgIldlYkNvbG9yUGlja2VyTWFjLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVBy
b3h5TWFjLmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5oCmluZGV4IDRkZWRjMGE2YWEyYTIyMzg5NjE1NjFlZjA5NjM2ZmJm
MWU3ZDUxMTUuLjAxZDdhMmFiNzUxOGU2Mzc5OGVmYWYyNmQzOWM2OTU1ODAxYzdjYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIuaApAQCAtMjMsOCArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgPEFwcEtpdC9B
cHBLaXQuaD4KICNpbXBvcnQgIkdlbmVyaWNDYWxsYmFjay5oIgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBmNzlkZGMxMjA0MGYyYmY3OTI0MGNjYTU1ZWY5ODkzMGI1MDA3NTM0Li4yNzMy
OGUyNDVjMDA4NzVmNDJkNDhjZmFlNzBkMzQ4YTA3ZWJjNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4LDYgKzk4LDkgQEAKIAkJ
MEYwOENGNTQxRDYzQzE0MDAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBvcG92ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDhDRjUzMUQ2M0MxNDAw
MEI0OERGMSAvKiBXS0Zvcm1TZWxlY3RQb3BvdmVyLmggKi87IH07CiAJCTBGMTc0QUEzMTQyQTRD
QjcwMDM5MjUwRiAvKiBBUElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5
LmggKi87IH07CiAJCTBGM0M3MjVCMTk2RjYwNEUwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0M3MjU5MTk2RjVGNjgwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAq
LzsgfTsKKwkJMEY0NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzJG
MjM5RDg5QTAwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggKi87IH07CisJCTBGNDVB
MzM1MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRB
QkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5oICovOyB9OworCQkwRjQ1QTMzRDIzOUQ4Q0M0MDAy
OTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rl
c3RpbmcuaCAqLzsgfTsKIAkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCAqLzsgfTsKIAkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTk0Nzk1MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5LmggKi87IH07CiAJCTBGNTk0NzlEMTg3QjNCNjAwMDQzNzg1NyAvKiBS
ZW1vdGVTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJl
ZS5oICovOyB9OwpAQCAtMTA5LDYgKzExMiw5IEBACiAJCTBGOTMxQzFDMThDNTcxMTkwMERCQTdD
MyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMUMxQTE4QzU3MTE5MDBEQkE3
QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oICovOyB9OwogCQkw
RjkzMUMxQzE4QzU3MTE5MDBEQkI4RDQgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzFDMUExOEM1NzExOTAwREJCOEQ0IC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MuaCAqLzsgfTsKIAkJMEZCNjU5MjMxMjA4QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdB
cmVhSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCNjU5MjIxMjA4QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oICovOyB9OworCQkw
RkI5NDgzNzIzOUYzMUQxMDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZy5oIGluIENvcHkgVGVz
dGluZyBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzNC
MjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggKi87IH07CisJCTBGQjk0ODM4
MjM5RjMyMzgwMDkyNkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5n
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzMkYyMzlE
ODlBMDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MuaCAqLzsgfTsKKwkJMEZCOTQ4Mzky
MzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBDb3B5IFRlc3Rpbmcg
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4
OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5oICovOyB9OwogCQkwRkNCNEU0NjE4
QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJT1MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTM2MThCQkUwNDQwMDBGQ0ZDOSAvKiBQ
YWdlQ2xpZW50SW1wbElPUy5oICovOyB9OwogCQkwRkNCNEU0ODE4QkJFMDQ0MDAwRkNGQzkgLyog
V0tBY3Rpb25TaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDQjRFMzgxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXQuaCAqLzsgfTsK
IAkJMEZDQjRFNEExOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNBMThC
QkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggKi87IH07CkBAIC0xOTIz
LDYgKzE5MjksMTkgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEZCOTQ4MzYy
MzlGMzFCNzAwOTI2QThGIC8qIENvcHkgVGVzdGluZyBIZWFkZXJzICovID0geworCQkJaXNhID0g
UEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CisJCQlkc3RQYXRoID0gV2ViS2l0VGVzdFN1cHBvcnQ7CisJCQlkc3RTdWJmb2xkZXJTcGVjID0g
MTY7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkI5NDgzNzIzOUYzMUQxMDA5MjZBOEYgLyogV0tXZWJW
aWV3VGVzdGluZy5oIGluIENvcHkgVGVzdGluZyBIZWFkZXJzICovLAorCQkJCTBGQjk0ODM4MjM5
RjMyMzgwMDkyNkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5nIEhl
YWRlcnMgKi8sCisJCQkJMEZCOTQ4MzkyMzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1Rlc3Rp
bmdNYWMuaCBpbiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLywKKwkJCSk7CisJCQluYW1lID0gIkNv
cHkgVGVzdGluZyBIZWFkZXJzIjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOworCQl9OwogCQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyogQ29weSBNZXNzYWdl
IEdlbmVyYXRpb24gU2NyaXB0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhh
c2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjAyNSw2ICsyMDQ0LDEy
IEBACiAJCTBGMTc0QUE2MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjNDNzI1NzE5NkY1RjUwMDBBRUREMEMgLyogV0tJbnNwZWN0
b3JIaWdobGlnaHRWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1QTMyRjIzOUQ4OUEwMDAy
OTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNDVBMzMwMjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ0lP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMzMyMzlEODlBRjAwMjk0
QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tXZWJWaWV3VGVzdGluZ01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjQ1QTMzNDIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1Rlc3RpbmdNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFC
RiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLV2ViVmlld1Rlc3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEz
M0MyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1OTQ3OEUxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RjE4
N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwNjksNiArNTA5NCwxNSBAQAog
CQkJdGFiV2lkdGggPSA4OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkwRjQ1QTMyRTIzOUQ4
OTYwMDAyOTRBQkYgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQkwRjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lP
Uy5oICovLAorCQkJCTBGNDVBMzMwMjM5RDg5QTEwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5n
SU9TLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQkxMDU4QzdCMEZFQTU1ODVFMTFDQTJDQkIgLyogTGlua2VkIEZyYW1ld29y
a3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjc0OSw2
ICs2NzgzLDggQEAKIAkJCQkxQUMxNDE1MDE4QUM0N0VFMDA2QzYwMkMgLyogV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaCAqLywKIAkJCQkxQTY2QkY4RTE4QTA1MkVEMDAyMDcxQjQgLyog
V0tXZWJWaWV3SW50ZXJuYWwuaCAqLywKIAkJCQkyNkY5QTgzQTE4QTM0NjNGMDBBRUI4OEEgLyog
V0tXZWJWaWV3UHJpdmF0ZS5oICovLAorCQkJCTBGNDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBX
S1dlYlZpZXdUZXN0aW5nLmggKi8sCisJCQkJMEY0NUEzM0MyMzlEOENDNDAwMjk0QUJGIC8qIFdL
V2ViVmlld1Rlc3RpbmcubW0gKi8sCiAJCQkJMUFENjBGNUMxOEUyMEY0QzAwMjBDMDM0IC8qIFdL
V2luZG93RmVhdHVyZXMuaCAqLywKIAkJCQkxQUQ2MEY1QjE4RTIwRjRDMDAyMEMwMzQgLyogV0tX
aW5kb3dGZWF0dXJlcy5tbSAqLywKIAkJCQkxQUQ2MEY1RjE4RTIwRjc0MDAyMEMwMzQgLyogV0tX
aW5kb3dGZWF0dXJlc0ludGVybmFsLmggKi8sCkBAIC04MTc4LDYgKzgyMTQsNyBAQAogCQkJCUJD
MEMzNzY2MTBGODA3NjYwMDc2RDdDQiAvKiBDICovLAogCQkJCTM3QzRDMDgzMTgxNDlDMkEwMDM2
ODhCOSAvKiBDb2NvYSAqLywKIAkJCQlCQzhBNTAxMzExNzY1RjQ1MDA3NTc1NzMgLyogY3BwICov
LAorCQkJCTBGNDVBMzJFMjM5RDg5NjAwMDI5NEFCRiAvKiBpb3MgKi8sCiAJCQkJQkMxMTFCNDcx
MTJGNjE2OTAwMzM3QkFCIC8qIG1hYyAqLywKIAkJCQk2MzQ4NDI0RjFGQjI2RTcxMDA5NDZFM0Mg
LyogQVBJQXBwbGljYXRpb25NYW5pZmVzdC5oICovLAogCQkJCTJFNUM3NzBEMUZBN0Q0MjkwMDU5
MzJDMyAvKiBBUElBdHRhY2htZW50LmNwcCAqLywKQEAgLTg0NjEsNiArODQ5OCw4IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCQzg2OTlCMzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICov
LAogCQkJCUJDODY5OUI0MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oICovLAor
CQkJCTBGNDVBMzMzMjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggKi8s
CisJCQkJMEY0NUEzMzQyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMubW0g
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0xMDczNSw2ICsxMDc3NCw5IEBACiAJCQkJMkRDNkQ5QzMxOEM0NEE2MTAwNDNCQUQ0IC8qIFdL
V2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY2
QkY4RjE4QTA1MkVEMDAyMDcxQjQgLyogV0tXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI2RjlBODNCMThBMzQ2ODEwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjQ1QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVz
dGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0NUEzMzEyMzlEODlBMTAwMjk0QUJGIC8qIFdL
V2ViVmlld1Rlc3RpbmdJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDVBMzM1MjM5RDg5QUYw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ2
MEY1RTE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFENjBGNjAxOEUyMEY3NDAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXNJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkE1MDgwQkYxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2lu
ZG93RmVhdHVyZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwODUyLDYgKzEwODk0LDcg
QEAKIAkJCQkxQTIxODAxNjFCNTQ1NDYyMDA0NkFFQzQgLyogQWRkIFN5bWxpbmsgaW4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzICovLAogCQkJCTUzNzlDN0FDMjFFNTI4ODUwMEU0
QThGNiAvKiBDaGVjayAueGNmaWxlbGlzdHMgKi8sCiAJCQkJOTMzMTcwMDcyMjM0Njc0NTAwQjMy
NTU0IC8qIENyZWF0ZSBzeW1saW5rcyB0byBYUEMgc2VydmljZXMgZm9yIGVuZ2luZWVyaW5nIGJ1
aWxkcyAqLywKKwkJCQkwRkI5NDgzNjIzOUYzMUI3MDA5MjZBOEYgLyogQ29weSBUZXN0aW5nIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCQk1MzVFMDhDNDIyNTQ1Qjcy
MDBERjAwQ0EgLyogUEJYQnVpbGRSdWxlICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg4NTg3NDZiYjA3NmRlMGNmYTk4NDQyNGYwYzNmNGNk
NzY5NjAyNTAuLjFiNjViNTQ0ZTNkYTE2OTQ3NTNhY2E3ZjNlZWUxOTA0ZWExZmE3MTkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2
MCBAQAorMjAxOS0xMi0xMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
KworICAgICAgICBNb3ZlIFdLV2ViVmlldyBjb2RlIHJlbGF0ZWQgdG8gdGVzdGluZyB0byBuZXcg
ZmlsZXMsIHdpdGggdGhlaXIgb3duIGhlYWRlcnMsIGFuZCBzdG9wIGV4cG9zaW5nIHRlc3Qtb25s
eSBmdW5jdGlvbnMgYXMgU1BJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1MDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU3RvcCBleHBvc2luZyBXS1dlYlZpZXcgKFdLVGVzdGluZykgYXMgU1BJLCBi
ZWNhdXNlIGV2ZXJ5b25lIGFkZGVkIFNQSSBoZXJlIGJ5IG1pc3Rha2UsIGFuZAorICAgICAgICBp
bnRlcm5hbCBjbGllbnRzIGtlcHQgdXNpbmcgdGVzdGluZyBTUEkuCisgICAgICAgIAorICAgICAg
ICBJbnN0ZWFkLCBtb3ZlIHRlc3Rpbmctb25seSBmdW5jdGlvbnMgdG8gaW50ZXJuYWwgaGVhZGVy
cyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYnVpbHQgZnJhbWV3b3JrLAorICAgICAgICBh
bmQgbW92ZSB0byBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkgcHJvcGVydGllcyBhbmQgZnVuY3Rpb25z
IHRoYXQgd2Via2l0IGNsaWVudHMgcmVseSBvbi4KKyAgICAgICAgCisgICAgICAgIEFkZCBXS1dl
YlZpZXdUZXN0aW5nL1dLV2ViVmlld1Rlc3RpbmdNYWMvV0tXZWJWaWV3VGVzdGluZ0lPUyBmb3Ig
dGVzdC1vbmx5IGNvZGUuCisgICAgICAgIAorICAgICAgICBXS1dlYlZpZXdUZXN0aW5nKiBoZWFk
ZXJzIGFyZSBjb3BpZWQgdG8gYSAiV2ViS2l0VGVzdFN1cHBvcnQiIGRpcmVjdG9yeSBpbiB0aGUg
UHJvZHVjdHMgZGlyZWN0b3J5LCBhbmQgV1RSL0RSVCBhbmQgVGVzdFdlYktpdEFQSQorICAgICAg
ICBnZXQgaGVhZGVyIHNlYXJjaCBwYXRocyB0byBmaW5kIHRoZSBoZWFkZXJzIHRoZXJlLgorCisg
ICAgICAgICogTWluaUJyb3dzZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzoKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW06CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2Fk
aW5nLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW50ZXJh
Y3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVyZURl
bGVnYXRlLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJv
Y2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcu
bW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVnYXRl
Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlh
U2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW06CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJ
bmZvLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJW
aWV3Q2FuZGlkYXRlVGVzdHMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW06CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5t
bToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRl
c3RzLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxl
Z2F0ZS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRv
cklPUy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRv
ck1hYy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jhc2Uu
eGNjb25maWc6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldL
V2ViVmlldy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENv
bnRyb2xsZXJNYWMubW06CisKIDIwMTktMTItMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBHeXJvc2NvcGUgKERldmljZU1vdGlvbiByZWxhdGVkKSBwZXJtaXNz
aW9uIGNhbm5vdCBiZSByZXF1ZXN0ZWQgaW4gV0tXZWJWaWV3IHVubGVzcyB0aGUgY2xpZW50IGFw
cCBzZXRzIGEgV0tVSURlbGVnYXRlCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9Db25m
aWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnIGIvVG9vbHMvTWluaUJyb3dzZXIvQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZwppbmRleCBmYzYxZDUyMjdjODYwODQ4ODUxNGNiZDkyYTI4ZGM3YzFj
MmVmYWY0Li4yMGYwZTQ1ZjkzOTUzNzVjZGFmMzFlNzUyYjRiMjU2ZmVkZjdiMjczIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKQEAgLTcwLDYg
KzcwLDggQEAgR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8w
OwogV0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIKIEdDQ19O
T19DT01NT05fQkxPQ0tTID0gWUVTOwogCitIRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL1dlYktpdFRlc3RTdXBwb3J0OworCiBTVVBQT1JURURfUExBVEZPUk1TID0g
aXBob25lb3MgaXBob25lc2ltdWxhdG9yIG1hY29zeCB0dm9zIHR2c2ltdWxhdG9yIHdhdGNob3Mg
d2F0Y2hzaW11bGF0b3I7CiAKIFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJH
RVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZp
eDppZGVudGlmaWVyKSk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJv
d3NlcldpbmRvd0NvbnRyb2xsZXIubSBiL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2Vy
V2luZG93Q29udHJvbGxlci5tCmluZGV4IDAwNjMyNjZlZDMzZTdkYTdhMmFiOTE0MmEyYWYwYTEy
YzU5MGQwZDkuLjQ5NmFjNDcxNmU4Y2NmMzk4ZDE5NTZmMGE5ZjQyYmUzOTk4MmRlNGMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5t
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5t
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkFwcERlbGVnYXRlLmgiCiAjaW1wb3J0ICJT
ZXR0aW5nc0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBv
cnQgPFdlYktpdC9XS0ZyYW1lSW5mby5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkFj
dGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZS5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29u
ZmlnIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCmlu
ZGV4IGVlYzEzZjZlZDk4NmQyM2MxMGNjNjcyNmFhOWJkNzQwNzQxMzQ2NjQuLmU5NTZiYjE4YzM2
NDdhYjIxMDJkNzcyMTRlM2ViZDE0MjMyZDFkZGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZworKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKQEAgLTMzLDcgKzMzLDcgQEAgQ0xBTkdf
Q1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysxejsKIENMQU5HX0NYWF9MSUJSQVJZID0gbGli
YysrOwogQ0xBTkdfRU5BQkxFX09CSkNfV0VBSyA9IFlFUzsKIENMQU5HX1dBUk5fQ1hYMFhfRVhU
RU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICR7QlVJTFRfUFJPRFVDVFNfRElS
fS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2Fy
ZGluZ0hlYWRlcnMgJChCVUlMVF9QUk9EVUNUU19ESVIpL1dlYkNvcmVUZXN0U3VwcG9ydCAke1NS
Q1JPT1R9OworSEVBREVSX1NFQVJDSF9QQVRIUyA9ICR7QlVJTFRfUFJPRFVDVFNfRElSfS91c3Iv
bG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hl
YWRlcnMgJChCVUlMVF9QUk9EVUNUU19ESVIpL1dlYkNvcmVUZXN0U3VwcG9ydCAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvV2ViS2l0VGVzdFN1cHBvcnQgJHtTUkNST09UfTsKIAogR0NDX05PX0NPTU1P
Tl9CTE9DS1MgPSBZRVM7CiBHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19E
RUZJTkVTKSAkKEZFQVRVUkVfREVGSU5FUykgVV9ESVNBQkxFX1JFTkFNSU5HPTEgVV9TSE9XX0NQ
TFVTUExVU19BUEk9MCAkKEdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlNfJChQTEFURk9STV9O
QU1FKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0VkaXRpbmdUZXN0SGFybmVz
cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tCmluZGV4IGYw
OTZmYjc1NmYwMDQzZTYzNjZkZWM0ZjAxYTkwYmMxZDA3MzdjM2IuLjE2NjdmNzBlZDFjMzBiYWZk
YzFiMzkwYTQ5N2QwNTIwMDQ5ZGRmMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
RWRpdGluZ1Rlc3RIYXJuZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rl
c3RIYXJuZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1Rlc3RIYXJu
ZXNzLmgiCiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogCiBAaW1w
bGVtZW50YXRpb24gRWRpdGluZ1Rlc3RIYXJuZXNzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbQpp
bmRleCAyNzEyYzVmMDQwYWRlMWFiZWU2MjQ1MTkyOGRlN2Q3MzhiN2ExMWNkLi5kNWI3Y2ZkOTFk
ZDEzNTA3MjRhNTU3ZWE0YjVlYTYyYmNjOWFkNThmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1t
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1w
b3J0IDxXZWJLaXQvV0tQYWdlUHJpdmF0ZU1hYy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FuaW1hdGVkUmVzaXplLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbQppbmRleCAz
MTE5YzNjMzk5MDMwMjVjMWQyNzEwYzFiZWRiZGI0Njc2MjMzMDU1Li5lNDA0NDA5NWRhNDE5YTYx
NTlkNGMzYjhmYWQxYzI1OTlmODczNTcyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0FuaW1hdGVkUmVzaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0KQEAgLTI5LDExICsyOSwx
MSBAQAogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5o
IgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRGV2aWNlT3JpZW50YXRpb24ubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RldmljZU9yaWVudGF0aW9uLm1tCmlu
ZGV4IDkwMDRmOGM1MzJhYWRkZjkzMmM0ZjE2NDQyMjQzODFhMjZhOGIwMzYuLjAwMDU5YTI4OWI4
MTk4MjI2YzgyY2RjOGFhNzQ4MWIxYjhiZjM5OTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRGV2aWNlT3JpZW50YXRpb24ubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EZXZpY2VPcmllbnRhdGlvbi5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9y
dCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBv
cnQgPHd0Zi9GdW5jdGlvbi5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tCmluZGV4IDY0ZGM0NmI0
Zjc3NzJiZGNmZTg3MWUyZjg1ZWUyOWU2MTM0YTBkYzguLjgwMDJkOGE2MDAyODQwYTQ2M2U1NTFl
YmU2YjQ1NDFlN2QwZDA4ODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvdWJsZURlZmVyc0xvYWRpbmcubW0KQEAgLTI4LDEwICsy
OCwxMCBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlV0aWxpdGll
cy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAi
V0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2Nr
QWZ0ZXJDcmFzaC5tbQppbmRleCBkNDMyNGE4ZjZjNmE5ZGYyM2RlODg0YmY1OWE2NDYxMTVkMjg5
MTBjLi5hNzlkZGE5YzFmY2EyYzg2M2I0YTU0NzNmOWQ5MzFmM2NmZTU4NTEyIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxv
Y2tBZnRlckNyYXNoLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0KQEAgLTI5LDggKzI5LDggQEAKICNp
bXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBv
cnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1BvbGljeS5tbQppbmRleCA2YzJk
N2I2ZjRlMDBlY2YwNTJkMTA1OTM4MTM4ZDdjMDZiZTEyNTlhLi5kMTZjYWYxN2RhMzg3ZGVkN2Y2
YTRjOTZlZjBjNDE2ZGJjYjllMmUwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFCdWZmZXJpbmdQb2xpY3kubW0KQEAgLTI5
LDkgKzI5LDggQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgogCiBzdGF0aWMgdm9pZCB3YWl0VW50aWxCdWZmZXJpbmdQb2xp
Y3lJc0VxdWFsVG8oV0tXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBleHBlY3RlZCkKIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxh
eWluZ0NvbnRyb2xzVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tCmluZGV4IDUwMDEyZjBmMTlkZmU1ZWNkOGVk
ZDVhY2IzM2Y3YjU3ZTJiMTAwZjguLjhhYzVlYzUwNDRhMmIxNjdlZTA2NGZmZGFkMTIzYjM0YzQ0
MDMzZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
Tm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbQpAQCAtMjcsOSArMjcsOCBA
QAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmll
dy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQ
cml2YXRlLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0
ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGlj
dHVyZURlbGVnYXRlLm1tCmluZGV4IDVkYzFhMTk3ODk4NDQzMTlkMjYxOWE1YzdhMWY4ZmM5MmY2
ZTg5MzguLmJmNmUzY2U0YjliZGY4OGEzZTdjYThkMjBjMWJmZjkzZGNkMTFmOGYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGljdHVyZUluUGljdHVy
ZURlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UGljdHVyZUluUGljdHVyZURlbGVnYXRlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJQ
bGF0Zm9ybVdlYlZpZXcuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQYWdlUHJpdmF0ZU1hYy5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CkBAIC0zOCw3ICszOSw2
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVVJMQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ZpZXcuaD4KLSNpbXBvcnQgPFdlYktp
dC9XS1ZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcu
bW0KaW5kZXggODQ3YmZiNjdlZTZmMGI4MGQ5Mjc2YTQzNjliMTRkZjc3NjM0MDBiZS4uN2JmNGFh
NTcyOTU4ZThiMzM5ZmQ5MzEwYzgzMjU5M2UzOWY5MzRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5n
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1
c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbQpAQCAtMjksOSArMjksOCBAQAogCiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKIFRFU1Qo
V2ViS2l0LCBQcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nKQogewpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlv
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24ubW0KaW5kZXggMTE1Nzc3ZTc0ZDliYmZkZmM0Y2UzZTAzYWM2MzIyMTg2Zjgz
MjFlOC4uM2NhMjkzNDNjNzg5NTQ3NGQ3YzBjNjNjZTM1MmFlNDM1ZjhjMmI4MCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1By
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0
LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tX
ZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQv
V0tCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVu
dFJ1bGVMaXN0U3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGUuaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZUhh
bmRsZXIuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRleCA1YjY2
OWVhYjAyMzg5ZjIxM2EwNTE3Zjc1ZGQ2YjhjNTQ2OGI5MTA5Li5kNzc5NjQwNTY4NGZiN2ZhYTU4
ZTc0YTJkY2MxZGQyMmM2MTcwNzBiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAtMzEsMTIg
KzMxLDEyIEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVn
YXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0
aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2No
ZW1lSGFuZGxlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVVJMU2NoZW1lVGFza1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90U3RvcmUubW0KaW5kZXggNmMyZjg0MzJl
OGFhYTY2Njc2OTkxYWE3ZmJhZTFmYzA2MGM1N2U1NS4uYmNjMTAyNmJjYWE1ODg2YWJjZTJiMDE2
Y2QyZjRhNmZlNTgyMmNkZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9yZS5tbQpAQCAtMzIsMTEgKzMyLDExIEBACiAjaW1w
b3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0
ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0
IDxXZWJLaXQvV0tCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLUGFnZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXcuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIGRpZEZvcmNlUmVwYWludDsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVt
UHJldmlldy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVt
UHJldmlldy5tbQppbmRleCBkOWFkZWY0NDMyZDk4M2U0YjQ3MTAyMDc0MDY5YTYyZGE5YzFiN2Mz
Li5lYTI0MDFhYzQyMzdiMDJkZDhkMmViNWU1MTc1NmM5YjQ4OWQ5YjNhIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1t
CkBAIC0zMCw4ICszMCw4IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJV
dGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRl
Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogCiBzdGF0aWMgYm9vbCBoYXNUcmlnZ2VySW5mbzsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0ZS5tbQppbmRleCA3OTE3
YjhmOWQyZjY3OWExMTk5ODJiOGU1MDEyMmNhZWUxMmRmM2VjLi4xNjExODA4MzZkNTc1NjIwMjdl
MDYxYzk3NTJmNDcyODEyMWRjZGIxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVnYXRlLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0
ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIK
ICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYktpdC9XS0NvbnRleHRQ
cml2YXRlTWFjLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tHZW9sb2NhdGlvbk1hbmFnZXIuaD4KQEAg
LTM2LDcgKzM3LDYgQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVn
YXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tIaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSW5zcGVj
dG9yLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJv
eC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2lt
dWxhdGVGYWlsZWRTYW5kYm94Lm1tCmluZGV4IDNiODgzN2MxZGYzMzQ1YjJlNzhkYzkyMTFlYzQ0
YTg1M2YyYjVkZGUuLjEwYjIwMjRiMWU1ZjE0Njc3OTQzNjgyNGMyZGIxN2EzOWIwMDk0NDYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlh
U2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRTYW5kYm94Lm1tCkBAIC0yOCw3ICsy
OCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgog
I2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0KaW5k
ZXggN2EwODk2M2YxMDY2MTE2YzAwNmUyOGJkMmE4NjZiZmNiYjA2MjU0Ni4uNzBkZmZlNzcwYTE3
YmMzMWM2NjRhMzgwOTViN2YzZDFkNjFjMmMxOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1t
CkBAIC0yNyw5ICsyNyw4IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0KKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAog
I2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCmluZGV4IGI2ZmNkOTM1ODUwZWJk
NjdiMmIxODYxMGU0ODg5MDY2NWUzMTkyYWIuLmZkMzQyMGZlNzkzOGU4ODdhNTJiNWRiYTY5ZGQy
ZDE2YjNlODhmN2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQpAQCAtMzQsMTAgKzM0LDEwIEBACiAj
aW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxDb250YWN0cy9Db250YWN0cy5oPgogI2ltcG9y
dCA8TWFwS2l0L01hcEtpdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2
YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dlYkFyY2hpdmUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50
SW5mby5tbQppbmRleCA5OTNmMGJiZmYzYWY1MmMzM2QzZWU2NzMxZWExNzVjMTY0NTAwYmM0Li45
NTVlYmUwZTIzZmUxNmMxZGJjZjE0NTUxNmQ2MDZhZmJhOTU2YTllIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1l
bnRJbmZvLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tS
ZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEluZm8ubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQg
IlRlc3QuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKyNpbXBvcnQgIldL
V2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbQpp
bmRleCA4MTY1MDAxZjNlODM0ZWQ2MjI0OGQ0NTVlMzlkMDczY2FmNTJiNjIzLi4xMGMxOWNiZjIx
MzExNzc3MTJhMDZlMzA5MTg2YWZiZjc5YWJmZTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRl
VGVzdHMubW0KQEAgLTI5LDcgKzI5LDcgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMu
aCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLQorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGlu
Zy5oIgogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdFBy
aXZhdGUuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0KaW5kZXggOWQxYjdjNjI1NDk4NGFm
YTAxNGQyOTJlZmExNThiOGI4YTMxYjk5OC4uNmJhOWI5ZTQ2YjA3NDJiNTMxMjAwYWE5NzRlMDUx
ZjA4Mjg4ZjgxMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25k
ZXJUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJW
aWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbQppbmRleCA3ZDI1N2ZkNzMyYzQ3N2U3Y2FkNWRmOWI2
YzJiMDllNjYzMGJkOTYwLi5lYzE5MGM4ZDY0MjUzYTg1NTRkNmM0OGE2YzFmNGMzMDNmNGNmMzY0
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2Vi
Vmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdElucHV0
RGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLV2ViVmll
d1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tCmluZGV4IDFmNmEwOTM3YjcwNjg4ZGJjNzM1
MTViOTAxOTU0M2VmMmY4YmYzNGUuLmRiMDgyNzMzNDYyOGYwNzM4Zjk1N2IxMGRmZDdjNzViMmRi
M2QxMmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2li
aWxpdHlUZXN0c0lPUy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nl
c3NpYmlsaXR5VGVzdHNJT1MubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZp
ZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Jl
bW90ZU9iamVjdEludGVyZmFjZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1JlbW90ZU9iamVjdFJl
Z2lzdHJ5Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rp
b25TaGVldFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hl
ZXRUZXN0cy5tbQppbmRleCBlODFmMTAyZWY2YzFiMzJhZTdkMzE5MWE1YzQ1OGE4NWMwYWM5NWNj
Li42MGEwZTAwZmZjNGNhMjY1NTczOTZkMTY3NTFjNTkyZmVjNTBlNjE1IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW0KQEAgLTM1LDkg
KzM1LDkgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXdDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZy5oIgogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNl
cy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KLSNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLQWN0aXZhdGVkRWxl
bWVudEluZm8uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tFbGVtZW50QWN0aW9uLmg+CiAjaW1wb3J0
IDx3dGYvQmxvY2tQdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
aW9zL0F1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tCmluZGV4IGYwOTI5Zjg3YzJhYzE0Nzg4YTE5
ODI1YjczNTBkMmMxODE3NTRjMjAuLmUyYWFhYzA4NzA1ODM5NTdiNzQ3ODBiYjcxN2ViMjdiODFl
NTM3NTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3Jy
ZWN0aW9uVGVzdHNJT1MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0
b2NvcnJlY3Rpb25UZXN0c0lPUy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdElu
cHV0RGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0
U1BJLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZS5oPgogCiBAaW50ZXJmYWNlIFRlc3RXS1dlYlZpZXcgKEF1dG9jb3JyZWN0
aW9uVGVzdHMpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1
c1ByZXNlcnZhdGlvblRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9j
dXNQcmVzZXJ2YXRpb25UZXN0cy5tbQppbmRleCA0OTU2MjBjNDNlZGU3NzRhOWM5ZTM2YjczMDBh
MTg1YmMzZmY0YmQyLi4wYjZkOTNmODg4NGVmNjRmOGZhOTA4Yzc3NTg5NmZmZGNiMTc1OTQ5IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlv
blRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2Vy
dmF0aW9uVGVzdHMubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVn
YXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgor
I2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tJbnB1dERlbGVnYXRlLmg+CiAjaW1wb3J0IDx3
dGYvQmxvY2tQdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVz
dE5hdmlnYXRpb25EZWxlZ2F0ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdE5h
dmlnYXRpb25EZWxlZ2F0ZS5tbQppbmRleCA5Njc2YTMzYmIyNmNhZjk5ZWI3YmMxOTJkMjgwOWZk
ODY2ZmVmZDJkLi4wMzUwNzY2MzM0MTZhZGJiMzgzODQ1MDFiYjM2NDAxMDdiYmVmOTFjIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRl
Lm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgi
CiAKICNpbXBvcnQgIlV0aWxpdGllcy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAaW1wbGVtZW50YXRpb24gVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERy
b3BTaW11bGF0b3JJT1MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNp
bXVsYXRvcklPUy5tbQppbmRleCA2OWNkNDk3ZGMxNjZiYmE2MmEyZWUyMDJmOTRhYzBmOTZjN2Q2
N2YyLi4wZDY1MjFkNjkwNjhjMTNjNjlmOGM1YTQ5OWEzYmZmMjZhODk5MDQ5IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQpAQCAt
MzEsMTIgKzMxLDExIEBACiAjaW1wb3J0ICJJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmgiCiAjaW1w
b3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKLQorI2ltcG9y
dCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24u
aD4KICNpbXBvcnQgPFVJS2l0L1VJRHJhZ0l0ZW0uaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJvcElu
dGVyYWN0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUludGVyYWN0aW9uLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0ZvY3VzZWRFbGVt
ZW50SW5mby5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0Zvcm1JbnB1dFNlc3Npb24uaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFj
L0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJh
Z0FuZERyb3BTaW11bGF0b3JNYWMubW0KaW5kZXggMTAwNWVlNDc4YjU3ZGZmZWM4N2Y0NTNkNDIy
NDQ5NDQxM2E5M2Y0ZC4uODIxZDVkYzAwNzkyMzU0OTdmYzQyNjlmN2I3MDZhZDc3ZWZjOGE2NiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JN
YWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JN
YWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAj
aW1wb3J0ICJUZXN0RHJhZ2dpbmdJbmZvLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxjbWF0aD4KICNpbXBvcnQgPHd0
Zi9XZWFrT2JqQ1B0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZp
Z3VyYXRpb25zL0Jhc2UueGNjb25maWcKaW5kZXggODVjYjcyOGZkMzJmN2Y2NWVjNmEyNmI4NGVk
YWY1MmQxMTA2MjZlOC4uYzMzN2I3YjY4OTkwY2Y3N2IwNDk3MGM4YWUwYzNmOGE1MGE4NTk1ZCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54
Y2NvbmZpZwpAQCAtNTMsNyArNTMsNyBAQCBDTEFOR19BTkFMWVpFUl9MT0NBTElaQUJJTElUWV9O
T05MT0NBTElaRUQgPSBZRVM7CiBDTEFOR19XQVJOX1JBTkdFX0xPT1BfQU5BTFlTSVMgPSBZRVM7
CiBDTEFOR19XQVJOX1NVU1BJQ0lPVVNfTU9WRSA9IFlFUzsKIENMQU5HX1dBUk5fREVQUkVDQVRF
RF9PQkpDX0lNUExFTUVOVEFUSU9OUyA9IFlFUzsKLUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUgJChCVUlMVF9QUk9EVUNUU19ESVIp
L1dlYkNvcmVUZXN0U3VwcG9ydCAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2Fy
ZGluZ0hlYWRlcnMgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3Vw
cG9ydCAkKFBMQVRGT1JNX0hFQURFUl9TRUFSQ0hfUEFUSFMpOworSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvV2ViQ29yZVRlc3RTdXBwb3J0ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJLaXRU
ZXN0U3VwcG9ydCAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRl
cnMgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydCAkKFBM
QVRGT1JNX0hFQURFUl9TRUFSQ0hfUEFUSFMpOwogUExBVEZPUk1fSEVBREVSX1NFQVJDSF9QQVRI
U1tzZGs9aXBob25lKl0gPSAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
c3BpL2lvczsKIEdDQ19OT19DT01NT05fQkxPQ0tTID0gWUVTOwogR0NDX1BSRVBST0NFU1NPUl9E
RUZJTklUSU9OUyA9ICQoREVCVUdfREVGSU5FUykgVV9ESVNBQkxFX1JFTkFNSU5HPTEgVV9TSE9X
X0NQTFVTUExVU19BUEk9MDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCBlOTIzYjg1MWEzZTlkZDY0YzJkNjNhNGUyNjE0
MzU0MTZkYzZiYmRjLi45NWE2ODEzZDY5NDA3ZTJlZWI0YWQzZWI5Yjc0NWMzYzlkODQ2NWMwIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNv
Y29hLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJUZXN0SW52b2NhdGlvbi5oIgogI2lt
cG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVGVzdFdlYnNpdGVEYXRhU3Rv
cmVEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxTZWN1cml0eS9TZWNJdGVtLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZi5oPgpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4IGVjYTAw
NmM2ODkzNGY4ZjdjM2JmZTMzMzEzNzk3NTI3NjFjMjU4ZjIuLmM0MjkxMmRmYTBkNjgwODA3N2Mz
ZjRkOGQ1ZTcxNWI1NzRmNGU4MTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Y29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogCisjaW1wb3J0ICJX
S1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZv
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KQEAgLTM2LDYgKzM3LDcgQEAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRl
Lmg+CisKIEBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpCiAKIC8vIEZJWE1FOiBtb3ZlIHRoZXNlIHRv
IFdLV2ViVmlld19Qcml2YXRlLmgKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Y29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCmluZGV4IGJlZTA0OTdiZjU2ZDIzNjAw
NmEzODFiYTExNjFhNzBiOTMwZWZjZjMuLjBmYTE2ZGQ0ODljZGRjZDA2ZTMxM2M1OTQ3MzdhNzg1
ZjZmYzhlMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3Jp
cHRDb250cm9sbGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9V
SVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVz
dENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQg
IlVJU2NyaXB0Q29udGV4dC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENv
bnRyb2xsZXJJT1MubW0KaW5kZXggYWUyYTk0YTE1YjAwOTkyYjFlODk1Zjk0ODc2NjI1YTE4YzFh
NDlmZi4uYjYwMDc1MGZhOTc2ODY4M2RlNzUyZDU3NDg5MTE1M2YwMjFmNzE5ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KQEAgLTMzLDYg
KzMzLDcgQEAKICNpbXBvcnQgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVy
V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVz
dGluZy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSUtpdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
aW5kZXggOTk5Y2E4NzFlY2ExZWRiYTE4YjU1OGNhMjBlODViODUxZTcxMDdjZS4uZTA1MGQ1YjNi
Y2ExZWNkNTRkMzgxZWZkMjA4MTQ3MzAwNjAxMTkzOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMzcsNiArMzcsNyBA
QAogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIK
ICNpbXBvcnQgIlVJU2NyaXB0Q29udGV4dC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5o
IgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVy
TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
Lm1tCmluZGV4IDZiZGUyNjE1ZWVmMDgyZDJkOTdmNTg0ZWI5NzE4MDE5ODc2MjUzYTMuLjI1ZWQ4
NWNlNmRmOGExYmRiZDkxM2FmZjI3M2U5YzU0ODUwNzg2YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDEzICsz
MCwxMyBAQAogI2ltcG9ydCAiRXZlbnRTZXJpYWxpemVyTWFjLmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bVZpZXdIZWxwZXJzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbXBvcnQgIlNo
YXJlZEV2ZW50U3RyZWFtc01hYy5oIgotI2ltcG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIlBsYXRmb3JtV2ViVmlldy5oIgorI2ltcG9ydCAiU2hhcmVkRXZlbnRTdHJlYW1zTWFjLmgi
CiAjaW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBvcnQgIlRlc3RDb250cm9sbGVyLmgi
CiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRl
eHQuaCIKKyNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTQ29udGV4dC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5o
PgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385553</attachid>
            <date>2019-12-12 15:00:19 -0800</date>
            <delta_ts>2019-12-15 10:00:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205021-20191212150018.patch</filename>
            <type>text/plain</type>
            <size>303271</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRiNTdlYjlmMzk0OTMwZGZl
OTUyNjdiMzQ2NzM3YTAwNDM3Yjc1YWEuLjg0NDg0MmM4YmFlMzk4Y2NmMjBhNWRhMWRlNWFjYzVj
MTJkMjY1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDM0IEBACisyMDE5LTEyLTEyICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgV0tXZWJWaWV3
IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5nIHRvIG5ldyBmaWxlcywgd2l0aCB0aGVpciBvd24gaGVh
ZGVycywgYW5kIHN0b3AgZXhwb3NpbmcgdGVzdC1vbmx5IGZ1bmN0aW9ucyBhcyBTUEkuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwMjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRlc3Rpbmct
b25seSBTUEkgdG8gbmV3IHByaXZhdGUgaGVhZGVycyB0byBkaXNjb3VyYWdlIGZpcnN0IHBhcnRp
ZXMgZnJvbSB1c2luZworICAgICAgICB0aGVtIGJ5IG1pc3Rha2UuIE1vdmUgdGVzdC1vbmx5IGNv
ZGUgdG8gbmV3IGZpbGVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBXS1dlYlZpZXcubW0uCisKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVSURlbGVnYXRlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVybmFsRG9BZnRlck5leHRQcmVz
ZW50YXRpb25VcGRhdGU6d2l0aG91dFdhaXRpbmdGb3JQYWludGluZzp3aXRob3V0V2FpdGluZ0Zv
ckFuaW1hdGVkUmVzaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByZXBhcmVGb3JJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wbGV0ZUlt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VzZVN5c3Rl
bUFwcGVhcmFuY2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVc2VTeXN0ZW1BcHBlYXJh
bmNlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dl
YlZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5DaGFuZ2VGcmFtZUxheW91dDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF90cnlUb1N3aXBlV2l0aEV2ZW50Omlnbm9yaW5nUGlubmVk
U3RhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc05vbldoZWVsRXZlbnRzXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SWdub3Jlc05vbldoZWVsRXZlbnRzOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNv
cmU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmFibGVGcmFtZVNpemVVcGRhdGVzXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2Z1bGxTY3JlZW5XaW5kb3ddKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF91bmRlcmxheUNvbG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VW5kZXJsYXlD
b2xvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRDdXN0b21Td2lwZVZpZXdzOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFj
azpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGcmFtZTphbmRTY3JvbGxCeTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUb3RhbEhlaWdodE9mQmFubmVyczpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF90b3RhbEhlaWdodE9mQmFubmVyc10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldEZvbnQ6c2VuZGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEZvbnRTaXpl
OnNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0Q29sb3I6c2VuZGVyOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRBY2Nlc3NvcnlWaWV3XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBpbnB1dFZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXF1ZXN0QWN0
aXZhdGVkRWxlbWVudEF0UG9zaXRpb246Y29tcGxldGlvbkJsb2NrOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2NvbnRlbnRWaXNpYmxlUmVjdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Nv
bnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9j
b252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBk
aWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRp
ZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91aVRl
eHRDYXJldFJlY3RdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmll
dmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OndpdGhUZXh0OmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2luc3BlY3Rvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21haW5GcmFt
ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzRWRpdGFibGVdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRFZGl0YWJsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9leGVjdXRlRWRp
dENvbW1hbmQ6YXJndW1lbnQ6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOl0pOgorICAgICAg
ICAoK1tXS1dlYlZpZXcgX3N0cmluZ0ZvckZpbmRdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF9z
ZXRTdHJpbmdGb3JGaW5kOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW90ZU9iamVjdFJl
Z2lzdHJ5XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50c10pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2hpc3RvcnlEZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhp
c3RvcnlEZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVNZWRpYVBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuVG9nZ2xlUGlj
dHVyZUluUGljdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUGljdHVyZUluUGljdHVy
ZUFjdGl2ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmVd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbG9zZUFsbE1lZGlhUHJlc2VudGF0aW9uc10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3N0b3BNZWRpYUNhcHR1cmVdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zdG9wQWxsTWVkaWFQbGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N1
c3BlbmRBbGxNZWRpYVBsYXliYWNrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdW1lQWxs
TWVkaWFQbGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VucmVhY2hhYmxlVVJMXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfbWFpbkZyYW1lVVJMXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6YmFzZVVSTDpmb3JVbnJlYWNoYWJsZVVSTDpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkRGF0YTpNSU1FVHlwZTpjaGFyYWN0ZXJFbmNv
ZGluZ05hbWU6YmFzZVVSTDp1c2VyRGF0YTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9sb2Fk
UmVxdWVzdDpzaG91bGRPcGVuRXh0ZXJuYWxVUkxzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2NlcnRpZmljYXRlQ2hhaW5dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21taXR0ZWRVUkxd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9NSU1FVHlwZV0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3VzZXJBZ2VudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jdXN0b21Vc2VyQWdlbnRdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRDdXN0b21Vc2VyQWdlbnQ6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9wcm92aXNpb25hbFdlYlByb2Nlc3NJZGVudGlmaWVyXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfa2lsbFdlYkNvbnRlbnRQcm9jZXNzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2FmZUJy
b3dzaW5nV2FybmluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbG9hZFdpdGhvdXRDb250
ZW50QmxvY2tlcnNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZWxvYWRFeHBpcmVkT25seV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3Rh
dGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3Jk
aW5hdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nv
b3JkaW5hdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RUZXh0SW5wdXRDb250
ZXh0c0luUmVjdDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9m
b2N1c1RleHRJbnB1dENvbnRleHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfdGFrZVBERlNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3Bv
bmRlckNoYW5nZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmV0YWluQWN0aXZlRm9jdXNl
ZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRo
U2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zbmFwc2hvdExheWVyQ29udGVudHNGb3JCYWNrRm9yd2FyZExpc3RJdGVtOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RhdGFEZXRlY3Rpb25SZXN1bHRzXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0
aW9uQ29udGVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlucHV0QXNzaXN0YW50SXRlbV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Npb25TdGF0ZURhdGFdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXNzaW9uU3RhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXNzaW9u
U3RhdGVXaXRoRmlsdGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVGcm9tU2Vz
c2lvblN0YXRlRGF0YTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXN0b3JlU2Vzc2lvblN0
YXRlOmFuZE5hdmlnYXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Nsb3NlXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpjb250ZW50VHlw
ZTpkYXRhOm9wdGlvbnM6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnNl
cnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmNvbnRlbnRUeXBlOm9wdGlvbnM6Y29tcGxldGlv
bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFw
cGVyOmNvbnRlbnRUeXBlOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYXR0
YWNobWVudEZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2ltdWxhdGVE
ZXZpY2VPcmllbnRhdGlvbkNoYW5nZVdpdGhBbHBoYTpiZXRhOmdhbW1hOl0pOgorICAgICAgICAo
K1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3NpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTp3YXJuaW5nOmRldGFpbHM6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dh
cm5pbmdXaXRoVVJMOnRpdGxlOndhcm5pbmc6ZGV0YWlsczpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKCtbV0tXZWJWaWV3IF9jb25maXJtTWFsd2FyZVNlbnRpbmVsXSk6CisgICAgICAg
ICgrW1dLV2ViVmlldyBfdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWxdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9pc0pJVEVuYWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZXZhbHVh
dGVKYXZhU2NyaXB0V2l0aG91dFVzZXJHZXN0dXJlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3VwZGF0ZVdlYnNpdGVQb2xpY2llczpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9y
ZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
ZGRzVmlzaXRlZExpbmtzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWRkc1Zpc2l0ZWRM
aW5rczpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9uZXR3b3JrUmVxdWVzdHNJblByb2dyZXNz
XSk6CisgICAgICAgIChsYXlvdXRNaWxlc3RvbmVzKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRPYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2dldE1haW5SZXNvdXJjZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZ2V0V2ViQXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfZ2V0Q29udGVudHNBc1N0cmluZ1dpdGhDb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nZXRDb250ZW50c0FzQXR0cmlidXRl
ZFN0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9n
ZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3BhZ2luYXRpb25Nb2RlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
UGFnaW5hdGlvbk1vZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbkJlaGF2
ZXNMaWtlQ29sdW1uc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFBhZ2luYXRpb25CZWhh
dmVzTGlrZUNvbHVtbnM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZUxlbmd0aF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFBhZ2VMZW5ndGg6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZ2FwQmV0d2VlblBhZ2VzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0R2FwQmV0
d2VlblBhZ2VzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2luYXRpb25MaW5lR3JpZEVu
YWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFi
bGVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VDb3VudF0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3N1cHBvcnRzVGV4dFpvb21dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0
Wm9vbUZhY3Rvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRab29tRmFjdG9yOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0UGFnZVpvb206XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBwYWdlWm9vbV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2Vab29tRmFjdG9yXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZVpvb21GYWN0b3I6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3NldERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZmluZERlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RmluZERlbGVn
YXRlOl0pOgorICAgICAgICAodG9GaW5kT3B0aW9ucyk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
Y291bnRTdHJpbmdNYXRjaGVzOm9wdGlvbnM6bWF4Q291bnQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZmluZFN0cmluZzpvcHRpb25zOm1heENvdW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2hpZGVGaW5kVUldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYXZlQmFja0ZvcndhcmRT
bmFwc2hvdEZvckl0ZW06XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5wdXREZWxlZ2F0ZV0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElucHV0RGVsZWdhdGU6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlRG9jdW1lbnRdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1bWVudF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUGxheWluZ0F1ZGlvXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdF0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2xheW91dE1vZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRMYXlvdXRN
b2RlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZpeGVkTGF5b3V0U2l6ZV0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldEZpeGVkTGF5b3V0U2l6ZTpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2U6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfdmlld1NjYWxlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Vmlld1NjYWxlOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGhdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5h
YmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xs
ZWN0aW9uRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFBlcmZvcm1hbmNl
RGF0YV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQ
bGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFsbG93c01lZGlhRG9jdW1lbnRJ
bmxpbmVQbGF5YmFjazpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJQcm9jZXNzSXNSZXNw
b25zaXZlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RnVsbHNjcmVlbkRlbGVnYXRlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Z1bGxzY3JlZW5EZWxlZ2F0ZV0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2lzSW5GdWxsc2NyZWVuXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWVk
aWFDYXB0dXJlU3RhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRNZWRpYUNhcHR1cmVF
bmFibGVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlhQ2FwdHVyZUVuYWJsZWRdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRQYWdlTXV0ZWQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVtb3ZlRGF0YURldGVjdGVkTGlua3M6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
ZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
ZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBk
YXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RldGVjdERhdGFXaXRoVHlwZXM6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbWluaW11bUxheW91dFNpemVPdmVycmlkZV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfb2JzY3VyZWRJbnNldHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRPYnNjdXJlZEluc2V0czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9vYnNjdXJlZElu
c2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWFdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRP
YnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWE6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nh
ZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jbGVhckludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3NldEFsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfYWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2JlZ2luSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2VuZEludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2VdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9oaWRlQ29udGVudFVudGlsTmV4dFVwZGF0ZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9lbmRBbmltYXRlZFJlc2l6ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc2l6
ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldE92ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zbmFwc2hvdFJlY3Q6aW50b0ltYWdlT2ZXaWR0aDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9vdmVycmlkZUxheW91dFBhcmFtZXRlcnNXaXRoTWluaW11bUxh
eW91dFNpemU6bWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfY2xlYXJPdmVycmlkZUxheW91dFBhcmFtZXRlcnNdKToKKyAgICAgICAgKHZpZXdw
b3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkpOgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJy
aWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ZpZXdG
b3JGaW5kVUldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rpc3BsYXlpbmdQREZdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9kYXRhRm9yRGlzcGxheWVkUERGXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc3VnZ2VzdGVkRmlsZW5hbWVGb3JEaXNwbGF5ZWRQREZdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF93ZWJWaWV3UHJpbnRGb3JtYXR0ZXJdKToKKyAgICAgICAgKHRvVXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbik6CisgICAgICAgICgtW1dLV2ViVmlldyBzZXRTZW1hbnRpY0Nv
bnRlbnRBdHRyaWJ1dGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZHJhd3NCYWNrZ3JvdW5k
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RHJhd3NCYWNrZ3JvdW5kOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2JhY2tncm91bmRDb2xvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldEJhY2tncm91bmRDb2xvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnNwZWN0b3JB
dHRhY2htZW50Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEluc3BlY3RvckF0dGFj
aG1lbnRWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE92ZXJsYXlTY3JvbGxiYXJT
dHlsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9vdmVybGF5U2Nyb2xsYmFyU3R5bGVdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxl
ZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNoYXJlU2hlZXREaWREaXNtaXNzOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3I6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3Rvcl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3NldFRvcENvbnRlbnRJbnNldDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF90b3BDb250ZW50SW5zZXRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlRXh0ZW5kZWRC
YWNrZ3JvdW5kQ29sb3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9waW5uZWRTdGF0ZV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3J1YmJlckJhbmRpbmdFbmFibGVkXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0UnViYmVyQmFuZGluZ0VuYWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6
d2l0aFR5cGU6dXNlckRhdGE6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QXV0b21hdGlj
YWxseUFkanVzdHNDb250ZW50SW5zZXRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2F1dG9t
YXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21p
bmltdW1MYXlvdXRXaWR0aF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1pbmltdW1MYXlv
dXRXaWR0aDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG91bGRFeHBhbmRDb250ZW50VG9W
aWV3SGVpZ2h0Rm9yQXV0b0xheW91dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNob3Vs
ZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0Ol0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2Fsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXI6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86Zm9yRnJhbWU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcHJlcGFyZUZvck1vdmVUb1dpbmRvdzpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUaHVtYm5haWxWaWV3Ol0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3RodW1ibmFpbFZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJ
Z25vcmVzQWxsRXZlbnRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lnbm9yZXNBbGxFdmVu
dHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zcGVsbENoZWNrZXJEb2N1bWVudFRhZ10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZv
clRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERl
dmljZU9yaWVudGF0aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9yVGVzdGluZzpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dF0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91c10p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0
cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kaXNtaXNzRmlsZVBpY2tlcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOm1pbnV0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBmb3JtSW5wdXRMYWJlbF0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX2RpZFNob3dDb250ZXh0TWVudV0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2RpZERpc21pc3NDb250ZXh0TWVudV0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2lucHV0Vmlld0JvdW5kc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3VpVGV4dFNlbGVjdGlvblJlY3RzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2Nyb2xsaW5nVHJlZUFzVGV4dF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3N0YWJsZVN0YXRlT3ZlcnJpZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rp
bmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdENvbnRyb2xsZWRF
bGVtZW50SURdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVDb250cm9s
bGVkRWxlbWVudElEUmVzcG9uc2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0eTpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXNdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnNlcnRUZXh0OnJlcGxhY2VtZW50UmFuZ2U6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuZGlkYXRlUmVjdF0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgdmlld0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2VdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9vdGVyQmFubmVySGVpZ2h0Ol0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVu
ZGluZ01vdXNlRXZlbnRzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjdGl2
ZU1lbnVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXF1ZXN0QWN0aXZlTm93
UGxheWluZ1Nlc3Npb25JbmZvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nl
dFBhZ2VTY2FsZTp3aXRoT3JpZ2luOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3BhZ2VTY2FsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbGluZ1Vw
ZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdh
aXRpbmdGb3JBbmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfZG9BZnRlck5leHRWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNob3RWb2xh
dGlsaXR5Rm9yVGVzdGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RyYWdD
YXJldFJlY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0ZUxvbmdQ
cmVzc0FjdGlvbkF0TG9jYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
c2ltdWxhdGVUZXh0RW50ZXJlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
eW5hbWljVXNlckludGVyZmFjZVRyYWl0RGlkQ2hhbmdlXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0
ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmddKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZ10pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZ10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25PbkVs
ZW1lbnQ6ZG9jdW1lbnQ6cGFnZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdQcml2YXRlRm9yVGVzdGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW06IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldFBhZ2VTY2FsZTp3aXRoT3JpZ2luOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BhZ2VT
Y2FsZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RBY3RpdmVO
b3dQbGF5aW5nU2Vzc2lvbkluZm86XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsaW5n
VXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFNj
cm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvckFuaW1hdGVk
UmVzaXplRm9yVGVzdGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxl
QmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfYmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc0luc3BlY3RvckZyb250ZW5kXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmddKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZ10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVz
dGluZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGVueU5leHRVc2Vy
TWVkaWFSZXF1ZXN0XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3UHJp
dmF0ZUZvclRlc3RpbmdJT1MuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3VGVzdGluZ0lPUy5tbTogQWRkZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBrZXli
b2FyZEFjY2Vzc29yeUJhck5leHRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGtleWJvYXJkQWNj
ZXNzb3J5QmFyUHJldmlvdXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGFwcGx5QXV0b2NvcnJl
Y3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgZGlzbWlzc0Zvcm1BY2Nlc3NvcnlWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
ZGlzbWlzc0ZpbGVQaWNrZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldFRpbWVQaWNrZXJW
YWx1ZVRvSG91cjptaW51dGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGb3JtQWNj
ZXNzb3J5UGlja2VyUm93Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2VsZWN0Rm9ybVBvcG92
ZXJUaXRsZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGlu
Z10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZm9ybUlucHV0TGFiZWxdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9kaWRTaG93Q29udGV4dE1lbnVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aWREaXNtaXNzQ29udGV4dE1lbnVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pbnB1dFZpZXdC
b3VuZHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91aVRleHRTZWxlY3Rpb25SZWN0c10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbGluZ1RyZWVBc1RleHRdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zdGFibGVTdGF0ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
cHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9BZnRl
clJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1cmU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZG9B
ZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2RyYWdDYXJldFJlY3RdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0
ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2lt
dWxhdGVUZXh0RW50ZXJlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9keW5hbWljVXNlcklu
dGVyZmFjZVRyYWl0RGlkQ2hhbmdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdHJpZ2dlclN5
c3RlbVByZXZpZXdBY3Rpb25PbkVsZW1lbnQ6ZG9jdW1lbnQ6cGFnZTpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXREZXZpY2VPcmllbnRhdGlvblVzZXJQZXJtaXNzaW9uSGFuZGxlckZvclRl
c3Rpbmc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZv
clRlc3RpbmdNYWMuaDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZTpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG91
bGRSZXF1ZXN0Q2FuZGlkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc2VydFRleHQ6
cmVwbGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jYW5kaWRhdGVSZWN0
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5j
ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhlYWRlckJhbm5lckhlaWdodDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlTWVudV0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJl
Y29nbml6ZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCiAyMDE5LTEyLTEyICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBbaU9TXSBEZW55IG1hY2ggbG9va3VwIGFjY2VzcyB0byBjb250ZW50IGZpbHRl
ciBzZXJ2aWNlIGluIHRoZSBXZWJDb250ZW50IHNhbmRib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApp
bmRleCA5ZDI0MmUyYTA2NGRmZjcyZjQ5YzQyZjU0ZDk3ODEzY2FkOTRkOTJjLi4xYjI1YTdiOWQw
OWVhMzY1YjcyNGQwNWE5N2RiZmM2MzBmZGFjNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBA
IC0zMjIsMTEgKzMyMiwxNSBAQCBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5tbQog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkLm1tCiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2luZG93RmVh
dHVyZXMubW0KIAorVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQorCiBV
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KK1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rl
c3RpbmdNYWMubW0KIAogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL2NvY29hL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbQogVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL2NvY29h
L1NlY0tleVByb3h5U3RvcmUubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCmluZGV4IDUzNjJiMThlODUzZmE1NDgz
MTY5ZWY0ZTIyMWVlMTlmMjhjNDhlYjIuLjI1OTA3OGZmNWMxNDFkNGMwZGZlMmE4MjZhYTQ4OGEy
YjlhNWRmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VJRGVsZWdhdGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaApAQCAtMzksNiArMzksNyBAQAogQGNsYXNzIF9XS0Fj
dGl2YXRlZEVsZW1lbnRJbmZvOwogQGNsYXNzIF9XS0VsZW1lbnRBY3Rpb247CiBAY2xhc3MgX1dL
RnJhbWVIYW5kbGU7CitAY2xhc3MgX1dLSW5zcGVjdG9yOwogCiAjaWYgVEFSR0VUX09TX0lPUwog
QGNsYXNzIFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uOwpAQCAtMTgyLDYgKzE4Myw3IEBAIHN0
cnVjdCBVSUVkZ2VJbnNldHM7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGRhdGFJbnRlcmFjdGlvbjooaWQpaW50ZXJhY3Rpb24gc2Vzc2lvbjooaWQpc2Vzc2lvbiBkaWRF
bmRXaXRoT3BlcmF0aW9uOihOU1VJbnRlZ2VyKW9wZXJhdGlvbiBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4wKSk7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJbnRl
cmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6KEJPT0wpaGFuZGxlZCBmb3JTZXNzaW9uOihpZClz
ZXNzaW9uIGl0ZW1Qcm92aWRlcnM6KE5TQXJyYXkgKilpdGVtUHJvdmlkZXJzIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDExLjApKTsKIC0gKE5TVUludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgd2lsbFVwZGF0ZURhdGFJbnRlcmFjdGlvbk9wZXJhdGlvblRvT3BlcmF0aW9uOihOU1VJ
bnRlZ2VyKW9wZXJhdGlvbiBmb3JTZXNzaW9uOihpZClzZXNzaW9uIFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDExLjApKTsKKwogI2lmIFRBUkdFVF9PU19JT1MKIC0gKFVJRHJvcFByb3Bvc2FsICopX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFVwZGF0ZURyb3BQcm9wb3NhbFRvUHJvcG9z
YWw6KFVJRHJvcFByb3Bvc2FsICopcHJvcG9zYWwgZm9yU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Np
b24+KXNlc3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMikpOwogLSAoVUlUYXJnZXRlZERy
YWdQcmV2aWV3ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcHJldmlld0ZvckxpZnRp
bmdJdGVtOihVSURyYWdJdGVtICopaXRlbSBzZXNzaW9uOihpZCA8VUlEcmFnU2Vzc2lvbj4pc2Vz
c2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CkBAIC0xOTAsNiArMTkyLDcgQEAgc3Ry
dWN0IFVJRWRnZUluc2V0czsKIC0gKE5TSW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBkYXRhT3duZXJGb3JEcm9wU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24g
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAoTlNJbnRlZ2VyKV93ZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IGRhdGFPd25lckZvckRyYWdTZXNzaW9uOihpZCA8VUlEcmFnU2Vzc2lv
bj4pc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAjZW5kaWYKKwogLSAodm9p
ZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRDaGFuZ2VTYWZlQXJlYVNob3VsZEFm
ZmVjdE9ic2N1cmVkSW5zZXRzOihCT09MKXNhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNl
dHMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAodm9pZClfd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBkaWRQcmVzZW50Rm9jdXNlZEVsZW1lbnRWaWV3Q29udHJvbGxlcjooVUlW
aWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMCkpOwog
LSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWREaXNtaXNzRm9jdXNlZEVs
ZW1lbnRWaWV3Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTIuMCkpOwpAQCAtMjA0LDYgKzIwNyw3IEBAIHN0cnVjdCBVSUVkZ2VJ
bnNldHM7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lOihXS0ZyYW1l
SW5mbyAqKXJlcXVlc3RpbmdGcmFtZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wpKWRl
Y2lzaW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7CiAKICNlbHNlIC8vICFU
QVJHRVRfT1NfSVBIT05FCisKIC0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Gb3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOwogLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9y
V2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKIC0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
QEAgLTIzNyw2ICsyNDEsNyBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwogICAgIEBwYXJhbSBpbnNw
ZWN0b3IgVGhlIFdlYiBJbnNwZWN0b3IgaW5zdGFuY2UgYXR0YWNoZWQgdG8gdGhpcyBXS1dlYlZp
ZXcuCiAqLwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRBdHRhY2hJ
bnNwZWN0b3I6KF9XS0luc3BlY3RvciAqKWluc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpKTsKKwogI2VuZGlmIC8vICFUQVJHRVRfT1NfSVBIT05FCiAKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDMz
NTRhYzZlZWNiNWE4ZDcxOThhZThhNThjYTI5OTQ0YzgzMGU1MTAuLmU2ZDIzZmNmNDA5MjkxMGM2
NDFlNTlmNjVkZTA5ZTQ4YTczZTRjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtNTIsNyArNTIsNiBAQAogI2ltcG9ydCAiVGV4dENo
ZWNrZXIuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKICNpbXBvcnQgIlVJRGVsZWdh
dGUuaCIKLSNpbXBvcnQgIlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmgiCiAjaW1wb3J0ICJWZXJz
aW9uQ2hlY2tzLmgiCiAjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNp
bXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgpAQCAtODAsNiArNzksNyBAQAogI2ltcG9y
dCAiV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb250ZW50UHJvdmlk
ZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgiCiAjaW1wb3J0
ICJXS1dlYnBhZ2VQcmVmZXJlbmNlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRh
U3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC0xMjQs
NyArMTI0LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1N0cmluZ1V0aWxpdGllcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9uQnViYmxlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dy
aXRpbmdNb2RlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tEcmFnRGVzdGluYXRpb25BY3Rpb24uaD4K
QEAgLTI4MiwyOSArMjgxLDE4IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgewogCiAgICAg
V2Vha09iakNQdHI8aWQgPF9XS0lucHV0RGVsZWdhdGU+PiBfaW5wdXREZWxlZ2F0ZTsKIAotICAg
IE9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOwogICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAgICAgQk9PTCBfdXNlUGxhdGZvcm1GaW5kVUk7CiAKLSAgICBX
ZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPj4gX3RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZTsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRy
PF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0UmVnaXN0cnk7CiAKLSAgICBS
ZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKLSAgICBSZXRhaW5QdHI8V0tDb250
ZW50Vmlldz4gX2NvbnRlbnRWaWV3OwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAg
IFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyPiBfZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXI7Ci0jZW5kaWYKLQogICAgIE9wdGlvbmFsPENHU2l6ZT4gX3ZpZXdMYXlvdXRT
aXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRTaXplPiBfbGFzdFNlbnRW
aWV3TGF5b3V0U2l6ZTsKICAgICBPcHRpb25hbDxDR1NpemU+IF9tYXhpbXVtVW5vYnNjdXJlZFNp
emVPdmVycmlkZTsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFNpemU+IF9sYXN0U2VudE1h
eGltdW1Vbm9ic2N1cmVkU2l6ZTsKIAotICAgIENHUmVjdCBfaW5wdXRWaWV3Qm91bmRzOwogICAg
IENHRmxvYXQgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoOwogICAgIEJPT0wgX3ZpZXdwb3J0TWV0YVRh
Z1dpZHRoV2FzRXhwbGljaXQ7CiAgICAgQk9PTCBfdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFn
ZURvY3VtZW50OwpAQCAtMzQ5LDcgKzMzNyw2IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcg
ewogICAgIE9wdGlvbmFsPFdlYktpdDo6VHJhbnNhY3Rpb25JRD4gX2ZpcnN0VHJhbnNhY3Rpb25J
REFmdGVyUGFnZVJlc3RvcmU7CiAgICAgZG91YmxlIF9zY2FsZVRvUmVzdG9yZTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcj4gX2dlc3R1cmVDb250
cm9sbGVyOwogICAgIEJPT0wgX2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwog
CiAgICAgUmV0YWluUHRyPFVJVmlldyA8V0tXZWJWaWV3Q29udGVudFByb3ZpZGVyPj4gX2N1c3Rv
bUNvbnRlbnRWaWV3OwpAQCAtMzgxLDcgKzM2OCw2IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZp
ZXcgewogCiAgICAgQk9PTCBfaGFzU2NoZWR1bGVkVmlzaWJsZVJlY3RVcGRhdGU7CiAgICAgQk9P
TCBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlU2NoZWR1bGVkRnJvbVNjcm9sbFZpZXdJblN0YWJs
ZVN0YXRlOwotICAgIFZlY3RvcjxCbG9ja1B0cjx2b2lkICgpPj4gX3Zpc2libGVDb250ZW50UmVj
dFVwZGF0ZUNhbGxiYWNrczsKIAogICAgIF9XS0RyYWdJbnRlcmFjdGlvblBvbGljeSBfZHJhZ0lu
dGVyYWN0aW9uUG9saWN5OwogCkBAIC0zOTcsNyArMzgzLDYgQEAgQGltcGxlbWVudGF0aW9uIFdL
V2ViVmlldyB7CiAgICAgQk9PTCBfaGFzRW50ZXJlZERlYWxsb2M7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0ltcGw+IF9pbXBs
OwogICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IF90ZXh0RmluZGVyQ2xpZW50Owog
I2VuZGlmCiAgICAgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBfc2VsZWN0aW9uQXR0cmlidXRlczsK
QEAgLTE0MzAsNiArMTQxNSw0MSBAQCAtICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmdJ
ZkZvck1haW5GcmFtZU5hdmlnYXRpb24KICAgICAgICAgW3NlbGYgX2NsZWFyU2FmZUJyb3dzaW5n
V2FybmluZ107CiB9CiAKKy0gKHZvaWQpX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25V
cGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRp
bmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWludGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1h
dGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUKK3sKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZp
ZXddKSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IHVwZGF0ZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaWYg
KHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcpCisgICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lw
V2FpdGluZ0ZvclBhaW50QWZ0ZXJOZXh0Vmlld0RpZE1vdmVUb1dpbmRvdyh0cnVlKTsKKworICAg
IGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKKworICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1NlbGYgPSBzZWxmOworICAgIF9wYWdlLT5jYWxs
QWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlKFt1cGRhdGVCbG9ja0NvcHksIHdpdGhvdXRXYWl0
aW5nRm9yQW5pbWF0ZWRSZXNpemUsIHN0cm9uZ1NlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgeworICAgICAgICBpZiAoIXVwZGF0ZUJsb2NrQ29weSkKKyAgICAgICAgICAg
IHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIGlmICghd2l0aG91
dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSAmJiBzdHJvbmdTZWxmLT5fZHluYW1pY1ZpZXdwb3J0
VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6
aW5nKSB7CisgICAgICAgICAgICBzdHJvbmdTZWxmLT5fY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdS
ZXNpemUuYXBwZW5kKFt1cGRhdGVCbG9ja0NvcHldIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVC
bG9ja0NvcHkoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh3aXRob3V0V2Fp
dGluZ0ZvckFuaW1hdGVkUmVzaXplKTsKKyNlbmRpZgorCisgICAgICAgIHVwZGF0ZUJsb2NrQ29w
eSgpOworICAgIH0pOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIAogLSAo
dm9pZClfZGlkSW5zZXJ0QXR0YWNobWVudDooQVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50IHdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlCkBAIC0xNDU5LDExICsxNDc5LDYgQEAgLSAodm9p
ZClfZGlkSW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFj
aG1lbnQKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLS0gKEJPT0wpX2NvbnRlbnRWaWV3
SXNGaXJzdFJlc3BvbmRlcgotewotICAgIHJldHVybiBzZWxmLl9jdXJyZW50Q29udGVudFZpZXcu
aXNGaXJzdFJlc3BvbmRlcjsKLX0KLQogLSAoQk9PTClfc2hvdWxkQXZvaWRSZXNpemluZ1doZW5J
bnB1dFZpZXdCb3VuZHNDaGFuZ2UKIHsKICAgICByZXR1cm4gW19jb250ZW50VmlldyBfc2hvdWxk
QXZvaWRSZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2VdOwpAQCAtMzY3NSw2ICszNjkw
LDE4IEBAIC0gKHZvaWQpX3dlYl9ncmFudERPTVBhc3RlQWNjZXNzCiAgICAgX2ltcGwtPmhhbmRs
ZURPTVBhc3RlUmVxdWVzdFdpdGhSZXN1bHQoV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25z
ZTo6R3JhbnRlZEZvckdlc3R1cmUpOwogfQogCistICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbgoreworfQorCistICh2b2lkKV9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bgoreworfQorCiBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgogLSAodm9p
ZClyZW5ld0dTdGF0ZQogQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECkBAIC00
ODMwLDIzMTMgKzQ4NTcsMTk3OCBAQCAtICh2b2lkKV9jaGFuZ2VMaXN0VHlwZTooaWQpc2VuZGVy
CiAgICAgX3BhZ2UtPmNoYW5nZUxpc3RUeXBlKCk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShN
QUMpCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1GT1JfRUFDSF9QUklWQVRFX1dLQ09O
VEVOVFZJRVdfQUNUSU9OKEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcpCi0KLS0gKHZv
aWQpX3NldEZvbnQ6KFVJRm9udCAqKWZvbnQgc2VuZGVyOihpZClzZW5kZXIKKy0gKEJPT0wpX3Vz
ZVN5c3RlbUFwcGVhcmFuY2UKIHsKLSAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50Vmll
dykKLSAgICAgICAgW19jb250ZW50VmlldyBfc2V0Rm9udEZvcldlYlZpZXc6Zm9udCBzZW5kZXI6
c2VuZGVyXTsKKyAgICByZXR1cm4gX2ltcGwtPnVzZVN5c3RlbUFwcGVhcmFuY2UoKTsKIH0KIAot
LSAodm9pZClfc2V0Rm9udFNpemU6KENHRmxvYXQpZm9udFNpemUgc2VuZGVyOihpZClzZW5kZXIK
Ky0gKHZvaWQpX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5j
ZQogewotICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQotICAgICAgICBbX2Nv
bnRlbnRWaWV3IF9zZXRGb250U2l6ZUZvcldlYlZpZXc6Zm9udFNpemUgc2VuZGVyOnNlbmRlcl07
CisgICAgX2ltcGwtPnNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSk7
CiB9CiAKLS0gKHZvaWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQp
c2VuZGVyCistIChXS1BhZ2VSZWYpX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZpZXcKIHsK
LSAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldykKLSAgICAgICAgW19jb250ZW50
VmlldyBfc2V0VGV4dENvbG9yRm9yV2ViVmlldzpjb2xvciBzZW5kZXI6c2VuZGVyXTsKKyAgICBy
ZXR1cm4gdG9BUEkoX3BhZ2UuZ2V0KCkpOwogfQogCi0tIChVSVZpZXcgKilpbnB1dEFjY2Vzc29y
eVZpZXcKKy0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAqKWZy
YW1lSGFuZGxlCiB7Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRBY2Nlc3NvcnlWaWV3
Rm9yV2ViVmlld107CisgICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJvY2Vz
cygpLndlYkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRsZS5f
ZnJhbWVJRCkpKQorICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZyYW1lTGF5b3V0KCp3
ZWJGcmFtZVByb3h5KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS0gKFVJVmlldyAqKWlucHV0
VmlldworLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50IGlnbm9y
aW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRTdGF0ZQogewotICAgIHJldHVybiBb
X2NvbnRlbnRWaWV3IGlucHV0Vmlld0ZvcldlYlZpZXddOworICAgIHJldHVybiBfaW1wbC0+dHJ5
VG9Td2lwZVdpdGhFdmVudChldmVudCwgaWdub3JpbmdQaW5uZWRTdGF0ZSk7CiB9CiAKLSNlbmRp
ZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChCT09MKV9pc0VkaXRhYmxlCistIChCT09M
KV9pZ25vcmVzTm9uV2hlZWxFdmVudHMKIHsKLSAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmlz
RWRpdGFibGUoKTsKKyAgICByZXR1cm4gX2ltcGwtPmlnbm9yZXNOb25XaGVlbEV2ZW50cygpOwog
fQogCi0tICh2b2lkKV9zZXRFZGl0YWJsZTooQk9PTCllZGl0YWJsZQorLSAodm9pZClfc2V0SWdu
b3Jlc05vbldoZWVsRXZlbnRzOihCT09MKWlnbm9yZXNOb25XaGVlbEV2ZW50cwogewotICAgIGJv
b2wgd2FzRWRpdGFibGUgPSBfcGFnZS0+aXNFZGl0YWJsZSgpOwotICAgIF9wYWdlLT5zZXRFZGl0
YWJsZShlZGl0YWJsZSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChlZGl0YWJsZSkKLSAg
ICAgICAgX2ltcGwtPmRpZEJlY29tZUVkaXRhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmICh3YXNF
ZGl0YWJsZSA9PSBlZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBbX2NvbnRlbnRWaWV3IF9kaWRDaGFuZ2VXZWJWaWV3RWRpdGFiaWxpdHld
OwotI2VuZGlmCisgICAgX2ltcGwtPnNldElnbm9yZXNOb25XaGVlbEV2ZW50cyhpZ25vcmVzTm9u
V2hlZWxFdmVudHMpOwogfQogCi0tICh2b2lkKV90YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246
KGlkKXNlbmRlcgorLSAoQk9PTClfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIKIHsK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgW3NlbGYgdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9u
OnNlbmRlcl07Ci0jZWxzZQotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRha2VGaW5k
U3RyaW5nRnJvbVNlbGVjdGlvbiJfcyk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UgJiYgX3Bh
Z2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCk7CiB9CiAKLSsgKE5TU3RyaW5n
ICopX3N0cmluZ0ZvckZpbmQKKy0gKHZvaWQpX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdp
bmRvd3MKIHsKLSAgICByZXR1cm4gV2ViS2l0OjpzdHJpbmdGb3JGaW5kKCk7CisgICAgX2ltcGwt
PmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKIH0KIAot
KyAodm9pZClfc2V0U3RyaW5nRm9yRmluZDooTlNTdHJpbmcgKilmaW5kU3RyaW5nCistICh2b2lk
KV9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKIHsK
LSAgICBXZWJLaXQ6OnVwZGF0ZVN0cmluZ0ZvckZpbmQoZmluZFN0cmluZyk7CisgICAgX2ltcGwt
Pmdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmlld09ubHkoZXZlbnQpOwog
fQogCi0tIChfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSAqKV9yZW1vdGVPYmplY3RSZWdpc3RyeQor
LSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKIHsKLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgcmV0dXJuIF9pbXBsLT5yZW1vdGVPYmplY3RSZWdpc3RyeSgpOwotI2Vsc2UKLSAgICBpZiAo
IV9yZW1vdGVPYmplY3RSZWdpc3RyeSkgewotICAgICAgICBfcmVtb3RlT2JqZWN0UmVnaXN0cnkg
PSBhZG9wdE5TKFtbX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgYWxsb2NdIF9pbml0V2l0aFdlYlBh
Z2VQcm94eToqX3BhZ2VdKTsKLSAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgp
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0cnk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgX3BhZ2UtPmlkZW50aWZpZXIoKSwgW19yZW1vdGVPYmplY3RSZWdp
c3RyeSByZW1vdGVPYmplY3RSZWdpc3RyeV0pOwotICAgIH0KLQotICAgIHJldHVybiBfcmVtb3Rl
T2JqZWN0UmVnaXN0cnkuZ2V0KCk7Ci0jZW5kaWYKKyAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6
ZVVwZGF0ZXMoKTsKIH0KIAotLSAoV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgKilfaGFuZGxlCist
ICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzCiB7Ci0gICAgcmV0dXJuIFtbW1dLQnJvd3Np
bmdDb250ZXh0SGFuZGxlIGFsbG9jXSBfaW5pdFdpdGhQYWdlUHJveHk6Kl9wYWdlXSBhdXRvcmVs
ZWFzZV07CisgICAgX2ltcGwtPmVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKIH0KIAotLSAoX1dL
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMpX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMK
Ky0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwogewotICAgIHJldHVy
biBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czsKKyAgICBfaW1wbC0+YmVnaW5EZWZl
cnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7CiB9CiAKLS0gKGlkIDxXS0hpc3RvcnlEZWxlZ2F0
ZVByaXZhdGU+KV9oaXN0b3J5RGVsZWdhdGUKKy0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldp
bmRvd0NoYW5nZXMKIHsKLSAgICByZXR1cm4gX25hdmlnYXRpb25TdGF0ZS0+aGlzdG9yeURlbGVn
YXRlKCkuYXV0b3JlbGVhc2UoKTsKKyAgICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93
Q2hhbmdlcygpOwogfQogCi0tICh2b2lkKV9zZXRIaXN0b3J5RGVsZWdhdGU6KGlkIDxXS0hpc3Rv
cnlEZWxlZ2F0ZVByaXZhdGU+KWhpc3RvcnlEZWxlZ2F0ZQorLSAodm9pZClfZW5kRGVmZXJyaW5n
Vmlld0luV2luZG93Q2hhbmdlc1N5bmMKIHsKLSAgICBfcGFnZS0+c2V0SGlzdG9yeUNsaWVudChf
bmF2aWdhdGlvblN0YXRlLT5jcmVhdGVIaXN0b3J5Q2xpZW50KCkpOwotICAgIF9uYXZpZ2F0aW9u
U3RhdGUtPnNldEhpc3RvcnlEZWxlZ2F0ZShoaXN0b3J5RGVsZWdhdGUpOworICAgIF9pbXBsLT5l
bmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYygpOwogfQogCi0tICh2b2lkKV91cGRh
dGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyCistIChOU1ZpZXcgKilfZnVsbFNjcmVlblBs
YWNlaG9sZGVyVmlldwogewotI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgX2ltcGwtPnVwZGF0ZU1lZGlhUGxheWJhY2tDb250
cm9sc01hbmFnZXIoKTsKLSNlbmRpZgorICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlblBsYWNl
aG9sZGVyVmlldygpOwogfQogCi0tIChCT09MKV9jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlCist
IChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93CiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpCi0g
ICAgcmV0dXJuIF9pbXBsLT5jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7Ci0jZWxzZQotICAg
IHJldHVybiBOTzsKLSNlbmRpZgorICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlbldpbmRvdygp
OwogfQogCi0tIChCT09MKV9pc1BpY3R1cmVJblBpY3R1cmVBY3RpdmUKKy0gKE5TQ29sb3IgKilf
dW5kZXJsYXlDb2xvcgogewotI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlC
QUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgcmV0dXJuIF9pbXBsLT5pc1BpY3R1cmVJblBpY3R1
cmVBY3RpdmUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCisgICAgcmV0dXJuIF9p
bXBsLT51bmRlcmxheUNvbG9yKCk7CiB9CiAKLS0gKHZvaWQpX3RvZ2dsZVBpY3R1cmVJblBpY3R1
cmUKKy0gKHZvaWQpX3NldFVuZGVybGF5Q29sb3I6KE5TQ29sb3IgKil1bmRlcmxheUNvbG9yCiB7
Ci0jaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFO
QUdFUikKLSAgICBfaW1wbC0+dG9nZ2xlUGljdHVyZUluUGljdHVyZSgpOwotI2VuZGlmCisgICAg
X2ltcGwtPnNldFVuZGVybGF5Q29sb3IodW5kZXJsYXlDb2xvcik7CiB9CiAKLS0gKHZvaWQpX2Ns
b3NlQWxsTWVkaWFQcmVzZW50YXRpb25zCistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzOihO
U0FycmF5ICopY3VzdG9tU3dpcGVWaWV3cwogewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
LSAgICBpZiAoYXV0byB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPnZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIoKSkgewotICAgICAgICB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLT5mb3JFYWNo
U2Vzc2lvbihbXSAoYXV0byYgbW9kZWwsIGF1dG8mIGludGVyZmFjZSkgewotICAgICAgICAgICAg
bW9kZWwucmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBp
ZiAoYXV0byBmdWxsU2NyZWVuTWFuYWdlciA9IF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpOyBm
dWxsU2NyZWVuTWFuYWdlciAmJiBmdWxsU2NyZWVuTWFuYWdlci0+aXNGdWxsU2NyZWVuKCkpCi0g
ICAgICAgIGZ1bGxTY3JlZW5NYW5hZ2VyLT5jbG9zZSgpOwotI2VuZGlmCisgICAgX2ltcGwtPnNl
dEN1c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7CiB9CiAKLS0gKHZvaWQpX3N0b3BN
ZWRpYUNhcHR1cmUKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQ6
KGZsb2F0KXRvcENvbnRlbnRJbnNldAogewotICAgIF9wYWdlLT5zdG9wTWVkaWFDYXB0dXJlKCk7
CisgICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQodG9wQ29udGVu
dEluc2V0KTsKIH0KIAotLSAodm9pZClfc3RvcEFsbE1lZGlhUGxheWJhY2sKKy0gKHZvaWQpX3Nl
dERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0KSljYWxsYmFjawog
ewotICAgIF9wYWdlLT5zdG9wQWxsTWVkaWFQbGF5YmFjaygpOworICAgIF9pbXBsLT5zZXREaWRN
b3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKGNhbGxiYWNrKTsKIH0KIAotLSAodm9pZClfc3VzcGVu
ZEFsbE1lZGlhUGxheWJhY2sKKy0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3Jv
bGxCeTooTlNTaXplKW9mZnNldAogewotICAgIF9wYWdlLT5zdXNwZW5kQWxsTWVkaWFQbGF5YmFj
aygpOworICAgIF9pbXBsLT5zZXRGcmFtZUFuZFNjcm9sbEJ5KE5TUmVjdFRvQ0dSZWN0KHJlY3Qp
LCBOU1NpemVUb0NHU2l6ZShvZmZzZXQpKTsKIH0KIAotLSAodm9pZClfcmVzdW1lQWxsTWVkaWFQ
bGF5YmFjaworLSAodm9pZClfc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6KENHRmxvYXQpdG90YWxI
ZWlnaHRPZkJhbm5lcnMKIHsKLSAgICBfcGFnZS0+cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpOwor
ICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9mQmFubmVycyh0b3RhbEhlaWdodE9mQmFubmVycyk7
CiB9CiAKLS0gKE5TVVJMICopX3VucmVhY2hhYmxlVVJMCistIChDR0Zsb2F0KV90b3RhbEhlaWdo
dE9mQmFubmVycwogewotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9w
YWdlLT5wYWdlTG9hZFN0YXRlKCkudW5yZWFjaGFibGVVUkwoKV07CisgICAgcmV0dXJuIF9pbXBs
LT50b3RhbEhlaWdodE9mQmFubmVycygpOwogfQogCi0tIChOU1VSTCAqKV9tYWluRnJhbWVVUkwK
LXsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJl
dHVybiBmcmFtZS0+dXJsKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCiAKLS0gKHZvaWQpX2xvYWRBbHRlcm5hdGVIVE1MU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgZm9yVW5yZWFjaGFibGVVUkw6KE5TVVJMICop
dW5yZWFjaGFibGVVUkwKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCitGT1JfRUFDSF9QUklW
QVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcp
CisKKy0gKHZvaWQpX3NldEZvbnQ6KFVJRm9udCAqKWZvbnQgc2VuZGVyOihpZClzZW5kZXIKIHsK
LSAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXTsKLSAgICBfcGFnZS0+bG9hZEFsdGVybmF0ZUhUTUwoeyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sICJVVEYtOCJfcywgYmFz
ZVVSTCwgdW5yZWFjaGFibGVVUkwpOworICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRW
aWV3KQorICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXRGb250Rm9yV2ViVmlldzpmb250IHNlbmRl
cjpzZW5kZXJdOwogfQogCi0tIChXS05hdmlnYXRpb24gKilfbG9hZERhdGE6KE5TRGF0YSAqKWRh
dGEgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOihO
U1N0cmluZyAqKWNoYXJhY3RlckVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwg
dXNlckRhdGE6KGlkKXVzZXJEYXRhCistICh2b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250
U2l6ZSBzZW5kZXI6KGlkKXNlbmRlcgogewotICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5sb2Fk
RGF0YSh7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5n
dGggfSwgTUlNRVR5cGUsIGNoYXJhY3RlckVuY29kaW5nTmFtZSwgYmFzZVVSTC5hYnNvbHV0ZVN0
cmluZywgV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSkucHRyKCkpKTsK
KyAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldykKKyAgICAgICAgW19jb250ZW50
VmlldyBfc2V0Rm9udFNpemVGb3JXZWJWaWV3OmZvbnRTaXplIHNlbmRlcjpzZW5kZXJdOwogfQog
Ci0tIChXS05hdmlnYXRpb24gKilfbG9hZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qg
c2hvdWxkT3BlbkV4dGVybmFsVVJMczooQk9PTClzaG91bGRPcGVuRXh0ZXJuYWxVUkxzCistICh2
b2lkKV9zZXRUZXh0Q29sb3I6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNlbmRlcgogewot
ICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5sb2FkUmVxdWVzdChyZXF1ZXN0LCBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzID8gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hv
dWxkQWxsb3cgOiBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRO
b3RBbGxvdykpOworICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQorICAgICAg
ICBbX2NvbnRlbnRWaWV3IF9zZXRUZXh0Q29sb3JGb3JXZWJWaWV3OmNvbG9yIHNlbmRlcjpzZW5k
ZXJdOwogfQogCi0tIChOU0FycmF5ICopX2NlcnRpZmljYXRlQ2hhaW4KKy0gKFVJVmlldyAqKWlu
cHV0QWNjZXNzb3J5VmlldwogewotICAgIGlmIChXZWJLaXQ6OldlYkZyYW1lUHJveHkqIG1haW5G
cmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+Y2Vy
dGlmaWNhdGVJbmZvKCkgPyAoX19icmlkZ2UgTlNBcnJheSAqKW1haW5GcmFtZS0+Y2VydGlmaWNh
dGVJbmZvKCktPmNlcnRpZmljYXRlSW5mbygpLmNlcnRpZmljYXRlQ2hhaW4oKSA6IG5pbDsKLQot
ICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRBY2Nlc3NvcnlW
aWV3Rm9yV2ViVmlld107CiB9CiAKLS0gKE5TVVJMICopX2NvbW1pdHRlZFVSTAorLSAoVUlWaWV3
ICopaW5wdXRWaWV3CiB7Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6
X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKV07CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcg
aW5wdXRWaWV3Rm9yV2ViVmlld107CiB9CiAKLS0gKE5TU3RyaW5nICopX01JTUVUeXBlCistIChV
SVZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldwogewotICAgIGlmIChfcGFnZS0+bWFp
bkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBfcGFnZS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCk7
Ci0KKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKFtfZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0dXJuIFtfZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNlaG9sZGVyXTsKKyNlbmRpZiAvLyBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoTlNTdHJpbmcgKilfdXNlckFn
ZW50CistICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQp
cG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
byAqKSlibG9jawogewotICAgIHJldHVybiBfcGFnZS0+dXNlckFnZW50KCk7Ci19CisgICAgYXV0
byBpbmZvUmVxdWVzdCA9IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QoV2Vi
Q29yZTo6cm91bmRlZEludFBvaW50KHBvc2l0aW9uKSk7CisgICAgaW5mb1JlcXVlc3QuaW5jbHVk
ZVNuYXBzaG90ID0gdHJ1ZTsKIAotLSAoTlNTdHJpbmcgKilfYXBwbGljYXRpb25OYW1lRm9yVXNl
ckFnZW50Ci17Ci0gICAgcmV0dXJuIF9wYWdlLT5hcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQo
KTsKKyAgICBbX2NvbnRlbnRWaWV3IGRvQWZ0ZXJQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlOltj
YXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRyKGJsb2NrKV0gKFdlYktpdDo6SW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pIHsKKyAgICAgICAgY2FwdHVyZWRCbG9j
ayhbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWN0aXZhdGVkRWxlbWVudEluZm9XaXRoSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246aW5mb3JtYXRpb24gdXNlckluZm86bmlsXSk7Cisg
ICAgfSBmb3JSZXF1ZXN0OmluZm9SZXF1ZXN0XTsKIH0KIAotLSAodm9pZClfc2V0QXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50OihOU1N0cmluZyAqKWFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2Vu
dAorLSAoQ0dSZWN0KV9jb250ZW50VmlzaWJsZVJlY3QKIHsKLSAgICBfcGFnZS0+c2V0QXBwbGlj
YXRpb25OYW1lRm9yVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7Ci0gICAg
X3BhZ2UtPnNldEFwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQoYXBwbGljYXRpb25O
YW1lRm9yVXNlckFnZW50KTsKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgYm91
bmRzXSB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKIH0KIAotLSAoTlNTdHJpbmcg
KilfY3VzdG9tVXNlckFnZW50CistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNU
b1ZpZXc6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1cm4gc2VsZi5jdXN0b21Vc2VyQWdlbnQ7
CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpzZWxmLl9jdXJy
ZW50Q29udGVudFZpZXddOwogfQogCi0tICh2b2lkKV9zZXRDdXN0b21Vc2VyQWdlbnQ6KE5TU3Ry
aW5nICopY3VzdG9tVXNlckFnZW50CistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1Rv
Q29udGVudHM6KENHUG9pbnQpcG9pbnQKIHsKLSAgICBzZWxmLmN1c3RvbVVzZXJBZ2VudCA9IGN1
c3RvbVVzZXJBZ2VudDsKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmll
dzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwogfQogCi0tICh2b2lkKV9zZXRVc2VyQ29udGVu
dEV4dGVuc2lvbnNFbmFibGVkOihCT09MKXVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQKKy0g
KHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uCiB7Ci0gICAgLy8gVGhpcyBpcyBr
ZXB0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIGlPUyA5LgorICAgIC8vIEZvciBzdWJj
bGFzc2VzIHRvIG92ZXJyaWRlLgogfQogCi0tIChCT09MKV91c2VyQ29udGVudEV4dGVuc2lvbnNF
bmFibGVkCistICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb24KIHsKLSAgICAvLyBU
aGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggaU9TIDkuCi0gICAgcmV0
dXJuIHRydWU7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCiB9CiAKLS0gKHBp
ZF90KV93ZWJQcm9jZXNzSWRlbnRpZmllcgorLSAoQ0dSZWN0KV91aVRleHRDYXJldFJlY3QKIHsK
LSAgICBpZiAoIVtzZWxmIF9pc1ZhbGlkXSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gRm9y
Y2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCisgICAgW19jb250ZW50
VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CiAKLSAgICByZXR1cm4gX3BhZ2UtPnByb2Nl
c3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIFtbX2NvbnRlbnRWaWV3IHZhbHVlRm9yS2V5UGF0
aDpAImludGVyYWN0aW9uQXNzaXN0YW50LnNlbGVjdGlvblZpZXcuc2VsZWN0aW9uLmNhcmV0UmVj
dCJdIENHUmVjdFZhbHVlXTsKIH0KIAotLSAocGlkX3QpX3Byb3Zpc2lvbmFsV2ViUHJvY2Vzc0lk
ZW50aWZpZXIKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25P
ZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBpZiAoIVtzZWxmIF9pc1ZhbGlkXSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBhdXRvKiBwcm92aXNpb25hbFBhZ2UgPSBfcGFnZS0+cHJvdmlzaW9uYWxQYWdlUHJv
eHkoKTsKLSAgICBpZiAoIXByb3Zpc2lvbmFsUGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gcHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsK
KyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9u
T2Zmc2V0Om9mZnNldCB3aXRoVGV4dDp0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENv
bXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKKyAgICAg
ICAgaWYgKCFjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvIHJlY3RWYWx1ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6c2VsZWN0aW9uUmVjdHMuc2l6ZSgpXSk7CisgICAgICAgIGZvciAo
YXV0byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzKQorICAgICAgICAgICAgW3JlY3RW
YWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJl
Y3QoKV1dOworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0
KCkpOworICAgIH1dOwogfQogCi0tICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3MKKy0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbgogewotICAgIGlmICghW3NlbGYgX2lzVmFs
aWRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+cHJvY2VzcygpLnRlcm1pbmF0ZSgp
OworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbl07CiB9CiAK
LSNpZiBQTEFURk9STShNQUMpCi0tIChOU1ZpZXcgKilfc2FmZUJyb3dzaW5nV2FybmluZworLSAo
dm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5z
YWZlQnJvd3NpbmdXYXJuaW5nKCk7CisgICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNs
ZWFyU2VsZWN0aW9uXTsKIH0KLSNlbHNlCi0tIChVSVZpZXcgKilfc2FmZUJyb3dzaW5nV2Fybmlu
ZworCistIChCT09MKV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKIHsKLSAgICByZXR1cm4g
X3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCk7CisgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250
ZW50Vmlldy5pc0ZpcnN0UmVzcG9uZGVyOwogfQotI2VuZGlmCiAKLS0gKFdLTmF2aWdhdGlvbiAq
KV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKworLSAoX1dLSW5zcGVjdG9yICopX2luc3BlY3RvcgogewotICAgIHJldHVybiB3cmFw
cGVyKF9wYWdlLT5yZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVudEJs
b2NrZXJzKSk7CisgICAgaWYgKGF1dG8qIGluc3BlY3RvciA9IF9wYWdlLT5pbnNwZWN0b3IoKSkK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXIoKmluc3BlY3Rvcik7CisgICAgcmV0dXJuIG5pbDsKIH0K
IAotLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZEV4cGlyZWRPbmx5CistIChfV0tGcmFtZUhhbmRs
ZSAqKV9tYWluRnJhbWUKIHsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVsb2FkKFdlYkNv
cmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpKTsKKyAgICBpZiAoYXV0byogZnJhbWUgPSBf
cGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6RnJhbWVIYW5k
bGU6OmNyZWF0ZShmcmFtZS0+ZnJhbWVJRCgpKSk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAo
dm9pZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZQorLSAoQk9PTClfaXNFZGl0
YWJsZQogewotICAgIFJlZjxXZWJLaXQ6OldlYlByb2Nlc3NQcm94eT4gcHJvdGVjdGVkUHJvY2Vz
c1Byb3h5KF9wYWdlLT5wcm9jZXNzKCkpOwotICAgIHByb3RlY3RlZFByb2Nlc3NQcm94eS0+cmVx
dWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uOjpSZXF1ZXN0
ZWRCeUNsaWVudCk7Ci0KLSAgICBpZiAoYXV0byogcHJvdmlzaW9uYWxQYWdlUHJveHkgPSBfcGFn
ZS0+cHJvdmlzaW9uYWxQYWdlUHJveHkoKSkgewotICAgICAgICBSZWY8V2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShwcm92aXNpb25hbFBhZ2VQcm94eS0+cHJv
Y2VzcygpKTsKLSAgICAgICAgcHJvdGVjdGVkUHJvY2Vzc1Byb3h5LT5yZXF1ZXN0VGVybWluYXRp
b24oV2ViS2l0OjpQcm9jZXNzVGVybWluYXRpb25SZWFzb246OlJlcXVlc3RlZEJ5Q2xpZW50KTsK
LSAgICB9CisgICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5pc0VkaXRhYmxlKCk7CiB9CiAKLS0g
KENHUmVjdClfY29udmVydFJlY3RGcm9tUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMKKy0gKHZvaWQpX3NldEVkaXRhYmxlOihCT09MKWVkaXRhYmxl
CiB7Ci0gICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBlYXNpZXIgdG8gdGFsayBhYm91dCBXS1dl
YlZpZXcgY29vcmRpbmF0ZXMgaW4gYSBjb25zaXN0ZW50IGFuZCBjcm9zcy1wbGF0Zm9ybSB3YXku
Ci0gICAgLy8gQ3VycmVudGx5LCBuZWl0aGVyICJyb290IHZpZXciIG5vciAid2luZG93IiBtZWFu
ICJXS1dlYlZpZXcgY29vcmRpbmF0ZXMiIG9uIGJvdGggcGxhdGZvcm1zLgotICAgIC8vIFNlZSBo
dHRwczovL3dlYmtpdC5vcmcvYi8xOTM2NDkgYW5kIHJlbGF0ZWQgYnVncy4KKyAgICBib29sIHdh
c0VkaXRhYmxlID0gX3BhZ2UtPmlzRWRpdGFibGUoKTsKKyAgICBfcGFnZS0+c2V0RWRpdGFibGUo
ZWRpdGFibGUpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoZWRpdGFibGUpCisgICAgICAg
IF9pbXBsLT5kaWRCZWNvbWVFZGl0YWJsZSgpOworI2VuZGlmCisKKyAgICBpZiAod2FzRWRpdGFi
bGUgPT0gZWRpdGFibGUpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMgZnJvbVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSNlbHNlCi0gICAgcmV0dXJuIHJlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXM7CisgICAgW19jb250ZW50VmlldyBfZGlkQ2hhbmdlV2ViVmll
d0VkaXRhYmlsaXR5XTsKICNlbmRpZgogfQogCi0tIChDR1JlY3QpX2NvbnZlcnRSZWN0VG9Sb290
Vmlld0Nvb3JkaW5hdGVzOihDR1JlY3QpcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzCistICh2b2lk
KV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJp
bmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9uCiB7Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVj
dEluV2ViVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotI2Vsc2UK
LSAgICByZXR1cm4gcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzOwotI2VuZGlmCisgICAgX3BhZ2Ut
PmV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kLCBhcmd1bWVudCwgW2NhcHR1cmVkQ29tcGxldGlv
bkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKQorICAg
ICAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yOjpOb25lKTsKKyAgICB9KTsKIH0KIAotLSAodm9pZClfcmVxdWVzdFRleHRJ
bnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqKSlj
b21wbGV0aW9uSGFuZGxlcgorLSAoaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQFtdKTsKKyAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5nZXRB
dXRvcmVsZWFzZWQoKTsKK30KKworLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
OihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF90ZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9pZClfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmln
dXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBsZXRpb25I
YW5kbGVyCit7CisgICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOworCisgICAgaWYgKCFfdGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlmCiAKLSAgICBDR1JlY3QgcmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcyA9IFtzZWxmIF9jb252ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczpy
ZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXNdOwotICAgIGF1dG8gd2Vha1NlbGYgPSBXZWFrT2JqQ1B0
cjxXS1dlYlZpZXc+KHNlbGYpOwotICAgIF9wYWdlLT50ZXh0SW5wdXRDb250ZXh0c0luUmVjdChy
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBbd2Vha1NlbGYsIGNhcHR1cmVkQ29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkVsZW1lbnRDb250ZXh0PiYgY29udGV4dHMpIHsKLSAgICAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBlbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpjb250ZXh0cy5zaXplKCldKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IGV4Y2x1c2lvblJ1bGVz
OworICAgIGlmIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGZvciAoX1dLVGV4dE1hbmlwdWxh
dGlvbkV4Y2x1c2lvblJ1bGUgKndrUnVsZSBpbiBjb25maWd1cmF0aW9uLmV4Y2x1c2lvblJ1bGVz
KSB7CisgICAgICAgICAgICBhdXRvIHR5cGUgPSB3a1J1bGUuaXNFeGNsdXNpb24gPyBFeGNsdXNp
b25SdWxlOjpUeXBlOjpFeGNsdWRlIDogRXhjbHVzaW9uUnVsZTo6VHlwZTo6SW5jbHVkZTsKKyAg
ICAgICAgICAgIGlmICh3a1J1bGUuYXR0cmlidXRlTmFtZSkKKyAgICAgICAgICAgICAgICBleGNs
dXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGUgeyB3
a1J1bGUuYXR0cmlidXRlTmFtZSwgd2tSdWxlLmF0dHJpYnV0ZVZhbHVlIH0gfSk7CisgICAgICAg
ICAgICBlbHNlIGlmICh3a1J1bGUuY2xhc3NOYW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lv
blJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6Q2xhc3NSdWxlIHsgd2tSdWxlLmNs
YXNzTmFtZSB9IH0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4Y2x1c2lv
blJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGUgeyB3a1J1bGUu
ZWxlbWVudE5hbWUgfSB9KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBhdXRvIHN0cm9u
Z1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZXh0
IDogY29udGV4dHMpIHsKLSAgICAgICAgICAgIFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IGNvbnRl
eHRXaXRoV2ViVmlld0JvdW5kaW5nUmVjdCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICBjb250ZXh0
V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3QuYm91bmRpbmdSZWN0ID0gW3N0cm9uZ1NlbGYgX2NvbnZl
cnRSZWN0RnJvbVJvb3RWaWV3Q29vcmRpbmF0ZXM6Y29udGV4dC5ib3VuZGluZ1JlY3RdOwotICAg
ICAgICAgICAgW2VsZW1lbnRzIGFkZE9iamVjdDphZG9wdE5TKFtbX1dLVGV4dElucHV0Q29udGV4
dCBhbGxvY10gX2luaXRXaXRoVGV4dElucHV0Q29udGV4dDpjb250ZXh0V2l0aFdlYlZpZXdCb3Vu
ZGluZ1JlY3RdKS5nZXQoKV07CisgICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoZXhj
bHVzaW9uUnVsZXMsIFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlE
LAorICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zKSB7CisgICAgICAgIGlmICghd2Vha1NlbGYp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byByZXRhaW5lZFNlbGYgPSB3ZWFr
U2VsZi5nZXQoKTsKKyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IFtyZXRhaW5lZFNlbGYgX3RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZV07CisgICAgICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndrVG9rZW5zID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnRva2Vucy5zaXplKCldOworICAgICAgICBmb3IgKGF1
dG8mIHRva2VuIDogdG9rZW5zKSB7CisgICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5T
KFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBb
d2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZpZXIudG9V
SW50NjQoKSldOworICAgICAgICAgICAgW3drVG9rZW4gc2V0Q29udGVudDp0b2tlbi5jb250ZW50
XTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOwor
ICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKICAgICAgICAg
fQogCi0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoZWxlbWVudHMuZ2V0KCkpOwor
ICAgICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxs
b2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtSUQudG9VSW50NjQoKSkg
dG9rZW5zOndrVG9rZW5zXSk7CisgICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNl
bGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtOml0ZW0uZ2V0KCldOworICAgIH0s
IFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildICgpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soKTsKICAgICB9KTsKIH0K
IAotLSAodm9pZClfZm9jdXNUZXh0SW5wdXRDb250ZXh0OihfV0tUZXh0SW5wdXRDb250ZXh0ICop
dGV4dElucHV0Q29udGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0
aW9uSGFuZGxlcgorLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNv
bXBsZXRpb25IYW5kbGVyCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIVtz
ZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihOTyk7CisgICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVzdWx0ID0gV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3VsdDsKKworICAgIGlmICghX3BhZ2Up
CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKIAotICAgIGF1dG8gd2ViQ29udGV4dCA9
IFt0ZXh0SW5wdXRDb250ZXh0IF90ZXh0SW5wdXRDb250ZXh0XTsKLSAgICBpZiAod2ViQ29udGV4
dC53ZWJQYWdlSWRlbnRpZmllciAhPSBfcGFnZS0+d2ViUGFnZUlEKCkpCi0gICAgICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJUaGUgcHJv
dmlkZWQgX1dLVGV4dElucHV0Q29udGV4dCB3YXMgbm90IGNyZWF0ZWQgYnkgdGhpcyBXS1dlYlZp
ZXcuIl07CisgICAgYXV0byBpdGVtSUQgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXJUeXBlPihTdHJpbmcoaXRl
bS5pZGVudGlmaWVyKS50b1VJbnQ2NCgpKTsKIAotICAgIFtzZWxmIGJlY29tZUZpcnN0UmVzcG9u
ZGVyXTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAgICAgYXV0byB0b2tlbklEID0gbWFr
ZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OlRv
a2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLnRvVUludDY0KCkp
OworICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4uY29udGVudCB9KTsKKyAg
ICB9CiAKLSAgICBfcGFnZS0+Zm9jdXNUZXh0SW5wdXRDb250ZXh0KHdlYkNvbnRleHQsIFtjYXB0
dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0o
Ym9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoc3VjY2Vz
cyk7CisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vucywg
W2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0
aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7CiAgICAgfSk7
CiB9Ci0KLS0gKHZvaWQpX3Rha2VQREZTbmFwc2hvdFdpdGhDb25maWd1cmF0aW9uOihXS1NuYXBz
aG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZv
aWQpX3Rha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgV0tQREZD
b25maWd1cmF0aW9uICpwZGZDb25maWd1cmF0aW9uID0gbmlsOwotICAgIGlmIChzbmFwc2hvdENv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgcGRmQ29uZmlndXJhdGlvbiA9IFtbW1dLUERGQ29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgICAgICBwZGZDb25maWd1cmF0
aW9uLnJlY3QgPSBzbmFwc2hvdENvbmZpZ3VyYXRpb24ucmVjdDsKLSAgICB9Ci0KLSAgICBbc2Vs
ZiBjcmVhdGVQREZXaXRoQ29uZmlndXJhdGlvbjpwZGZDb25maWd1cmF0aW9uIGNvbXBsZXRpb25I
YW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3NlbGYg
dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOnNlbmRlcl07CisjZWxzZQorICAgIF9wYWdlLT5l
eGVjdXRlRWRpdENvbW1hbmQoIlRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbiJfcyk7CisjZW5k
aWYKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLS0gKHZvaWQpX3NldFNob3VsZFN1cHByZXNzRmly
c3RSZXNwb25kZXJDaGFuZ2VzOihCT09MKXNob3VsZFN1cHByZXNzCisrIChOU1N0cmluZyAqKV9z
dHJpbmdGb3JGaW5kCiB7Ci0gICAgX2ltcGwtPnNldFNob3VsZFN1cHByZXNzRmlyc3RSZXNwb25k
ZXJDaGFuZ2VzKHNob3VsZFN1cHByZXNzKTsKKyAgICByZXR1cm4gV2ViS2l0OjpzdHJpbmdGb3JG
aW5kKCk7CiB9Ci0jZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0tICh2b2lkIChe
KSh2b2lkKSlfcmV0YWluQWN0aXZlRm9jdXNlZFN0YXRlCisrICh2b2lkKV9zZXRTdHJpbmdGb3JG
aW5kOihOU1N0cmluZyAqKWZpbmRTdHJpbmcKIHsKLSAgICArK19hY3RpdmVGb2N1c2VkU3RhdGVS
ZXRhaW5Db3VudDsKKyAgICBXZWJLaXQ6OnVwZGF0ZVN0cmluZ0ZvckZpbmQoZmluZFN0cmluZyk7
Cit9CiAKLSAgICAvLyBGSVhNRTogVXNlIHNvbWV0aGluZyBsaWtlIENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGJsb2NrIGlzIGNhbGxlZCBi
ZWZvcmUgaXQncyByZWxlYXNlZC4KLSAgICByZXR1cm4gW1tbc2VsZl0gewotICAgICAgICAtLV9h
Y3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKLSAgICB9IGNvcHldIGF1dG9yZWxlYXNlXTsK
LX0KLQotLSAodm9pZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9y
d2FyZDooQk9PTClzZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShC
T09MIGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSljb21wbGV0aW9uSGFuZGxlcgorLSAoX1dLUmVt
b3RlT2JqZWN0UmVnaXN0cnkgKilfcmVtb3RlT2JqZWN0UmVnaXN0cnkKIHsKLSAgICB0eXBlb2Yo
Y29tcGxldGlvbkhhbmRsZXIpIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG5pbDsKLSAgICBpZiAo
Y29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2Nr
X2NvcHkoY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgW19jb250ZW50VmlldyBfYmVjb21lRmly
c3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpzZWxlY3RpbmdGb3J3YXJkIGNv
bXBsZXRpb25IYW5kbGVyOltjb21wbGV0aW9uSGFuZGxlckNvcHldKEJPT0wgZGlkQmVjb21lRmly
c3RSZXNwb25kZXIpIHsKLSAgICAgICAgaWYgKCFjb21wbGV0aW9uSGFuZGxlckNvcHkpCi0gICAg
ICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBfaW1wbC0+cmVt
b3RlT2JqZWN0UmVnaXN0cnkoKTsKKyNlbHNlCisgICAgaWYgKCFfcmVtb3RlT2JqZWN0UmVnaXN0
cnkpIHsKKyAgICAgICAgX3JlbW90ZU9iamVjdFJlZ2lzdHJ5ID0gYWRvcHROUyhbW19XS1JlbW90
ZU9iamVjdFJlZ2lzdHJ5IGFsbG9jXSBfaW5pdFdpdGhXZWJQYWdlUHJveHk6Kl9wYWdlXSk7Cisg
ICAgICAgIF9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlJlbW90ZU9iamVjdFJlZ2lzdHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIF9w
YWdlLT5pZGVudGlmaWVyKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0UmVn
aXN0cnldKTsKKyAgICB9CiAKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KGRpZEJlY29t
ZUZpcnN0UmVzcG9uZGVyKTsKLSAgICAgICAgQmxvY2tfcmVsZWFzZShjb21wbGV0aW9uSGFuZGxl
ckNvcHkpOwotICAgIH1dOworICAgIHJldHVybiBfcmVtb3RlT2JqZWN0UmVnaXN0cnkuZ2V0KCk7
CisjZW5kaWYKIH0KIAotLSAoaWQpX3NuYXBzaG90TGF5ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJk
TGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0KKy0gKFdLQnJvd3NpbmdDb250
ZXh0SGFuZGxlICopX2hhbmRsZQogewotICAgIGlmIChfcGFnZS0+YmFja0ZvcndhcmRMaXN0KCku
Y3VycmVudEl0ZW0oKSA9PSAmaXRlbS5faXRlbSkKLSAgICAgICAgX3BhZ2UtPnJlY29yZE5hdmln
YXRpb25TbmFwc2hvdCgqX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCkpOwot
Ci0gICAgaWYgKGF1dG8qIHZpZXdTbmFwc2hvdCA9IGl0ZW0uX2l0ZW0uc25hcHNob3QoKSkKLSAg
ICAgICAgcmV0dXJuIHZpZXdTbmFwc2hvdC0+YXNMYXllckNvbnRlbnRzKCk7Ci0KLSAgICByZXR1
cm4gbmlsOworICAgIHJldHVybiBbW1tXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSBhbGxvY10gX2lu
aXRXaXRoUGFnZVByb3h5OipfcGFnZV0gYXV0b3JlbGVhc2VdOwogfQogCi0tIChOU0FycmF5ICop
X2RhdGFEZXRlY3Rpb25SZXN1bHRzCistIChfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylfb2Jz
ZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cwogewotI2lmIEVOQUJMRShEQVRBX0RFVEVDVElP
TikKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBfZGF0YURldGVjdGlvblJlc3VsdHNdOwotI2Vs
c2UKLSAgICByZXR1cm4gbmlsOwotI2VuZGlmCisgICAgcmV0dXJuIF9vYnNlcnZlZFJlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRzOwogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVh
a1NlbGVjdGlvbkNvbnRlbnQKKy0gKGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+KV9oaXN0
b3J5RGVsZWdhdGUKIHsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc2liaWxpdHlSZXRyaWV2ZVNw
ZWFrU2VsZWN0aW9uQ29udGVudF07CisgICAgcmV0dXJuIF9uYXZpZ2F0aW9uU3RhdGUtPmhpc3Rv
cnlEZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIGZvciBz
dWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLy8gQ3VycmVudGx5IGl0J3Mgb25seSBpbiBUZXN0UnVu
bmVyV0tXZWJWaWV3LgotLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0aW9u
Q29udGVudDooTlNTdHJpbmcgKiljb250ZW50CistICh2b2lkKV9zZXRIaXN0b3J5RGVsZWdhdGU6
KGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+KWhpc3RvcnlEZWxlZ2F0ZQogeworICAgIF9w
YWdlLT5zZXRIaXN0b3J5Q2xpZW50KF9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUhpc3RvcnlDbGll
bnQoKSk7CisgICAgX25hdmlnYXRpb25TdGF0ZS0+c2V0SGlzdG9yeURlbGVnYXRlKGhpc3RvcnlE
ZWxlZ2F0ZSk7CiB9CiAKLS0gKFVJVGV4dElucHV0QXNzaXN0YW50SXRlbSAqKWlucHV0QXNzaXN0
YW50SXRlbQorLSAodm9pZClfdXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xzTWFuYWdlcgogewot
ICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0QXNzaXN0YW50SXRlbUZvcldlYlZpZXddOwor
I2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFH
RVIpCisgICAgX2ltcGwtPnVwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFnZXIoKTsKKyNl
bmRpZgogfQogCistIChCT09MKV9jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlCit7CisjaWYgSEFW
RShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9pbXBsLT5jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJl
KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKICNlbmRpZgorfQogCi0tIChOU0RhdGEgKilfc2Vz
c2lvblN0YXRlRGF0YQorLSAoQk9PTClfaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlCiB7Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgdGhlIGxlZ2FjeSBzZXNzaW9uIHN0YXRlIGVu
Y29kZXIuCi0gICAgcmV0dXJuIHdyYXBwZXIoV2ViS2l0OjplbmNvZGVMZWdhY3lTZXNzaW9uU3Rh
dGUoX3BhZ2UtPnNlc3Npb25TdGF0ZSgpKSk7CisjaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJM
RShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICByZXR1cm4gX2ltcGwtPmlzUGlj
dHVyZUluUGljdHVyZUFjdGl2ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKIH0K
IAotLSAoX1dLU2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZQorLSAodm9pZClfdG9nZ2xlUGlj
dHVyZUluUGljdHVyZQogewotICAgIHJldHVybiBbW1tfV0tTZXNzaW9uU3RhdGUgYWxsb2NdIF9p
bml0V2l0aFNlc3Npb25TdGF0ZTpfcGFnZS0+c2Vzc2lvblN0YXRlKCldIGF1dG9yZWxlYXNlXTsK
KyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQorICAgIF9pbXBsLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7CisjZW5kaWYKIH0KIAot
LSAoX1dLU2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZVdpdGhGaWx0ZXI6KEJPT0wgKF4pKFdL
QmFja0ZvcndhcmRMaXN0SXRlbSAqaXRlbSkpZmlsdGVyCistICh2b2lkKV9jbG9zZUFsbE1lZGlh
UHJlc2VudGF0aW9ucwogewotICAgIFdlYktpdDo6U2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSA9
IF9wYWdlLT5zZXNzaW9uU3RhdGUoW2ZpbHRlcl0oV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJiBpdGVtKSB7Ci0gICAgICAgIGlmICghZmlsdGVyKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgcmV0dXJuIChib29sKWZpbHRlcih3cmFwcGVyKGl0ZW0pKTsKLSAgICB9
KTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGF1dG8gdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciA9IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpIHsKKyAgICAgICAg
dmlkZW9GdWxsc2NyZWVuTWFuYWdlci0+Zm9yRWFjaFNlc3Npb24oW10gKGF1dG8mIG1vZGVsLCBh
dXRvJiBpbnRlcmZhY2UpIHsKKyAgICAgICAgICAgIG1vZGVsLnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25l
KTsKKyAgICAgICAgfSk7CisgICAgfQogCi0gICAgcmV0dXJuIFtbW19XS1Nlc3Npb25TdGF0ZSBh
bGxvY10gX2luaXRXaXRoU2Vzc2lvblN0YXRlOnNlc3Npb25TdGF0ZV0gYXV0b3JlbGVhc2VdOwor
ICAgIGlmIChhdXRvIGZ1bGxTY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2Vy
KCk7IGZ1bGxTY3JlZW5NYW5hZ2VyICYmIGZ1bGxTY3JlZW5NYW5hZ2VyLT5pc0Z1bGxTY3JlZW4o
KSkKKyAgICAgICAgZnVsbFNjcmVlbk1hbmFnZXItPmNsb3NlKCk7CisjZW5kaWYKIH0KIAotLSAo
dm9pZClfcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhOihOU0RhdGEgKilzZXNzaW9uU3RhdGVE
YXRhCistICh2b2lkKV9zdG9wTWVkaWFDYXB0dXJlCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIG5vdCB1c2UgdGhlIGxlZ2FjeSBzZXNzaW9uIHN0YXRlIGRlY29kZXIuCi0gICAgV2ViS2l0
OjpTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlOwotICAgIGlmICghV2ViS2l0OjpkZWNvZGVMZWdh
Y3lTZXNzaW9uU3RhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlc3Npb25TdGF0ZURh
dGEuYnl0ZXMpLCBzZXNzaW9uU3RhdGVEYXRhLmxlbmd0aCwgc2Vzc2lvblN0YXRlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdURk1vdmUo
c2Vzc2lvblN0YXRlKSwgdHJ1ZSk7CisgICAgX3BhZ2UtPnN0b3BNZWRpYUNhcHR1cmUoKTsKIH0K
IAotLSAoV0tOYXZpZ2F0aW9uICopX3Jlc3RvcmVTZXNzaW9uU3RhdGU6KF9XS1Nlc3Npb25TdGF0
ZSAqKXNlc3Npb25TdGF0ZSBhbmROYXZpZ2F0ZTooQk9PTCluYXZpZ2F0ZQorLSAodm9pZClfc3Rv
cEFsbE1lZGlhUGxheWJhY2sKIHsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVzdG9yZUZy
b21TZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlID8gc2Vzc2lvblN0YXRlLT5fc2Vzc2lvblN0YXRl
IDogV2ViS2l0OjpTZXNzaW9uU3RhdGUgeyB9LCBuYXZpZ2F0ZSkpOworICAgIF9wYWdlLT5zdG9w
QWxsTWVkaWFQbGF5YmFjaygpOwogfQogCi0tICh2b2lkKV9jbG9zZQorLSAodm9pZClfc3VzcGVu
ZEFsbE1lZGlhUGxheWJhY2sKIHsKLSAgICBfcGFnZS0+Y2xvc2UoKTsKKyAgICBfcGFnZS0+c3Vz
cGVuZEFsbE1lZGlhUGxheWJhY2soKTsKIH0KIAotLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRB
dHRhY2htZW50V2l0aEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIGNvbnRlbnRUeXBlOihO
U1N0cmluZyAqKWNvbnRlbnRUeXBlIGRhdGE6KE5TRGF0YSAqKWRhdGEgb3B0aW9uczooX1dLQXR0
YWNobWVudERpc3BsYXlPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wg
c3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX3Jlc3VtZUFsbE1lZGlhUGxheWJh
Y2sKIHsKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgYXV0byBmaWxlV3JhcHBlciA9
IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVu
dHM6ZGF0YV0pOwotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgW2ZpbGVXcmFwcGVyIHNldFBy
ZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKLSAgICByZXR1cm4gW3NlbGYgX2luc2VydEF0dGFj
aG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6Y29udGVu
dFR5cGUgY29tcGxldGlvbjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgX3BhZ2UtPnJlc3VtZUFs
bE1lZGlhUGxheWJhY2soKTsKIH0KIAotLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2ht
ZW50V2l0aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5
cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUgb3B0aW9uczooX1dLQXR0YWNobWVudERpc3BsYXlP
cHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxl
dGlvbkhhbmRsZXIKKy0gKE5TVVJMICopX3VucmVhY2hhYmxlVVJMCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKG9wdGlvbnMpOwotICAgIHJldHVybiBbc2VsZiBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxl
V3JhcHBlcjpmaWxlV3JhcHBlciBjb250ZW50VHlwZTpjb250ZW50VHlwZSBjb21wbGV0aW9uOmNv
bXBsZXRpb25IYW5kbGVyXTsKKyAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmlu
ZzpfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVucmVhY2hhYmxlVVJMKCldOwogfQogCi0tIChfV0tB
dHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBw
ZXIgKilmaWxlV3JhcHBlciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBjb21w
bGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKKy0gKE5TVVJM
ICopX21haW5GcmFtZVVSTAogewotI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAg
YXV0byBpZGVudGlmaWVyID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgIGF1dG8g
YXR0YWNobWVudCA9IEFQSTo6QXR0YWNobWVudDo6Y3JlYXRlKGlkZW50aWZpZXIsICpfcGFnZSk7
Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZShmaWxl
V3JhcHBlciwgY29udGVudFR5cGUpOwotICAgIF9wYWdlLT5pbnNlcnRBdHRhY2htZW50KGF0dGFj
aG1lbnQuY29weVJlZigpLCBbY2FwdHVyZWRIYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRp
b25IYW5kbGVyKV0gKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAg
ICBpZiAoY2FwdHVyZWRIYW5kbGVyKQotICAgICAgICAgICAgY2FwdHVyZWRIYW5kbGVyKGVycm9y
ID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gd3JhcHBlcihhdHRhY2htZW50KTsKLSNlbHNlCisgICAgaWYgKGF1dG8qIGZyYW1lID0g
X3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gZnJhbWUtPnVybCgpOwogICAgIHJl
dHVybiBuaWw7Ci0jZW5kaWYKIH0KIAotLSAoX1dLQXR0YWNobWVudCAqKV9hdHRhY2htZW50Rm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCistICh2b2lkKV9sb2FkQWx0ZXJuYXRl
SFRNTFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIGZv
clVucmVhY2hhYmxlVVJMOihOU1VSTCAqKXVucmVhY2hhYmxlVVJMCiB7Ci0jaWYgRU5BQkxFKEFU
VEFDSE1FTlRfRUxFTUVOVCkKLSAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gX3BhZ2UtPmF0dGFj
aG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gd3JhcHBlcihh
dHRhY2htZW50KTsKLSNlbmRpZgotICAgIHJldHVybiBuaWw7CisgICAgTlNEYXRhICpkYXRhID0g
W3N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgX3Bh
Z2UtPmxvYWRBbHRlcm5hdGVIVE1MKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEu
Ynl0ZXMpLCBkYXRhLmxlbmd0aCB9LCAiVVRGLTgiX3MsIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJM
KTsKIH0KIAotLSAodm9pZClfc2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZVdpdGhBbHBo
YTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhIGdhbW1hOihkb3VibGUpZ2FtbWEKKy0g
KFdLTmF2aWdhdGlvbiAqKV9sb2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJp
bmcgKilNSU1FVHlwZSBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopY2hhcmFjdGVy
RW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyRGF0YTooaWQpdXNlckRh
dGEKIHsKLSAgICBfcGFnZS0+c2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShhbHBoYSwg
YmV0YSwgZ2FtbWEpOworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5sb2FkRGF0YSh7IHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwgTUlNRVR5
cGUsIGNoYXJhY3RlckVuY29kaW5nTmFtZSwgYmFzZVVSTC5hYnNvbHV0ZVN0cmluZywgV2ViS2l0
OjpPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSkucHRyKCkpKTsKIH0KIAotKyAoQk9P
TClfaGFuZGxlc1NhZmVCcm93c2luZworLSAoV0tOYXZpZ2F0aW9uICopX2xvYWRSZXF1ZXN0OihO
U1VSTFJlcXVlc3QgKilyZXF1ZXN0IHNob3VsZE9wZW5FeHRlcm5hbFVSTHM6KEJPT0wpc2hvdWxk
T3BlbkV4dGVybmFsVVJMcwogewotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB3cmFwcGVy
KF9wYWdlLT5sb2FkUmVxdWVzdChyZXF1ZXN0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzID8gV2Vi
Q29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cgOiBXZWJDb3Jl
OjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdykpOwogfQogCi0t
ICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRs
ZSB3YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5n
ICopZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFu
ZGxlcgorLSAoTlNBcnJheSAqKV9jZXJ0aWZpY2F0ZUNoYWluCiB7Ci0gICAgLy8gRklYTUU6IEFk
b3B0IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkwgYW5kIHJlbW92ZSB0aGlzIGZ1bmN0
aW9uLgotICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6bmlsIHRpdGxl
OnRpdGxlIHdhcm5pbmc6d2FybmluZyBkZXRhaWxzOmRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6
Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGlmIChXZWJLaXQ6OldlYkZyYW1lUHJveHkqIG1haW5G
cmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+Y2Vy
dGlmaWNhdGVJbmZvKCkgPyAoX19icmlkZ2UgTlNBcnJheSAqKW1haW5GcmFtZS0+Y2VydGlmaWNh
dGVJbmZvKCktPmNlcnRpZmljYXRlSW5mbygpLmNlcnRpZmljYXRlQ2hhaW4oKSA6IG5pbDsKKwor
ICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0
aFVSTDooTlNVUkwgKil1cmwgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJp
bmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKE5TVVJMICop
X2NvbW1pdHRlZFVSTAogewotICAgIGF1dG8gc2FmZUJyb3dzaW5nV2FybmluZyA9IFdlYktpdDo6
U2FmZUJyb3dzaW5nV2FybmluZzo6Y3JlYXRlKHVybCwgdGl0bGUsIHdhcm5pbmcsIGRldGFpbHMp
OwotICAgIGF1dG8gd3JhcHBlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uSGFuZGxlcildIChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBV
Ukw+JiYgdmFyaWFudCkgewotICAgICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKFdlYktpdDo6
Q29udGludWVVbnNhZmVMb2FkIGNvbnRpbnVlVW5zYWZlTG9hZCkgewotICAgICAgICAgICAgc3dp
dGNoIChjb250aW51ZVVuc2FmZUxvYWQpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250
aW51ZVVuc2FmZUxvYWQ6OlllczoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoWUVTKTsKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6
Ok5vOgotICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOTyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0sIFsmXSAoVVJMKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKLSAgICAgICAg
fSk7Ci0gICAgfTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgX2ltcGwtPnNob3dTYWZlQnJvd3Np
bmdXYXJuaW5nKHNhZmVCcm93c2luZ1dhcm5pbmcsIFdURk1vdmUod3JhcHBlcikpOwotI2Vsc2UK
LSAgICBbc2VsZiBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6c2FmZUJyb3dzaW5nV2FybmluZyBj
b21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKHdyYXBwZXIpXTsKLSNlbmRpZgorICAgIHJldHVybiBb
TlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCld
OwogfQogCi0rIChOU1VSTCAqKV9jb25maXJtTWFsd2FyZVNlbnRpbmVsCistIChOU1N0cmluZyAq
KV9NSU1FVHlwZQogewotICAgIHJldHVybiBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNv
bmZpcm1NYWx3YXJlU2VudGluZWwoKTsKKyAgICBpZiAoX3BhZ2UtPm1haW5GcmFtZSgpKQorICAg
ICAgICByZXR1cm4gX3BhZ2UtPm1haW5GcmFtZSgpLT5taW1lVHlwZSgpOworCisgICAgcmV0dXJu
IG5pbDsKIH0KIAotKyAoTlNVUkwgKilfdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwKKy0gKE5T
U3RyaW5nICopX3VzZXJBZ2VudAogewotICAgIHJldHVybiBXZWJLaXQ6OlNhZmVCcm93c2luZ1dh
cm5pbmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCk7CisgICAgcmV0dXJuIF9wYWdlLT51
c2VyQWdlbnQoKTsKIH0KIAotLSAodm9pZClfaXNKSVRFbmFibGVkOih2b2lkKF4pKEJPT0wpKWNv
bXBsZXRpb25IYW5kbGVyCistIChOU1N0cmluZyAqKV9hcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQKIHsKLSAgICBfcGFnZS0+aXNKSVRFbmFibGVkKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChib29sIGVuYWJsZWQpIHsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoZW5hYmxlZCk7Ci0gICAgfSk7CisgICAgcmV0dXJuIF9wYWdlLT5hcHBs
aWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoKTsKIH0KIAotLSAodm9pZClfZXZhbHVhdGVKYXZhU2Ny
aXB0V2l0aG91dFVzZXJHZXN0dXJlOihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlkLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCist
ICh2b2lkKV9zZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQ6KE5TU3RyaW5nICopYXBwbGlj
YXRpb25OYW1lRm9yVXNlckFnZW50CiB7Ci0gICAgW3NlbGYgX2V2YWx1YXRlSmF2YVNjcmlwdDpq
YXZhU2NyaXB0U3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6Tk8gY29tcGxldGlvbkhhbmRsZXI6Y29t
cGxldGlvbkhhbmRsZXJdOworICAgIF9wYWdlLT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKKyAgICBfcGFnZS0+c2V0QXBwbGljYXRp
b25OYW1lRm9yRGVza3RvcFVzZXJBZ2VudChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwog
fQogCi0tICh2b2lkKV91cGRhdGVXZWJzaXRlUG9saWNpZXM6KF9XS1dlYnNpdGVQb2xpY2llcyAq
KXdlYnNpdGVQb2xpY2llcworLSAoTlNTdHJpbmcgKilfY3VzdG9tVXNlckFnZW50CiB7Ci0gICAg
YXV0byBkYXRhID0gd2Vic2l0ZVBvbGljaWVzLndlYnBhZ2VQcmVmZXJlbmNlcy0+X3dlYnNpdGVQ
b2xpY2llcy0+ZGF0YSgpOwotICAgIGlmIChkYXRhLndlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
KQotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24g
Zm9ybWF0OkAiVXBkYXRpbmcgV0tXZWJzaXRlRGF0YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1
cmluZyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLiJdOwotICAgIF9wYWdlLT51cGRh
dGVXZWJzaXRlUG9saWNpZXMoV1RGTW92ZShkYXRhKSk7CisgICAgcmV0dXJuIHNlbGYuY3VzdG9t
VXNlckFnZW50OwogfQogCi0tIChCT09MKV9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uCistICh2b2lk
KV9zZXRDdXN0b21Vc2VyQWdlbnQ6KE5TU3RyaW5nICopY3VzdG9tVXNlckFnZW50CiB7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgcmV0dXJuIF9wYWdlLT5hbGxvd3NSZW1vdGVJ
bnNwZWN0aW9uKCk7Ci0jZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgorICAgIHNlbGYuY3Vz
dG9tVXNlckFnZW50ID0gY3VzdG9tVXNlckFnZW50OwogfQogCi0tICh2b2lkKV9zZXRBbGxvd3NS
ZW1vdGVJbnNwZWN0aW9uOihCT09MKWFsbG93CistICh2b2lkKV9zZXRVc2VyQ29udGVudEV4dGVu
c2lvbnNFbmFibGVkOihCT09MKXVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQKIHsKLSNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBfcGFnZS0+c2V0QWxsb3dzUmVtb3RlSW5zcGVj
dGlvbihhbGxvdyk7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21w
YXRpYmlsaXR5IHdpdGggaU9TIDkuCiB9CiAKLS0gKE5TU3RyaW5nICopX3JlbW90ZUluc3BlY3Rp
b25OYW1lT3ZlcnJpZGUKKy0gKEJPT0wpX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQKIHsK
LSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICByZXR1cm4gX3BhZ2UtPnJlbW90ZUlu
c3BlY3Rpb25OYW1lT3ZlcnJpZGUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG5pbDsKLSNlbmRpZgor
ICAgIC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4K
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLSAodm9pZClfc2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVP
dmVycmlkZTooTlNTdHJpbmcgKiluYW1lCistIChwaWRfdClfd2ViUHJvY2Vzc0lkZW50aWZpZXIK
IHsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBfcGFnZS0+c2V0UmVtb3RlSW5z
cGVjdGlvbk5hbWVPdmVycmlkZShuYW1lKTsKLSNlbmRpZgorICAgIGlmICghW3NlbGYgX2lzVmFs
aWRdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBfcGFnZS0+cHJvY2Vzc0lkZW50
aWZpZXIoKTsKIH0KIAotLSAoQk9PTClfYWRkc1Zpc2l0ZWRMaW5rcworLSAocGlkX3QpX3Byb3Zp
c2lvbmFsV2ViUHJvY2Vzc0lkZW50aWZpZXIKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmFkZHNWaXNp
dGVkTGlua3MoKTsKLX0KKyAgICBpZiAoIVtzZWxmIF9pc1ZhbGlkXSkKKyAgICAgICAgcmV0dXJu
IDA7CiAKLS0gKHZvaWQpX3NldEFkZHNWaXNpdGVkTGlua3M6KEJPT0wpYWRkc1Zpc2l0ZWRMaW5r
cwotewotICAgIF9wYWdlLT5zZXRBZGRzVmlzaXRlZExpbmtzKGFkZHNWaXNpdGVkTGlua3MpOwot
fQorICAgIGF1dG8qIHByb3Zpc2lvbmFsUGFnZSA9IF9wYWdlLT5wcm92aXNpb25hbFBhZ2VQcm94
eSgpOworICAgIGlmICghcHJvdmlzaW9uYWxQYWdlKQorICAgICAgICByZXR1cm4gMDsKIAotLSAo
Qk9PTClfbmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcwotewotICAgIHJldHVybiBfcGFnZS0+cGFn
ZUxvYWRTdGF0ZSgpLm5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoKTsKKyAgICByZXR1cm4gcHJv
dmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBsYXlvdXRNaWxlc3Rv
bmVzKF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzIGV2ZW50cykKKy0gKHZvaWQpX2tpbGxXZWJD
b250ZW50UHJvY2VzcwogewotICAgIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+
IG1pbGVzdG9uZXM7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dEZpcnN0TGF5b3V0KQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdExh
eW91dCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6
RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKLQotICAgIGlmIChldmVudHMgJiBfV0tS
ZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludFdpdGhTaWduaWZpY2FudEFyZWEpCi0gICAg
ICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEhpdFJlbGV2YW50UmVwYWludGVkT2JqZWN0
c0FyZWFUaHJlc2hvbGQpOwotCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNz
RXZlbnRSZWFjaGVkU2Vzc2lvblJlc3RvcmF0aW9uUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpCi0g
ICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OlJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25S
ZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5n
UHJvZ3Jlc3NFdmVudEZpcnN0TGF5b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJp
bmcpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TGF5b3V0QWZ0ZXJT
dXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpOwotCi0gICAgaWYgKGV2ZW50cyAmIF9XS1Jl
bmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxS
ZW5kZXJpbmcpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0UGFpbnRB
ZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZyk7Ci0KLSAgICBpZiAoZXZlbnRzICYg
X1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudERpZFJlbmRlclNpZ25pZmljYW50QW1vdW50T2ZUZXh0
KQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRSZW5kZXJTaWduaWZpY2FudEFt
b3VudE9mVGV4dCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dEZpcnN0TWVhbmluZ2Z1bFBhaW50KQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpE
aWRGaXJzdE1lYW5pbmdmdWxQYWludCk7CisgICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCisgICAg
ICAgIHJldHVybjsKIAotICAgIHJldHVybiBtaWxlc3RvbmVzOworICAgIF9wYWdlLT5wcm9jZXNz
KCkudGVybWluYXRlKCk7CiB9CiAKLS0gKHZvaWQpX3NldE9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jl
c3NFdmVudHM6KF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKW9ic2VydmVkUmVuZGVyaW5nUHJv
Z3Jlc3NFdmVudHMKKyNpZiBQTEFURk9STShNQUMpCistIChOU1ZpZXcgKilfc2FmZUJyb3dzaW5n
V2FybmluZwogewotICAgIF9vYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzID0gb2JzZXJ2
ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czsKLSAgICBfcGFnZS0+bGlzdGVuRm9yTGF5b3V0TWls
ZXN0b25lcyhsYXlvdXRNaWxlc3RvbmVzKG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMp
KTsKKyAgICByZXR1cm4gX2ltcGwtPnNhZmVCcm93c2luZ1dhcm5pbmcoKTsKIH0KLQotLSAodm9p
ZClfZ2V0TWFpblJlc291cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNE
YXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKyNlbHNlCistIChVSVZpZXcgKilf
c2FmZUJyb3dzaW5nV2FybmluZwogewotICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldKTsKKyAgICByZXR1cm4gX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0
KCk7Cit9CisjZW5kaWYKIAotICAgIF9wYWdlLT5nZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShf
cGFnZS0+bWFpbkZyYW1lKCksIFtoYW5kbGVyXShBUEk6OkRhdGEqIGRhdGEsIFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRs
ZXJCbG9jaykoTlNEYXRhICosIE5TRXJyb3IgKikgPSAodm9pZCAoXikoTlNEYXRhICosIE5TRXJy
b3IgKikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2FsbGJh
Y2tCYXNlOjpFcnJvcjo6Tm9uZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFBpcGUgYSBwcm9w
ZXIgZXJyb3IgaW4gZnJvbSB0aGUgV2ViUGFnZVByb3h5LgotICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXJCbG9jayhuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWlu
IGNvZGU6c3RhdGljX2Nhc3Q8aW50PihlcnJvcikgdXNlckluZm86bmlsXSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayh3cmFwcGVyKCpkYXRhKSwg
bmlsKTsKLSAgICB9KTsKKy0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJs
b2NrZXJzCit7CisgICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxv
YWRPcHRpb246OkRpc2FibGVDb250ZW50QmxvY2tlcnMpKTsKIH0KIAotLSAodm9pZClfZ2V0V2Vi
QXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vy
cm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistIChXS05hdmlnYXRpb24gKilfcmVsb2FkRXhwaXJl
ZE9ubHkKIHsKLSAgICBbc2VsZiBjcmVhdGVXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFu
ZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJlbG9h
ZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KSk7CiB9CiAKLS0gKHZvaWQpX2dl
dENvbnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5n
ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX2tpbGxXZWJDb250ZW50
UHJvY2Vzc0FuZFJlc2V0U3RhdGUKIHsKLSAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbkhhbmRsZXIpOworICAgIFJlZjxXZWJLaXQ6OldlYlByb2Nlc3NQcm94eT4gcHJv
dGVjdGVkUHJvY2Vzc1Byb3h5KF9wYWdlLT5wcm9jZXNzKCkpOworICAgIHByb3RlY3RlZFByb2Nl
c3NQcm94eS0+cmVxdWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1pbmF0aW9uUmVh
c29uOjpSZXF1ZXN0ZWRCeUNsaWVudCk7CiAKLSAgICBfcGFnZS0+Z2V0Q29udGVudHNBc1N0cmlu
ZyhbaGFuZGxlcl0oU3RyaW5nIHN0cmluZywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yKSB7Ci0gICAgICAgIGlmIChlcnJvciAhPSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6
Ok5vbmUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBQaXBlIGEgcHJvcGVyIGVycm9yIGluIGZy
b20gdGhlIFdlYlBhZ2VQcm94eS4KLSAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBl
cnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3Ip
IHVzZXJJbmZvOm5pbF0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhhbmRsZXIoc3Ry
aW5nLCBuaWwpOwotICAgIH0pOworICAgIGlmIChhdXRvKiBwcm92aXNpb25hbFBhZ2VQcm94eSA9
IF9wYWdlLT5wcm92aXNpb25hbFBhZ2VQcm94eSgpKSB7CisgICAgICAgIFJlZjxXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eT4gcHJvdGVjdGVkUHJvY2Vzc1Byb3h5KHByb3Zpc2lvbmFsUGFnZVByb3h5
LT5wcm9jZXNzKCkpOworICAgICAgICBwcm90ZWN0ZWRQcm9jZXNzUHJveHktPnJlcXVlc3RUZXJt
aW5hdGlvbihXZWJLaXQ6OlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVkQnlDbGll
bnQpOworICAgIH0KIH0KIAotLSAodm9pZClfZ2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmdX
aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXR0cmlidXRlZFN0cmluZyAqLCBOU0Rp
Y3Rpb25hcnk8TlNBdHRyaWJ1dGVkU3RyaW5nRG9jdW1lbnRBdHRyaWJ1dGVLZXksIGlkPiAqLCBO
U0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistIChDR1JlY3QpX2NvbnZlcnRSZWN0RnJvbVJv
b3RWaWV3Q29vcmRpbmF0ZXM6KENHUmVjdClyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzCiB7Ci0g
ICAgX3BhZ2UtPmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKFtoYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgYXR0cmlidXRlZFN0cmluZykgewotICAg
ICAgICBpZiAoYXR0cmlidXRlZFN0cmluZy5zdHJpbmcpCi0gICAgICAgICAgICBoYW5kbGVyKFtb
YXR0cmlidXRlZFN0cmluZy5zdHJpbmcuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV0sIFtbYXR0
cmlidXRlZFN0cmluZy5kb2N1bWVudEF0dHJpYnV0ZXMuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFz
ZV0sIG5pbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRsZXIobmlsLCBuaWwsIGNy
ZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pLmdldCgpKTsKLSAgICB9KTsKKyAgICAvLyBGSVhN
RTogSXQgc2hvdWxkIGJlIGVhc2llciB0byB0YWxrIGFib3V0IFdLV2ViVmlldyBjb29yZGluYXRl
cyBpbiBhIGNvbnNpc3RlbnQgYW5kIGNyb3NzLXBsYXRmb3JtIHdheS4KKyAgICAvLyBDdXJyZW50
bHksIG5laXRoZXIgInJvb3QgdmlldyIgbm9yICJ3aW5kb3ciIG1lYW4gIldLV2ViVmlldyBjb29y
ZGluYXRlcyIgb24gYm90aCBwbGF0Zm9ybXMuCisgICAgLy8gU2VlIGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE5MzY0OSBhbmQgcmVsYXRlZCBidWdzLgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgZnJv
bVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyNlbHNlCisgICAgcmV0dXJuIHJlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXM7CisjZW5kaWYKIH0KIAotLSAodm9pZClfZ2V0QXBwbGljYXRpb25NYW5p
ZmVzdFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXBwbGljYXRpb25NYW5pZmVz
dCAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAoQ0dSZWN0KV9jb252ZXJ0UmVjdFRvUm9vdFZpZXdD
b29yZGluYXRlczooQ0dSZWN0KXJlY3RJbldlYlZpZXdDb29yZGluYXRlcwogewotI2lmIEVOQUJM
RShBUFBMSUNBVElPTl9NQU5JRkVTVCkKLSAgICBfcGFnZS0+Z2V0QXBwbGljYXRpb25NYW5pZmVz
dChbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShj
b25zdCBPcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0PiYgbWFuaWZlc3QsIFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBVTlVTRURfUEFSQU0o
ZXJyb3IpOwotICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIGlm
IChtYW5pZmVzdCkgewotICAgICAgICAgICAgICAgIGF1dG8gYXBpTWFuaWZlc3QgPSBBUEk6OkFw
cGxpY2F0aW9uTWFuaWZlc3Q6OmNyZWF0ZSgqbWFuaWZlc3QpOwotICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHdyYXBwZXIoYXBpTWFuaWZlc3QpKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0gICAgICAgIH0KLSAg
ICB9KTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHJldHVybiBbc2VsZiBjb252ZXJ0
UmVjdDpyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07
CiAjZWxzZQotICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobmlsKTsKKyAgICByZXR1cm4gcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzOwogI2VuZGlm
CiB9CiAKLS0gKF9XS1BhZ2luYXRpb25Nb2RlKV9wYWdpbmF0aW9uTW9kZQorLSAodm9pZClfcmVx
dWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdEluV2ViVmlld0Nvb3JkaW5h
dGVzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4
dCAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHN3aXRjaCAoX3BhZ2UtPnBhZ2luYXRp
b25Nb2RlKCkpIHsKLSAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOgot
ICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDsKLSAgICBjYXNlIFdl
YkNvcmU6OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOgotICAgICAgICByZXR1cm4g
X1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDsKLSAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRp
b246OlJpZ2h0VG9MZWZ0UGFnaW5hdGVkOgotICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1v
ZGVSaWdodFRvTGVmdDsKLSAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlRvcFRvQm90dG9t
UGFnaW5hdGVkOgotICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbTsK
LSAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOgotICAg
ICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDsKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEBbXSk7CisgICAgICAgIHJldHVybjsKICAgICB9Cisj
ZW5kaWYKIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBfV0tQYWdpbmF0
aW9uTW9kZVVucGFnaW5hdGVkOworICAgIENHUmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
ID0gW3NlbGYgX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nvb3JkaW5hdGVzOnJlY3RJbldlYlZpZXdD
b29yZGluYXRlc107CisgICAgYXV0byB3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4o
c2VsZik7CisgICAgX3BhZ2UtPnRleHRJbnB1dENvbnRleHRzSW5SZWN0KHJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMsIFt3ZWFrU2VsZiwgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6RWxlbWVu
dENvbnRleHQ+JiBjb250ZXh0cykgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IGVsZW1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmNvbnRleHRzLnNpemUoKV0pOworCisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtT
ZWxmLmdldCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBjb250ZXh0cykg
eworICAgICAgICAgICAgV2ViQ29yZTo6RWxlbWVudENvbnRleHQgY29udGV4dFdpdGhXZWJWaWV3
Qm91bmRpbmdSZWN0ID0gY29udGV4dDsKKyAgICAgICAgICAgIGNvbnRleHRXaXRoV2ViVmlld0Jv
dW5kaW5nUmVjdC5ib3VuZGluZ1JlY3QgPSBbc3Ryb25nU2VsZiBfY29udmVydFJlY3RGcm9tUm9v
dFZpZXdDb29yZGluYXRlczpjb250ZXh0LmJvdW5kaW5nUmVjdF07CisgICAgICAgICAgICBbZWxl
bWVudHMgYWRkT2JqZWN0OmFkb3B0TlMoW1tfV0tUZXh0SW5wdXRDb250ZXh0IGFsbG9jXSBfaW5p
dFdpdGhUZXh0SW5wdXRDb250ZXh0OmNvbnRleHRXaXRoV2ViVmlld0JvdW5kaW5nUmVjdF0pLmdl
dCgpXTsKKyAgICAgICAgfQorCisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoZWxl
bWVudHMuZ2V0KCkpOworICAgIH0pOwogfQogCi0tICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZToo
X1dLUGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlvbk1vZGUKKy0gKHZvaWQpX2ZvY3VzVGV4dElucHV0
Q29udGV4dDooX1dLVGV4dElucHV0Q29udGV4dCAqKXRleHRJbnB1dENvbnRleHQgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBXZWJDb3Jl
OjpQYWdpbmF0aW9uOjpNb2RlIG1vZGU7Ci0gICAgc3dpdGNoIChwYWdpbmF0aW9uTW9kZSkgewot
ICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDoKLSAgICAgICAgbW9kZSA9IFdl
YkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IF9XS1BhZ2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ6Ci0gICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQ
YWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBfV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OgotICAgICAgICBtb2RlID0gV2ViQ29yZTo6
UGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgX1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbToKLSAgICAgICAgbW9kZSA9IFdlYkNvcmU6
OlBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6Ci0gICAgICAgIG1vZGUgPSBXZWJDb3Jl
OjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICghW3NlbGYgdXNlc1N0
YW5kYXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogCi0gICAgX3BhZ2UtPnNldFBhZ2luYXRpb25N
b2RlKG1vZGUpOworICAgIGF1dG8gd2ViQ29udGV4dCA9IFt0ZXh0SW5wdXRDb250ZXh0IF90ZXh0
SW5wdXRDb250ZXh0XTsKKyAgICBpZiAod2ViQ29udGV4dC53ZWJQYWdlSWRlbnRpZmllciAhPSBf
cGFnZS0+d2ViUGFnZUlEKCkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRB
cmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJUaGUgcHJvdmlkZWQgX1dLVGV4dElucHV0Q29udGV4
dCB3YXMgbm90IGNyZWF0ZWQgYnkgdGhpcyBXS1dlYlZpZXcuIl07CisKKyAgICBbc2VsZiBiZWNv
bWVGaXJzdFJlc3BvbmRlcl07CisKKyAgICBfcGFnZS0+Zm9jdXNUZXh0SW5wdXRDb250ZXh0KHdl
YkNvbnRleHQsIFtjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlv
bkhhbmRsZXIoc3VjY2Vzcyk7CisgICAgfSk7CiB9CiAKLS0gKEJPT0wpX3BhZ2luYXRpb25CZWhh
dmVzTGlrZUNvbHVtbnMKKy0gKHZvaWQpX3Rha2VQREZTbmFwc2hvdFdpdGhDb25maWd1cmF0aW9u
OihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXIKIHsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoKTsK
KyAgICBXS1BERkNvbmZpZ3VyYXRpb24gKnBkZkNvbmZpZ3VyYXRpb24gPSBuaWw7CisgICAgaWYg
KHNuYXBzaG90Q29uZmlndXJhdGlvbikgeworICAgICAgICBwZGZDb25maWd1cmF0aW9uID0gW1tb
V0tQREZDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIHBk
ZkNvbmZpZ3VyYXRpb24ucmVjdCA9IHNuYXBzaG90Q29uZmlndXJhdGlvbi5yZWN0OworICAgIH0K
KworICAgIFtzZWxmIGNyZWF0ZVBERldpdGhDb25maWd1cmF0aW9uOnBkZkNvbmZpZ3VyYXRpb24g
Y29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCi0tICh2b2lkKV9zZXRQ
YWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zOihCT09MKWJlaGF2ZXNMaWtlQ29sdW1ucworI2lm
IFBMQVRGT1JNKE1BQykKKy0gKHZvaWQpX3NldFNob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJD
aGFuZ2VzOihCT09MKXNob3VsZFN1cHByZXNzCiB7Ci0gICAgX3BhZ2UtPnNldFBhZ2luYXRpb25C
ZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKTsKKyAgICBfaW1wbC0+c2V0U2hv
dWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMoc2hvdWxkU3VwcHJlc3MpOwogfQorI2Vu
ZGlmCiAKLS0gKENHRmxvYXQpX3BhZ2VMZW5ndGgKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
LSAodm9pZCAoXikodm9pZCkpX3JldGFpbkFjdGl2ZUZvY3VzZWRTdGF0ZQogewotICAgIHJldHVy
biBfcGFnZS0+cGFnZUxlbmd0aCgpOworICAgICsrX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNv
dW50OworCisgICAgLy8gRklYTUU6IFVzZSBzb21ldGhpbmcgbGlrZSBDb21wbGV0aW9uSGFuZGxl
ckNhbGxDaGVja2VyIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBibG9jayBpcyBjYWxsZWQg
YmVmb3JlIGl0J3MgcmVsZWFzZWQuCisgICAgcmV0dXJuIFtbW3NlbGZdIHsKKyAgICAgICAgLS1f
YWN0aXZlRm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7CisgICAgfSBjb3B5XSBhdXRvcmVsZWFzZV07
CiB9CiAKLS0gKHZvaWQpX3NldFBhZ2VMZW5ndGg6KENHRmxvYXQpcGFnZUxlbmd0aAorLSAodm9p
ZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDooQk9PTClz
ZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIGRpZEJlY29t
ZUZpcnN0UmVzcG9uZGVyKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIF9wYWdlLT5zZXRQYWdl
TGVuZ3RoKHBhZ2VMZW5ndGgpOworICAgIHR5cGVvZihjb21wbGV0aW9uSGFuZGxlcikgY29tcGxl
dGlvbkhhbmRsZXJDb3B5ID0gbmlsOworICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gQmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7
CisKKyAgICBbX2NvbnRlbnRWaWV3IF9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25N
b3ZpbmdGb3J3YXJkOnNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6W2NvbXBsZXRp
b25IYW5kbGVyQ29weV0oQk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcikgeworICAgICAgICBp
ZiAoIWNvbXBsZXRpb25IYW5kbGVyQ29weSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlckNvcHkoZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpOworICAgICAg
ICBCbG9ja19yZWxlYXNlKGNvbXBsZXRpb25IYW5kbGVyQ29weSk7CisgICAgfV07CiB9CiAKLS0g
KENHRmxvYXQpX2dhcEJldHdlZW5QYWdlcworLSAoaWQpX3NuYXBzaG90TGF5ZXJDb250ZW50c0Zv
ckJhY2tGb3J3YXJkTGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0KIHsKLSAg
ICByZXR1cm4gX3BhZ2UtPmdhcEJldHdlZW5QYWdlcygpOworICAgIGlmIChfcGFnZS0+YmFja0Zv
cndhcmRMaXN0KCkuY3VycmVudEl0ZW0oKSA9PSAmaXRlbS5faXRlbSkKKyAgICAgICAgX3BhZ2Ut
PnJlY29yZE5hdmlnYXRpb25TbmFwc2hvdCgqX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJl
bnRJdGVtKCkpOworCisgICAgaWYgKGF1dG8qIHZpZXdTbmFwc2hvdCA9IGl0ZW0uX2l0ZW0uc25h
cHNob3QoKSkKKyAgICAgICAgcmV0dXJuIHZpZXdTbmFwc2hvdC0+YXNMYXllckNvbnRlbnRzKCk7
CisKKyAgICByZXR1cm4gbmlsOwogfQogCi0tICh2b2lkKV9zZXRHYXBCZXR3ZWVuUGFnZXM6KENH
RmxvYXQpZ2FwQmV0d2VlblBhZ2VzCistIChOU0FycmF5ICopX2RhdGFEZXRlY3Rpb25SZXN1bHRz
CiB7Ci0gICAgX3BhZ2UtPnNldEdhcEJldHdlZW5QYWdlcyhnYXBCZXR3ZWVuUGFnZXMpOworI2lm
IEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBfZGF0YURl
dGVjdGlvblJlc3VsdHNdOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKLS0g
KEJPT0wpX3BhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlS
ZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudAogewotICAgIHJldHVybiBfcGFnZS0+cGFnaW5h
dGlvbkxpbmVHcmlkRW5hYmxlZCgpOworICAgIFtfY29udGVudFZpZXcgYWNjZXNzaWJpbGl0eVJl
dHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50XTsKIH0KIAotLSAodm9pZClfc2V0UGFnaW5hdGlv
bkxpbmVHcmlkRW5hYmxlZDooQk9PTClsaW5lR3JpZEVuYWJsZWQKKy8vIFRoaXMgbWV0aG9kIGlz
IGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorLy8gQ3VycmVudGx5IGl0J3Mgb25seSBpbiBU
ZXN0UnVubmVyV0tXZWJWaWV3LgorLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2Vs
ZWN0aW9uQ29udGVudDooTlNTdHJpbmcgKiljb250ZW50CiB7Ci0gICAgX3BhZ2UtPnNldFBhZ2lu
YXRpb25MaW5lR3JpZEVuYWJsZWQobGluZUdyaWRFbmFibGVkKTsKIH0KIAotLSAoTlNVSW50ZWdl
cilfcGFnZUNvdW50CistIChVSVRleHRJbnB1dEFzc2lzdGFudEl0ZW0gKilpbnB1dEFzc2lzdGFu
dEl0ZW0KIHsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2VDb3VudCgpOworICAgIHJldHVybiBbX2Nv
bnRlbnRWaWV3IGlucHV0QXNzaXN0YW50SXRlbUZvcldlYlZpZXddOwogfQogCi0tIChCT09MKV9z
dXBwb3J0c1RleHRab29tCisjZW5kaWYKKworLSAoTlNEYXRhICopX3Nlc3Npb25TdGF0ZURhdGEK
IHsKLSAgICByZXR1cm4gX3BhZ2UtPnN1cHBvcnRzVGV4dFpvb20oKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVnYWN5IHNlc3Npb24gc3RhdGUgZW5jb2Rlci4KKyAg
ICByZXR1cm4gd3JhcHBlcihXZWJLaXQ6OmVuY29kZUxlZ2FjeVNlc3Npb25TdGF0ZShfcGFnZS0+
c2Vzc2lvblN0YXRlKCkpKTsKIH0KIAotLSAoZG91YmxlKV90ZXh0Wm9vbUZhY3RvcgorLSAoX1dL
U2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZQogewotICAgIHJldHVybiBfcGFnZS0+dGV4dFpv
b21GYWN0b3IoKTsKKyAgICByZXR1cm4gW1tbX1dLU2Vzc2lvblN0YXRlIGFsbG9jXSBfaW5pdFdp
dGhTZXNzaW9uU3RhdGU6X3BhZ2UtPnNlc3Npb25TdGF0ZSgpXSBhdXRvcmVsZWFzZV07CiB9CiAK
LS0gKHZvaWQpX3NldFRleHRab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3RvcgorLSAoX1dLU2Vz
c2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZVdpdGhGaWx0ZXI6KEJPT0wgKF4pKFdLQmFja0Zvcndh
cmRMaXN0SXRlbSAqaXRlbSkpZmlsdGVyCiB7Ci0gICAgX3BhZ2UtPnNldFRleHRab29tRmFjdG9y
KHpvb21GYWN0b3IpOworICAgIFdlYktpdDo6U2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSA9IF9w
YWdlLT5zZXNzaW9uU3RhdGUoW2ZpbHRlcl0oV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVt
JiBpdGVtKSB7CisgICAgICAgIGlmICghZmlsdGVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgcmV0dXJuIChib29sKWZpbHRlcih3cmFwcGVyKGl0ZW0pKTsKKyAgICB9KTsK
KworICAgIHJldHVybiBbW1tfV0tTZXNzaW9uU3RhdGUgYWxsb2NdIF9pbml0V2l0aFNlc3Npb25T
dGF0ZTpzZXNzaW9uU3RhdGVdIGF1dG9yZWxlYXNlXTsKIH0KIAotLSAodm9pZClzZXRQYWdlWm9v
bTooQ0dGbG9hdClwYWdlWm9vbQorLSAodm9pZClfcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRh
OihOU0RhdGEgKilzZXNzaW9uU3RhdGVEYXRhCiB7Ci0gICAgX3BhZ2UtPnNldFBhZ2Vab29tRmFj
dG9yKHBhZ2Vab29tKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVn
YWN5IHNlc3Npb24gc3RhdGUgZGVjb2Rlci4KKyAgICBXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzZXNz
aW9uU3RhdGU7CisgICAgaWYgKCFXZWJLaXQ6OmRlY29kZUxlZ2FjeVNlc3Npb25TdGF0ZShzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc2Vzc2lvblN0YXRlRGF0YS5ieXRlcyksIHNlc3Npb25T
dGF0ZURhdGEubGVuZ3RoLCBzZXNzaW9uU3RhdGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBf
cGFnZS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV1RGTW92ZShzZXNzaW9uU3RhdGUpLCB0cnVl
KTsKIH0KIAotLSAoQ0dGbG9hdClwYWdlWm9vbQorLSAoV0tOYXZpZ2F0aW9uICopX3Jlc3RvcmVT
ZXNzaW9uU3RhdGU6KF9XS1Nlc3Npb25TdGF0ZSAqKXNlc3Npb25TdGF0ZSBhbmROYXZpZ2F0ZToo
Qk9PTCluYXZpZ2F0ZQogewotICAgIHJldHVybiBfcGFnZS0+cGFnZVpvb21GYWN0b3IoKTsKKyAg
ICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoc2Vzc2lvblN0
YXRlID8gc2Vzc2lvblN0YXRlLT5fc2Vzc2lvblN0YXRlIDogV2ViS2l0OjpTZXNzaW9uU3RhdGUg
eyB9LCBuYXZpZ2F0ZSkpOwogfQogCi0tIChkb3VibGUpX3BhZ2Vab29tRmFjdG9yCistICh2b2lk
KV9jbG9zZQogewotICAgIHJldHVybiBbc2VsZiBwYWdlWm9vbV07CisgICAgX3BhZ2UtPmNsb3Nl
KCk7CiB9CiAKLS0gKHZvaWQpX3NldFBhZ2Vab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3Rvcgor
LSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOihOU1N0cmlu
ZyAqKWZpbGVuYW1lIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBlIGRhdGE6KE5T
RGF0YSAqKWRhdGEgb3B0aW9uczooX1dLQXR0YWNobWVudERpc3BsYXlPcHRpb25zICopb3B0aW9u
cyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBbc2VsZiBzZXRQYWdlWm9vbTp6b29tRmFjdG9yXTsKKyAgICBVTlVTRURfUEFSQU0ob3B0
aW9ucyk7CisgICAgYXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFs
bG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0pOworICAgIGlmIChmaWxlbmFt
ZSkKKyAgICAgICAgW2ZpbGVXcmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsK
KyAgICByZXR1cm4gW3NlbGYgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdy
YXBwZXIuZ2V0KCkgY29udGVudFR5cGU6Y29udGVudFR5cGUgY29tcGxldGlvbjpjb21wbGV0aW9u
SGFuZGxlcl07CiB9CiAKLS0gKGlkIDxfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlPilfZGlh
Z25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZQorLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2ht
ZW50V2l0aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5
cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUgb3B0aW9uczooX1dLQXR0YWNobWVudERpc3BsYXlP
cHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBhdXRvKiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9wYWdl
LT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOwotICAgIGlmICghZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOwor
ICAgIHJldHVybiBbc2VsZiBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3Jh
cHBlciBjb250ZW50VHlwZTpjb250ZW50VHlwZSBjb21wbGV0aW9uOmNvbXBsZXRpb25IYW5kbGVy
XTsKK30KIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5n
Q2xpZW50Jj4oKmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KS5kZWxlZ2F0ZSgpLmF1dG9yZWxlYXNl
KCk7CistIChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6
KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250
ZW50VHlwZSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIGF1dG8gaWRlbnRpZmll
ciA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBhdXRvIGF0dGFjaG1lbnQgPSBB
UEk6OkF0dGFjaG1lbnQ6OmNyZWF0ZShpZGVudGlmaWVyLCAqX3BhZ2UpOworICAgIGF0dGFjaG1l
bnQtPnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRl
bnRUeXBlKTsKKyAgICBfcGFnZS0+aW5zZXJ0QXR0YWNobWVudChhdHRhY2htZW50LmNvcHlSZWYo
KSwgW2NhcHR1cmVkSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVk
SGFuZGxlcikKKyAgICAgICAgICAgIGNhcHR1cmVkSGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgIH0pOworCisgICAgcmV0dXJuIHdyYXBwZXIo
YXR0YWNobWVudCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAotLSAodm9p
ZClfc2V0RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTooaWQ8X1dLRGlhZ25vc3RpY0xvZ2dpbmdE
ZWxlZ2F0ZT4pZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZQorLSAoX1dLQXR0YWNobWVudCAqKV9h
dHRhY2htZW50Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgYXV0
byogZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQoKTsKLSAgICBpZiAoIWRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KQotICAgICAgICByZXR1cm47
CisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICBpZiAoYXV0byBhdHRhY2htZW50
ID0gX3BhZ2UtPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQorICAgICAgICBy
ZXR1cm4gd3JhcHBlcihhdHRhY2htZW50KTsKKyNlbmRpZgorICAgIHJldHVybiBuaWw7Cit9CiAK
LSAgICBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Jj4oKmRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50KS5zZXREZWxlZ2F0ZShkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRl
KTsKKy0gKHZvaWQpX3NpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2VXaXRoQWxwaGE6KGRv
dWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YSBnYW1tYTooZG91YmxlKWdhbW1hCit7CisgICAg
X3BhZ2UtPnNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1h
KTsKIH0KIAotLSAoaWQgPF9XS0ZpbmREZWxlZ2F0ZT4pX2ZpbmREZWxlZ2F0ZQorKyAoQk9PTClf
aGFuZGxlc1NhZmVCcm93c2luZwogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZp
bmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gKHZvaWQpX3NldEZpbmREZWxlZ2F0ZTooaWQ8X1dL
RmluZERlbGVnYXRlPilmaW5kRGVsZWdhdGUKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJu
aW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2Fybmlu
ZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgc3RhdGljX2Nhc3Q8V2Vi
S2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQoKSkuc2V0RGVsZWdhdGUoZmluZERl
bGVnYXRlKTsKKyAgICAvLyBGSVhNRTogQWRvcHQgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0
aFVSTCBhbmQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24uCisgICAgW3NlbGYgX3Nob3dTYWZlQnJvd3Np
bmdXYXJuaW5nV2l0aFVSTDpuaWwgdGl0bGU6dGl0bGUgd2FybmluZzp3YXJuaW5nIGRldGFpbHM6
ZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLXN0YXRp
YyBpbmxpbmUgV2ViS2l0OjpGaW5kT3B0aW9ucyB0b0ZpbmRPcHRpb25zKF9XS0ZpbmRPcHRpb25z
IHdrRmluZE9wdGlvbnMpCistICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6
KE5TVVJMICopdXJsIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICop
d2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgdW5zaWduZWQg
ZmluZE9wdGlvbnMgPSAwOworICAgIGF1dG8gc2FmZUJyb3dzaW5nV2FybmluZyA9IFdlYktpdDo6
U2FmZUJyb3dzaW5nV2FybmluZzo6Y3JlYXRlKHVybCwgdGl0bGUsIHdhcm5pbmcsIGRldGFpbHMp
OworICAgIGF1dG8gd3JhcHBlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uSGFuZGxlcildIChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBV
Ukw+JiYgdmFyaWFudCkgeworICAgICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKFdlYktpdDo6
Q29udGludWVVbnNhZmVMb2FkIGNvbnRpbnVlVW5zYWZlTG9hZCkgeworICAgICAgICAgICAgc3dp
dGNoIChjb250aW51ZVVuc2FmZUxvYWQpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250
aW51ZVVuc2FmZUxvYWQ6OlllczoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoWUVTKTsKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6
Ok5vOgorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOTyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sIFsmXSAoVVJMKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgX2ltcGwtPnNob3dTYWZlQnJvd3Np
bmdXYXJuaW5nKHNhZmVCcm93c2luZ1dhcm5pbmcsIFdURk1vdmUod3JhcHBlcikpOworI2Vsc2UK
KyAgICBbc2VsZiBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6c2FmZUJyb3dzaW5nV2FybmluZyBj
b21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKHdyYXBwZXIpXTsKKyNlbmRpZgorfQogCi0gICAgaWYg
KHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkKLSAgICAgICAg
ZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKLSAgICBp
ZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQXRXb3JkU3RhcnRzKQotICAgICAgICBm
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzOwotICAgIGlmICh3
a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFy
dCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1RyZWF0TWVkaWFs
Q2FwaXRhbEFzV29yZFN0YXJ0OwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlv
bnNCYWNrd2FyZHMpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNC
YWNrd2FyZHM7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1dyYXBBcm91
bmQpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNXcmFwQXJvdW5k
OwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSkKLSAg
ICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dPdmVybGF5OwotICAg
IGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcikKLSAg
ICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9y
OwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0KQot
ICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodDsK
LSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zTm9JbmRleENoYW5nZSkKLSAg
ICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc05vSW5kZXhDaGFuZ2U7Ci0g
ICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXgp
Ci0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNEZXRlcm1pbmVNYXRj
aEluZGV4OworKyAoTlNVUkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbAoreworICAgIHJldHVy
biBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKTsK
K30KIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRPcHRpb25zPihmaW5kT3B0
aW9ucyk7CisrIChOU1VSTCAqKV92aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbAoreworICAgIHJl
dHVybiBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRp
bmVsKCk7CiB9CiAKLS0gKHZvaWQpX2NvdW50U3RyaW5nTWF0Y2hlczooTlNTdHJpbmcgKilzdHJp
bmcgb3B0aW9uczooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdlcilt
YXhDb3VudAorLSAodm9pZClfaXNKSVRFbmFibGVkOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25I
YW5kbGVyCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoX2N1c3RvbUNvbnRl
bnRWaWV3KSB7Ci0gICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2NvdW50U3RyaW5nTWF0
Y2hlczpzdHJpbmcgb3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIF9wYWdlLT5jb3VudFN0cmluZ01hdGNoZXMoc3Ry
aW5nLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhDb3VudCk7CisgICAgX3BhZ2UtPmlzSklU
RW5hYmxlZChbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRs
ZXIpXSAoYm9vbCBlbmFibGVkKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVuYWJsZWQp
OworICAgIH0pOwogfQogCi0tICh2b2lkKV9maW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBv
cHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENv
dW50CistICh2b2lkKV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3Ry
aW5nICopamF2YVNjcmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIC8vIFdoaWxlIEFwcEtpdCBjb250YWlucyBsb2dpYyBpbiBOU0JhclRleHRGaW5kZXIgdG8g
YXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGZpbmQgcGFzdGVib2FyZAotICAgIC8vIHdoZW4gdGhl
IGZpbmQgc3RyaW5nIGNoYW5nZXMsIHRoaXMgKGFsb25nIHdpdGggdGhlIGZpbmQgcGFzdGVib2Fy
ZCBpdHNlbGYpIGFyZSBib3RoIG1pc3NpbmcKLSAgICAvLyBmcm9tIGlPUzsgdGh1cywgb24gaU9T
LCB3ZSB1cGRhdGUgdGhlIGN1cnJlbnQgZmluZC1pbi1wYWdlIHN0cmluZyBoZXJlLgotICAgIFdl
YktpdDo6dXBkYXRlU3RyaW5nRm9yRmluZChzdHJpbmcpOworICAgIFtzZWxmIF9ldmFsdWF0ZUph
dmFTY3JpcHQ6amF2YVNjcmlwdFN0cmluZyBmb3JjZVVzZXJHZXN0dXJlOk5PIGNvbXBsZXRpb25I
YW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKK30KIAotICAgIGlmIChfY3VzdG9tQ29udGVudFZp
ZXcpIHsKLSAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfZmluZFN0cmluZzpzdHJpbmcg
b3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKy0gKHZvaWQpX3VwZGF0ZVdlYnNpdGVQb2xpY2llczooX1dLV2Vic2l0ZVBvbGljaWVzICop
d2Vic2l0ZVBvbGljaWVzCit7CisgICAgYXV0byBkYXRhID0gd2Vic2l0ZVBvbGljaWVzLndlYnBh
Z2VQcmVmZXJlbmNlcy0+X3dlYnNpdGVQb2xpY2llcy0+ZGF0YSgpOworICAgIGlmIChkYXRhLndl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVXBkYXRpbmcgV0tXZWJzaXRlRGF0YVN0
b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uLiJdOworICAgIF9wYWdlLT51cGRhdGVXZWJzaXRlUG9saWNpZXMoV1RGTW92ZShkYXRhKSk7
Cit9CisKKy0gKEJPT0wpX2FsbG93c1JlbW90ZUluc3BlY3Rpb24KK3sKKyNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKKyAgICByZXR1cm4gX3BhZ2UtPmFsbG93c1JlbW90ZUluc3BlY3Rpb24o
KTsKKyNlbHNlCisgICAgcmV0dXJuIE5POwogI2VuZGlmCi0gICAgX3BhZ2UtPmZpbmRTdHJpbmco
c3RyaW5nLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhDb3VudCk7CiB9CiAKLS0gKHZvaWQp
X2hpZGVGaW5kVUkKKy0gKHZvaWQpX3NldEFsbG93c1JlbW90ZUluc3BlY3Rpb246KEJPT0wpYWxs
b3cKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChfY3VzdG9tQ29udGVudFZp
ZXcpIHsKLSAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfaGlkZUZpbmRVSV07Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgX3Bh
Z2UtPnNldEFsbG93c1JlbW90ZUluc3BlY3Rpb24oYWxsb3cpOwogI2VuZGlmCi0gICAgX3BhZ2Ut
PmhpZGVGaW5kVUkoKTsKIH0KIAotLSAodm9pZClfc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JJ
dGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCistIChOU1N0cmluZyAqKV9yZW1vdGVJ
bnNwZWN0aW9uTmFtZU92ZXJyaWRlCiB7Ci0gICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47
Ci0gICAgX3BhZ2UtPnJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtLl9pdGVtKTsKKyNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICByZXR1cm4gX3BhZ2UtPnJlbW90ZUluc3BlY3Rp
b25OYW1lT3ZlcnJpZGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCi0t
IChpZCA8X1dLSW5wdXREZWxlZ2F0ZT4pX2lucHV0RGVsZWdhdGUKKy0gKHZvaWQpX3NldFJlbW90
ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGU6KE5TU3RyaW5nICopbmFtZQogewotICAgIHJldHVybiBf
aW5wdXREZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKKyAgICBfcGFnZS0+c2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZShuYW1lKTsK
KyNlbmRpZgogfQogCi0tICh2b2lkKV9zZXRJbnB1dERlbGVnYXRlOihpZCA8X1dLSW5wdXREZWxl
Z2F0ZT4paW5wdXREZWxlZ2F0ZQorLSAoQk9PTClfYWRkc1Zpc2l0ZWRMaW5rcwogewotICAgIF9p
bnB1dERlbGVnYXRlID0gaW5wdXREZWxlZ2F0ZTsKKyAgICByZXR1cm4gX3BhZ2UtPmFkZHNWaXNp
dGVkTGlua3MoKTsKK30KIAotICAgIGNsYXNzIEZvcm1DbGllbnQgOiBwdWJsaWMgQVBJOjpGb3Jt
Q2xpZW50IHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgot
ICAgICAgICBleHBsaWNpdCBGb3JtQ2xpZW50KFdLV2ViVmlldyAqd2ViVmlldykKLSAgICAgICAg
ICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgfQorLSAodm9pZClf
c2V0QWRkc1Zpc2l0ZWRMaW5rczooQk9PTClhZGRzVmlzaXRlZExpbmtzCit7CisgICAgX3BhZ2Ut
PnNldEFkZHNWaXNpdGVkTGlua3MoYWRkc1Zpc2l0ZWRMaW5rcyk7Cit9CiAKLSAgICAgICAgdmly
dHVhbCB+Rm9ybUNsaWVudCgpIHsgfQorLSAoQk9PTClfbmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVz
cworeworICAgIHJldHVybiBfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLm5ldHdvcmtSZXF1ZXN0c0lu
UHJvZ3Jlc3MoKTsKK30KIAotICAgICAgICB2b2lkIHdpbGxTdWJtaXRGb3JtKFdlYktpdDo6V2Vi
UGFnZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5
JiBzb3VyY2VGcmFtZSwgY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxXVEY6OlN0cmluZywgV1RGOjpT
dHJpbmc+PiYgdGV4dEZpZWxkVmFsdWVzLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIFdURjo6RnVu
Y3Rpb248dm9pZCh2b2lkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHVzZXJEYXRhICYmIHVzZXJEYXRhLT50eXBlKCkgIT0gQVBJOjpP
YmplY3Q6OlR5cGU6OkRhdGEpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZXJEYXRhIHx8
IHVzZXJEYXRhLT50eXBlKCkgPT0gQVBJOjpPYmplY3Q6OlR5cGU6OkRhdGEpOwotICAgICAgICAg
ICAgICAgIG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPm1hcmtDdXJy
ZW50bHlEaXNwYXRjaGVkTWVzc2FnZUFzSW52YWxpZCgpOwotICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQor
c3RhdGljIGlubGluZSBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBsYXlvdXRN
aWxlc3RvbmVzKF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzIGV2ZW50cykKK3sKKyAgICBPcHRp
b25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBtaWxlc3RvbmVzOwogCi0gICAgICAgICAg
ICBhdXRvIGlucHV0RGVsZWdhdGUgPSBtX3dlYlZpZXctPl9pbnB1dERlbGVnYXRlLmdldCgpOwor
ICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXQpCisg
ICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TGF5b3V0KTsKIAotICAgICAg
ICAgICAgaWYgKCFbaW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJWaWV3OndpbGxTdWJtaXRGb3JtVmFsdWVzOnVzZXJPYmplY3Q6c3VibWlzc2lvbkhhbmRsZXI6
KV0pIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5n
UHJvZ3Jlc3NFdmVudEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCkKKyAgICAgICAgbWlsZXN0
b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKIAotICAg
ICAgICAgICAgYXV0byB2YWx1ZU1hcCA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnRleHRGaWVsZFZhbHVlcy5zaXplKCldKTsKLSAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHRleHRGaWVsZFZhbHVlcykKLSAgICAgICAgICAg
ICAgICBbdmFsdWVNYXAgc2V0T2JqZWN0OnBhaXIuc2Vjb25kIGZvcktleTpwYWlyLmZpcnN0XTsK
KyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0UGFpbnRXaXRo
U2lnbmlmaWNhbnRBcmVhKQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRIaXRS
ZWxldmFudFJlcGFpbnRlZE9iamVjdHNBcmVhVGhyZXNob2xkKTsKIAotICAgICAgICAgICAgTlNP
YmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IG5pbDsKLSAgICAgICAgICAgIGlm
IChBUEk6OkRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxBUEk6OkRhdGEqPih1c2VyRGF0YSkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXNOb0NvcHk6Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9p
ZCo+KGRhdGEtPmJ5dGVzKCkpKSBsZW5ndGg6ZGF0YS0+c2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10p
OwotICAgICAgICAgICAgICAgIGF1dG8gdW5hcmNoaXZlciA9IHNlY3VyZVVuYXJjaGl2ZXJGcm9t
RGF0YShuc0RhdGEuZ2V0KCkpOwotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoYXV0byogYWxsb3dlZENsYXNzZXMgPSBtX3dlYlZpZXctPl9wYWdlLT5wcm9j
ZXNzKCkucHJvY2Vzc1Bvb2woKS5hbGxvd2VkQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGluZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9i
amVjdE9mQ2xhc3NlczphbGxvd2VkQ2xhc3NlcyBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmplY3Qg
PSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU09iamVjdCBjbGFzc10gZm9yS2V5
OkAidXNlck9iamVjdCJdOwotICAgICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAq
ZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRl
Y29kZSB1c2VyIGRhdGE6ICVAIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRSZWFj
aGVkU2Vzc2lvblJlc3RvcmF0aW9uUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpCisgICAgICAgIG1p
bGVzdG9uZXMuYWRkKFdlYkNvcmU6OlJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVl
U2l6ZVRocmVzaG9sZCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6Q29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGlucHV0RGVsZWdhdGUuZ2V0KCksIEBz
ZWxlY3Rvcihfd2ViVmlldzp3aWxsU3VibWl0Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1pc3Np
b25IYW5kbGVyOikpOwotICAgICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6bV93ZWJW
aWV3IHdpbGxTdWJtaXRGb3JtVmFsdWVzOnZhbHVlTWFwLmdldCgpIHVzZXJPYmplY3Q6dXNlck9i
amVjdCBzdWJtaXNzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNh
bGxlZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2hl
Y2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pLmdldCgpXTsKLSAgICAgICAgfQorICAgIGlm
IChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXRBZnRlclN1cHBy
ZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZykKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29y
ZTo6RGlkRmlyc3RMYXlvdXRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZyk7CiAK
LSAgICBwcml2YXRlOgotICAgICAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKLSAgICB9OworICAg
IGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludEFmdGVyU3Vw
cHJlc3NlZEluY3JlbWVudGFsUmVuZGVyaW5nKQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJD
b3JlOjpEaWRGaXJzdFBhaW50QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpOwog
Ci0gICAgaWYgKGlucHV0RGVsZWdhdGUpCi0gICAgICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50KG1h
a2VVbmlxdWU8Rm9ybUNsaWVudD4oc2VsZikpOwotICAgIGVsc2UKLSAgICAgICAgX3BhZ2UtPnNl
dEZvcm1DbGllbnQobnVsbHB0cik7CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dy
ZXNzRXZlbnREaWRSZW5kZXJTaWduaWZpY2FudEFtb3VudE9mVGV4dCkKKyAgICAgICAgbWlsZXN0
b25lcy5hZGQoV2ViQ29yZTo6RGlkUmVuZGVyU2lnbmlmaWNhbnRBbW91bnRPZlRleHQpOworCisg
ICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdE1lYW5pbmdmdWxQ
YWludCkKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RNZWFuaW5nZnVs
UGFpbnQpOworCisgICAgcmV0dXJuIG1pbGVzdG9uZXM7CiB9CiAKLS0gKEJPT0wpX2lzRGlzcGxh
eWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50CistICh2b2lkKV9zZXRPYnNlcnZlZFJlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRzOihfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylvYnNlcnZlZFJlbmRl
cmluZ1Byb2dyZXNzRXZlbnRzCiB7Ci0gICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9wYWdlLT5t
YWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5nU3RhbmRh
bG9uZUltYWdlRG9jdW1lbnQoKTsKLSAgICByZXR1cm4gTk87CisgICAgX29ic2VydmVkUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHMgPSBvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOworICAg
IF9wYWdlLT5saXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKGxheW91dE1pbGVzdG9uZXMob2JzZXJ2
ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cykpOwogfQogCi0tIChCT09MKV9pc0Rpc3BsYXlpbmdT
dGFuZGFsb25lTWVkaWFEb2N1bWVudAorLSAodm9pZClfZ2V0TWFpblJlc291cmNlRGF0YVdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgp
KQotICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFE
b2N1bWVudCgpOwotICAgIHJldHVybiBOTzsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtj
b21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CisKKyAgICBfcGFnZS0+Z2V0TWFpblJlc291cmNlRGF0
YU9mRnJhbWUoX3BhZ2UtPm1haW5GcmFtZSgpLCBbaGFuZGxlcl0oQVBJOjpEYXRhKiBkYXRhLCBX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgdm9pZCAoXmNvbXBs
ZXRpb25IYW5kbGVyQmxvY2spKE5TRGF0YSAqLCBOU0Vycm9yICopID0gKHZvaWQgKF4pKE5TRGF0
YSAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIGlmIChlcnJvciAhPSBXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQ
aXBlIGEgcHJvcGVyIGVycm9yIGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyQmxvY2sobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tF
cnJvckRvbWFpbiBjb2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3IpIHVzZXJJbmZvOm5pbF0pOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQmxvY2sod3JhcHBl
cigqZGF0YSksIG5pbCk7CisgICAgfSk7CiB9CiAKLS0gKEJPT0wpX2lzUGxheWluZ0F1ZGlvCist
ICh2b2lkKV9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
TlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4gX3Bh
Z2UtPmlzUGxheWluZ0F1ZGlvKCk7CisgICAgW3NlbGYgY3JlYXRlV2ViQXJjaGl2ZURhdGFXaXRo
Q29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCi0tIChCT09MKV9pc1No
b3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CistICh2b2lkKV9nZXRDb250ZW50c0FzU3Ry
aW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5pc1Nob3dpbmdOYXZpZ2F0
aW9uR2VzdHVyZVNuYXBzaG90KCk7CisgICAgYXV0byBoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKTsKKworICAgIF9wYWdlLT5nZXRDb250ZW50c0FzU3RyaW5nKFtoYW5k
bGVyXShTdHJpbmcgc3RyaW5nLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsK
KyAgICAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkg
eworICAgICAgICAgICAgLy8gRklYTUU6IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJvbSB0aGUg
V2ViUGFnZVByb3h5LgorICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0
aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6c3RhdGljX2Nhc3Q8aW50PihlcnJvcikgdXNlcklu
Zm86bmlsXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaGFuZGxlcihzdHJpbmcsIG5p
bCk7CisgICAgfSk7CiB9CiAKLS0gKF9XS0xheW91dE1vZGUpX2xheW91dE1vZGUKKy0gKHZvaWQp
X2dldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5PE5TQXR0cmlidXRlZFN0cmlu
Z0RvY3VtZW50QXR0cmlidXRlS2V5LCBpZD4gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cgogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBzd2l0Y2ggKF9pbXBsLT5sYXlvdXRNb2RlKCkp
IHsKLSAgICBjYXNlIGtXS0xheW91dE1vZGVGaXhlZFNpemU6Ci0gICAgICAgIHJldHVybiBfV0tM
YXlvdXRNb2RlRml4ZWRTaXplOwotICAgIGNhc2Uga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29t
cHV0ZWRGcm9tVmlld1NjYWxlOgotICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFtaWNT
aXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlOwotICAgIGNhc2Uga1dLTGF5b3V0TW9kZUR5bmFtaWNT
aXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZToKLSAgICAgICAgcmV0dXJuIF9XS0xh
eW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7Ci0gICAg
Y2FzZSBrV0tMYXlvdXRNb2RlVmlld1NpemU6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IF9XS0xheW91dE1vZGVWaWV3U2l6ZTsKLSAgICB9CisgICAgX3BhZ2UtPmdldENvbnRlbnRzQXNB
dHRyaWJ1dGVkU3RyaW5nKFtoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0oYXV0byYgYXR0cmlidXRlZFN0cmluZykgeworICAgICAgICBpZiAoYXR0cmlidXRlZFN0cmlu
Zy5zdHJpbmcpCisgICAgICAgICAgICBoYW5kbGVyKFtbYXR0cmlidXRlZFN0cmluZy5zdHJpbmcu
Z2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV0sIFtbYXR0cmlidXRlZFN0cmluZy5kb2N1bWVudEF0
dHJpYnV0ZXMuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV0sIG5pbCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBuaWwsIGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25v
d24pLmdldCgpKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfZ2V0QXBwbGljYXRpb25NYW5pZmVz
dFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAq
KSljb21wbGV0aW9uSGFuZGxlcgoreworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkK
KyAgICBfcGFnZS0+Z2V0QXBwbGljYXRpb25NYW5pZmVzdChbY29tcGxldGlvbkhhbmRsZXIgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0PiYgbWFuaWZlc3QsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
ciBlcnJvcikgeworICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgICAgICBpZiAoY29t
cGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIGlmIChtYW5pZmVzdCkgeworICAgICAgICAg
ICAgICAgIGF1dG8gYXBpTWFuaWZlc3QgPSBBUEk6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmNyZWF0
ZSgqbWFuaWZlc3QpOworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdyYXBwZXIo
YXBpTWFuaWZlc3QpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKG5pbCk7CisgICAgICAgIH0KKyAgICB9KTsKICNlbHNlCi0gICAgcmV0dXJu
IF9wYWdlLT51c2VGaXhlZExheW91dCgpID8gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSA6IF9XS0xh
eW91dE1vZGVWaWV3U2l6ZTsKKyAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG5pbCk7CiAjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0TGF5b3V0TW9k
ZTooX1dLTGF5b3V0TW9kZSlsYXlvdXRNb2RlCistIChfV0tQYWdpbmF0aW9uTW9kZSlfcGFnaW5h
dGlvbk1vZGUKIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgV0tMYXlvdXRNb2RlIHdrVmlld0xh
eW91dE1vZGU7Ci0gICAgc3dpdGNoIChsYXlvdXRNb2RlKSB7Ci0gICAgY2FzZSBfV0tMYXlvdXRN
b2RlRml4ZWRTaXplOgotICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUZp
eGVkU2l6ZTsKKyAgICBzd2l0Y2ggKF9wYWdlLT5wYWdpbmF0aW9uTW9kZSgpKSB7CisgICAgY2Fz
ZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1Bh
Z2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpM
ZWZ0VG9SaWdodFBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlTGVm
dFRvUmlnaHQ7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2lu
YXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7CisgICAg
Y2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2luYXRlZDoKKyAgICAgICAg
cmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b207CisgICAgY2FzZSBXZWJDb3JlOjpQ
YWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2lu
YXRpb25Nb2RlQm90dG9tVG9Ub3A7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7Cit9CisKKy0gKHZvaWQp
X3NldFBhZ2luYXRpb25Nb2RlOihfV0tQYWdpbmF0aW9uTW9kZSlwYWdpbmF0aW9uTW9kZQorewor
ICAgIFdlYkNvcmU6OlBhZ2luYXRpb246Ok1vZGUgbW9kZTsKKyAgICBzd2l0Y2ggKHBhZ2luYXRp
b25Nb2RlKSB7CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgorICAgICAg
ICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxl
OgotICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29t
cHV0ZWRGcm9tVmlld1NjYWxlOworICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdo
dDoKKyAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5h
dGVkOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNv
bXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU6Ci0gICAgICAgIHdrVmlld0xheW91dE1vZGUg
PSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXpl
OworICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoKKyAgICAgICAgbW9kZSA9
IFdlYkNvcmU6OlBhZ2luYXRpb246OlJpZ2h0VG9MZWZ0UGFnaW5hdGVkOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIF9XS0xheW91dE1vZGVWaWV3U2l6ZToKLSAgICBkZWZhdWx0OgotICAgICAg
ICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZVZpZXdTaXplOworICAgIGNhc2UgX1dL
UGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbToKKyAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2lu
YXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIF9X
S1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6CisgICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdp
bmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBfaW1wbC0+c2V0TGF5b3V0TW9kZSh3a1Zp
ZXdMYXlvdXRNb2RlKTsKLSNlbHNlCi0gICAgX3BhZ2UtPnNldFVzZUZpeGVkTGF5b3V0KGxheW91
dE1vZGUgPT0gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSB8fCBsYXlvdXRNb2RlID09IF9XS0xheW91
dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZSk7Ci0jZW5kaWYKKworICAgIF9w
YWdlLT5zZXRQYWdpbmF0aW9uTW9kZShtb2RlKTsKIH0KIAotLSAoQ0dTaXplKV9maXhlZExheW91
dFNpemUKKy0gKEJPT0wpX3BhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMKIHsKLSAgICByZXR1
cm4gX3BhZ2UtPmZpeGVkTGF5b3V0U2l6ZSgpOworICAgIHJldHVybiBfcGFnZS0+cGFnaW5hdGlv
bkJlaGF2ZXNMaWtlQ29sdW1ucygpOwogfQogCi0tICh2b2lkKV9zZXRGaXhlZExheW91dFNpemU6
KENHU2l6ZSlmaXhlZExheW91dFNpemUKKy0gKHZvaWQpX3NldFBhZ2luYXRpb25CZWhhdmVzTGlr
ZUNvbHVtbnM6KEJPT0wpYmVoYXZlc0xpa2VDb2x1bW5zCiB7Ci0gICAgX3BhZ2UtPnNldEZpeGVk
TGF5b3V0U2l6ZShXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGZp
eGVkTGF5b3V0U2l6ZSkpKTsKKyAgICBfcGFnZS0+c2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29s
dW1ucyhiZWhhdmVzTGlrZUNvbHVtbnMpOwogfQogCi0tICh2b2lkKV9zZXRCYWNrZ3JvdW5kRXh0
ZW5kc0JleW9uZFBhZ2U6KEJPT0wpYmFja2dyb3VuZEV4dGVuZHMKKy0gKENHRmxvYXQpX3BhZ2VM
ZW5ndGgKIHsKLSAgICBfcGFnZS0+c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tn
cm91bmRFeHRlbmRzKTsKKyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VMZW5ndGgoKTsKIH0KIAotLSAo
Qk9PTClfYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlCistICh2b2lkKV9zZXRQYWdlTGVuZ3Ro
OihDR0Zsb2F0KXBhZ2VMZW5ndGgKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmJhY2tncm91bmRFeHRl
bmRzQmV5b25kUGFnZSgpOworICAgIF9wYWdlLT5zZXRQYWdlTGVuZ3RoKHBhZ2VMZW5ndGgpOwog
fQogCi0tIChDR0Zsb2F0KV92aWV3U2NhbGUKKy0gKENHRmxvYXQpX2dhcEJldHdlZW5QYWdlcwog
ewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gX3BhZ2UtPnZpZXdTY2FsZUZhY3Rvcigp
OwotI2Vsc2UKLSAgICByZXR1cm4gX3BhZ2UtPmxheW91dFNpemVTY2FsZUZhY3RvcigpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIF9wYWdlLT5nYXBCZXR3ZWVuUGFnZXMoKTsKIH0KIAotLSAodm9pZClf
c2V0Vmlld1NjYWxlOihDR0Zsb2F0KXZpZXdTY2FsZQorLSAodm9pZClfc2V0R2FwQmV0d2VlblBh
Z2VzOihDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwogewotICAgIGlmICh2aWV3U2NhbGUgPD0gMCB8
fCBpc25hbih2aWV3U2NhbGUpIHx8IGlzaW5mKHZpZXdTY2FsZSkpCi0gICAgICAgIFtOU0V4Y2Vw
dGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJWaWV3IHNjYWxl
IHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlciJdOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IF9pbXBsLT5zZXRWaWV3U2NhbGUodmlld1NjYWxlKTsKLSNlbHNlCi0gICAgaWYgKF9wYWdlLT5s
YXlvdXRTaXplU2NhbGVGYWN0b3IoKSA9PSB2aWV3U2NhbGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5b3V0U2l6ZShbc2VsZiBh
Y3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc10sIHZpZXdTY2FsZSwgX3BhZ2UtPm1pbmlt
dW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpKTsKLSNlbmRpZgorICAgIF9wYWdlLT5zZXRHYXBCZXR3
ZWVuUGFnZXMoZ2FwQmV0d2VlblBhZ2VzKTsKIH0KIAotLSAodm9pZClfc2V0TWluaW11bUVmZmVj
dGl2ZURldmljZVdpZHRoOihDR0Zsb2F0KW1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aAorLSAo
Qk9PTClfcGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZAogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgaWYgKF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKSA9PSBtaW5p
bXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5z
ZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5b3V0U2l6ZShbc2VsZiBhY3RpdmVWaWV3TGF5
b3V0U2l6ZTpzZWxmLmJvdW5kc10sIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKSwgbWlu
aW11bUVmZmVjdGl2ZURldmljZVdpZHRoKTsKLSNlbmRpZgorICAgIHJldHVybiBfcGFnZS0+cGFn
aW5hdGlvbkxpbmVHcmlkRW5hYmxlZCgpOwogfQogCi0tIChDR0Zsb2F0KV9taW5pbXVtRWZmZWN0
aXZlRGV2aWNlV2lkdGgKKy0gKHZvaWQpX3NldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6KEJP
T0wpbGluZUdyaWRFbmFibGVkCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1
cm4gX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpOwotI2Vsc2UKLSAgICByZXR1
cm4gMDsKLSNlbmRpZgorICAgIF9wYWdlLT5zZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKGxp
bmVHcmlkRW5hYmxlZCk7CiB9CiAKLSNwcmFnbWEgbWFyayBzY3JvbGxwZXJmIG1ldGhvZHMKLQot
LSAodm9pZClfc2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQ6KEJPT0wp
ZW5hYmxlZAorLSAoTlNVSW50ZWdlcilfcGFnZUNvdW50CiB7Ci0gICAgX3BhZ2UtPnNldFNjcm9s
bFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkKGVuYWJsZWQpOworICAgIHJldHVybiBf
cGFnZS0+cGFnZUNvdW50KCk7CiB9CiAKLS0gKEJPT0wpX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNv
bGxlY3Rpb25FbmFibGVkCistIChCT09MKV9zdXBwb3J0c1RleHRab29tCiB7Ci0gICAgcmV0dXJu
IF9wYWdlLT5zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZCgpOworICAgIHJl
dHVybiBfcGFnZS0+c3VwcG9ydHNUZXh0Wm9vbSgpOwogfQogCi0tIChOU0FycmF5ICopX3Njcm9s
bFBlcmZvcm1hbmNlRGF0YQorLSAoZG91YmxlKV90ZXh0Wm9vbUZhY3RvcgogewotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgaWYgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhKiBzY3JvbGxQZXJmRGF0YSA9IF9wYWdlLT5zY3JvbGxpbmdQZXJmb3Jt
YW5jZURhdGEoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbFBlcmZEYXRhLT5kYXRhKCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfcGFnZS0+dGV4dFpvb21GYWN0b3IoKTsK
IH0KIAotI3ByYWdtYSBtYXJrIG1lZGlhIHBsYXliYWNrIHJlc3RyaWN0aW9ucwotCi0tIChCT09M
KV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sKLXsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIHJldHVybiBfcGFnZS0+YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXli
YWNrKCk7Ci0jZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zZXRB
bGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s6KEJPT0wpZmxhZwotewotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgX3BhZ2UtPnNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQ
bGF5YmFjayhmbGFnKTsKLSNlbmRpZgotfQotCi0tIChCT09MKV93ZWJQcm9jZXNzSXNSZXNwb25z
aXZlCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5wcm9jZXNzKCkuaXNSZXNwb25zaXZlKCk7Ci19Ci0K
LS0gKHZvaWQpX3NldEZ1bGxzY3JlZW5EZWxlZ2F0ZTooaWQ8X1dLRnVsbHNjcmVlbkRlbGVnYXRl
PilkZWxlZ2F0ZQotewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoaXM8V2Vi
S2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKSkKLSAgICAg
ICAgZG93bmNhc3Q8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNs
aWVudCgpKS5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci0jZW5kaWYKLX0KLQotLSAoaWQ8X1dLRnVs
bHNjcmVlbkRlbGVnYXRlPilfZnVsbHNjcmVlbkRlbGVnYXRlCi17Ci0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQotICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5m
dWxsc2NyZWVuQ2xpZW50KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0OjpGdWxs
c2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9y
ZWxlYXNlKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChCT09MKV9pc0luRnVs
bHNjcmVlbgotewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICByZXR1cm4gX3BhZ2Ut
PmZ1bGxTY3JlZW5NYW5hZ2VyKCkgJiYgX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmlzRnVs
bFNjcmVlbigpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAoX1dL
TWVkaWFDYXB0dXJlU3RhdGUpX21lZGlhQ2FwdHVyZVN0YXRlCi17Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9XS01lZGlhQ2FwdHVyZVN0YXRlKF9wYWdlLT5tZWRpYVN0YXRlRmxhZ3MoKSk7Ci19Ci0K
LS0gKHZvaWQpX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6KEJPT0wpZW5hYmxlZAotewotICAgIF9w
YWdlLT5zZXRNZWRpYUNhcHR1cmVFbmFibGVkKGVuYWJsZWQpOwotfQotCi0tIChCT09MKV9tZWRp
YUNhcHR1cmVFbmFibGVkCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5tZWRpYUNhcHR1cmVFbmFibGVk
KCk7Ci19Ci0KLS0gKHZvaWQpX3NldFBhZ2VNdXRlZDooX1dLTWVkaWFNdXRlZFN0YXRlKW11dGVk
U3RhdGUKLXsKLSAgICBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MgY29y
ZVN0YXRlID0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6Tm9uZU11dGVkOwotCi0gICAgaWYgKG11
dGVkU3RhdGUgJiBfV0tNZWRpYUF1ZGlvTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJD
b3JlOjpNZWRpYVByb2R1Y2VyOjpBdWRpb0lzTXV0ZWQ7Ci0gICAgaWYgKG11dGVkU3RhdGUgJiBf
V0tNZWRpYUNhcHR1cmVEZXZpY2VzTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3Jl
OjpNZWRpYVByb2R1Y2VyOjpBdWRpb0FuZFZpZGVvQ2FwdHVyZUlzTXV0ZWQ7Ci0gICAgaWYgKG11
dGVkU3RhdGUgJiBfV0tNZWRpYVNjcmVlbkNhcHR1cmVNdXRlZCkKLSAgICAgICAgY29yZVN0YXRl
IHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OlNjcmVlbkNhcHR1cmVJc011dGVkOwotCi0gICAg
X3BhZ2UtPnNldE11dGVkKGNvcmVTdGF0ZSk7Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZURhdGFEZXRl
Y3RlZExpbmtzOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KLXsKLSNpZiBFTkFCTEUoREFU
QV9ERVRFQ1RJT04pCi0gICAgX3BhZ2UtPnJlbW92ZURhdGFEZXRlY3RlZExpbmtzKFtjb21wbGV0
aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0gbWFrZVdlYWtQdHIoX3BhZ2Uu
Z2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChwYWdlKQotICAgICAgICAgICAg
cGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOwotICAgICAgICBpZiAoY29tcGxl
dGlvbikKLSAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKLSAgICB9KTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGNvbXBsZXRpb24pOwotI2VuZGlmCi19Ci0KLSNwcmFnbWEgbWFyayBpT1Mtc3Bl
Y2lmaWMgbWV0aG9kcwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotLSAodm9pZClfZGV0
ZWN0RGF0YVdpdGhUeXBlczooV0tEYXRhRGV0ZWN0b3JUeXBlcyl0eXBlcyBjb21wbGV0aW9uSGFu
ZGxlcjooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uCi17Ci0jaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQotICAgIF9wYWdlLT5kZXRlY3REYXRhSW5BbGxGcmFtZXMoZnJvbVdLRGF0YURldGVj
dG9yVHlwZXModHlwZXMpLCBbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwg
cGFnZSA9IG1ha2VXZWFrUHRyKF9wYWdlLmdldCgpKV0gKGF1dG8mIHJlc3VsdCkgewotICAgICAg
ICBpZiAocGFnZSkKLSAgICAgICAgICAgIHBhZ2UtPnNldERhdGFEZXRlY3Rpb25SZXN1bHQocmVz
dWx0KTsKLSAgICAgICAgaWYgKGNvbXBsZXRpb24pCi0gICAgICAgICAgICBjb21wbGV0aW9uKCk7
Ci0gICAgfSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlcyk7Ci0gICAgVU5VU0VEX1BB
UkFNKGNvbXBsZXRpb24pOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
Ci0tICh2b2lkKXJlbW92ZUZyb21TdXBlcnZpZXcKLXsKLSAgICBbc3VwZXIgcmVtb3ZlRnJvbVN1
cGVydmlld107Ci0KLSAgICBpZiAoW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxT
Y3JlZW5dKQotICAgICAgICBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRS
ZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dOwotfQotI2VuZGlmCi0KLS8vIERl
cHJlY2F0ZWQgU1BJLgotLSAoQ0dTaXplKV9taW5pbXVtTGF5b3V0U2l6ZU92ZXJyaWRlCi17Ci0g
ICAgQVNTRVJUKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKTsKLSAgICByZXR1cm4gX3ZpZXdMYXlv
dXRTaXplT3ZlcnJpZGUudmFsdWVPcihDR1NpemVaZXJvKTsKLX0KLQotLSAodm9pZClfc2V0Vmll
d0xheW91dFNpemVPdmVycmlkZTooQ0dTaXplKXZpZXdMYXlvdXRTaXplT3ZlcnJpZGUKLXsKLSAg
ICBfdmlld0xheW91dFNpemVPdmVycmlkZSA9IHZpZXdMYXlvdXRTaXplT3ZlcnJpZGU7Ci0KLSAg
ICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmll
d0xheW91dFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKHZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpXTsK
LX0KLQotLSAoVUlFZGdlSW5zZXRzKV9vYnNjdXJlZEluc2V0cwotewotICAgIHJldHVybiBfb2Jz
Y3VyZWRJbnNldHM7Ci19Ci0KLS0gKHZvaWQpX3NldE9ic2N1cmVkSW5zZXRzOihVSUVkZ2VJbnNl
dHMpb2JzY3VyZWRJbnNldHMKLXsKLSAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMudG9wID49IDAp
OwotICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy5sZWZ0ID49IDApOwotICAgIEFTU0VSVChvYnNj
dXJlZEluc2V0cy5ib3R0b20gPj0gMCk7Ci0gICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLnJpZ2h0
ID49IDApOwotCi0gICAgX2hhdmVTZXRPYnNjdXJlZEluc2V0cyA9IFlFUzsKLQotICAgIGlmIChV
SUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhfb2JzY3VyZWRJbnNldHMsIG9ic2N1cmVkSW5z
ZXRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX29ic2N1cmVkSW5zZXRzID0gb2JzY3VyZWRJ
bnNldHM7Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwot
fQotCi0tIChVSVJlY3RFZGdlKV9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEK
LXsKLSAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTsKLX0K
LQotLSAodm9pZClfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOihVSVJl
Y3RFZGdlKWVkZ2VzCi17Ci0gICAgaWYgKGVkZ2VzID09IF9vYnNjdXJlZEluc2V0RWRnZXNBZmZl
Y3RlZEJ5U2FmZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9vYnNjdXJlZEluc2V0RWRn
ZXNBZmZlY3RlZEJ5U2FmZUFyZWEgPSBlZGdlczsKLQotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZV07Ci19Ci0KLS0gKFVJRWRnZUluc2V0cylfdW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzCi17Ci0gICAgcmV0dXJuIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7Ci19
Ci0KLS0gKHZvaWQpX3NldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0czooVUlFZGdlSW5zZXRzKXVu
b2JzY3VyZWRTYWZlQXJlYUluc2V0cwotewotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJ
bnNldHMudG9wID49IDApOwotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMubGVm
dCA+PSAwKTsKLSAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmJvdHRvbSA+PSAw
KTsKLSAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0ID49IDApOwotCi0g
ICAgX2hhdmVTZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBZRVM7Ci0KLSAgICBpZiAoVUlF
ZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMoX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0cywgdW5v
YnNjdXJlZFNhZmVBcmVhSW5zZXRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3Vub2JzY3Vy
ZWRTYWZlQXJlYUluc2V0cyA9IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKLQotICAgIFtzZWxm
IF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci19Ci0KLS0gKEJPT0wpX3NhZmVB
cmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHMKLXsKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFu
ZGFyZENvbnRlbnRWaWV3XSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBfYXZvaWRz
VW5zYWZlQXJlYTsKLX0KLQotLSAodm9pZClfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlk
ZTooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlvbgotewotICAgIF9v
dmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA9IFlFUzsKLSAgICBfaW50ZXJmYWNlT3JpZW50
YXRpb25PdmVycmlkZSA9IGludGVyZmFjZU9yaWVudGF0aW9uOwotCi0gICAgaWYgKF9keW5hbWlj
Vmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6
Tm90UmVzaXppbmcpCi0gICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9u
OmRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbihfaW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZSldOwotfQotCi0tIChVSUludGVyZmFjZU9yaWVudGF0aW9uKV9pbnRl
cmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlCi17Ci0gICAgQVNTRVJUKF9vdmVycmlkZXNJbnRlcmZh
Y2VPcmllbnRhdGlvbik7Ci0gICAgcmV0dXJuIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRl
OwotfQotCi0tICh2b2lkKV9jbGVhckludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUKLXsKLSAg
ICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBOTzsKLSAgICBfaW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZSA9IFVJSW50ZXJmYWNlT3JpZW50YXRpb25Qb3J0cmFpdDsKLX0KLQot
Ly8gRGVwcmVjYXRlZCBTUEkKLS0gKENHU2l6ZSlfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUKLXsKLSAgICBBU1NFUlQoX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKTsKLSAgICBy
ZXR1cm4gX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlLnZhbHVlT3IoQ0dTaXplWmVybyk7
Ci19Ci0KLS0gKHZvaWQpX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUp
c2l6ZQotewotICAgIEFTU0VSVChzaXplLndpZHRoIDw9IHNlbGYuYm91bmRzLnNpemUud2lkdGgg
JiYgc2l6ZS5oZWlnaHQgPD0gc2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQpOwotICAgIF9tYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IHNpemU7Ci0KLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNp
emluZykKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11bVVub2JzY3VyZWRTaXplOldl
YkNvcmU6OkZsb2F0U2l6ZShzaXplKV07Ci19Ci0KLS0gKHZvaWQpX3NldEFsbG93c1ZpZXdwb3J0
U2hyaW5rVG9GaXQ6KEJPT0wpYWxsb3dTaHJpbmtUb0ZpdAotewotICAgIF9hbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0ID0gYWxsb3dTaHJpbmtUb0ZpdDsKLX0KLQotLSAoQk9PTClfYWxsb3dzVmll
d3BvcnRTaHJpbmtUb0ZpdAotewotICAgIHJldHVybiBfYWxsb3dzVmlld3BvcnRTaHJpbmtUb0Zp
dDsKLX0KLQotLSAodm9pZClfYmVnaW5JbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlCi17
Ci0gICAgQVNTRVJUKCFfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSk7Ci0g
ICAgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBZRVM7Ci19Ci0KLS0g
KHZvaWQpX2VuZEludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2UKLXsKLSAgICBBU1NFUlQo
X2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOwotICAgIF9pc0NoYW5naW5n
T2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gTk87Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLX0KLQotLSAodm9pZClfaGlkZUNvbnRlbnRVbnRpbE5l
eHRVcGRhdGUKLXsKLSAgICBpZiAoYXV0byogYXJlYSA9IF9wYWdlLT5kcmF3aW5nQXJlYSgpKQot
ICAgICAgICBhcmVhLT5oaWRlQ29udGVudFVudGlsQW55VXBkYXRlKCk7Ci19Ci0KLS0gKHZvaWQp
X2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxv
Y2sKLXsKLSAgICBDR1JlY3Qgb2xkQm91bmRzID0gc2VsZi5ib3VuZHM7Ci0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdCA9IF9wYWdlLT51bm9ic2N1cmVkQ29u
dGVudFJlY3QoKTsKLQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddIHx8
ICFfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSB8fCBDR1JlY3RJc0VtcHR5KG9sZEJvdW5k
cykgfHwgb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBpZiAo
W19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9iZWdp
bkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6KV0pCi0gICAgICAgICAgICBbX2N1c3RvbUNvbnRl
bnRWaWV3IHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxvY2tdOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cGRhdGVCbG9jaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVs
bHUpIC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6XSIsIHNlbGYs
IF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7Ci0KLSAgICBfZHluYW1pY1ZpZXdwb3J0
VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdX
aXRoQW5pbWF0aW9uOwotCi0gICAgYXV0byBvbGRWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2
ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXTsKLSAgICBhdXRvIG9sZE1heGltdW1Vbm9ic2N1
cmVkU2l6ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShzZWxmLCBvbGRCb3VuZHMpOwot
ICAgIGludDMyX3Qgb2xkT3JpZW50YXRpb24gPSBhY3RpdmVPcmllbnRhdGlvbihzZWxmKTsKLSAg
ICBVSUVkZ2VJbnNldHMgb2xkT2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7Ci0KLSAg
ICB1cGRhdGVCbG9jaygpOwotCi0gICAgQ0dSZWN0IG5ld0JvdW5kcyA9IHNlbGYuYm91bmRzOwot
ICAgIGF1dG8gbmV3Vmlld0xheW91dFNpemUgPSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpu
ZXdCb3VuZHNdOwotICAgIGF1dG8gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZlTWF4
aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG5ld0JvdW5kcyk7Ci0gICAgaW50MzJfdCBuZXdPcmll
bnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYpOwotICAgIFVJRWRnZUluc2V0cyBuZXdP
YnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsKLSAgICBDR1JlY3QgZnV0dXJlVW5vYnNj
dXJlZFJlY3RJblNlbGZDb29yZGluYXRlcyA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChuZXdCb3Vu
ZHMsIF9vYnNjdXJlZEluc2V0cyk7Ci0gICAgQ0dSZWN0IGNvbnRlbnRWaWV3Qm91bmRzID0gW19j
b250ZW50VmlldyBib3VuZHNdOwotCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghKF92aWV3TGF5
b3V0U2l6ZU92ZXJyaWRlICYmIG5ld1ZpZXdMYXlvdXRTaXplLmlzRW1wdHkoKSksICJDbGllbnRz
IGNvbnRyb2xsaW5nIHRoZSBsYXlvdXQgc2l6ZSBzaG91bGQgbWFpbnRhaW4gYSB2YWxpZCBsYXlv
dXQgc2l6ZSB0byBtaW5pbWl6ZSBsYXlvdXRzLiIpOwotICAgIGlmIChDR1JlY3RJc0VtcHR5KG5l
d0JvdW5kcykgfHwgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgpIHx8IENHUmVjdElzRW1wdHko
ZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcykgfHwgQ0dSZWN0SXNFbXB0eShj
b250ZW50Vmlld0JvdW5kcykpIHsKLSAgICAgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXpl
XTsKLSAgICAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKLSAgICAgICAgaWYgKF92
aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKQotICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmll
d0xheW91dFNpemU6bmV3Vmlld0xheW91dFNpemVdOwotICAgICAgICBpZiAoX21heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlKQotICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11
bVVub2JzY3VyZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShuZXdNYXhpbXVtVW5vYnNjdXJlZFNp
emUpXTsKLSAgICAgICAgaWYgKF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbikKLSAgICAg
ICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOm5ld09yaWVudGF0aW9u
XTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0
KG9sZEJvdW5kcywgbmV3Qm91bmRzKQotICAgICAgICAmJiBvbGRWaWV3TGF5b3V0U2l6ZSA9PSBu
ZXdWaWV3TGF5b3V0U2l6ZQotICAgICAgICAmJiBvbGRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPT0g
bmV3TWF4aW11bVVub2JzY3VyZWRTaXplCi0gICAgICAgICYmIG9sZE9yaWVudGF0aW9uID09IG5l
d09yaWVudGF0aW9uCi0gICAgICAgICYmIFVJRWRnZUluc2V0c0VxdWFsVG9FZGdlSW5zZXRzKG9s
ZE9ic2N1cmVkSW5zZXRzLCBuZXdPYnNjdXJlZEluc2V0cykpIHsKLSAgICAgICAgW3NlbGYgX2Nh
bmNlbEFuaW1hdGVkUmVzaXplXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIF9yZXNp
emVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cyA9IENBVHJhbnNmb3JtM0RJZGVudGl0eTsK
LQotICAgIGlmICghX3Jlc2l6ZUFuaW1hdGlvblZpZXcpIHsKLSAgICAgICAgTlNVSW50ZWdlciBp
bmRleE9mQ29udGVudFZpZXcgPSBbW19zY3JvbGxWaWV3IHN1YnZpZXdzXSBpbmRleE9mT2JqZWN0
Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0gICAgICAgIF9yZXNpemVBbmltYXRpb25WaWV3ID0gYWRv
cHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOwotICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZp
ZXcgbGF5ZXJdLm5hbWUgPSBAIlJlc2l6ZUFuaW1hdGlvbiI7Ci0gICAgICAgIFtfc2Nyb2xsVmll
dyBpbnNlcnRTdWJ2aWV3Ol9yZXNpemVBbmltYXRpb25WaWV3LmdldCgpIGF0SW5kZXg6aW5kZXhP
ZkNvbnRlbnRWaWV3XTsKLSAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IGFkZFN1YnZpZXc6
X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IGFkZFN1
YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXddXTsKLSAgICB9Ci0KLSAgICBDR1NpemUg
Y29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBjb250ZW50Vmlld0JvdW5kcy5z
aXplOwotICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNjYWxlOnN0ZDo6bWluKG5ld1Zp
ZXdMYXlvdXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRl
cy53aWR0aCwgW19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVdKV07Ci0gICAgW19zY3JvbGxW
aWV3IHNldE1heGltdW1ab29tU2NhbGU6c3RkOjptYXgobmV3Vmlld0xheW91dFNpemUud2lkdGgo
KSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBbX3Njcm9sbFZp
ZXcgbWF4aW11bVpvb21TY2FsZV0pXTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBzY2FsZSB0
byBrZWVwIHRoZSBjdXJyZW50IGNvbnRlbnQgd2lkdGggaW4gdGhlIHNjcm9sbHZpZXcuCi0gICAg
Q0dGbG9hdCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBvbGRVbm9i
c2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKTsKLSAgICBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENv
bnRlbnRXaWR0aCA9IHN0ZDo6bWluKGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVz
LndpZHRoLCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMpOwotICAgIENH
RmxvYXQgdGFyZ2V0U2NhbGUgPSBuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gX2FuaW1hdGVk
UmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGg7Ci0gICAgQ0dGbG9hdCByZXNpemVBbmltYXRpb25W
aWV3QW5pbWF0aW9uU2NhbGUgPSB0YXJnZXRTY2FsZSAvIGNvbnRlbnRab29tU2NhbGUoc2VsZik7
Ci0gICAgW19yZXNpemVBbmltYXRpb25WaWV3IHNldFRyYW5zZm9ybTpDR0FmZmluZVRyYW5zZm9y
bU1ha2VTY2FsZShyZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUsIHJlc2l6ZUFuaW1h
dGlvblZpZXdBbmltYXRpb25TY2FsZSldOwotCi0gICAgLy8gQ29tcHV0ZSBhIG5ldyBwb3NpdGlv
biB0byBrZWVwIHRoZSBjb250ZW50IGNlbnRlcmVkLgotICAgIENHUG9pbnQgb3JpZ2luYWxDb250
ZW50Q2VudGVyID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmNlbnRlcigpOwotICAgIENHUG9p
bnQgb3JpZ2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0
UG9pbnQ6b3JpZ2luYWxDb250ZW50Q2VudGVyIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07
Ci0gICAgQ0dQb2ludCBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3JkaW5hdGVz
ID0gQ0dQb2ludE1ha2UoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5vcmln
aW4ueCArIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMuc2l6ZS53aWR0aCAv
IDIsIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMub3JpZ2luLnkgKyBmdXR1
cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLnNpemUuaGVpZ2h0IC8gMik7Ci0KLSAg
ICBDR1BvaW50IG9yaWdpbmFsQ29udGVudE9mZnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zm
c2V0XTsKLSAgICBDR1BvaW50IGNvbnRlbnRPZmZzZXQgPSBvcmlnaW5hbENvbnRlbnRPZmZzZXQ7
Ci0gICAgY29udGVudE9mZnNldC54ICs9IChvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNlbGZDb29y
ZGluYXRlcy54IC0gZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNlbGZDb29yZGluYXRlcy54
KTsKLSAgICBjb250ZW50T2Zmc2V0LnkgKz0gKG9yaWdpbmFsQ29udGVudENlbnRlckluU2VsZkNv
b3JkaW5hdGVzLnkgLSBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3JkaW5hdGVz
LnkpOwotCi0gICAgLy8gTGltaXQgdGhlIG5ldyBvZmZzZXQgd2l0aGluIHRoZSBzY3JvbGx2aWV3
LCB3ZSBkbyBub3Qgd2FudCB0byBydWJiZXIgYmFuZCBwcm9ncmFtbWF0aWNhbGx5LgotICAgIENH
U2l6ZSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzID0gQ0dTaXplTWFrZShjb250
ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0aCAqIHRhcmdldFNjYWxlLCBjb250
ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy5oZWlnaHQgKiB0YXJnZXRTY2FsZSk7Ci0g
ICAgQ0dGbG9hdCBtYXhIb3Jpem9udGFsT2Zmc2V0ID0gZnV0dXJlQ29udGVudFNpemVJblNlbGZD
b29yZGluYXRlcy53aWR0aCAtIG5ld0JvdW5kcy5zaXplLndpZHRoICsgX29ic2N1cmVkSW5zZXRz
LnJpZ2h0OwotICAgIGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQueCwg
bWF4SG9yaXpvbnRhbE9mZnNldCk7Ci0gICAgQ0dGbG9hdCBtYXhWZXJ0aWNhbE9mZnNldCA9IGZ1
dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMuaGVpZ2h0IC0gbmV3Qm91bmRzLnNpemUu
aGVpZ2h0ICsgX29ic2N1cmVkSW5zZXRzLmJvdHRvbTsKLSAgICBjb250ZW50T2Zmc2V0LnkgPSBz
dGQ6Om1pbihjb250ZW50T2Zmc2V0LnksIG1heFZlcnRpY2FsT2Zmc2V0KTsKLQotICAgIGNvbnRl
bnRPZmZzZXQueCA9IHN0ZDo6bWF4KGNvbnRlbnRPZmZzZXQueCwgLV9vYnNjdXJlZEluc2V0cy5s
ZWZ0KTsKLSAgICBjb250ZW50T2Zmc2V0LnkgPSBzdGQ6Om1heChjb250ZW50T2Zmc2V0LnksIC1f
b2JzY3VyZWRJbnNldHMudG9wKTsKLQotICAgIC8vIE1ha2UgdGhlIHRvcC9ib3R0b20gZWRnZXMg
InN0aWNreSIgd2l0aGluIDEgcGl4ZWwuCi0gICAgaWYgKG9sZFVub2JzY3VyZWRDb250ZW50UmVj
dC5tYXhZKCkgPiBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy5oZWlnaHQgLSAx
KQotICAgICAgICBjb250ZW50T2Zmc2V0LnkgPSBtYXhWZXJ0aWNhbE9mZnNldDsKLSAgICBpZiAo
b2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LnkoKSA8IDEpCi0gICAgICAgIGNvbnRlbnRPZmZzZXQu
eSA9IFtzZWxmIF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZpZXddLnk7Ci0KLSAgICAv
LyBGSVhNRTogaWYgd2UgaGF2ZSBjb250ZW50IGNlbnRlcmVkIGFmdGVyIGRvdWJsZSB0YXAgdG8g
em9vbSwgd2Ugc2hvdWxkIGFsc28gdHJ5IHRvIGtlZXAgdGhhdCByZWN0IGluIHZpZXcuCi0gICAg
W19zY3JvbGxWaWV3IHNldENvbnRlbnRTaXplOnJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKCpf
cGFnZSwgZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcyldOwotICAgIFtfc2Nyb2xs
VmlldyBzZXRDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXRdOwotCi0gICAgQ0dSZWN0IHZpc2li
bGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpuZXdCb3VuZHMg
dG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0gICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0SW5D
b250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpmdXR1cmVVbm9ic2N1cmVkUmVj
dEluU2VsZkNvb3JkaW5hdGVzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotCi0gICAgVUlF
ZGdlSW5zZXRzIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFtzZWxmIF9jb21wdXRlZFVub2Jz
Y3VyZWRTYWZlQXJlYUluc2V0XTsKLSAgICBXZWJDb3JlOjpGbG9hdEJveEV4dGVudCB1bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnRvcCwgdW5v
YnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0LCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMuYm90
dG9tLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMubGVmdCk7Ci0KLSAgICBfbGFzdFNlbnRWaWV3
TGF5b3V0U2l6ZSA9IG5ld1ZpZXdMYXlvdXRTaXplOwotICAgIF9sYXN0U2VudE1heGltdW1Vbm9i
c2N1cmVkU2l6ZSA9IG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZTsKLSAgICBfbGFzdFNlbnREZXZp
Y2VPcmllbnRhdGlvbiA9IG5ld09yaWVudGF0aW9uOwotCi0gICAgX3BhZ2UtPmR5bmFtaWNWaWV3
cG9ydFNpemVVcGRhdGUobmV3Vmlld0xheW91dFNpemUsIG5ld01heGltdW1Vbm9ic2N1cmVkU2l6
ZSwgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgdW5vYnNjdXJlZFJlY3RJbkNvbnRl
bnRDb29yZGluYXRlcywgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcywgdW5v
YnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0ZW50LCB0YXJnZXRTY2FsZSwgbmV3T3JpZW50YXRpb24s
ICsrX2N1cnJlbnREeW5hbWljVmlld3BvcnRTaXplVXBkYXRlSUQpOwotICAgIGlmIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCi0g
ICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUobmV3Qm91bmRzLnNp
emUpKTsKLQotICAgIF93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSA9IFlFUzsK
LSAgICBfd2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gWUVTOwotfQotCi0tICh2b2lkKV9l
bmRBbmltYXRlZFJlc2l6ZQotewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdl
UHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfZW5kQW5pbWF0ZWRSZXNpemVdIF9keW5hbWljVmll
d3BvcnRVcGRhdGVNb2RlICVkIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgp
LCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhh
dmUgYW4gdXAtdG8tZGF0ZSBsYXllciB0cmVlLCBpbW1lZGlhdGVseSBjb21wbGV0ZQotICAgIC8v
IHRoZSByZXNpemUuIE90aGVyd2lzZSwgd2Ugd2lsbCBkZWZlciBjb21wbGV0aW9uIHVudGlsIHdl
IGRvLgotICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKLSAgICBpZiAoIV93
YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSkKLSAgICAgICAgW3NlbGYgX2RpZENv
bXBsZXRlQW5pbWF0ZWRSZXNpemVdOwotfQotCi0tICh2b2lkKV9yZXNpemVXaGlsZUhpZGluZ0Nv
bnRlbnRXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKLXsKLSAgICBSRUxF
QVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX3Jl
c2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOl0iLCBzZWxmLCBfcGFnZS0+aWRlbnRp
ZmllcigpLnRvVUludDY0KCkpOwotCi0gICAgW3NlbGYgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRo
VXBkYXRlczp1cGRhdGVCbG9ja107Ci0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
ID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoQW5pbWF0
aW9uKSB7Ci0gICAgICAgIFtfY29udGVudFZpZXcgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIF9k
eW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlOjpSZXNpemluZ1dpdGhEb2N1bWVudEhpZGRlbjsKLSAgICAgICAgCi0gICAgICAgIC8vIF9y
ZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlcyBpcyB1c2VkIGJ5IGl0c2VsZjsgdGhl
IGNsaWVudCB3aWxsCi0gICAgICAgIC8vIG5vdCBjYWxsIGVuZEFuaW1hdGVkUmVzaXplLCBzbyB3
ZSBjYW4ndCB3YWl0IGZvciBpdC4KLSAgICAgICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6
ZSA9IE5POwotICAgIH0KLX0KLQotLSAodm9pZClfc2V0T3ZlcmxhaWRBY2Nlc3NvcnlWaWV3c0lu
c2V0OihDR1NpemUpaW5zZXQKLXsKLSAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zZXRPdmVy
bGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6aW5zZXRdOwotfQotCi0tICh2b2lkKV9zbmFwc2hvdFJl
Y3Q6KENHUmVjdClyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0aDooQ0dGbG9h
dClpbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKENHSW1hZ2VSZWYpKWNvbXBs
ZXRpb25IYW5kbGVyCi17Ci0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdl
YktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAgICAgICAg
Ly8gRGVmZXIgc25hcHNob3R0aW5nIHVudGlsIGFmdGVyIHRoZSBjdXJyZW50IHJlc2l6ZSBjb21w
bGV0ZXMuCi0gICAgICAgIHZvaWQgKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoQ0dJbWFnZVJl
ZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgICAgIFJldGFpblB0cjxXS1dlYlZp
ZXc+IHJldGFpbmVkU2VsZiA9IHNlbGY7Ci0gICAgICAgIF9jYWxsYmFja3NEZWZlcnJlZER1cmlu
Z1Jlc2l6ZS5hcHBlbmQoW3JldGFpbmVkU2VsZiwgcmVjdEluVmlld0Nvb3JkaW5hdGVzLCBpbWFn
ZVdpZHRoLCBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcl0gewotICAgICAgICAgICAgW3JldGFpbmVk
U2VsZiBfc25hcHNob3RSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldpZHRo
OmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29waWVkQ29tcGxldGlvbkhhbmRsZXJdOwot
ICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENHUmVjdCBzbmFwc2hvdFJlY3RJbkNv
bnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblZpZXdDb29yZGluYXRl
cyB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLSAgICBDR0Zsb2F0IGltYWdlU2Nh
bGUgPSBpbWFnZVdpZHRoIC8gc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMuc2l6ZS53
aWR0aDsKLSAgICBDR0Zsb2F0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTY2FsZSAqIHNuYXBzaG90UmVj
dEluQ29udGVudENvb3JkaW5hdGVzLnNpemUuaGVpZ2h0OwotICAgIENHU2l6ZSBpbWFnZVNpemUg
PSBDR1NpemVNYWtlKGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKLQotICAgIGlmIChbW19jdXN0
b21Db250ZW50VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3VzdG9tU25hcHNob3R0aW5nXSkgewot
ICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zbmFwc2hvdFJlY3RJbkNvbnRlbnRWaWV3
Q29vcmRpbmF0ZXM6c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgc25hcHNob3RXaWR0
aDppbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZF
UikgJiYgSEFWRShJT1NVUkZBQ0UpCi0gICAgLy8gSWYgd2UgYXJlIHBhcmVudGVkIGFuZCBub3Qg
aGlkZGVuLCBhbmQgdGh1cyB3b24ndCBpbmN1ciBhIHNpZ25pZmljYW50IHBlbmFsdHkgZnJvbSBw
YWdpbmcgaW4gdGlsZXMsIHNuYXBzaG90IHRoZSB2aWV3IGhpZXJhcmNoeSBkaXJlY3RseS4KLSAg
ICBOU1N0cmluZyAqZGlzcGxheU5hbWUgPSBzZWxmLndpbmRvdy5zY3JlZW4uZGlzcGxheUNvbmZp
Z3VyYXRpb24ubmFtZTsKLSAgICBpZiAoZGlzcGxheU5hbWUgJiYgIXNlbGYud2luZG93LmhpZGRl
bikgewotICAgICAgICBhdXRvIHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShX
ZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdlU2l6ZSkpLCBX
ZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKLSAgICAgICAgaWYgKCFzdXJmYWNlKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBDR0Zsb2F0IGltYWdlU2NhbGVJblZpZXdDb29yZGluYXRl
cyA9IGltYWdlV2lkdGggLyByZWN0SW5WaWV3Q29vcmRpbmF0ZXMuc2l6ZS53aWR0aDsKLSAgICAg
ICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGltYWdl
U2NhbGVJblZpZXdDb29yZGluYXRlcywgaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzLCAxKTsK
LSAgICAgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIC1y
ZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3JpZ2luLngsIC1yZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3Jp
Z2luLnksIDApOwotICAgICAgICBDQVJlbmRlclNlcnZlclJlbmRlckRpc3BsYXlMYXllcldpdGhU
cmFuc2Zvcm1BbmRUaW1lT2Zmc2V0KE1BQ0hfUE9SVF9OVUxMLCAoQ0ZTdHJpbmdSZWYpZGlzcGxh
eU5hbWUsIHNlbGYubGF5ZXIuY29udGV4dC5jb250ZXh0SWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KHNlbGYubGF5ZXIpLCBzdXJmYWNlLT5zdXJmYWNlKCksIDAsIDAsICZ0cmFuc2Zvcm0s
IDApOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpJT1N1cmZhY2U6OnNpbmtJ
bnRvSW1hZ2UoV1RGTW92ZShzdXJmYWNlKSkuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIEFTU0VS
VCghW1tfY3VzdG9tQ29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1c3RvbVNuYXBzaG90
dGluZ10pOwotICAgICAgICBVSUdyYXBoaWNzQmVnaW5JbWFnZUNvbnRleHRXaXRoT3B0aW9ucyhp
bWFnZVNpemUsIFlFUywgMSk7Ci0KLSAgICAgICAgVUlWaWV3ICpjdXN0b21Db250ZW50VmlldyA9
IF9jdXN0b21Db250ZW50Vmlldy5nZXQoKTsKLSAgICAgICAgW2N1c3RvbUNvbnRlbnRWaWV3LmJh
Y2tncm91bmRDb2xvciBzZXRdOwotICAgICAgICBVSVJlY3RGaWxsKENHUmVjdE1ha2UoMCwgMCwg
aW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpKTsKLQotICAgICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IFVJR3JhcGhpY3NHZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0oY29udGV4dCwgLXNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLm9yaWdp
bi54ICogaW1hZ2VTY2FsZSwgLXNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLm9yaWdp
bi55ICogaW1hZ2VTY2FsZSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIGlt
YWdlU2NhbGUsIGltYWdlU2NhbGUpOwotICAgICAgICBbY3VzdG9tQ29udGVudFZpZXcubGF5ZXIg
cmVuZGVySW5Db250ZXh0OmNvbnRleHRdOwotCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtV
SUdyYXBoaWNzR2V0SW1hZ2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgpIENHSW1hZ2VdKTsKLQot
ICAgICAgICBVSUdyYXBoaWNzRW5kSW1hZ2VDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICB2b2lkKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoQ0dJbWFnZVJlZikgPSBb
Y29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgX3BhZ2UtPnRha2VTbmFwc2hvdChXZWJDb3Jl
OjplbmNsb3NpbmdJbnRSZWN0KHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzKSwgV2Vi
Q29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShpbWFnZVNpemUpKSwgV2Vi
S2l0OjpTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2aWNlU2NhbGVGYWN0b3IsIFs9XShjb25zdCBX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAgIGlmIChpbWFnZUhhbmRsZS5pc051bGwoKSkgewot
ICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Ci0gICAgICAgICAg
ICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGJpdG1hcCA9IFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSk7Ci0KLSAgICAgICAgaWYgKCFiaXRtYXApIHsKLSAgICAgICAgICAgIGNvcGll
ZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwotICAgICAgICAgICAgW2NvcGllZENvbXBsZXRp
b25IYW5kbGVyIHJlbGVhc2VdOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2U7Ci0gICAgICAgIGNnSW1hZ2UgPSBi
aXRtYXAtPm1ha2VDR0ltYWdlKCk7Ci0gICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKGNn
SW1hZ2UuZ2V0KCkpOwotICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5p
bXVtTGF5b3V0U2l6ZTooQ0dTaXplKW1pbmltdW1MYXlvdXRTaXplIG1heGltdW1Vbm9ic2N1cmVk
U2l6ZU92ZXJyaWRlOihDR1NpemUpbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUKLXsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tXZWJWaWV3ICIg
PDwgX3BhZ2UtPmlkZW50aWZpZXIoKSA8PCAiIF9vdmVycmlkZUxheW91dFBhcmFtZXRlcnNXaXRo
TWluaW11bUxheW91dFNpemU6IiA8PCBXZWJDb3JlOjpGbG9hdFNpemUobWluaW11bUxheW91dFNp
emUpIDw8ICIgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6IiA8PCBXZWJDb3JlOjpGbG9h
dFNpemUobWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpIDw8ICJdIik7Ci0KLSAgICBbc2Vs
ZiBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTptaW5pbXVtTGF5b3V0U2l6ZV07Ci0gICAgW3Nl
bGYgX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOm1heGltdW1Vbm9ic2N1cmVkU2l6
ZU92ZXJyaWRlXTsKLX0KLQotLSAodm9pZClfY2xlYXJPdmVycmlkZUxheW91dFBhcmFtZXRlcnMK
LXsKLSAgICBfdmlld0xheW91dFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsKLSAgICBfbWF4
aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBX
VEY6Ok9wdGlvbmFsPFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzPiB2aWV3cG9ydEFyZ3VtZW50
c0Zyb21EaWN0aW9uYXJ5KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqdmll
d3BvcnRBcmd1bWVudFBhaXJzLCBib29sIHZpZXdwb3J0Rml0RW5hYmxlZCkKLXsKLSAgICBpZiAo
IXZpZXdwb3J0QXJndW1lbnRQYWlycykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzKFdlYkNvcmU6
OlZpZXdwb3J0QXJndW1lbnRzOjpWaWV3cG9ydE1ldGEpOwotCi0gICAgW3ZpZXdwb3J0QXJndW1l
bnRQYWlycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6bWFrZUJsb2NrUHRyKFsm
XSAoTlNTdHJpbmcgKmtleSwgTlNTdHJpbmcgKnZhbHVlLCBCT09MKiBzdG9wKSB7Ci0gICAgICAg
IGlmICghW2tleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dIHx8ICFbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAgICAgICAgICAgIFtOU0V4Y2VwdGlvbiBy
YWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCItW1dLV2ViVmlldyBfb3Zl
cnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogS2V5cyBhbmQgdmFsdWVzIG11c3QgYWxsIGJl
IE5TU3RyaW5ncy4iXTsKLSAgICAgICAgU3RyaW5nIGtleVN0cmluZyA9IGtleTsKLSAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWU7Ci0gICAgICAgIFdlYkNvcmU6OnNldFZpZXdwb3J0
RmVhdHVyZSh2aWV3cG9ydEFyZ3VtZW50cywga2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgdmlld3Bv
cnRGaXRFbmFibGVkLCBbXSAoV2ViQ29yZTo6Vmlld3BvcnRFcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIi1bV0tXZWJWaWV3IF9vdmVy
cmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBFcnJvciBwYXJzaW5nIHZpZXdwb3J0IGFyZ3Vt
ZW50OiAlcyIsIGVycm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfSk7Ci0gICAg
fSkuZ2V0KCldOwotCi0gICAgcmV0dXJuIHZpZXdwb3J0QXJndW1lbnRzOwotfQotCi0tICh2b2lk
KV9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IE5TU3RyaW5nICo+ICopYXJndW1lbnRzCi17Ci0gICAgaWYgKCFfcGFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgX3BhZ2UtPnNldE92ZXJyaWRlVmlld3BvcnRBcmd1bWVudHModmlld3BvcnRB
cmd1bWVudHNGcm9tRGljdGlvbmFyeShhcmd1bWVudHMsIF9wYWdlLT5wcmVmZXJlbmNlcygpLnZp
ZXdwb3J0Rml0RW5hYmxlZCgpKSk7Ci19Ci0KLS0gKFVJVmlldyAqKV92aWV3Rm9yRmluZFVJCi17
Ci0gICAgcmV0dXJuIFtzZWxmIHZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3OltzZWxmIHNjcm9s
bFZpZXddXTsKLX0KLQotLSAoQk9PTClfaXNEaXNwbGF5aW5nUERGCi17Ci0gICAgZm9yIChhdXRv
JiBtaW1lVHlwZSA6IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OnBkZk1JTUVUeXBlcygpKSB7
Ci0gICAgICAgIENsYXNzIHByb3ZpZGVyQ2xhc3MgPSBbW19jb25maWd1cmF0aW9uIF9jb250ZW50
UHJvdmlkZXJSZWdpc3RyeV0gcHJvdmlkZXJGb3JNSU1FVHlwZTptaW1lVHlwZV07Ci0gICAgICAg
IGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IGlzS2luZE9mQ2xhc3M6cHJvdmlkZXJDbGFzc10pCi0g
ICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLQotICAgIHJldHVybiBOTzsKLX0KLQotLSAo
TlNEYXRhICopX2RhdGFGb3JEaXNwbGF5ZWRQREYKLXsKLSAgICBpZiAoIVtzZWxmIF9pc0Rpc3Bs
YXlpbmdQREZdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbX2N1c3RvbUNvbnRl
bnRWaWV3IHdlYl9kYXRhUmVwcmVzZW50YXRpb25dOwotfQotCi0tIChOU1N0cmluZyAqKV9zdWdn
ZXN0ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERgotewotICAgIGlmICghW3NlbGYgX2lzRGlzcGxh
eWluZ1BERl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtfY3VzdG9tQ29udGVu
dFZpZXcgd2ViX3N1Z2dlc3RlZEZpbGVuYW1lXTsKLX0KLQotLSAoX1dLV2ViVmlld1ByaW50Rm9y
bWF0dGVyICopX3dlYlZpZXdQcmludEZvcm1hdHRlcgorLSAodm9pZClfc2V0VGV4dFpvb21GYWN0
b3I6KGRvdWJsZSl6b29tRmFjdG9yCiB7Ci0gICAgVUlWaWV3UHJpbnRGb3JtYXR0ZXIgKnZpZXdQ
cmludEZvcm1hdHRlciA9IHNlbGYudmlld1ByaW50Rm9ybWF0dGVyOwotICAgIEFTU0VSVChbdmll
d1ByaW50Rm9ybWF0dGVyIGlzS2luZE9mQ2xhc3M6W19XS1dlYlZpZXdQcmludEZvcm1hdHRlciBj
bGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1dlYlZpZXdQcmludEZvcm1hdHRlciAqKXZpZXdQcmlu
dEZvcm1hdHRlcjsKKyAgICBfcGFnZS0+c2V0VGV4dFpvb21GYWN0b3Ioem9vbUZhY3Rvcik7CiB9
CiAKLXN0YXRpYyBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHRvVXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0ZSBjb250ZW50
QXR0cmlidXRlKQorLSAodm9pZClzZXRQYWdlWm9vbTooQ0dGbG9hdClwYWdlWm9vbQogewotICAg
IGF1dG8gZGlyZWN0aW9uID0gW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uRm9y
U2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVdOwotICAgIHN3aXRjaCAo
ZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0
VG9SaWdodDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246OkxUUjsKLSAgICBjYXNlIFVJVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0
VG9MZWZ0OgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbjo6UlRMOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7CisgICAgX3BhZ2Ut
PnNldFBhZ2Vab29tRmFjdG9yKHBhZ2Vab29tKTsKIH0KIAotLSAodm9pZClzZXRTZW1hbnRpY0Nv
bnRlbnRBdHRyaWJ1dGU6KFVJU2VtYW50aWNDb250ZW50QXR0cmlidXRlKWNvbnRlbnRBdHRyaWJ1
dGUKKy0gKENHRmxvYXQpcGFnZVpvb20KIHsKLSAgICBbc3VwZXIgc2V0U2VtYW50aWNDb250ZW50
QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVdOwotCi0gICAgX3BhZ2UtPnNldFVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb24odG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKGNvbnRlbnRB
dHRyaWJ1dGUpKTsKKyAgICByZXR1cm4gX3BhZ2UtPnBhZ2Vab29tRmFjdG9yKCk7CiB9CiAKLSNl
bHNlIC8vICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jcHJhZ21hIG1hcmsgLSBPUyBYLXNw
ZWNpZmljIG1ldGhvZHMKLQotLSAoQk9PTClfZHJhd3NCYWNrZ3JvdW5kCistIChkb3VibGUpX3Bh
Z2Vab29tRmFjdG9yCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5kcmF3c0JhY2tncm91bmQoKTsKKyAg
ICByZXR1cm4gW3NlbGYgcGFnZVpvb21dOwogfQogCi0tICh2b2lkKV9zZXREcmF3c0JhY2tncm91
bmQ6KEJPT0wpZHJhd3NCYWNrZ3JvdW5kCistICh2b2lkKV9zZXRQYWdlWm9vbUZhY3RvcjooZG91
YmxlKXpvb21GYWN0b3IKIHsKLSAgICBfaW1wbC0+c2V0RHJhd3NCYWNrZ3JvdW5kKGRyYXdzQmFj
a2dyb3VuZCk7CisgICAgW3NlbGYgc2V0UGFnZVpvb206em9vbUZhY3Rvcl07CiB9CiAKLS0gKE5T
Q29sb3IgKilfYmFja2dyb3VuZENvbG9yCistIChpZCA8X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxl
Z2F0ZT4pX2RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKIHsKLSAgICByZXR1cm4gX2ltcGwtPmJh
Y2tncm91bmRDb2xvcigpOworICAgIGF1dG8qIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gX3Bh
Z2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7CisgICAgaWYgKCFkaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Jj4oKmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50
KS5kZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7CiB9CiAKLS0gKHZvaWQpX3NldEJhY2tncm91bmRD
b2xvcjooTlNDb2xvciAqKWJhY2tncm91bmRDb2xvcgorLSAodm9pZClfc2V0RGlhZ25vc3RpY0xv
Z2dpbmdEZWxlZ2F0ZTooaWQ8X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZT4pZGlhZ25vc3Rp
Y0xvZ2dpbmdEZWxlZ2F0ZQogewotICAgIF9pbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmFja2dy
b3VuZENvbG9yKTsKKyAgICBhdXRvKiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9wYWdlLT5k
aWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOworICAgIGlmICghZGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpY19jYXN0PFdlYktpdDo6RGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQmPigqZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpLnNldERlbGVnYXRlKGRp
YWdub3N0aWNMb2dnaW5nRGVsZWdhdGUpOwogfQogCi0tICh2b2lkKV9zZXREcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZDooQk9PTClkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZAorLSAoaWQgPF9X
S0ZpbmREZWxlZ2F0ZT4pX2ZpbmREZWxlZ2F0ZQogewotICAgIHN0YXRpYyBCT09MIGhhc0xvZ2dl
ZERlcHJlY2F0aW9uV2FybmluZzsKLSAgICBpZiAoIWhhc0xvZ2dlZERlcHJlY2F0aW9uV2Fybmlu
ZykgewotICAgICAgICAvLyBTZWUgYnVnIDE1NTU1MCBmb3IgZGV0YWlscy4KLSAgICAgICAgTlNM
b2coQCItW1dLV2ViVmlldyBfc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6XSBpcyBkZXBy
ZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIik7Ci0gICAgICAgIGhhc0xvZ2dlZERlcHJl
Y2F0aW9uV2FybmluZyA9IFlFUzsKLSAgICB9Ci0gICAgW3NlbGYgX3NldERyYXdzQmFja2dyb3Vu
ZDohZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmRdOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9y
ZWxlYXNlKCk7CiB9CiAKLS0gKE5TVmlldyAqKV9pbnNwZWN0b3JBdHRhY2htZW50VmlldworLSAo
dm9pZClfc2V0RmluZERlbGVnYXRlOihpZDxfV0tGaW5kRGVsZWdhdGU+KWZpbmREZWxlZ2F0ZQog
ewotICAgIHJldHVybiBfaW1wbC0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5zZXREZWxl
Z2F0ZShmaW5kRGVsZWdhdGUpOwogfQogCi0tICh2b2lkKV9zZXRJbnNwZWN0b3JBdHRhY2htZW50
VmlldzooTlNWaWV3ICopbmV3Vmlldworc3RhdGljIGlubGluZSBXZWJLaXQ6OkZpbmRPcHRpb25z
IHRvRmluZE9wdGlvbnMoX1dLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucykKIHsKLSAgICBfaW1w
bC0+c2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXcobmV3Vmlldyk7CisgICAgdW5zaWduZWQgZmlu
ZE9wdGlvbnMgPSAwOworCisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0Nh
c2VJbnNlbnNpdGl2ZSkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9u
c0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25z
QXRXb3JkU3RhcnRzKQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25z
QXRXb3JkU3RhcnRzOworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNUcmVh
dE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0
OjpGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgIGlmICh3a0Zp
bmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNCYWNrd2FyZHMpCisgICAgICAgIGZpbmRPcHRpb25z
IHw9IFdlYktpdDo6RmluZE9wdGlvbnNCYWNrd2FyZHM7CisgICAgaWYgKHdrRmluZE9wdGlvbnMg
JiBfV0tGaW5kT3B0aW9uc1dyYXBBcm91bmQpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktp
dDo6RmluZE9wdGlvbnNXcmFwQXJvdW5kOworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmlu
ZE9wdGlvbnNTaG93T3ZlcmxheSkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5k
T3B0aW9uc1Nob3dPdmVybGF5OworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlv
bnNTaG93RmluZEluZGljYXRvcikKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5k
T3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yOworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmlu
ZE9wdGlvbnNTaG93SGlnaGxpZ2h0KQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZp
bmRPcHRpb25zU2hvd0hpZ2hsaWdodDsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRP
cHRpb25zTm9JbmRleENoYW5nZSkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5k
T3B0aW9uc05vSW5kZXhDaGFuZ2U7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0
aW9uc0RldGVybWluZU1hdGNoSW5kZXgpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6
RmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdDo6RmluZE9wdGlvbnM+KGZpbmRPcHRpb25zKTsKIH0KIAotLSAodm9pZClfc2V0T3Zl
cmxheVNjcm9sbGJhclN0eWxlOihfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUpc2Nyb2xsYmFyU3R5
bGUKKy0gKHZvaWQpX2NvdW50U3RyaW5nTWF0Y2hlczooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9u
czooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudAog
ewotICAgIF9pbXBsLT5zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGUodG9Db3JlU2Nyb2xsYmFyU3R5
bGUoc2Nyb2xsYmFyU3R5bGUpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChf
Y3VzdG9tQ29udGVudFZpZXcpIHsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfY291
bnRTdHJpbmdNYXRjaGVzOnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRd
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgX3BhZ2UtPmNvdW50U3RyaW5n
TWF0Y2hlcyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENvdW50KTsKIH0KIAot
LSAoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKV9vdmVybGF5U2Nyb2xsYmFyU3R5bGUKKy0gKHZv
aWQpX2ZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25z
KW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291bnQKIHsKLSAgICByZXR1cm4gdG9B
UElTY3JvbGxiYXJTdHlsZShfaW1wbC0+b3ZlcmxheVNjcm9sbGJhclN0eWxlKCkpOworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gV2hpbGUgQXBwS2l0IGNvbnRhaW5zIGxvZ2ljIGlu
IE5TQmFyVGV4dEZpbmRlciB0byBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgZmluZCBwYXN0ZWJv
YXJkCisgICAgLy8gd2hlbiB0aGUgZmluZCBzdHJpbmcgY2hhbmdlcywgdGhpcyAoYWxvbmcgd2l0
aCB0aGUgZmluZCBwYXN0ZWJvYXJkIGl0c2VsZikgYXJlIGJvdGggbWlzc2luZworICAgIC8vIGZy
b20gaU9TOyB0aHVzLCBvbiBpT1MsIHdlIHVwZGF0ZSB0aGUgY3VycmVudCBmaW5kLWluLXBhZ2Ug
c3RyaW5nIGhlcmUuCisgICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5kKHN0cmluZyk7CisK
KyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZp
ZXcgd2ViX2ZpbmRTdHJpbmc6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3Vu
dF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBfcGFnZS0+ZmluZFN0cmlu
ZyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENvdW50KTsKIH0KIAotLSAoQk9P
TClfd2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZAorLSAodm9pZClfaGlkZUZpbmRVSQog
ewotICAgIHJldHVybiBfaW1wbC0+d2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZCgpOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKF9jdXN0b21Db250ZW50Vmlldykgewor
ICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9oaWRlRmluZFVJXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZgorICAgIF9wYWdlLT5oaWRlRmluZFVJKCk7CiB9CiAKLS0gKHZv
aWQpX3NldFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxlZAorLSAo
dm9pZClfc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0
ZW0gKilpdGVtCiB7Ci0gICAgX2ltcGwtPnNldFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJs
ZWQoZW5hYmxlZCk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2Ut
PnJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtLl9pdGVtKTsKIH0KIAotLSAodm9pZClzaGFy
ZVNoZWV0RGlkRGlzbWlzczooV0tTaGFyZVNoZWV0ICopc2hhcmVTaGVldAorLSAoaWQgPF9XS0lu
cHV0RGVsZWdhdGU+KV9pbnB1dERlbGVnYXRlCiB7Ci0gICAgX2ltcGwtPnNoYXJlU2hlZXREaWRE
aXNtaXNzKHNoYXJlU2hlZXQpOworICAgIHJldHVybiBfaW5wdXREZWxlZ2F0ZS5nZXRBdXRvcmVs
ZWFzZWQoKTsKIH0KIAotLSAodm9pZClfc2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcjooQ0dG
bG9hdClkZXZpY2VTY2FsZUZhY3RvcgorLSAodm9pZClfc2V0SW5wdXREZWxlZ2F0ZTooaWQgPF9X
S0lucHV0RGVsZWdhdGU+KWlucHV0RGVsZWdhdGUKIHsKLSAgICBfaW1wbC0+c2V0T3ZlcnJpZGVE
ZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgX2lucHV0RGVsZWdhdGUg
PSBpbnB1dERlbGVnYXRlOworCisgICAgY2xhc3MgRm9ybUNsaWVudCA6IHB1YmxpYyBBUEk6OkZv
cm1DbGllbnQgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIGV4cGxpY2l0IEZvcm1DbGllbnQoV0tXZWJWaWV3ICp3ZWJWaWV3KQorICAgICAg
ICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgdmlydHVhbCB+Rm9ybUNsaWVudCgpIHsgfQorCisgICAgICAgIHZvaWQgd2lsbFN1Ym1pdEZv
cm0oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJLaXQ6
OldlYkZyYW1lUHJveHkmIHNvdXJjZUZyYW1lLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFdURjo6
U3RyaW5nLCBXVEY6OlN0cmluZz4+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSTo6T2JqZWN0KiB1c2Vy
RGF0YSwgV1RGOjpGdW5jdGlvbjx2b2lkKHZvaWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodXNlckRhdGEgJiYgdXNlckRhdGEtPnR5
cGUoKSAhPSBBUEk6Ok9iamVjdDo6VHlwZTo6RGF0YSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VCghdXNlckRhdGEgfHwgdXNlckRhdGEtPnR5cGUoKSA9PSBBUEk6Ok9iamVjdDo6VHlwZTo6RGF0
YSk7CisgICAgICAgICAgICAgICAgbV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rp
b24oKS0+bWFya0N1cnJlbnRseURpc3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKCk7CisgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gaW5wdXREZWxlZ2F0ZSA9IG1fd2ViVmll
dy0+X2lucHV0RGVsZWdhdGUuZ2V0KCk7CisKKyAgICAgICAgICAgIGlmICghW2lucHV0RGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzp3aWxsU3VibWl0Rm9ybVZh
bHVlczp1c2VyT2JqZWN0OnN1Ym1pc3Npb25IYW5kbGVyOildKSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVNYXAgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp0ZXh0RmllbGRWYWx1ZXMuc2l6ZSgpXSk7
CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB0ZXh0RmllbGRWYWx1ZXMpCisg
ICAgICAgICAgICAgICAgW3ZhbHVlTWFwIHNldE9iamVjdDpwYWlyLnNlY29uZCBmb3JLZXk6cGFp
ci5maXJzdF07CisKKyAgICAgICAgICAgIE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4gKnVzZXJP
YmplY3QgPSBuaWw7CisgICAgICAgICAgICBpZiAoQVBJOjpEYXRhKiBkYXRhID0gc3RhdGljX2Nh
c3Q8QVBJOjpEYXRhKj4odXNlckRhdGEpKSB7CisgICAgICAgICAgICAgICAgYXV0byBuc0RhdGEg
PSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0X2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihkYXRhLT5ieXRlcygpKSkgbGVuZ3RoOmRh
dGEtPnNpemUoKSBmcmVlV2hlbkRvbmU6Tk9dKTsKKyAgICAgICAgICAgICAgICBhdXRvIHVuYXJj
aGl2ZXIgPSBzZWN1cmVVbmFyY2hpdmVyRnJvbURhdGEobnNEYXRhLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBAdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGFsbG93ZWRDbGFz
c2VzID0gbV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYWxsb3dlZENs
YXNzZXNGb3JQYXJhbWV0ZXJDb2RpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJP
YmplY3QgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNzZXMg
Zm9yS2V5OkAidXNlck9iamVjdCJdOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VyT2JqZWN0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZD
bGFzczpbTlNPYmplY3QgY2xhc3NdIGZvcktleTpAInVzZXJPYmplY3QiXTsKKyAgICAgICAgICAg
ICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUgdXNlciBkYXRhOiAlQCIsIGV4Y2VwdGlv
bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRv
IGNoZWNrZXIgPSBXZWJLaXQ6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShp
bnB1dERlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1
ZXM6dXNlck9iamVjdDpzdWJtaXNzaW9uSGFuZGxlcjopKTsKKyAgICAgICAgICAgIFtpbnB1dERl
bGVnYXRlIF93ZWJWaWV3Om1fd2ViVmlldyB3aWxsU3VibWl0Rm9ybVZhbHVlczp2YWx1ZU1hcC5n
ZXQoKSB1c2VyT2JqZWN0OnVzZXJPYmplY3Qgc3VibWlzc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRy
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2Vy
ID0gV1RGTW92ZShjaGVja2VyKV0geworICAgICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21w
bGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KS5nZXQo
KV07CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdLV2ViVmlldyAqbV93ZWJW
aWV3OworICAgIH07CisKKyAgICBpZiAoaW5wdXREZWxlZ2F0ZSkKKyAgICAgICAgX3BhZ2UtPnNl
dEZvcm1DbGllbnQobWFrZVVuaXF1ZTxGb3JtQ2xpZW50PihzZWxmKSk7CisgICAgZWxzZQorICAg
ICAgICBfcGFnZS0+c2V0Rm9ybUNsaWVudChudWxscHRyKTsKIH0KIAotLSAoQ0dGbG9hdClfb3Zl
cnJpZGVEZXZpY2VTY2FsZUZhY3RvcgorLSAoQk9PTClfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUlt
YWdlRG9jdW1lbnQKIHsKLSAgICByZXR1cm4gX2ltcGwtPm92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0
b3IoKTsKKyAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQorICAg
ICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVu
dCgpOworICAgIHJldHVybiBOTzsKIH0KIAotLSAodm9pZClfc2V0VG9wQ29udGVudEluc2V0OihD
R0Zsb2F0KWNvbnRlbnRJbnNldAorLSAoQk9PTClfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZU1lZGlh
RG9jdW1lbnQKIHsKLSAgICByZXR1cm4gX2ltcGwtPnNldFRvcENvbnRlbnRJbnNldChjb250ZW50
SW5zZXQpOworICAgIGlmIChhdXRvKiBtYWluRnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCisg
ICAgICAgIHJldHVybiBtYWluRnJhbWUtPmlzRGlzcGxheWluZ1N0YW5kYWxvbmVNZWRpYURvY3Vt
ZW50KCk7CisgICAgcmV0dXJuIE5POwogfQogCi0tIChDR0Zsb2F0KV90b3BDb250ZW50SW5zZXQK
Ky0gKEJPT0wpX2lzUGxheWluZ0F1ZGlvCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT50b3BDb250ZW50
SW5zZXQoKTsKKyAgICByZXR1cm4gX3BhZ2UtPmlzUGxheWluZ0F1ZGlvKCk7CiB9CiAKLS0gKE5T
Q29sb3IgKilfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yCistIChCT09MKV9pc1Nob3dpbmdO
YXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5wYWdlRXh0ZW5k
ZWRCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICByZXR1cm4gX3BhZ2UtPmlzU2hvd2luZ05hdmlnYXRp
b25HZXN0dXJlU25hcHNob3QoKTsKIH0KIAotLSAoX1dLUmVjdEVkZ2UpX3Bpbm5lZFN0YXRlCist
IChfV0tMYXlvdXRNb2RlKV9sYXlvdXRNb2RlCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5waW5uZWRT
dGF0ZSgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzd2l0Y2ggKF9pbXBsLT5sYXlvdXRNb2Rl
KCkpIHsKKyAgICBjYXNlIGtXS0xheW91dE1vZGVGaXhlZFNpemU6CisgICAgICAgIHJldHVybiBf
V0tMYXlvdXRNb2RlRml4ZWRTaXplOworICAgIGNhc2Uga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXpl
Q29tcHV0ZWRGcm9tVmlld1NjYWxlOgorICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFt
aWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlOworICAgIGNhc2Uga1dLTGF5b3V0TW9kZUR5bmFt
aWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZToKKyAgICAgICAgcmV0dXJuIF9X
S0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7Cisg
ICAgY2FzZSBrV0tMYXlvdXRNb2RlVmlld1NpemU6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIF9XS0xheW91dE1vZGVWaWV3U2l6ZTsKKyAgICB9CisjZWxzZQorICAgIHJldHVybiBfcGFn
ZS0+dXNlRml4ZWRMYXlvdXQoKSA/IF9XS0xheW91dE1vZGVGaXhlZFNpemUgOiBfV0tMYXlvdXRN
b2RlVmlld1NpemU7CisjZW5kaWYKIH0KIAotLSAoX1dLUmVjdEVkZ2UpX3J1YmJlckJhbmRpbmdF
bmFibGVkCistICh2b2lkKV9zZXRMYXlvdXRNb2RlOihfV0tMYXlvdXRNb2RlKWxheW91dE1vZGUK
IHsKLSAgICByZXR1cm4gX2ltcGwtPnJ1YmJlckJhbmRpbmdFbmFibGVkKCk7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIFdLTGF5b3V0TW9kZSB3a1ZpZXdMYXlvdXRNb2RlOworICAgIHN3aXRjaCAo
bGF5b3V0TW9kZSkgeworICAgIGNhc2UgX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZToKKyAgICAgICAg
d2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVGaXhlZFNpemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxl
OgorICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29t
cHV0ZWRGcm9tVmlld1NjYWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIF9XS0xheW91dE1v
ZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU6CisgICAgICAgIHdr
Vmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5p
bXVtRG9jdW1lbnRTaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIF9XS0xheW91dE1vZGVW
aWV3U2l6ZToKKyAgICBkZWZhdWx0OgorICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5
b3V0TW9kZVZpZXdTaXplOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgX2ltcGwtPnNldExh
eW91dE1vZGUod2tWaWV3TGF5b3V0TW9kZSk7CisjZWxzZQorICAgIF9wYWdlLT5zZXRVc2VGaXhl
ZExheW91dChsYXlvdXRNb2RlID09IF9XS0xheW91dE1vZGVGaXhlZFNpemUgfHwgbGF5b3V0TW9k
ZSA9PSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGUpOworI2Vu
ZGlmCiB9CiAKLS0gKHZvaWQpX3NldFJ1YmJlckJhbmRpbmdFbmFibGVkOihfV0tSZWN0RWRnZSlz
dGF0ZQorLSAoQ0dTaXplKV9maXhlZExheW91dFNpemUKIHsKLSAgICBfaW1wbC0+c2V0UnViYmVy
QmFuZGluZ0VuYWJsZWQoc3RhdGUpOworICAgIHJldHVybiBfcGFnZS0+Zml4ZWRMYXlvdXRTaXpl
KCk7CiB9CiAKLS0gKGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0
VGVzdFJlc3VsdDooX1dLSGl0VGVzdFJlc3VsdCAqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9X
S0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTooaWQ8TlNTZWN1cmVDb2Rpbmc+KXVz
ZXJEYXRhCistICh2b2lkKV9zZXRGaXhlZExheW91dFNpemU6KENHU2l6ZSlmaXhlZExheW91dFNp
emUKIHsKLSAgICByZXR1cm4gbmlsOworICAgIF9wYWdlLT5zZXRGaXhlZExheW91dFNpemUoV2Vi
Q29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShmaXhlZExheW91dFNpemUp
KSk7CiB9CiAKLS0gKHZvaWQpX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0czoo
Qk9PTClhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMKKy0gKHZvaWQpX3NldEJhY2tn
cm91bmRFeHRlbmRzQmV5b25kUGFnZTooQk9PTCliYWNrZ3JvdW5kRXh0ZW5kcwogewotICAgIF9p
bXBsLT5zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMoYXV0b21hdGljYWxseUFk
anVzdHNDb250ZW50SW5zZXRzKTsKKyAgICBfcGFnZS0+c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlv
bmRQYWdlKGJhY2tncm91bmRFeHRlbmRzKTsKIH0KIAotLSAoQk9PTClfYXV0b21hdGljYWxseUFk
anVzdHNDb250ZW50SW5zZXRzCistIChCT09MKV9iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UK
IHsKLSAgICByZXR1cm4gX2ltcGwtPmF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cygp
OworICAgIHJldHVybiBfcGFnZS0+YmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKCk7CiB9CiAK
LS0gKENHRmxvYXQpX21pbmltdW1MYXlvdXRXaWR0aAorLSAoQ0dGbG9hdClfdmlld1NjYWxlCiB7
Ci0gICAgcmV0dXJuIF9wYWdlLT5taW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQoKS53aWR0aCgpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX3BhZ2UtPnZpZXdTY2FsZUZhY3RvcigpOwor
I2Vsc2UKKyAgICByZXR1cm4gX3BhZ2UtPmxheW91dFNpemVTY2FsZUZhY3RvcigpOworI2VuZGlm
CiB9CiAKLS0gKHZvaWQpX3NldE1pbmltdW1MYXlvdXRXaWR0aDooQ0dGbG9hdCl3aWR0aAorLSAo
dm9pZClfc2V0Vmlld1NjYWxlOihDR0Zsb2F0KXZpZXdTY2FsZQogewotICAgIEJPT0wgZXhwYW5k
c1RvRml0ID0gd2lkdGggPiAwOworICAgIGlmICh2aWV3U2NhbGUgPD0gMCB8fCBpc25hbih2aWV3
U2NhbGUpIHx8IGlzaW5mKHZpZXdTY2FsZSkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpO
U0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJWaWV3IHNjYWxlIHNob3VsZCBiZSBh
IHBvc2l0aXZlIG51bWJlciJdOwogCi0gICAgX3BhZ2UtPnNldE1pbmltdW1TaXplRm9yQXV0b0xh
eW91dChXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCAwKSk7Ci0gICAgX3BhZ2UtPnNldE1haW5GcmFt
ZUlzU2Nyb2xsYWJsZSghZXhwYW5kc1RvRml0KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgX2lt
cGwtPnNldFZpZXdTY2FsZSh2aWV3U2NhbGUpOworI2Vsc2UKKyAgICBpZiAoX3BhZ2UtPmxheW91
dFNpemVTY2FsZUZhY3RvcigpID09IHZpZXdTY2FsZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
X2ltcGwtPnNldENsaXBzVG9WaXNpYmxlUmVjdChleHBhbmRzVG9GaXQpOworICAgIF9wYWdlLT5z
ZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5b3V0U2l6ZShbc2VsZiBhY3RpdmVWaWV3TGF5
b3V0U2l6ZTpzZWxmLmJvdW5kc10sIHZpZXdTY2FsZSwgX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVE
ZXZpY2VXaWR0aCgpKTsKKyNlbmRpZgogfQogCi0tIChCT09MKV9zaG91bGRFeHBhbmRDb250ZW50
VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dAorLSAodm9pZClfc2V0TWluaW11bUVmZmVjdGl2ZURl
dmljZVdpZHRoOihDR0Zsb2F0KW1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aAogewotICAgIHJl
dHVybiBfaW1wbC0+c2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dCgpOwotfQor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKF9wYWdlLT5taW5pbXVtRWZmZWN0aXZl
RGV2aWNlV2lkdGgoKSA9PSBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgpCisgICAgICAgIHJl
dHVybjsKIAotLSAodm9pZClfc2V0U2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1
dG9MYXlvdXQ6KEJPT0wpc2hvdWxkRXhwYW5kCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zZXRTaG91
bGRFeHBhbmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0KHNob3VsZEV4cGFuZCk7CisgICAgX3Bh
Z2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXplKFtzZWxmIGFjdGl2ZVZp
ZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgX3BhZ2UtPmxheW91dFNpemVTY2FsZUZhY3Rvcigp
LCBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgpOworI2VuZGlmCiB9CiAKLS0gKEJPT0wpX2Fs
d2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyCistIChDR0Zsb2F0KV9taW5pbXVtRWZmZWN0aXZl
RGV2aWNlV2lkdGgKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmFsd2F5c1Nob3dzSG9yaXpvbnRhbFNj
cm9sbGVyKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1cm4gX3BhZ2UtPm1p
bmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgogfQogCi0tICh2b2lkKV9zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcjooQk9PTClh
bHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcgorI3ByYWdtYSBtYXJrIHNjcm9sbHBlcmYgbWV0
aG9kcworCistICh2b2lkKV9zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxl
ZDooQk9PTCllbmFibGVkCiB7Ci0gICAgX3BhZ2UtPnNldEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNj
cm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKTsKKyAgICBfcGFnZS0+c2V0U2Ny
b2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKEJP
T0wpX2Fsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcgorLSAoQk9PTClfc2Nyb2xsUGVyZm9ybWFu
Y2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmFsd2F5c1Nob3dz
VmVydGljYWxTY3JvbGxlcigpOworICAgIHJldHVybiBfcGFnZS0+c2Nyb2xsUGVyZm9ybWFuY2VE
YXRhQ29sbGVjdGlvbkVuYWJsZWQoKTsKIH0KIAotLSAodm9pZClfc2V0QWx3YXlzU2hvd3NWZXJ0
aWNhbFNjcm9sbGVyOihCT09MKWFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcgorLSAoTlNBcnJh
eSAqKV9zY3JvbGxQZXJmb3JtYW5jZURhdGEKIHsKLSAgICBfcGFnZS0+c2V0QWx3YXlzU2hvd3NW
ZXJ0aWNhbFNjcm9sbGVyKGFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcik7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQ
ZXJmb3JtYW5jZURhdGEqIHNjcm9sbFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9sbGluZ1BlcmZvcm1h
bmNlRGF0YSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsUGVyZkRhdGEtPmRhdGEoKTsKKyNlbmRp
ZgorICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVy
YXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbworI3ByYWdtYSBtYXJr
IG1lZGlhIHBsYXliYWNrIHJlc3RyaWN0aW9ucworCistIChCT09MKV9hbGxvd3NNZWRpYURvY3Vt
ZW50SW5saW5lUGxheWJhY2sKIHsKLSAgICByZXR1cm4gW3NlbGYgcHJpbnRPcGVyYXRpb25XaXRo
UHJpbnRJbmZvOnByaW50SW5mb107CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1
cm4gX3BhZ2UtPmFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjaygpOworI2Vsc2UKKyAg
ICByZXR1cm4gTk87CisjZW5kaWYKIH0KIAotLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9w
ZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1lOihf
V0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlCistICh2b2lkKV9zZXRBbGxvd3NNZWRpYURvY3Vt
ZW50SW5saW5lUGxheWJhY2s6KEJPT0wpZmxhZwogewotICAgIGlmIChhdXRvKiB3ZWJGcmFtZVBy
b3h5ID0gX3BhZ2UtPnByb2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJG
cm9tSUQoZnJhbWVIYW5kbGUuX2ZyYW1lSUQpKSkKLSAgICAgICAgcmV0dXJuIF9pbXBsLT5wcmlu
dE9wZXJhdGlvbldpdGhQcmludEluZm8ocHJpbnRJbmZvLCAqd2ViRnJhbWVQcm94eSk7Ci0gICAg
cmV0dXJuIG5pbDsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIF9wYWdlLT5zZXRBbGxv
d3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2soZmxhZyk7CisjZW5kaWYKIH0KIAotLSAodm9p
ZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOihOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24pdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbgorLSAoQk9PTClfd2ViUHJvY2Vz
c0lzUmVzcG9uc2l2ZQogewotICAgIFtzdXBlciBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uOnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25dOwotCi0gICAgX2ltcGwtPnNldFVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbik7Cisg
ICAgcmV0dXJuIF9wYWdlLT5wcm9jZXNzKCkuaXNSZXNwb25zaXZlKCk7CiB9CiAKLS0gKEJPT0wp
X3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworLSAodm9pZClfc2V0RnVsbHNjcmVlbkRl
bGVnYXRlOihpZDxfV0tGdWxsc2NyZWVuRGVsZWdhdGU+KWRlbGVnYXRlCiB7Ci0jaWYgSEFWRShU
T1VDSF9CQVIpCi0gICAgcmV0dXJuIF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcoKTsKLSNlbHNlCi0gICAgcmV0dXJuIE5POworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICBpZiAoaXM8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNj
cmVlbkNsaWVudCgpKSkKKyAgICAgICAgZG93bmNhc3Q8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50
PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKS5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7CiAjZW5k
aWYKIH0KIAotLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihCT09M
KXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworLSAoaWQ8X1dLRnVsbHNjcmVlbkRlbGVn
YXRlPilfZnVsbHNjcmVlbkRlbGVnYXRlCiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpCi0gICAgX2lt
cGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcpOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAo
aXM8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKSkK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2Ut
PmZ1bGxzY3JlZW5DbGllbnQoKSkuZGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwogI2VuZGlmCisg
ICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoaWQpX21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKKy0g
KEJPT0wpX2lzSW5GdWxsc2NyZWVuCiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpCi0gICAgcmV0dXJu
IF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA/IF9pbXBsLT5t
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorICAgIHJldHVybiBfcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKSAmJiBfcGFnZS0+ZnVs
bFNjcmVlbk1hbmFnZXIoKS0+aXNGdWxsU2NyZWVuKCk7CiAjZWxzZQotICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIGZvciBz
dWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzooaWQpbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworLSAoX1dLTWVkaWFDYXB0dXJlU3Rh
dGUpX21lZGlhQ2FwdHVyZVN0YXRlCiB7CisgICAgcmV0dXJuIFdlYktpdDo6dG9XS01lZGlhQ2Fw
dHVyZVN0YXRlKF9wYWdlLT5tZWRpYVN0YXRlRmxhZ3MoKSk7CiB9CiAKLS8vIFRoaXMgbWV0aG9k
IGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldworLSAodm9pZClfc2V0TWVkaWFDYXB0dXJlRW5hYmxlZDooQk9PTCll
bmFibGVkCiB7CisgICAgX3BhZ2UtPnNldE1lZGlhQ2FwdHVyZUVuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKLS0gKHZvaWQpX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopdGFyZ2V0V2lu
ZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCist
IChCT09MKV9tZWRpYUNhcHR1cmVFbmFibGVkCiB7Ci0gICAgYXV0byBjb21wbGV0aW9uSGFuZGxl
ckNvcHkgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOwotICAgIF9pbXBsLT5wcmVw
YXJlRm9yTW92ZVRvV2luZG93KHRhcmdldFdpbmRvdywgW2NvbXBsZXRpb25IYW5kbGVyQ29weV0g
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkoKTsKLSAgICB9KTsKKyAgICByZXR1cm4g
X3BhZ2UtPm1lZGlhQ2FwdHVyZUVuYWJsZWQoKTsKIH0KIAotLSAodm9pZClfc2V0VGh1bWJuYWls
VmlldzooX1dLVGh1bWJuYWlsVmlldyAqKXRodW1ibmFpbFZpZXcKKy0gKHZvaWQpX3NldFBhZ2VN
dXRlZDooX1dLTWVkaWFNdXRlZFN0YXRlKW11dGVkU3RhdGUKIHsKLSAgICBfaW1wbC0+c2V0VGh1
bWJuYWlsVmlldyh0aHVtYm5haWxWaWV3KTsKLX0KKyAgICBXZWJDb3JlOjpNZWRpYVByb2R1Y2Vy
OjpNdXRlZFN0YXRlRmxhZ3MgY29yZVN0YXRlID0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6Tm9u
ZU11dGVkOwogCi0tIChfV0tUaHVtYm5haWxWaWV3ICopX3RodW1ibmFpbFZpZXcKLXsKLSAgICBp
ZiAoIV9pbXBsKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBfaW1wbC0+dGh1bWJu
YWlsVmlldygpOworICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFBdWRpb011dGVkKQorICAg
ICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6QXVkaW9Jc011dGVkOwor
ICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFDYXB0dXJlRGV2aWNlc011dGVkKQorICAgICAg
ICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6QXVkaW9BbmRWaWRlb0NhcHR1
cmVJc011dGVkOworICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFTY3JlZW5DYXB0dXJlTXV0
ZWQpCisgICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpTY3JlZW5D
YXB0dXJlSXNNdXRlZDsKKworICAgIF9wYWdlLT5zZXRNdXRlZChjb3JlU3RhdGUpOwogfQogCi0t
ICh2b2lkKV9zZXRJZ25vcmVzQWxsRXZlbnRzOihCT09MKWlnbm9yZXNBbGxFdmVudHMKKy0gKHZv
aWQpX3JlbW92ZURhdGFEZXRlY3RlZExpbmtzOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24K
IHsKLSAgICBfaW1wbC0+c2V0SWdub3Jlc0FsbEV2ZW50cyhpZ25vcmVzQWxsRXZlbnRzKTsKKyNp
ZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgX3BhZ2UtPnJlbW92ZURhdGFEZXRlY3RlZExp
bmtzKFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0gbWFrZVdl
YWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7CisgICAgICAgIGlmIChwYWdlKQor
ICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOworICAgICAg
ICBpZiAoY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKKyAgICB9KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworI2VuZGlmCiB9CiAKLS0gKEJPT0wp
X2lnbm9yZXNBbGxFdmVudHMKKy8vIEV4ZWN1dGUgdGhlIHN1cHBsaWVkIGJsb2NrIGFmdGVyIHRo
ZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20gdGhlIFdlYlByb2Nlc3MuCistICh2b2lkKV9kb0FmdGVy
TmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKIHsKLSAg
ICByZXR1cm4gX2ltcGwtPmlnbm9yZXNBbGxFdmVudHMoKTsKKyAgICBbc2VsZiBfaW50ZXJuYWxE
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0Zv
clBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwogfQogCi0t
IChOU0ludGVnZXIpX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnCistICh2b2lkKV9kb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZv
aWQpKXVwZGF0ZUJsb2NrCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5zcGVsbENoZWNrZXJEb2N1bWVu
dFRhZygpOworICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRl
OnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6WUVTIHdpdGhvdXRXYWl0aW5n
Rm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwogfQogCi0jZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3Bh
dGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENv
bnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLUBlbmQKKyAg
ICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7CiAKLSN1
bmRlZiBGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRFTlRWSUVXCisgICAgaWYgKF9zdGFibGVTdGF0
ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcykKKyAgICAgICAgW19zdGFibGVTdGF0ZVByZXNl
bnRhdGlvblVwZGF0ZUNhbGxiYWNrcyBhZGRPYmplY3Q6dXBkYXRlQmxvY2tDb3B5LmdldCgpXTsK
KyAgICBlbHNlIHsKKyAgICAgICAgX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJh
Y2tzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6dXBk
YXRlQmxvY2tDb3B5LmdldCgpLCBuaWxdKTsKKyAgICAgICAgW3NlbGYgX2ZpcmVQcmVzZW50YXRp
b25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3NdOworICAg
IH0KK30KKyNlbmRpZgogCi1AaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmcpCisj
cHJhZ21hIG1hcmsgaU9TLXNwZWNpZmljIG1ldGhvZHMKIAotLSAodm9pZClfc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkCi17CiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBbX2NvbnRlbnRWaWV3IHNldENvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZDplbmFibGVkXTsKLSNlbHNlCi0gICAgX2ltcGwtPnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKLSNlbmRpZgotfQogCi0tIChOU0RpY3Rpb25h
cnkgKilfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZh
Y2VJdGVtCistICh2b2lkKV9kZXRlY3REYXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5cGVz
KXR5cGVzIGNvbXBsZXRpb25IYW5kbGVyOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KIHsK
LSAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAInZhbGlkYXRpb25C
dWJibGUiXSkgewotICAgICAgICBhdXRvKiB2YWxpZGF0aW9uQnViYmxlID0gX3BhZ2UtPnZhbGlk
YXRpb25CdWJibGUoKTsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxpZGF0aW9uQnViYmxl
ID8gdmFsaWRhdGlvbkJ1YmJsZS0+bWVzc2FnZSgpIDogZW1wdHlTdHJpbmcoKTsKLSAgICAgICAg
ZG91YmxlIGZvbnRTaXplID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25CdWJibGUtPmZv
bnRTaXplKCkgOiAwOwotICAgICAgICByZXR1cm4gQHsgdXNlckludGVyZmFjZUl0ZW06IEB7IEAi
bWVzc2FnZSI6IChOU1N0cmluZyAqKW1lc3NhZ2UsIEAiZm9udFNpemUiOiBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZTpmb250U2l6ZV0gfSB9OwotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNl
SXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbV07CisjaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQorICAgIF9wYWdlLT5kZXRlY3REYXRhSW5BbGxGcmFtZXMoZnJvbVdLRGF0YURldGVj
dG9yVHlwZXModHlwZXMpLCBbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwg
cGFnZSA9IG1ha2VXZWFrUHRyKF9wYWdlLmdldCgpKV0gKGF1dG8mIHJlc3VsdCkgeworICAgICAg
ICBpZiAocGFnZSkKKyAgICAgICAgICAgIHBhZ2UtPnNldERhdGFEZXRlY3Rpb25SZXN1bHQocmVz
dWx0KTsKKyAgICAgICAgaWYgKGNvbXBsZXRpb24pCisgICAgICAgICAgICBjb21wbGV0aW9uKCk7
CisgICAgfSk7CiAjZWxzZQotICAgIHJldHVybiBuaWw7CisgICAgVU5VU0VEX1BBUkFNKHR5cGVz
KTsKKyAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7CiAjZW5kaWYKIH0KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRp
b246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mbyAqKSlibG9jaworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKy0gKHZv
aWQpcmVtb3ZlRnJvbVN1cGVydmlldwogewotICAgIGF1dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6
OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChw
b3NpdGlvbikpOwotICAgIGluZm9SZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7CisgICAg
W3N1cGVyIHJlbW92ZUZyb21TdXBlcnZpZXddOwogCi0gICAgW19jb250ZW50VmlldyBkb0FmdGVy
UG9zaXRpb25JbmZvcm1hdGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihi
bG9jayldIChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0
aW9uKSB7Ci0gICAgICAgIGNhcHR1cmVkQmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFj
dGl2YXRlZEVsZW1lbnRJbmZvV2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmlu
Zm9ybWF0aW9uIHVzZXJJbmZvOm5pbF0pOwotICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07
CisgICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkKKyAg
ICAgICAgW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1
cGVydmlld1doaWxlSW5GdWxsc2NyZWVuXTsKIH0KKyNlbmRpZgogCi0tICh2b2lkKV9hY2Nlc3Np
YmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJy
YXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyCisvLyBEZXByZWNhdGVkIFNQ
SS4KKy0gKENHU2l6ZSlfbWluaW11bUxheW91dFNpemVPdmVycmlkZQogewotICAgIFtfY29udGVu
dFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0
IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25SZWN0cykgewotICAgICAgICBpZiAoIWNhcHR1
cmVkQ29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8g
cmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBh
Y2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rp
b25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCi0gICAgICAgICAgICBbcmVjdFZhbHVlcyBhZGRPYmpl
Y3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNlbGVjdGlvblJlY3QucmVjdCgpXV07Ci0gICAg
ICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIocmVjdFZhbHVlcy5nZXQoKSk7Ci0gICAgfV07
CisgICAgQVNTRVJUKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKTsKKyAgICByZXR1cm4gX3ZpZXdM
YXlvdXRTaXplT3ZlcnJpZGUudmFsdWVPcihDR1NpemVaZXJvKTsKIH0KIAotLSAodm9pZClfc2V0
RGV2aWNlT3JpZW50YXRpb25Vc2VyUGVybWlzc2lvbkhhbmRsZXJGb3JUZXN0aW5nOihCT09MIChe
KSgpKWhhbmRsZXIKKy0gKHZvaWQpX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6KENHU2l6ZSl2
aWV3TGF5b3V0U2l6ZU92ZXJyaWRlCiB7Ci0gICAgRnVuY3Rpb248Ym9vbCgpPiBoYW5kbGVyV3Jh
cHBlcjsKLSAgICBpZiAoaGFuZGxlcikKLSAgICAgICAgaGFuZGxlcldyYXBwZXIgPSBbaGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihoYW5kbGVyKV0geyByZXR1cm4gaGFuZGxlcigpOyB9OwotICAgIF9w
YWdlLT5zZXREZXZpY2VPcmllbnRhdGlvblVzZXJQZXJtaXNzaW9uSGFuZGxlckZvclRlc3Rpbmco
V1RGTW92ZShoYW5kbGVyV3JhcHBlcikpOworICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0g
dmlld0xheW91dFNpemVPdmVycmlkZTsKKworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQor
ICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpXZWJDb3JlOjpGbG9hdFNp
emUodmlld0xheW91dFNpemVPdmVycmlkZSldOwogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5
U3RvcmVTZWxlY3Rpb24KKy0gKFVJRWRnZUluc2V0cylfb2JzY3VyZWRJbnNldHMKIHsKLSAgICBb
X2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dOworICAgIHJldHVybiBf
b2JzY3VyZWRJbnNldHM7CiB9CiAKLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlv
bgorLSAodm9pZClfc2V0T2JzY3VyZWRJbnNldHM6KFVJRWRnZUluc2V0cylvYnNjdXJlZEluc2V0
cwogewotICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlDbGVhclNlbGVjdGlvbl07Cisg
ICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLnRvcCA+PSAwKTsKKyAgICBBU1NFUlQob2JzY3VyZWRJ
bnNldHMubGVmdCA+PSAwKTsKKyAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMuYm90dG9tID49IDAp
OworICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy5yaWdodCA+PSAwKTsKKworICAgIF9oYXZlU2V0
T2JzY3VyZWRJbnNldHMgPSBZRVM7CisKKyAgICBpZiAoVUlFZGdlSW5zZXRzRXF1YWxUb0VkZ2VJ
bnNldHMoX29ic2N1cmVkSW5zZXRzLCBvYnNjdXJlZEluc2V0cykpCisgICAgICAgIHJldHVybjsK
KworICAgIF9vYnNjdXJlZEluc2V0cyA9IG9ic2N1cmVkSW5zZXRzOworCisgICAgW3NlbGYgX3Nj
aGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKIH0KIAotLSAoVUlWaWV3ICopX2Z1bGxT
Y3JlZW5QbGFjZWhvbGRlclZpZXcKKy0gKFVJUmVjdEVkZ2UpX29ic2N1cmVkSW5zZXRFZGdlc0Fm
ZmVjdGVkQnlTYWZlQXJlYQogewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAo
W19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKQotICAgICAgICByZXR1
cm4gW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3UGxhY2Vob2xkZXJdOwotI2Vu
ZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVy
biBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOwogfQogCi0tIChDR1JlY3Qp
X2NvbnRlbnRWaXNpYmxlUmVjdAorLSAodm9pZClfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0
ZWRCeVNhZmVBcmVhOihVSVJlY3RFZGdlKWVkZ2VzCiB7Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZl
cnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Ci19
CisgICAgaWYgKGVkZ2VzID09IF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEp
CisgICAgICAgIHJldHVybjsKIAotLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbUNvbnRlbnRz
VG9WaWV3OihDR1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2ludDpw
b2ludCBmcm9tVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwotfQorICAgIF9vYnNjdXJl
ZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEgPSBlZGdlczsKIAotLSAoQ0dQb2ludClfY29u
dmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJu
IFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3
XTsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwogfQogCi0t
ICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dAorLSAoVUlFZGdlSW5zZXRzKV91bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMKIHsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpZRVNd
OworICAgIHJldHVybiBfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOwogfQogCi0tICh2b2lkKWtl
eWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMKKy0gKHZvaWQpX3NldFVub2JzY3VyZWRTYWZlQXJl
YUluc2V0czooVUlFZGdlSW5zZXRzKXVub2JzY3VyZWRTYWZlQXJlYUluc2V0cwogewotICAgIFtf
Y29udGVudFZpZXcgYWNjZXNzb3J5VGFiOk5PXTsKLX0KKyAgICBBU1NFUlQodW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzLnRvcCA+PSAwKTsKKyAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRzLmxlZnQgPj0gMCk7CisgICAgQVNTRVJUKHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5ib3R0
b20gPj0gMCk7CisgICAgQVNTRVJUKHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5yaWdodCA+PSAw
KTsKIAotLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0
b1N0cmluZzooTlNTdHJpbmcgKilvbGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFtfY29udGVudFZpZXcgYXBwbHlB
dXRvY29ycmVjdGlvbjpuZXdTdHJpbmcgdG9TdHJpbmc6b2xkU3RyaW5nIHdpdGhDb21wbGV0aW9u
SGFuZGxlcjpbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildIChVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHMpIHsKLSAgICAgICAg
Y2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH1dOworICAgIF9oYXZlU2V0VW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXRzID0gWUVTOworCisgICAgaWYgKFVJRWRnZUluc2V0c0VxdWFsVG9F
ZGdlSW5zZXRzKF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMsIHVub2JzY3VyZWRTYWZlQXJlYUlu
c2V0cykpCisgICAgICAgIHJldHVybjsKKworICAgIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMg
PSB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7CisKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxl
Q29udGVudFJlY3RVcGRhdGVdOwogfQogCi0tICh2b2lkKWRpc21pc3NGb3JtQWNjZXNzb3J5Vmll
dworLSAoQk9PTClfc2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cwogewotICAgIFtf
Y29udGVudFZpZXcgYWNjZXNzb3J5RG9uZV07CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRD
b250ZW50Vmlld10pCisgICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2F2b2lkc1Vuc2Fm
ZUFyZWE7CiB9CiAKLS0gKHZvaWQpX2Rpc21pc3NGaWxlUGlja2VyCistICh2b2lkKV9zZXRJbnRl
cmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOihVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFj
ZU9yaWVudGF0aW9uCiB7Ci0gICAgW19jb250ZW50VmlldyBkaXNtaXNzRmlsZVBpY2tlcl07Cisg
ICAgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uID0gWUVTOworICAgIF9pbnRlcmZhY2VP
cmllbnRhdGlvbk92ZXJyaWRlID0gaW50ZXJmYWNlT3JpZW50YXRpb247CisKKyAgICBpZiAoX2R5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlOjpOb3RSZXNpemluZykKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0RGV2aWNlT3JpZW50
YXRpb246ZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKF9pbnRlcmZh
Y2VPcmllbnRhdGlvbk92ZXJyaWRlKV07CiB9CiAKLS0gKHZvaWQpc2V0VGltZVBpY2tlclZhbHVl
VG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGUKKy0gKFVJSW50
ZXJmYWNlT3JpZW50YXRpb24pX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUKIHsKLSAgICBb
X2NvbnRlbnRWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjpob3VyIG1pbnV0ZTptaW51dGVd
OworICAgIEFTU0VSVChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24pOworICAgIHJldHVy
biBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTsKIH0KIAotLSAodm9pZClzZWxlY3RGb3Jt
QWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXgKKy0gKHZvaWQpX2NsZWFySW50ZXJmYWNl
T3JpZW50YXRpb25PdmVycmlkZQogewotICAgIFtfY29udGVudFZpZXcgc2VsZWN0Rm9ybUFjY2Vz
c29yeVBpY2tlclJvdzpyb3dJbmRleF07CisgICAgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0
aW9uID0gTk87CisgICAgX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBVSUludGVyZmFj
ZU9yaWVudGF0aW9uUG9ydHJhaXQ7CiB9CiAKLS0gKE5TU3RyaW5nICopc2VsZWN0Rm9ybVBvcG92
ZXJUaXRsZQorLy8gRGVwcmVjYXRlZCBTUEkKKy0gKENHU2l6ZSlfbWF4aW11bVVub2JzY3VyZWRT
aXplT3ZlcnJpZGUKIHsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBzZWxlY3RGb3JtUG9wb3Zl
clRpdGxlXTsKKyAgICBBU1NFUlQoX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKTsKKyAg
ICByZXR1cm4gX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlLnZhbHVlT3IoQ0dTaXplWmVy
byk7CiB9CiAKLS0gKE5TU3RyaW5nICopdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZworLSAodm9p
ZClfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6KENHU2l6ZSlzaXplCiB7Ci0gICAg
cmV0dXJuIFtfY29udGVudFZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ107CisgICAgQVNT
RVJUKHNpemUud2lkdGggPD0gc2VsZi5ib3VuZHMuc2l6ZS53aWR0aCAmJiBzaXplLmhlaWdodCA8
PSBzZWxmLmJvdW5kcy5zaXplLmhlaWdodCk7CisgICAgX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92
ZXJyaWRlID0gc2l6ZTsKKworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBX
ZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICBb
c2VsZiBfZGlzcGF0Y2hTZXRNYXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXpl
KHNpemUpXTsKIH0KIAotLSAoTlNTdHJpbmcgKilmb3JtSW5wdXRMYWJlbAorLSAodm9pZClfc2V0
QWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdDooQk9PTClhbGxvd1Nocmlua1RvRml0CiB7Ci0gICAg
cmV0dXJuIFtfY29udGVudFZpZXcgZm9ybUlucHV0TGFiZWxdOworICAgIF9hbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0ID0gYWxsb3dTaHJpbmtUb0ZpdDsKIH0KIAotLSAodm9pZClkaWRTdGFydEZv
cm1Db250cm9sSW50ZXJhY3Rpb24KKy0gKEJPT0wpX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQK
IHsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKyAgICByZXR1cm4gX2FsbG93
c1ZpZXdwb3J0U2hyaW5rVG9GaXQ7CiB9CiAKLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRl
cmFjdGlvbgorLSAodm9pZClfYmVnaW5JbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlCiB7
Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCisgICAgQVNTRVJUKCFfaXNDaGFu
Z2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSk7CisgICAgX2lzQ2hhbmdpbmdPYnNjdXJl
ZEluc2V0c0ludGVyYWN0aXZlbHkgPSBZRVM7CiB9CiAKLS0gKHZvaWQpX2RpZFNob3dDb250ZXh0
TWVudQorLSAodm9pZClfZW5kSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZQogewotICAg
IC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgIEFTU0VSVChfaXNDaGFuZ2luZ09i
c2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSk7CisgICAgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0
c0ludGVyYWN0aXZlbHkgPSBOTzsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVdOwogfQogCi0tICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnUKKy0gKHZvaWQp
X2hpZGVDb250ZW50VW50aWxOZXh0VXBkYXRlCiB7Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8g
b3ZlcnJpZGUuCisgICAgaWYgKGF1dG8qIGFyZWEgPSBfcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAg
ICAgICAgYXJlYS0+aGlkZUNvbnRlbnRVbnRpbEFueVVwZGF0ZSgpOwogfQogCi0tIChDR1JlY3Qp
X3VpVGV4dENhcmV0UmVjdAorLSAodm9pZClfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVz
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIC8vIEZvcmNlIHRoZSBzZWxlY3Rp
b24gdmlldyB0byB1cGRhdGUgaWYgbmVlZGVkLgotICAgIFtfY29udGVudFZpZXcgX3VwZGF0ZUNo
YW5nZWRTZWxlY3Rpb25dOworICAgIENHUmVjdCBvbGRCb3VuZHMgPSBzZWxmLmJvdW5kczsKKyAg
ICBXZWJDb3JlOjpGbG9hdFJlY3Qgb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gX3BhZ2UtPnVu
b2JzY3VyZWRDb250ZW50UmVjdCgpOwogCi0gICAgcmV0dXJuIFtbX2NvbnRlbnRWaWV3IHZhbHVl
Rm9yS2V5UGF0aDpAImludGVyYWN0aW9uQXNzaXN0YW50LnNlbGVjdGlvblZpZXcuc2VsZWN0aW9u
LmNhcmV0UmVjdCJdIENHUmVjdFZhbHVlXTsKLX0KKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSB8fCAhX2hhc0NvbW1pdHRlZExvYWRGb3JNYWluRnJhbWUgfHwgQ0dSZWN0
SXNFbXB0eShvbGRCb3VuZHMpIHx8IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcih3ZWJfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOildKQorICAgICAgICAg
ICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVz
OnVwZGF0ZUJsb2NrXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXBkYXRlQmxvY2soKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotLSAoQ0dSZWN0KV9pbnB1dFZpZXdCb3VuZHMKLXsK
LSAgICByZXR1cm4gX2lucHV0Vmlld0JvdW5kczsKLX0KKyAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2JlZ2luQW5pbWF0ZWRSZXNp
emVXaXRoVXBkYXRlczpdIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsK
IAotLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopX3VpVGV4dFNlbGVjdGlvblJlY3RzCi17Ci0gICAg
Ly8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCi0gICAgW19j
b250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisgICAgX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJlc2l6aW5n
V2l0aEFuaW1hdGlvbjsKIAotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF91aVRleHRTZWxlY3Rp
b25SZWN0c107Ci19CisgICAgYXV0byBvbGRWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2ZVZp
ZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXTsKKyAgICBhdXRvIG9sZE1heGltdW1Vbm9ic2N1cmVk
U2l6ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShzZWxmLCBvbGRCb3VuZHMpOworICAg
IGludDMyX3Qgb2xkT3JpZW50YXRpb24gPSBhY3RpdmVPcmllbnRhdGlvbihzZWxmKTsKKyAgICBV
SUVkZ2VJbnNldHMgb2xkT2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7CiAKLS0gKE5T
U3RyaW5nICopX3Njcm9sbGluZ1RyZWVBc1RleHQKLXsKLSAgICBXZWJLaXQ6OlJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHkoKTsKLSAgICBpZiAoIWNvb3JkaW5hdG9yKQotICAgICAgICByZXR1cm4gQCIi
OworICAgIHVwZGF0ZUJsb2NrKCk7CisKKyAgICBDR1JlY3QgbmV3Qm91bmRzID0gc2VsZi5ib3Vu
ZHM7CisgICAgYXV0byBuZXdWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRT
aXplOm5ld0JvdW5kc107CisgICAgYXV0byBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBhY3Rp
dmVNYXhpbXVtVW5vYnNjdXJlZFNpemUoc2VsZiwgbmV3Qm91bmRzKTsKKyAgICBpbnQzMl90IG5l
d09yaWVudGF0aW9uID0gYWN0aXZlT3JpZW50YXRpb24oc2VsZik7CisgICAgVUlFZGdlSW5zZXRz
IG5ld09ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5zZXRzOworICAgIENHUmVjdCBmdXR1cmVV
bm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzID0gVUlFZGdlSW5zZXRzSW5zZXRSZWN0KG5l
d0JvdW5kcywgX29ic2N1cmVkSW5zZXRzKTsKKyAgICBDR1JlY3QgY29udGVudFZpZXdCb3VuZHMg
PSBbX2NvbnRlbnRWaWV3IGJvdW5kc107CisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoX3Zp
ZXdMYXlvdXRTaXplT3ZlcnJpZGUgJiYgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgpKSwgIkNs
aWVudHMgY29udHJvbGxpbmcgdGhlIGxheW91dCBzaXplIHNob3VsZCBtYWludGFpbiBhIHZhbGlk
IGxheW91dCBzaXplIHRvIG1pbmltaXplIGxheW91dHMuIik7CisgICAgaWYgKENHUmVjdElzRW1w
dHkobmV3Qm91bmRzKSB8fCBuZXdWaWV3TGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgQ0dSZWN0SXNF
bXB0eShmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzKSB8fCBDR1JlY3RJc0Vt
cHR5KGNvbnRlbnRWaWV3Qm91bmRzKSkgeworICAgICAgICBbc2VsZiBfY2FuY2VsQW5pbWF0ZWRS
ZXNpemVdOworICAgICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOworICAgICAgICBp
ZiAoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpCisgICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hT
ZXRWaWV3TGF5b3V0U2l6ZTpuZXdWaWV3TGF5b3V0U2l6ZV07CisgICAgICAgIGlmIChfbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpCisgICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRN
YXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKG5ld01heGltdW1Vbm9ic2N1
cmVkU2l6ZSldOworICAgICAgICBpZiAoX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uKQor
ICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0RGV2aWNlT3JpZW50YXRpb246bmV3T3JpZW50
YXRpb25dOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoQ0dSZWN0RXF1YWxU
b1JlY3Qob2xkQm91bmRzLCBuZXdCb3VuZHMpCisgICAgICAgICYmIG9sZFZpZXdMYXlvdXRTaXpl
ID09IG5ld1ZpZXdMYXlvdXRTaXplCisgICAgICAgICYmIG9sZE1heGltdW1Vbm9ic2N1cmVkU2l6
ZSA9PSBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUKKyAgICAgICAgJiYgb2xkT3JpZW50YXRpb24g
PT0gbmV3T3JpZW50YXRpb24KKyAgICAgICAgJiYgVUlFZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNl
dHMob2xkT2JzY3VyZWRJbnNldHMsIG5ld09ic2N1cmVkSW5zZXRzKSkgeworICAgICAgICBbc2Vs
ZiBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
X3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0zRElkZW50
aXR5OworCisgICAgaWYgKCFfcmVzaXplQW5pbWF0aW9uVmlldykgeworICAgICAgICBOU1VJbnRl
Z2VyIGluZGV4T2ZDb250ZW50VmlldyA9IFtbX3Njcm9sbFZpZXcgc3Vidmlld3NdIGluZGV4T2ZP
YmplY3Q6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICAgICAgX3Jlc2l6ZUFuaW1hdGlvblZpZXcg
PSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtfcmVzaXplQW5pbWF0
aW9uVmlldyBsYXllcl0ubmFtZSA9IEAiUmVzaXplQW5pbWF0aW9uIjsKKyAgICAgICAgW19zY3Jv
bGxWaWV3IGluc2VydFN1YnZpZXc6X3Jlc2l6ZUFuaW1hdGlvblZpZXcuZ2V0KCkgYXRJbmRleDpp
bmRleE9mQ29udGVudFZpZXddOworICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgYWRkU3Vi
dmlldzpfY29udGVudFZpZXcuZ2V0KCldOworICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcg
YWRkU3VidmlldzpbX2NvbnRlbnRWaWV3IHVuc2NhbGVkVmlld11dOworICAgIH0KKworICAgIENH
U2l6ZSBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcyA9IGNvbnRlbnRWaWV3Qm91
bmRzLnNpemU7CisgICAgW19zY3JvbGxWaWV3IHNldE1pbmltdW1ab29tU2NhbGU6c3RkOjptaW4o
bmV3Vmlld0xheW91dFNpemUud2lkdGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3Jk
aW5hdGVzLndpZHRoLCBbX3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV0pXTsKKyAgICBbX3Nj
cm9sbFZpZXcgc2V0TWF4aW11bVpvb21TY2FsZTpzdGQ6Om1heChuZXdWaWV3TGF5b3V0U2l6ZS53
aWR0aCgpIC8gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGgsIFtfc2Ny
b2xsVmlldyBtYXhpbXVtWm9vbVNjYWxlXSldOworCisgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IHNj
YWxlIHRvIGtlZXAgdGhlIGN1cnJlbnQgY29udGVudCB3aWR0aCBpbiB0aGUgc2Nyb2xsdmlldy4K
KyAgICBDR0Zsb2F0IG9sZFdlYlZpZXdXaWR0aEluQ29udGVudFZpZXdDb29yZGluYXRlcyA9IG9s
ZFVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpOworICAgIF9hbmltYXRlZFJlc2l6ZU9yaWdp
bmFsQ29udGVudFdpZHRoID0gc3RkOjptaW4oY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRp
bmF0ZXMud2lkdGgsIG9sZFdlYlZpZXdXaWR0aEluQ29udGVudFZpZXdDb29yZGluYXRlcyk7Cisg
ICAgQ0dGbG9hdCB0YXJnZXRTY2FsZSA9IG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBfYW5p
bWF0ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aDsKKyAgICBDR0Zsb2F0IHJlc2l6ZUFuaW1h
dGlvblZpZXdBbmltYXRpb25TY2FsZSA9IHRhcmdldFNjYWxlIC8gY29udGVudFpvb21TY2FsZShz
ZWxmKTsKKyAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgc2V0VHJhbnNmb3JtOkNHQWZmaW5lVHJh
bnNmb3JtTWFrZVNjYWxlKHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSwgcmVzaXpl
QW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxlKV07CisKKyAgICAvLyBDb21wdXRlIGEgbmV3IHBv
c2l0aW9uIHRvIGtlZXAgdGhlIGNvbnRlbnQgY2VudGVyZWQuCisgICAgQ0dQb2ludCBvcmlnaW5h
bENvbnRlbnRDZW50ZXIgPSBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QuY2VudGVyKCk7CisgICAg
Q0dQb2ludCBvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNlbGZDb29yZGluYXRlcyA9IFtzZWxmIGNv
bnZlcnRQb2ludDpvcmlnaW5hbENvbnRlbnRDZW50ZXIgZnJvbVZpZXc6X2NvbnRlbnRWaWV3Lmdl
dCgpXTsKKyAgICBDR1BvaW50IGZ1dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxmQ29vcmRp
bmF0ZXMgPSBDR1BvaW50TWFrZShmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVz
Lm9yaWdpbi54ICsgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5zaXplLndp
ZHRoIC8gMiwgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5vcmlnaW4ueSAr
IGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQgLyAyKTsK
KworICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50T2Zmc2V0ID0gW19zY3JvbGxWaWV3IGNvbnRl
bnRPZmZzZXRdOworICAgIENHUG9pbnQgY29udGVudE9mZnNldCA9IG9yaWdpbmFsQ29udGVudE9m
ZnNldDsKKyAgICBjb250ZW50T2Zmc2V0LnggKz0gKG9yaWdpbmFsQ29udGVudENlbnRlckluU2Vs
ZkNvb3JkaW5hdGVzLnggLSBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3JkaW5h
dGVzLngpOworICAgIGNvbnRlbnRPZmZzZXQueSArPSAob3JpZ2luYWxDb250ZW50Q2VudGVySW5T
ZWxmQ29vcmRpbmF0ZXMueSAtIGZ1dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxmQ29vcmRp
bmF0ZXMueSk7CisKKyAgICAvLyBMaW1pdCB0aGUgbmV3IG9mZnNldCB3aXRoaW4gdGhlIHNjcm9s
bHZpZXcsIHdlIGRvIG5vdCB3YW50IHRvIHJ1YmJlciBiYW5kIHByb2dyYW1tYXRpY2FsbHkuCisg
ICAgQ0dTaXplIGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMgPSBDR1NpemVNYWtl
KGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoICogdGFyZ2V0U2NhbGUs
IGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLmhlaWdodCAqIHRhcmdldFNjYWxl
KTsKKyAgICBDR0Zsb2F0IG1heEhvcml6b250YWxPZmZzZXQgPSBmdXR1cmVDb250ZW50U2l6ZUlu
U2VsZkNvb3JkaW5hdGVzLndpZHRoIC0gbmV3Qm91bmRzLnNpemUud2lkdGggKyBfb2JzY3VyZWRJ
bnNldHMucmlnaHQ7CisgICAgY29udGVudE9mZnNldC54ID0gc3RkOjptaW4oY29udGVudE9mZnNl
dC54LCBtYXhIb3Jpem9udGFsT2Zmc2V0KTsKKyAgICBDR0Zsb2F0IG1heFZlcnRpY2FsT2Zmc2V0
ID0gZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcy5oZWlnaHQgLSBuZXdCb3VuZHMu
c2l6ZS5oZWlnaHQgKyBfb2JzY3VyZWRJbnNldHMuYm90dG9tOworICAgIGNvbnRlbnRPZmZzZXQu
eSA9IHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQueSwgbWF4VmVydGljYWxPZmZzZXQpOworCisgICAg
Y29udGVudE9mZnNldC54ID0gc3RkOjptYXgoY29udGVudE9mZnNldC54LCAtX29ic2N1cmVkSW5z
ZXRzLmxlZnQpOworICAgIGNvbnRlbnRPZmZzZXQueSA9IHN0ZDo6bWF4KGNvbnRlbnRPZmZzZXQu
eSwgLV9vYnNjdXJlZEluc2V0cy50b3ApOworCisgICAgLy8gTWFrZSB0aGUgdG9wL2JvdHRvbSBl
ZGdlcyAic3RpY2t5IiB3aXRoaW4gMSBwaXhlbC4KKyAgICBpZiAob2xkVW5vYnNjdXJlZENvbnRl
bnRSZWN0Lm1heFkoKSA+IGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLmhlaWdo
dCAtIDEpCisgICAgICAgIGNvbnRlbnRPZmZzZXQueSA9IG1heFZlcnRpY2FsT2Zmc2V0OworICAg
IGlmIChvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QueSgpIDwgMSkKKyAgICAgICAgY29udGVudE9m
ZnNldC55ID0gW3NlbGYgX2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld10ueTsKKwor
ICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXZlIGNvbnRlbnQgY2VudGVyZWQgYWZ0ZXIgZG91YmxlIHRh
cCB0byB6b29tLCB3ZSBzaG91bGQgYWxzbyB0cnkgdG8ga2VlcCB0aGF0IHJlY3QgaW4gdmlldy4K
KyAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudFNpemU6cm91bmRTY3JvbGxWaWV3Q29udGVudFNp
emUoKl9wYWdlLCBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzKV07CisgICAgW19z
Y3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldF07CisKKyAgICBDR1JlY3Qg
dmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0Om5ld0Jv
dW5kcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICBDR1JlY3QgdW5vYnNjdXJlZFJl
Y3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OmZ1dHVyZVVub2JzY3Vy
ZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisKKyAg
ICBVSUVkZ2VJbnNldHMgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gW3NlbGYgX2NvbXB1dGVk
VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRdOworICAgIFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50IHVu
b2JzY3VyZWRTYWZlQXJlYUluc2V0c0V4dGVudCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMudG9w
LCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMucmlnaHQsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0
cy5ib3R0b20sIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5sZWZ0KTsKKworICAgIF9sYXN0U2Vu
dFZpZXdMYXlvdXRTaXplID0gbmV3Vmlld0xheW91dFNpemU7CisgICAgX2xhc3RTZW50TWF4aW11
bVVub2JzY3VyZWRTaXplID0gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplOworICAgIF9sYXN0U2Vu
dERldmljZU9yaWVudGF0aW9uID0gbmV3T3JpZW50YXRpb247CisKKyAgICBfcGFnZS0+ZHluYW1p
Y1ZpZXdwb3J0U2l6ZVVwZGF0ZShuZXdWaWV3TGF5b3V0U2l6ZSwgbmV3TWF4aW11bVVub2JzY3Vy
ZWRTaXplLCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzLCB1bm9ic2N1cmVkUmVjdElu
Q29udGVudENvb3JkaW5hdGVzLCBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVz
LCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQsIHRhcmdldFNjYWxlLCBuZXdPcmllbnRh
dGlvbiwgKytfY3VycmVudER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRCk7CisgICAgaWYgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBfcGFnZS0+ZHJhd2luZ0FyZWEo
KSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShuZXdCb3Vu
ZHMuc2l6ZSkpOwogCi0gICAgcmV0dXJuIGNvb3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0
KCk7CisgICAgX3dhaXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVzaXplID0gWUVTOworICAg
IF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBZRVM7CiB9CiAKLS0gKE5TTnVtYmVyICop
X3N0YWJsZVN0YXRlT3ZlcnJpZGUKKy0gKHZvaWQpX2VuZEFuaW1hdGVkUmVzaXplCiB7Ci0gICAg
Ly8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0gICAgcmV0dXJuIG5pbDsKKyAgICBSRUxF
QVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2Vu
ZEFuaW1hdGVkUmVzaXplXSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAlZCIsIHNlbGYsIF9w
YWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUp
OworCisgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIHVwLXRvLWRhdGUgbGF5ZXIgdHJlZSwg
aW1tZWRpYXRlbHkgY29tcGxldGUKKyAgICAvLyB0aGUgcmVzaXplLiBPdGhlcndpc2UsIHdlIHdp
bGwgZGVmZXIgY29tcGxldGlvbiB1bnRpbCB3ZSBkby4KKyAgICBfd2FpdGluZ0ZvckVuZEFuaW1h
dGVkUmVzaXplID0gTk87CisgICAgaWYgKCFfd2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRS
ZXNpemUpCisgICAgICAgIFtzZWxmIF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXTsKIH0KIAot
LSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Js
b2NrX3QpdXBkYXRlQmxvY2sKKy0gKHZvaWQpX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhV
cGRhdGVzOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIGlmICghW3NlbGYgdXNl
c1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsK
KyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dl
YlZpZXcgX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOl0iLCBzZWxmLCBfcGFn
ZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkpOwogCi0gICAgaWYgKF9zdGFibGVTdGF0ZVByZXNl
bnRhdGlvblVwZGF0ZUNhbGxiYWNrcykKLSAgICAgICAgW19zdGFibGVTdGF0ZVByZXNlbnRhdGlv
blVwZGF0ZUNhbGxiYWNrcyBhZGRPYmplY3Q6dXBkYXRlQmxvY2tDb3B5LmdldCgpXTsKLSAgICBl
bHNlIHsKLSAgICAgICAgX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6dXBkYXRlQmxv
Y2tDb3B5LmdldCgpLCBuaWxdKTsKLSAgICAgICAgW3NlbGYgX2ZpcmVQcmVzZW50YXRpb25VcGRh
dGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3NdOworICAgIFtzZWxm
IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxvY2tdOworICAgIGlmIChf
ZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0
ZU1vZGU6OlJlc2l6aW5nV2l0aEFuaW1hdGlvbikgeworICAgICAgICBbX2NvbnRlbnRWaWV3IHNl
dEhpZGRlbjpZRVNdOworICAgICAgICBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktp
dDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoRG9jdW1lbnRIaWRkZW47
CisgICAgICAgIAorICAgICAgICAvLyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0
ZXMgaXMgdXNlZCBieSBpdHNlbGY7IHRoZSBjbGllbnQgd2lsbAorICAgICAgICAvLyBub3QgY2Fs
bCBlbmRBbmltYXRlZFJlc2l6ZSwgc28gd2UgY2FuJ3Qgd2FpdCBmb3IgaXQuCisgICAgICAgIF93
YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKICAgICB9CiB9CiAKQEAgLTcxNTEsNjQz
ICs2ODQzLDQ1OSBAQCAtICh2b2lkKV9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0
YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzCiAgICAgfV07CiB9CiAKLS0gKE5TRGljdGlv
bmFyeSAqKV9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5zaWduZWQgbG9uZyBsb25nKWxheWVy
SUQKLXsKLSAgICBDQUxheWVyKiBsYXllciA9IGRvd25jYXN0PFdlYktpdDo6UmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eT4oKl9wYWdlLT5kcmF3aW5nQXJlYSgpKS5sYXllcldpdGhJREZv
clRlc3RpbmcobGF5ZXJJRCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBAewotICAgICAgICBAImJvdW5kcyIgOiBAewotICAgICAgICAgICAgQCJ4
IiA6IEAobGF5ZXIuYm91bmRzLm9yaWdpbi54KSwKLSAgICAgICAgICAgIEAieSIgOiBAKGxheWVy
LmJvdW5kcy5vcmlnaW4ueCksCi0gICAgICAgICAgICBAIndpZHRoIiA6IEAobGF5ZXIuYm91bmRz
LnNpemUud2lkdGgpLAotICAgICAgICAgICAgQCJoZWlnaHQiIDogQChsYXllci5ib3VuZHMuc2l6
ZS5oZWlnaHQpLAotCi0gICAgICAgIH0sCi0gICAgICAgIEAicG9zaXRpb24iIDogQHsKLSAgICAg
ICAgICAgIEAieCIgOiBAKGxheWVyLnBvc2l0aW9uLngpLAotICAgICAgICAgICAgQCJ5IiA6IEAo
bGF5ZXIucG9zaXRpb24ueSksCi0gICAgICAgIH0sCi0gICAgICAgIEAielBvc2l0aW9uIiA6IEAo
bGF5ZXIuelBvc2l0aW9uKSwKLSAgICAgICAgQCJhbmNob3JQb2ludCIgOiBAewotICAgICAgICAg
ICAgQCJ4IiA6IEAobGF5ZXIuYW5jaG9yUG9pbnQueCksCi0gICAgICAgICAgICBAInkiIDogQChs
YXllci5hbmNob3JQb2ludC55KSwKLSAgICAgICAgfSwKLSAgICAgICAgQCJhbmNob3JQb2ludFoi
IDogQChsYXllci5hbmNob3JQb2ludFopLAotICAgICAgICBAInRyYW5zZm9ybSIgOiBAewotICAg
ICAgICAgICAgQCJtMTEiIDogQChsYXllci50cmFuc2Zvcm0ubTExKSwKLSAgICAgICAgICAgIEAi
bTEyIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMiksCi0gICAgICAgICAgICBAIm0xMyIgOiBAKGxh
eWVyLnRyYW5zZm9ybS5tMTMpLAotICAgICAgICAgICAgQCJtMTQiIDogQChsYXllci50cmFuc2Zv
cm0ubTE0KSwKLQotICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci50cmFuc2Zvcm0ubTIxKSwK
LSAgICAgICAgICAgIEAibTIyIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yMiksCi0gICAgICAgICAg
ICBAIm0yMyIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjMpLAotICAgICAgICAgICAgQCJtMjQiIDog
QChsYXllci50cmFuc2Zvcm0ubTI0KSwKLQotICAgICAgICAgICAgQCJtMzEiIDogQChsYXllci50
cmFuc2Zvcm0ubTMxKSwKLSAgICAgICAgICAgIEAibTMyIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0z
MiksCi0gICAgICAgICAgICBAIm0zMyIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzMpLAotICAgICAg
ICAgICAgQCJtMzQiIDogQChsYXllci50cmFuc2Zvcm0ubTM0KSwKLQotICAgICAgICAgICAgQCJt
NDEiIDogQChsYXllci50cmFuc2Zvcm0ubTQxKSwKLSAgICAgICAgICAgIEAibTQyIiA6IEAobGF5
ZXIudHJhbnNmb3JtLm00MiksCi0gICAgICAgICAgICBAIm00MyIgOiBAKGxheWVyLnRyYW5zZm9y
bS5tNDMpLAotICAgICAgICAgICAgQCJtNDQiIDogQChsYXllci50cmFuc2Zvcm0ubTQ0KSwKLSAg
ICAgICAgfSwKLSAgICAgICAgQCJzdWJsYXllclRyYW5zZm9ybSIgOiBAewotICAgICAgICAgICAg
QCJtMTEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMTEpLAotICAgICAgICAgICAgQCJt
MTIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMTIpLAotICAgICAgICAgICAgQCJtMTMi
IDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMTMpLAotICAgICAgICAgICAgQCJtMTQiIDog
QChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMTQpLAotCi0gICAgICAgICAgICBAIm0yMSIgOiBA
KGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0yMSksCi0gICAgICAgICAgICBAIm0yMiIgOiBAKGxh
eWVyLnN1YmxheWVyVHJhbnNmb3JtLm0yMiksCi0gICAgICAgICAgICBAIm0yMyIgOiBAKGxheWVy
LnN1YmxheWVyVHJhbnNmb3JtLm0yMyksCi0gICAgICAgICAgICBAIm0yNCIgOiBAKGxheWVyLnN1
YmxheWVyVHJhbnNmb3JtLm0yNCksCi0KLSAgICAgICAgICAgIEAibTMxIiA6IEAobGF5ZXIuc3Vi
bGF5ZXJUcmFuc2Zvcm0ubTMxKSwKLSAgICAgICAgICAgIEAibTMyIiA6IEAobGF5ZXIuc3VibGF5
ZXJUcmFuc2Zvcm0ubTMyKSwKLSAgICAgICAgICAgIEAibTMzIiA6IEAobGF5ZXIuc3VibGF5ZXJU
cmFuc2Zvcm0ubTMzKSwKLSAgICAgICAgICAgIEAibTM0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFu
c2Zvcm0ubTM0KSwKLQotICAgICAgICAgICAgQCJtNDEiIDogQChsYXllci5zdWJsYXllclRyYW5z
Zm9ybS5tNDEpLAotICAgICAgICAgICAgQCJtNDIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9y
bS5tNDIpLAotICAgICAgICAgICAgQCJtNDMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5t
NDMpLAotICAgICAgICAgICAgQCJtNDQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tNDQp
LAotICAgICAgICB9LAotCi0gICAgICAgIEAiaGlkZGVuIiA6IEAobGF5ZXIuaGlkZGVuKSwKLSAg
ICAgICAgQCJkb3VibGVTaWRlZCIgOiBAKGxheWVyLmRvdWJsZVNpZGVkKSwKLSAgICAgICAgQCJt
YXNrc1RvQm91bmRzIiA6IEAobGF5ZXIubWFza3NUb0JvdW5kcyksCi0gICAgICAgIEAiY29udGVu
dHNTY2FsZSIgOiBAKGxheWVyLmNvbnRlbnRzU2NhbGUpLAotICAgICAgICBAInJhc3Rlcml6YXRp
b25TY2FsZSIgOiBAKGxheWVyLnJhc3Rlcml6YXRpb25TY2FsZSksCi0gICAgICAgIEAib3BhcXVl
IiA6IEAobGF5ZXIub3BhcXVlKSwKLSAgICAgICAgQCJvcGFjaXR5IiA6IEAobGF5ZXIub3BhY2l0
eSksCi0gICAgfTsKLX0KLQotLSAodm9pZClfZG9BZnRlclJlc2V0dGluZ1NpbmdsZVRhcEdlc3R1
cmU6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCistICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vzc29y
eVZpZXdzSW5zZXQ6KENHU2l6ZSlpbnNldAogewotICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJS
ZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOmFjdGlvbl07CisgICAgW19jdXN0b21Db250ZW50Vmll
dyB3ZWJfc2V0T3ZlcmxhaWRBY2Nlc3NvcnlWaWV3c0luc2V0Omluc2V0XTsKIH0KIAotLSAodm9p
ZClfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOihkaXNwYXRjaF9i
bG9ja190KWFjdGlvbgorLSAodm9pZClfc25hcHNob3RSZWN0OihDR1JlY3QpcmVjdEluVmlld0Nv
b3JkaW5hdGVzIGludG9JbWFnZU9mV2lkdGg6KENHRmxvYXQpaW1hZ2VXaWR0aCBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKShDR0ltYWdlUmVmKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFtf
Y29udGVudFZpZXcgX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzph
Y3Rpb25dOwotfQorICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6
OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7CisgICAgICAgIC8vIERl
ZmVyIHNuYXBzaG90dGluZyB1bnRpbCBhZnRlciB0aGUgY3VycmVudCByZXNpemUgY29tcGxldGVz
LgorICAgICAgICB2b2lkICheY29waWVkQ29tcGxldGlvbkhhbmRsZXIpKENHSW1hZ2VSZWYpID0g
W2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOworICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBy
ZXRhaW5lZFNlbGYgPSBzZWxmOworICAgICAgICBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNp
emUuYXBwZW5kKFtyZXRhaW5lZFNlbGYsIHJlY3RJblZpZXdDb29yZGluYXRlcywgaW1hZ2VXaWR0
aCwgY29waWVkQ29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYg
X3NuYXBzaG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0aDppbWFn
ZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOmNvcGllZENvbXBsZXRpb25IYW5kbGVyXTsKKyAgICAg
ICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIENHUmVjdCBzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZl
cnRSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRW
aWV3XTsKKyAgICBDR0Zsb2F0IGltYWdlU2NhbGUgPSBpbWFnZVdpZHRoIC8gc25hcHNob3RSZWN0
SW5Db250ZW50Q29vcmRpbmF0ZXMuc2l6ZS53aWR0aDsKKyAgICBDR0Zsb2F0IGltYWdlSGVpZ2h0
ID0gaW1hZ2VTY2FsZSAqIHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLnNpemUuaGVp
Z2h0OworICAgIENHU2l6ZSBpbWFnZVNpemUgPSBDR1NpemVNYWtlKGltYWdlV2lkdGgsIGltYWdl
SGVpZ2h0KTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLS0gKFdLUGFnZVJlZilfcGFnZVJlZkZvclRy
YW5zaXRpb25Ub1dLV2ViVmlldwotewotICAgIHJldHVybiB0b0FQSShfcGFnZS5nZXQoKSk7Ci19
CisgICAgaWYgKFtbX2N1c3RvbUNvbnRlbnRWaWV3IGNsYXNzXSB3ZWJfcmVxdWlyZXNDdXN0b21T
bmFwc2hvdHRpbmddKSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3NuYXBzaG90
UmVjdEluQ29udGVudFZpZXdDb29yZGluYXRlczpzbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGlu
YXRlcyBzbmFwc2hvdFdpZHRoOmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOworICAgICAgICByZXR1cm47CisgICAgfQogCi0tICh2b2lkKV9kaXNtaXNzQ29u
dGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzCi17Ci0gICAgX2ltcGwtPmRpc21pc3NDb250ZW50UmVs
YXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKLX0KKyNpZiBIQVZFKENPUkVfQU5JTUFU
SU9OX1JFTkRFUl9TRVJWRVIpICYmIEhBVkUoSU9TVVJGQUNFKQorICAgIC8vIElmIHdlIGFyZSBw
YXJlbnRlZCBhbmQgbm90IGhpZGRlbiwgYW5kIHRodXMgd29uJ3QgaW5jdXIgYSBzaWduaWZpY2Fu
dCBwZW5hbHR5IGZyb20gcGFnaW5nIGluIHRpbGVzLCBzbmFwc2hvdCB0aGUgdmlldyBoaWVyYXJj
aHkgZGlyZWN0bHkuCisgICAgTlNTdHJpbmcgKmRpc3BsYXlOYW1lID0gc2VsZi53aW5kb3cuc2Ny
ZWVuLmRpc3BsYXlDb25maWd1cmF0aW9uLm5hbWU7CisgICAgaWYgKGRpc3BsYXlOYW1lICYmICFz
ZWxmLndpbmRvdy5oaWRkZW4pIHsKKyAgICAgICAgYXV0byBzdXJmYWNlID0gV2ViQ29yZTo6SU9T
dXJmYWNlOjpjcmVhdGUoV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6
ZShpbWFnZVNpemUpKSwgV2ViQ29yZTo6c1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgICAgIGlm
ICghc3VyZmFjZSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ0dGbG9hdCBpbWFnZVNjYWxl
SW5WaWV3Q29vcmRpbmF0ZXMgPSBpbWFnZVdpZHRoIC8gcmVjdEluVmlld0Nvb3JkaW5hdGVzLnNp
emUud2lkdGg7CisgICAgICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0z
RE1ha2VTY2FsZShpbWFnZVNjYWxlSW5WaWV3Q29vcmRpbmF0ZXMsIGltYWdlU2NhbGVJblZpZXdD
b29yZGluYXRlcywgMSk7CisgICAgICAgIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RUcmFuc2xh
dGUodHJhbnNmb3JtLCAtcmVjdEluVmlld0Nvb3JkaW5hdGVzLm9yaWdpbi54LCAtcmVjdEluVmll
d0Nvb3JkaW5hdGVzLm9yaWdpbi55LCAwKTsKKyAgICAgICAgQ0FSZW5kZXJTZXJ2ZXJSZW5kZXJE
aXNwbGF5TGF5ZXJXaXRoVHJhbnNmb3JtQW5kVGltZU9mZnNldChNQUNIX1BPUlRfTlVMTCwgKENG
U3RyaW5nUmVmKWRpc3BsYXlOYW1lLCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElkLCByZWlu
dGVycHJldF9jYXN0PHVpbnQ2NF90PihzZWxmLmxheWVyKSwgc3VyZmFjZS0+c3VyZmFjZSgpLCAw
LCAwLCAmdHJhbnNmb3JtLCAwKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6
SU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1vdmUoc3VyZmFjZSkpLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogCi0tICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJl
Y3QgYW5kU2Nyb2xsQnk6KE5TU2l6ZSlvZmZzZXQKLXsKLSAgICBfaW1wbC0+c2V0RnJhbWVBbmRT
Y3JvbGxCeShOU1JlY3RUb0NHUmVjdChyZWN0KSwgTlNTaXplVG9DR1NpemUob2Zmc2V0KSk7Ci19
CisgICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgeworICAgICAgICBBU1NFUlQoIVtbX2N1c3Rv
bUNvbnRlbnRWaWV3IGNsYXNzXSB3ZWJfcmVxdWlyZXNDdXN0b21TbmFwc2hvdHRpbmddKTsKKyAg
ICAgICAgVUlHcmFwaGljc0JlZ2luSW1hZ2VDb250ZXh0V2l0aE9wdGlvbnMoaW1hZ2VTaXplLCBZ
RVMsIDEpOwogCi0tICh2b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dGbG9hdCl0b3Rh
bEhlaWdodE9mQmFubmVycwotewotICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9mQmFubmVycyh0
b3RhbEhlaWdodE9mQmFubmVycyk7Ci19CisgICAgICAgIFVJVmlldyAqY3VzdG9tQ29udGVudFZp
ZXcgPSBfY3VzdG9tQ29udGVudFZpZXcuZ2V0KCk7CisgICAgICAgIFtjdXN0b21Db250ZW50Vmll
dy5iYWNrZ3JvdW5kQ29sb3Igc2V0XTsKKyAgICAgICAgVUlSZWN0RmlsbChDR1JlY3RNYWtlKDAs
IDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KSk7CiAKLS0gKENHRmxvYXQpX3RvdGFsSGVpZ2h0
T2ZCYW5uZXJzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygpOwot
fQorICAgICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IFVJR3JhcGhpY3NHZXRDdXJyZW50Q29u
dGV4dCgpOworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLXNuYXBzaG90
UmVjdEluQ29udGVudENvb3JkaW5hdGVzLm9yaWdpbi54ICogaW1hZ2VTY2FsZSwgLXNuYXBzaG90
UmVjdEluQ29udGVudENvb3JkaW5hdGVzLm9yaWdpbi55ICogaW1hZ2VTY2FsZSk7CisgICAgICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIGltYWdlU2NhbGUsIGltYWdlU2NhbGUpOworICAg
ICAgICBbY3VzdG9tQ29udGVudFZpZXcubGF5ZXIgcmVuZGVySW5Db250ZXh0OmNvbnRleHRdOwog
Ci0tICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKLXsKLSAgICBfaW1w
bC0+YmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFtVSUdyYXBoaWNzR2V0SW1hZ2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgp
IENHSW1hZ2VdKTsKIAotLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwot
ewotICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19CisgICAg
ICAgIFVJR3JhcGhpY3NFbmRJbWFnZUNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMKLXsKLSAgICBf
aW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMoKTsKLX0KKyAgICB2b2lk
KF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoQ0dJbWFnZVJlZikgPSBbY29tcGxldGlvbkhhbmRs
ZXIgY29weV07CisgICAgX3BhZ2UtPnRha2VTbmFwc2hvdChXZWJDb3JlOjplbmNsb3NpbmdJbnRS
ZWN0KHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzKSwgV2ViQ29yZTo6ZXhwYW5kZWRJ
bnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShpbWFnZVNpemUpKSwgV2ViS2l0OjpTbmFwc2hvdE9w
dGlvbnNFeGNsdWRlRGV2aWNlU2NhbGVGYWN0b3IsIFs9XShjb25zdCBXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9y
KSB7CisgICAgICAgIGlmIChpbWFnZUhhbmRsZS5pc051bGwoKSkgeworICAgICAgICAgICAgY29w
aWVkQ29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgICAgICBbY29waWVkQ29tcGxl
dGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAot
LSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2
ZW50Ci17Ci0gICAgX2ltcGwtPmdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9t
Vmlld09ubHkoZXZlbnQpOwotfQorICAgICAgICBhdXRvIGJpdG1hcCA9IFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seSk7CiAKLS0gKHZvaWQpX3NldElnbm9yZXNOb25XaGVlbEV2ZW50czoo
Qk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKLXsKLSAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldo
ZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50cyk7Ci19CisgICAgICAgIGlmICghYml0bWFw
KSB7CisgICAgICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAg
ICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogCi0tIChCT09MKV9pZ25vcmVzTm9uV2hlZWxFdmVudHMKLXsKLSAg
ICByZXR1cm4gX2ltcGwtPmlnbm9yZXNOb25XaGVlbEV2ZW50cygpOworICAgICAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY2dJbWFnZTsKKyAgICAgICAgY2dJbWFnZSA9IGJpdG1hcC0+bWFrZUNH
SW1hZ2UoKTsKKyAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIoY2dJbWFnZS5nZXQoKSk7
CisgICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICB9KTsKIH0K
IAotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmll
d3MKKy0gKHZvaWQpX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6
ZTooQ0dTaXplKW1pbmltdW1MYXlvdXRTaXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRl
OihDR1NpemUpbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUKIHsKLSAgICBfaW1wbC0+c2V0
Q3VzdG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKLX0KKyAgICBMT0dfV0lUSF9TVFJF
QU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tXZWJWaWV3ICIgPDwgX3BhZ2UtPmlkZW50
aWZpZXIoKSA8PCAiIF9vdmVycmlkZUxheW91dFBhcmFtZXRlcnNXaXRoTWluaW11bUxheW91dFNp
emU6IiA8PCBXZWJDb3JlOjpGbG9hdFNpemUobWluaW11bUxheW91dFNpemUpIDw8ICIgbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6IiA8PCBXZWJDb3JlOjpGbG9hdFNpemUobWF4aW11bVVu
b2JzY3VyZWRTaXplT3ZlcnJpZGUpIDw8ICJdIik7CiAKLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBl
Vmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldAotewotICAgIF9pbXBs
LT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENvbnRlbnRJbnNldCk7Cisg
ICAgW3NlbGYgX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6bWluaW11bUxheW91dFNpemVdOwor
ICAgIFtzZWxmIF9zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTptYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZV07CiB9CiAKLS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5T
RXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3Rh
dGUKKy0gKHZvaWQpX2NsZWFyT3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzCiB7Ci0gICAgcmV0dXJu
IF9pbXBsLT50cnlUb1N3aXBlV2l0aEV2ZW50KGV2ZW50LCBpZ25vcmluZ1Bpbm5lZFN0YXRlKTsK
KyAgICBfdmlld0xheW91dFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsKKyAgICBfbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxvcHQ7CiB9CiAKLS0gKHZvaWQpX3Nl
dERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dSZWN0KSljYWxsYmFjawor
c3RhdGljIFdURjo6T3B0aW9uYWw8V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM+IHZpZXdwb3J0
QXJndW1lbnRzRnJvbURpY3Rpb25hcnkoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5n
ICo+ICp2aWV3cG9ydEFyZ3VtZW50UGFpcnMsIGJvb2wgdmlld3BvcnRGaXRFbmFibGVkKQogewot
ICAgIF9pbXBsLT5zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKGNhbGxiYWNrKTsKLX0K
KyAgICBpZiAoIXZpZXdwb3J0QXJndW1lbnRQYWlycykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotLSAoTlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcoKTsKLX0KKyAgICBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cyhXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50czo6Vmlld3BvcnRNZXRhKTsKIAotLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRv
dwotewotICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlbldpbmRvdygpOwotfQorICAgIFt2aWV3
cG9ydEFyZ3VtZW50UGFpcnMgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOm1ha2VC
bG9ja1B0cihbJl0gKE5TU3RyaW5nICprZXksIE5TU3RyaW5nICp2YWx1ZSwgQk9PTCogc3RvcCkg
eworICAgICAgICBpZiAoIVtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCAh
W3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgICAgICBbTlNF
eGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiLVtXS1dl
YlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06IEtleXMgYW5kIHZhbHVlcyBt
dXN0IGFsbCBiZSBOU1N0cmluZ3MuIl07CisgICAgICAgIFN0cmluZyBrZXlTdHJpbmcgPSBrZXk7
CisgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyA9IHZhbHVlOworICAgICAgICBXZWJDb3JlOjpz
ZXRWaWV3cG9ydEZlYXR1cmUodmlld3BvcnRBcmd1bWVudHMsIGtleVN0cmluZywgdmFsdWVTdHJp
bmcsIHZpZXdwb3J0Rml0RW5hYmxlZCwgW10gKFdlYkNvcmU6OlZpZXdwb3J0RXJyb3JDb2RlLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeworICAgICAgICAgICAgTlNMb2coQCItW1dLV2Vi
VmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogRXJyb3IgcGFyc2luZyB2aWV3
cG9ydCBhcmd1bWVudDogJXMiLCBlcnJvck1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IH0pOworICAgIH0pLmdldCgpXTsKIAotLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMK
LXsKLSAgICBfaW1wbC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKKyAgICByZXR1cm4gdmll
d3BvcnRBcmd1bWVudHM7CiB9CiAKLS0gKHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKKy0g
KHZvaWQpX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgTlNTdHJpbmcgKj4gKilhcmd1bWVudHMKIHsKLSAgICBfaW1wbC0+ZW5hYmxlRnJhbWVT
aXplVXBkYXRlcygpOwotfQorICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKIAotLSAo
dm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoteworICAgIF9wYWdlLT5z
ZXRPdmVycmlkZVZpZXdwb3J0QXJndW1lbnRzKHZpZXdwb3J0QXJndW1lbnRzRnJvbURpY3Rpb25h
cnkoYXJndW1lbnRzLCBfcGFnZS0+cHJlZmVyZW5jZXMoKS52aWV3cG9ydEZpdEVuYWJsZWQoKSkp
OwogfQogCi0tICh2b2lkKV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KKy0gKFVJVmll
dyAqKV92aWV3Rm9yRmluZFVJCiB7CisgICAgcmV0dXJuIFtzZWxmIHZpZXdGb3Jab29taW5nSW5T
Y3JvbGxWaWV3OltzZWxmIHNjcm9sbFZpZXddXTsKIH0KIAotLSAodm9pZClfY29tcGxldGVJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb24KKy0gKEJPT0wpX2lzRGlzcGxheWluZ1BERgogewotfQorICAg
IGZvciAoYXV0byYgbWltZVR5cGUgOiBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpwZGZNSU1F
VHlwZXMoKSkgeworICAgICAgICBDbGFzcyBwcm92aWRlckNsYXNzID0gW1tfY29uZmlndXJhdGlv
biBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldIHByb3ZpZGVyRm9yTUlNRVR5cGU6bWltZVR5cGVd
OworICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyBpc0tpbmRPZkNsYXNzOnByb3ZpZGVy
Q2xhc3NdKQorICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CiAKLS0gKEJPT0wpX2NhbkNo
YW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlCi17Ci0gICAgaWYg
KGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKFdlYkNvcmU6
OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRsZS5fZnJhbWVJRCkpKQotICAgICAgICBy
ZXR1cm4gX2ltcGwtPmNhbkNoYW5nZUZyYW1lTGF5b3V0KCp3ZWJGcmFtZVByb3h5KTsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIE5POwogfQogCi0tIChOU0NvbG9yICopX3VuZGVybGF5
Q29sb3IKKy0gKE5TRGF0YSAqKV9kYXRhRm9yRGlzcGxheWVkUERGCiB7Ci0gICAgcmV0dXJuIF9p
bXBsLT51bmRlcmxheUNvbG9yKCk7CisgICAgaWYgKCFbc2VsZiBfaXNEaXNwbGF5aW5nUERGXSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW19jdXN0b21Db250ZW50VmlldyB3ZWJf
ZGF0YVJlcHJlc2VudGF0aW9uXTsKIH0KIAotLSAodm9pZClfc2V0VW5kZXJsYXlDb2xvcjooTlND
b2xvciAqKXVuZGVybGF5Q29sb3IKKy0gKE5TU3RyaW5nICopX3N1Z2dlc3RlZEZpbGVuYW1lRm9y
RGlzcGxheWVkUERGCiB7Ci0gICAgX2ltcGwtPnNldFVuZGVybGF5Q29sb3IodW5kZXJsYXlDb2xv
cik7CisgICAgaWYgKCFbc2VsZiBfaXNEaXNwbGF5aW5nUERGXSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gW19jdXN0b21Db250ZW50VmlldyB3ZWJfc3VnZ2VzdGVkRmlsZW5hbWVd
OwogfQogCi0tIChCT09MKV9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgorLSAoX1dL
V2ViVmlld1ByaW50Rm9ybWF0dGVyICopX3dlYlZpZXdQcmludEZvcm1hdHRlcgogewotICAgIHJl
dHVybiBfcGFnZSAmJiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsK
KyAgICBVSVZpZXdQcmludEZvcm1hdHRlciAqdmlld1ByaW50Rm9ybWF0dGVyID0gc2VsZi52aWV3
UHJpbnRGb3JtYXR0ZXI7CisgICAgQVNTRVJUKFt2aWV3UHJpbnRGb3JtYXR0ZXIgaXNLaW5kT2ZD
bGFzczpbX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyIGNsYXNzXV0pOworICAgIHJldHVybiAoX1dL
V2ViVmlld1ByaW50Rm9ybWF0dGVyICopdmlld1ByaW50Rm9ybWF0dGVyOwogfQogCi0tICh2b2lk
KV9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRAorc3RhdGljIFdlYkNvcmU6OlVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb24gdG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKFVJU2VtYW50
aWNDb250ZW50QXR0cmlidXRlIGNvbnRlbnRBdHRyaWJ1dGUpCiB7Ci0gICAgaWYgKF9wYWdlKQot
ICAgICAgICBfcGFnZS0+cmVxdWVzdENvbnRyb2xsZWRFbGVtZW50SUQoKTsKLX0KKyAgICBhdXRv
IGRpcmVjdGlvbiA9IFtVSVZpZXcgdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkZvclNlbWFu
dGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKKyAgICBzd2l0Y2ggKGRpcmVj
dGlvbikgeworICAgIGNhc2UgVUlVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmln
aHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
OjpMVFI7CisgICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVm
dDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246
OlJUTDsKKyAgICB9CiAKLS0gKHZvaWQpX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25z
ZTooTlNTdHJpbmcgKilpZGVudGlmaWVyCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFz
c2VzLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJDb3JlOjpVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7CiB9CiAKLS0gKHZvaWQpX2hhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlOihOU1RleHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0ZQorLSAodm9pZClz
ZXRTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGU6KFVJU2VtYW50aWNDb250ZW50QXR0cmlidXRlKWNv
bnRlbnRBdHRyaWJ1dGUKIHsKLSAgICBfaW1wbC0+aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKLX0KKyAgICBbc3VwZXIgc2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRl
bnRBdHRyaWJ1dGVdOwogCi0tICh2b2lkKV9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZQotewot
ICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KKyAgICBfcGFnZS0+c2V0VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbih0b1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oY29udGVu
dEF0dHJpYnV0ZSkpOwogfQogCi0tICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJp
bGl0eTooQk9PTCl2aXNpYmxlCi17Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgot
fQorI2Vsc2UgLy8gI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLS0gKHZvaWQpX2ZvcmNlUmVx
dWVzdENhbmRpZGF0ZXMKLXsKLSAgICBfaW1wbC0+Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRl
c3RpbmcoKTsKLX0KKyNwcmFnbWEgbWFyayAtIE9TIFgtc3BlY2lmaWMgbWV0aG9kcwogCi0tIChC
T09MKV9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcworLSAoQk9PTClfZHJhd3NCYWNrZ3JvdW5kCiB7
Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOworICAgIHJldHVy
biBfaW1wbC0+ZHJhd3NCYWNrZ3JvdW5kKCk7CiB9CiAKLS0gKHZvaWQpX2luc2VydFRleHQ6KGlk
KXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UKKy0gKHZv
aWQpX3NldERyYXdzQmFja2dyb3VuZDooQk9PTClkcmF3c0JhY2tncm91bmQKIHsKLSAgICBbc2Vs
ZiBpbnNlcnRUZXh0OnN0cmluZyByZXBsYWNlbWVudFJhbmdlOnJlcGxhY2VtZW50UmFuZ2VdOwor
ICAgIF9pbXBsLT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsKIH0KIAotLSAo
TlNSZWN0KV9jYW5kaWRhdGVSZWN0CistIChOU0NvbG9yICopX2JhY2tncm91bmRDb2xvcgogewot
ICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmZvY3VzZWRF
bGVtZW50UmVjdDsKKyAgICByZXR1cm4gX2ltcGwtPmJhY2tncm91bmRDb2xvcigpOwogfQogCi0t
IChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCistICh2b2lkKV9zZXRCYWNrZ3JvdW5kQ29sb3I6
KE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IKIHsKLSAgICByZXR1cm4gX2ltcGwtPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKTsKKyAgICBfaW1wbC0+c2V0QmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRD
b2xvcik7CiB9CiAKLS0gKHZvaWQpX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lz
dGVtQXBwZWFyYW5jZQorLSAodm9pZClfc2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJP
T0wpZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQKIHsKLSAgICBfaW1wbC0+c2V0VXNlU3lzdGVt
QXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlKTsKKyAgICBzdGF0aWMgQk9PTCBoYXNMb2dn
ZWREZXByZWNhdGlvbldhcm5pbmc7CisgICAgaWYgKCFoYXNMb2dnZWREZXByZWNhdGlvbldhcm5p
bmcpIHsKKyAgICAgICAgLy8gU2VlIGJ1ZyAxNTU1NTAgZm9yIGRldGFpbHMuCisgICAgICAgIE5T
TG9nKEAiLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOl0gaXMgZGVw
cmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiIpOworICAgICAgICBoYXNMb2dnZWREZXBy
ZWNhdGlvbldhcm5pbmcgPSBZRVM7CisgICAgfQorICAgIFtzZWxmIF9zZXREcmF3c0JhY2tncm91
bmQ6IWRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kXTsKIH0KIAotLSAodm9pZCl2aWV3RGlkQ2hh
bmdlRWZmZWN0aXZlQXBwZWFyYW5jZQorLSAoTlNWaWV3ICopX2luc3BlY3RvckF0dGFjaG1lbnRW
aWV3CiB7Ci0gICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyBbc3VwZXIgaW5pdFdpdGhD
b2RlcjpdIGFuZCBbc3VwZXIgaW5pdFdpdGhGcmFtZTpdLgotICAgIC8vIFRoYXQgaXMgYmVmb3Jl
IF9pbXBsIGlzIHJlYWR5IHRvIGJlIHVzZWQsIHNvIGNoZWNrLiA8cmRhcjovL3Byb2JsZW0vMzk2
MTEyMzY+Ci0gICAgaWYgKCFfaW1wbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2ltcGwtPmVm
ZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKKyAgICByZXR1cm4gX2ltcGwtPmluc3BlY3Rv
ckF0dGFjaG1lbnRWaWV3KCk7CiB9CiAKLS0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDoo
aW50KWhlaWdodAorLSAodm9pZClfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6KE5TVmlldyAq
KW5ld1ZpZXcKIHsKLSAgICBfcGFnZS0+c2V0SGVhZGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyho
ZWlnaHQpOworICAgIF9pbXBsLT5zZXRJbnNwZWN0b3JBdHRhY2htZW50VmlldyhuZXdWaWV3KTsK
IH0KIAotLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0CistICh2b2lk
KV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSlzY3Jv
bGxiYXJTdHlsZQogewotICAgIF9wYWdlLT5zZXRGb290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5n
KGhlaWdodCk7CisgICAgX2ltcGwtPnNldE92ZXJsYXlTY3JvbGxiYXJTdHlsZSh0b0NvcmVTY3Jv
bGxiYXJTdHlsZShzY3JvbGxiYXJTdHlsZSkpOwogfQogCi0tICh2b2lkKV9kb0FmdGVyUHJvY2Vz
c2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KKy0gKF9X
S092ZXJsYXlTY3JvbGxiYXJTdHlsZSlfb3ZlcmxheVNjcm9sbGJhclN0eWxlCiB7Ci0gICAgX2lt
cGwtPmRvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzKGFjdGlvbik7CisgICAg
cmV0dXJuIHRvQVBJU2Nyb2xsYmFyU3R5bGUoX2ltcGwtPm92ZXJsYXlTY3JvbGxiYXJTdHlsZSgp
KTsKIH0KIAotLSAoTlNNZW51ICopX2FjdGl2ZU1lbnUKKy0gKEJPT0wpX3dpbmRvd09jY2x1c2lv
bkRldGVjdGlvbkVuYWJsZWQKIHsKLSAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFj
Y2VzcyBtZW51IGlzIHN1cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBi
ZQotICAgIC8vIGV4dGVuZGVkIHRvIHJlY29nbml6ZSB0aGUgcmVndWxhciBjb250ZXh0IG1lbnUg
YXMgd2VsbC4KLSAgICByZXR1cm4gX2ltcGwtPmRvbVBhc3RlTWVudSgpOworICAgIHJldHVybiBf
aW1wbC0+d2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZCgpOwogfQogCi0jZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQotCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25J
bmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5TSW50
ZWdlcikpY2FsbGJhY2sKKy0gKHZvaWQpX3NldFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJs
ZWQ6KEJPT0wpZW5hYmxlZAogewotICAgIGlmICghX3BhZ2UpIHsKLSAgICAgICAgY2FsbGJhY2so
Tk8sIE5PLCBAIiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksIDApOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYXV0byBoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNhbGxiYWNrKTsK
LSAgICBhdXRvIGxvY2FsQ2FsbGJhY2sgPSBXZWJLaXQ6Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2s6
OmNyZWF0ZShbaGFuZGxlcl0oYm9vbCBhY3RpdmUsIGJvb2wgcmVnaXN0ZXJlZEFzTm93UGxheWlu
Z0FwcGxpY2F0aW9uLCBTdHJpbmcgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBz
ZWRUaW1lLCB1aW50NjRfdCB1bmlxdWVJZGVudGlmaWVyLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3IpIHsKLSAgICAgICAgaGFuZGxlcihhY3RpdmUsIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdB
cHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRpZmll
cik7Ci0gICAgfSk7Ci0KLSAgICBfcGFnZS0+cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9u
SW5mbyhXVEZNb3ZlKGxvY2FsQ2FsbGJhY2spKTsKKyAgICBfaW1wbC0+c2V0V2luZG93T2NjbHVz
aW9uRGV0ZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAodm9pZClfc2V0UGFnZVNjYWxl
OihDR0Zsb2F0KXNjYWxlIHdpdGhPcmlnaW46KENHUG9pbnQpb3JpZ2luCistICh2b2lkKXNoYXJl
U2hlZXREaWREaXNtaXNzOihXS1NoYXJlU2hlZXQgKilzaGFyZVNoZWV0CiB7Ci0gICAgX3BhZ2Ut
PnNjYWxlUGFnZShzY2FsZSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KG9yaWdpbikpOworICAg
IF9pbXBsLT5zaGFyZVNoZWV0RGlkRGlzbWlzcyhzaGFyZVNoZWV0KTsKIH0KIAotLSAoQ0dGbG9h
dClfcGFnZVNjYWxlCistICh2b2lkKV9zZXRPdmVycmlkZURldmljZVNjYWxlRmFjdG9yOihDR0Zs
b2F0KWRldmljZVNjYWxlRmFjdG9yCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlU2NhbGVGYWN0
b3IoKTsKKyAgICBfaW1wbC0+c2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2Fs
ZUZhY3Rvcik7CiB9CiAKLS0gKHZvaWQpX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25V
cGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRp
bmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWludGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1h
dGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUKKy0gKENHRmxv
YXQpX292ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHdpdGhvdXRXYWl0aW5nRm9y
UGFpbnRpbmcpCi0gICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBhaW50QWZ0
ZXJOZXh0Vmlld0RpZE1vdmVUb1dpbmRvdyh0cnVlKTsKLQotICAgIGF1dG8gdXBkYXRlQmxvY2tD
b3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKLQotICAgIFJldGFpblB0cjxXS1dlYlZp
ZXc+IHN0cm9uZ1NlbGYgPSBzZWxmOwotICAgIF9wYWdlLT5jYWxsQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlKFt1cGRhdGVCbG9ja0NvcHksIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNp
emUsIHN0cm9uZ1NlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAg
ICAgICBpZiAoIXVwZGF0ZUJsb2NrQ29weSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmICghd2l0aG91dFdhaXRpbmdGb3JBbmltYXRl
ZFJlc2l6ZSAmJiBzdHJvbmdTZWxmLT5fZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJL
aXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgICAg
ICBzdHJvbmdTZWxmLT5fY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFt1cGRh
dGVCbG9ja0NvcHldIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVCbG9ja0NvcHkoKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVz
aXplKTsKLSNlbmRpZgotCi0gICAgICAgIHVwZGF0ZUJsb2NrQ29weSgpOwotICAgIH0pOworICAg
IHJldHVybiBfaW1wbC0+b3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCi0tIChCT09M
KV9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nCistICh2b2lkKV9zZXRUb3BDb250
ZW50SW5zZXQ6KENHRmxvYXQpY29udGVudEluc2V0CiB7Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMg
dG8gb3ZlcnJpZGU7Ci0gICAgcmV0dXJuIE5POworICAgIHJldHVybiBfaW1wbC0+c2V0VG9wQ29u
dGVudEluc2V0KGNvbnRlbnRJbnNldCk7CiB9CiAKLS0gKHZvaWQpX3NldFNjcm9sbGluZ1VwZGF0
ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KEJPT0wpZGlzYWJsZWQKKy0gKENHRmxvYXQpX3RvcENvbnRl
bnRJbnNldAogeworICAgIHJldHVybiBfaW1wbC0+dG9wQ29udGVudEluc2V0KCk7CiB9CiAKLS8v
IEV4ZWN1dGUgdGhlIHN1cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZy
b20gdGhlIFdlYlByb2Nlc3MuCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKKy0gKE5TQ29sb3IgKilfcGFnZUV4dGVuZGVk
QmFja2dyb3VuZENvbG9yCiB7Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50
YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRo
b3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOk5PXTsKKyAgICByZXR1cm4gX2ltcGwtPnBhZ2VF
eHRlbmRlZEJhY2tncm91bmRDb2xvcigpOwogfQogCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2
b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworLSAoX1dLUmVjdEVkZ2UpX3Bpbm5lZFN0YXRlCiB7
Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRl
QmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0ZvckFuaW1h
dGVkUmVzaXplOllFU107CisgICAgcmV0dXJuIF9pbXBsLT5waW5uZWRTdGF0ZSgpOwogfQogCi0t
ICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistIChfV0tSZWN0RWRnZSlfcnViYmVy
QmFuZGluZ0VuYWJsZWQKIHsKLSAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRh
dGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOllFUyB3aXRo
b3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOk5PXTsKKyAgICByZXR1cm4gX2ltcGwtPnJ1YmJl
ckJhbmRpbmdFbmFibGVkKCk7CiB9CiAKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworLSAodm9pZClfc2V0UnVi
YmVyQmFuZGluZ0VuYWJsZWQ6KF9XS1JlY3RFZGdlKXN0YXRlCiB7Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzLmFwcGVuZCht
YWtlQmxvY2tQdHIodXBkYXRlQmxvY2spKTsKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVdOwotI2Vsc2UKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7Ci0jZW5kaWYKKyAgICBfaW1wbC0+c2V0UnViYmVy
QmFuZGluZ0VuYWJsZWQoc3RhdGUpOwogfQogCi0tICh2b2lkKV9kaXNhYmxlQmFja0ZvcndhcmRT
bmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nCistIChpZClfaW1tZWRpYXRlQWN0aW9uQW5pbWF0
aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6KF9XS0hpdFRlc3RSZXN1bHQgKiloaXRUZXN0
UmVzdWx0IHdpdGhUeXBlOihfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKXR5cGUgdXNlckRhdGE6KGlk
PE5TU2VjdXJlQ29kaW5nPil1c2VyRGF0YQogewotICAgIFdlYktpdDo6Vmlld1NuYXBzaG90U3Rv
cmU6OnNpbmdsZXRvbigpLnNldERpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKHRy
dWUpOworICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDoo
TlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRp
b246KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb24KKy0gKHZvaWQpX3NldEF1dG9tYXRpY2FsbHlB
ZGp1c3RzQ29udGVudEluc2V0czooQk9PTClhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNl
dHMKIHsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmQsIGFyZ3VtZW50LCBb
Y2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbildKFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBpZiAoY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2spCi0gICAgICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jayhlcnJvciA9
PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwotICAgIH0pOworICAgIF9pbXBs
LT5zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMoYXV0b21hdGljYWxseUFkanVz
dHNDb250ZW50SW5zZXRzKTsKIH0KIAotLSAoaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZT4pX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZQorLSAoQk9PTClfYXV0b21hdGljYWxseUFkanVz
dHNDb250ZW50SW5zZXRzCiB7Ci0gICAgcmV0dXJuIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUu
Z2V0QXV0b3JlbGVhc2VkKCk7CisgICAgcmV0dXJuIF9pbXBsLT5hdXRvbWF0aWNhbGx5QWRqdXN0
c0NvbnRlbnRJbnNldHMoKTsKIH0KIAotLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQorLSAoQ0dGbG9h
dClfbWluaW11bUxheW91dFdpZHRoCiB7Ci0gICAgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9
IGRlbGVnYXRlOworICAgIHJldHVybiBfcGFnZS0+bWluaW11bVNpemVGb3JBdXRvTGF5b3V0KCku
d2lkdGgoKTsKIH0KIAotLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1
cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24g
Y29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9zZXRNaW5p
bXVtTGF5b3V0V2lkdGg6KENHRmxvYXQpd2lkdGgKIHsKLSAgICB1c2luZyBFeGNsdXNpb25SdWxl
ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7Ci0K
LSAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgfHwgIV9wYWdlKSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IGV4
Y2x1c2lvblJ1bGVzOwotICAgIGlmIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGZvciAoX1dL
VGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgKndrUnVsZSBpbiBjb25maWd1cmF0aW9uLmV4
Y2x1c2lvblJ1bGVzKSB7Ci0gICAgICAgICAgICBhdXRvIHR5cGUgPSB3a1J1bGUuaXNFeGNsdXNp
b24gPyBFeGNsdXNpb25SdWxlOjpUeXBlOjpFeGNsdWRlIDogRXhjbHVzaW9uUnVsZTo6VHlwZTo6
SW5jbHVkZTsKLSAgICAgICAgICAgIGlmICh3a1J1bGUuYXR0cmlidXRlTmFtZSkKLSAgICAgICAg
ICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkF0dHJp
YnV0ZVJ1bGUgeyB3a1J1bGUuYXR0cmlidXRlTmFtZSwgd2tSdWxlLmF0dHJpYnV0ZVZhbHVlIH0g
fSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh3a1J1bGUuY2xhc3NOYW1lKQotICAgICAgICAgICAg
ICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6Q2xhc3NSdWxl
IHsgd2tSdWxlLmNsYXNzTmFtZSB9IH0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1
bGUgeyB3a1J1bGUuZWxlbWVudE5hbWUgfSB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9w
YWdlLT5zdGFydFRleHRNYW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1NlbGYgPSBX
ZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpXSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKLSAgICAgICAgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRv
a2VucykgewotICAgICAgICBpZiAoIXdlYWtTZWxmKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0gICAgICAgIGF1dG8g
ZGVsZWdhdGUgPSBbcmV0YWluZWRTZWxmIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOwotICAg
ICAgICBpZiAoIWRlbGVnYXRlKQotICAgICAgICAgICAgcmV0dXJuOworICAgIEJPT0wgZXhwYW5k
c1RvRml0ID0gd2lkdGggPiAwOwogCi0gICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKLSAgICAg
ICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2VucykgewotICAgICAgICAgICAgYXV0byB3a1Rva2Vu
ID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwotICAg
ICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVu
dGlmaWVyLnRvVUludDY0KCkpXTsKLSAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9r
ZW4uY29udGVudF07Ci0gICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5pc0V4
Y2x1ZGVkXTsKLSAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07
Ci0gICAgICAgIH0KKyAgICBfcGFnZS0+c2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0KFdlYkNv
cmU6OkludFNpemUod2lkdGgsIDApKTsKKyAgICBfcGFnZS0+c2V0TWFpbkZyYW1lSXNTY3JvbGxh
YmxlKCFleHBhbmRzVG9GaXQpOwogCi0gICAgICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVt
YmVyKGl0ZW1JRC50b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgW2RlbGVn
YXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0
ZW06aXRlbS5nZXQoKV07Ci0gICAgfSwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgewotICAgICAgICBjYXB0dXJlZENvbXBsZXRp
b25CbG9jaygpOwotICAgIH0pOworICAgIF9pbXBsLT5zZXRDbGlwc1RvVmlzaWJsZVJlY3QoZXhw
YW5kc1RvRml0KTsKIH0KIAotLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nl
c3MpKWNvbXBsZXRpb25IYW5kbGVyCistIChCT09MKV9zaG91bGRFeHBhbmRDb250ZW50VG9WaWV3
SGVpZ2h0Rm9yQXV0b0xheW91dAogewotICAgIHVzaW5nIE1hbmlwdWxhdGlvblJlc3VsdCA9IFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1bHQ7Ci0K
LSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGl0ZW1JRCA9IG1h
a2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUludDY0KCkpOwot
Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbj4gdG9rZW5zOwotICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICp3
a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7Ci0gICAgICAgIGF1dG8gdG9rZW5JRCA9IG1ha2VPYmpl
Y3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpUb2tlbklk
ZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2NCgpKTsKLSAg
ICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7Ci0gICAgfQot
Ci0gICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucywgW2Nh
cHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0g
KE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9u
QmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7Ci0gICAgfSk7Cisg
ICAgcmV0dXJuIF9pbXBsLT5zaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0KCk7
CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0tIChDR1JlY3QpX2RyYWdDYXJldFJl
Y3QKKy0gKHZvaWQpX3NldFNob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5
b3V0OihCT09MKXNob3VsZEV4cGFuZAogewotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAg
cmV0dXJuIF9wYWdlLT5jdXJyZW50RHJhZ0NhcmV0UmVjdCgpOwotI2Vsc2UKLSAgICByZXR1cm4g
Q0dSZWN0WmVybzsKLSNlbmRpZgorICAgIHJldHVybiBfaW1wbC0+c2V0U2hvdWxkRXhwYW5kVG9W
aWV3SGVpZ2h0Rm9yQXV0b0xheW91dChzaG91bGRFeHBhbmQpOwogfQogCi0tICh2b2lkKV9zaW11
bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24KKy0gKEJPT0wp
X2Fsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyCiB7Ci0gICAgW19jb250ZW50VmlldyBfc2lt
dWxhdGVMb25nUHJlc3NBY3Rpb25BdExvY2F0aW9uOmxvY2F0aW9uXTsKKyAgICByZXR1cm4gX3Bh
Z2UtPmFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKCk7CiB9CiAKLS0gKHZvaWQpX3NpbXVs
YXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dAorLSAodm9pZClfc2V0QWx3YXlzU2hvd3NI
b3Jpem9udGFsU2Nyb2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIKIHsK
LSAgICBbX2NvbnRlbnRWaWV3IF9zaW11bGF0ZVRleHRFbnRlcmVkOnRleHRdOworICAgIF9wYWdl
LT5zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcihhbHdheXNTaG93c0hvcml6b250YWxT
Y3JvbGxlcik7CiB9CiAKLS0gKHZvaWQpX2R5bmFtaWNVc2VySW50ZXJmYWNlVHJhaXREaWRDaGFu
Z2UKKy0gKEJPT0wpX2Fsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcgogewotICAgIGlmICghX3Bh
Z2UpCi0gICAgICAgIHJldHVybjsKLSAgICBfcGFnZS0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENo
YW5nZSgpOwotICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF07CisgICAgcmV0
dXJuIF9wYWdlLT5hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoKTsKIH0KIAotI2VuZGlmIC8v
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGlu
ZworLSAodm9pZClfc2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyOihCT09MKWFsd2F5c1No
b3dzVmVydGljYWxTY3JvbGxlcgogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gX2lt
cGwtPmJlZ2luQmFja1N3aXBlRm9yVGVzdGluZygpOwotI2Vsc2UKLSAgICBpZiAoIV9nZXN0dXJl
Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBfZ2VzdHVyZUNvbnRy
b2xsZXItPmJlZ2luU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKLSNlbmRpZgorICAg
IF9wYWdlLT5zZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NWZXJ0aWNh
bFNjcm9sbGVyKTsKIH0KIAotLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nCist
IChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmlu
dEluZm8gKilwcmludEluZm8KIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIF9pbXBs
LT5jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoKTsKLSNlbHNlCi0gICAgaWYgKCFfZ2VzdHVy
ZUNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gX2dlc3R1cmVDb250
cm9sbGVyLT5jb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFdlYktp
dDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7Ci0jZW5kaWYK
KyAgICByZXR1cm4gW3NlbGYgcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOnByaW50SW5mb107
CiB9CiAKLS0gKHZvaWQpX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRlZmVyc0xv
YWRpbmcKKy0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZv
OihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFt
ZUhhbmRsZQogewotICAgIF9wYWdlLT5zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZyhkZWZlcnNM
b2FkaW5nKTsKKyAgICBpZiAoYXV0byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCku
d2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFt
ZUlEKSkpCisgICAgICAgIHJldHVybiBfaW1wbC0+cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZv
KHByaW50SW5mbywgKndlYkZyYW1lUHJveHkpOworICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZv
aWQpX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVz
dGluZzooQk9PTClyZXNvbHZlZAorLSAodm9pZClzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uOihOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pdXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbgogewotICAgIF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nID0gcmVzb2x2ZWQ7CisgICAgW3N1cGVyIHNldFVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb246dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbl07CisKKyAgICBfaW1wbC0+
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKTsKIH0KIAotLSAoQk9PTClfaGFzSW5zcGVjdG9yRnJvbnRlbmQKKy0gKEJPT0wpX3dhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwogewotICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+
aGFzSW5zcGVjdG9yRnJvbnRlbmQoKTsKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4g
X2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAg
ICByZXR1cm4gTk87CisjZW5kaWYKIH0KIAotLSAoX1dLSW5zcGVjdG9yICopX2luc3BlY3Rvcgor
LSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihCT09MKXdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldwogewotICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFn
ZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyKCppbnNwZWN0b3IpOwotICAg
IHJldHVybiBuaWw7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2ltcGwtPnNldENsaWVudFdh
bnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1Zp
ZXcpOworI2VuZGlmCiB9CiAKLS0gKF9XS0ZyYW1lSGFuZGxlICopX21haW5GcmFtZQorLSAoaWQp
X21lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKIHsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBfcGFn
ZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6
OmNyZWF0ZShmcmFtZS0+ZnJhbWVJRCgpKSk7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0
dXJuIF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA/IF9pbXBs
LT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7CisjZWxzZQogICAgIHJldHVybiBu
aWw7CisjZW5kaWYKIH0KIAotLSAodm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZv
clRlc3RpbmcKKy8vIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgor
LSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzooaWQpbWVkaWFQbGF5YmFja0Nv
bnRyb2xzVmlldwogewotICAgIGlmIChfcGFnZSkKLSAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5z
ZW5kUHJlcGFyZVRvU3VzcGVuZChXZWJLaXQ6OklzU3VzcGVuc2lvbkltbWluZW50OjpZZXMsIFtd
IHsgfSk7CiB9CiAKLS0gKHZvaWQpX3Byb2Nlc3NEaWRSZXN1bWVGb3JUZXN0aW5nCisvLyBUaGlz
IG1ldGhvZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKy0gKHZvaWQpX3JlbW92ZU1l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXcKIHsKLSAgICBpZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdl
LT5wcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKIH0KIAotLSAodm9pZClfc2V0QXNz
ZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpdmFsdWUKKy0gKHZvaWQpX3ByZXBhcmVGb3JNb3Zl
VG9XaW5kb3c6KE5TV2luZG93ICopdGFyZ2V0V2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKCFfcGFnZSkKLSAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICBfaW1wbC0+cHJlcGFyZUZvck1vdmVUb1dpbmRvdyh0YXJn
ZXRXaW5kb3csIFtjb21wbGV0aW9uSGFuZGxlckNvcHldIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXJDb3B5KCk7CisgICAgfSk7Cit9CiAKLSAgICBfcGFnZS0+cHJvY2VzcygpLnNldEFzc2Vy
dGlvblN0YXRlRm9yVGVzdGluZyhzdGF0aWNfY2FzdDxXZWJLaXQ6OkFzc2VydGlvblN0YXRlPih2
YWx1ZSkpOworLSAodm9pZClfc2V0VGh1bWJuYWlsVmlldzooX1dLVGh1bWJuYWlsVmlldyAqKXRo
dW1ibmFpbFZpZXcKK3sKKyAgICBfaW1wbC0+c2V0VGh1bWJuYWlsVmlldyh0aHVtYm5haWxWaWV3
KTsKIH0KIAotLSAoQk9PTClfaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcKKy0gKF9XS1RodW1ibmFpbFZpZXcgKilfdGh1bWJuYWlsVmlldwogewotI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKLSAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnBy
b2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3Rpbmco
KSA6IGZhbHNlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKKyAgICBpZiAoIV9p
bXBsKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfaW1wbC0+dGh1bWJuYWlsVmll
dygpOwogfQogCi0tIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9y
VGVzdGluZworLSAodm9pZClfc2V0SWdub3Jlc0FsbEV2ZW50czooQk9PTClpZ25vcmVzQWxsRXZl
bnRzCiB7Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHJldHVybiBfcGFnZSA/IF9w
YWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpIDogZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgorICAgIF9pbXBsLT5zZXRJZ25vcmVzQWxsRXZlbnRzKGlnbm9yZXNBbGxFdmVudHMpOwog
fQogCi0tICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJlcXVlc3QKKy0gKEJPT0wpX2lnbm9yZXNB
bGxFdmVudHMKIHsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIFdlYktpdDo6VXNlck1l
ZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmRlbnlOZXh0VXNlck1lZGlhUmVxdWVzdCgp
OwotI2VuZGlmCisgICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzQWxsRXZlbnRzKCk7CiB9CiAKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotLSAodm9pZClfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rp
b25PbkVsZW1lbnQ6KHVpbnQ2NF90KWVsZW1lbnRJRCBkb2N1bWVudDoodWludDY0X3QpZG9jdW1l
bnRJRCBwYWdlOih1aW50NjRfdClwYWdlSUQKKy0gKE5TSW50ZWdlcilfc3BlbGxDaGVja2VyRG9j
dW1lbnRUYWcKIHsKLSNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCi0gICAgaWYgKF9wYWdlKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcmV2aWV3Q29udHJvbGxlciA9IF9wYWdlLT5zeXN0ZW1QcmV2aWV3
Q29udHJvbGxlcigpKQotICAgICAgICAgICAgcHJldmlld0NvbnRyb2xsZXItPnRyaWdnZXJTeXN0
ZW1QcmV2aWV3QWN0aW9uV2l0aFRhcmdldEZvclRlc3RpbmcoZWxlbWVudElELCBkb2N1bWVudElE
LCBwYWdlSUQpOwotICAgIH0KLSNlbmRpZgorICAgIHJldHVybiBfaW1wbC0+c3BlbGxDaGVja2Vy
RG9jdW1lbnRUYWcoKTsKIH0KKwogI2VuZGlmCiAKIEBlbmQKIAorI3VuZGVmIEZPUldBUkRfQUNU
SU9OX1RPX1dLQ09OVEVOVFZJRVcKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAogQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoRnVsbFNjcmVl
bkFQSV9Qcml2YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3SW50ZXJuYWwuaAppbmRleCA0MzUwODBmMzI0NDVjZThlN2Y1NmVlNWRjMDA0
Mzk0YmNmMWFhNWQ5Li44YTI4N2VmNzIwYTgyOWJhYzVkZTk5YmMxMWRlNzAxNDFjMjRlOGEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50
ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
SW50ZXJuYWwuaApAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRl
IDx3dGYvV2Vha09iakNQdHIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0
ICJVSUtpdFNQSS5oIgpAQCAtNjgsMTggKzY5LDQ3IEBAIGNsYXNzIFNhZmVCcm93c2luZ1dhcm5p
bmc7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgUHJp
bnRJbmZvOworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNzIFdlYlZpZXdJbXBsOworI2VuZGlmCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2NsYXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlcjsKKyNl
bmRpZgogfQogCiBAY2xhc3MgV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnk7CiBAY2xh
c3MgV0tQYXNzd29yZFZpZXc7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKK0BjbGFzcyBXS1Njcm9sbFZpZXc7CitAY2xhc3MgV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcjsKKyNlbmRpZgorQHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZTsKIAogQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgV0tfV0VCX1ZJRVdfUFJPVE9DT0xTIHsK
IAogQHBhY2thZ2UKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gX2NvbmZp
Z3VyYXRpb247Ci0KICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9wYWdlOworICAg
IFdlYWtPYmpDUHRyPGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+PiBfdGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOworICAgIE9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVT
aGVldEltbWVkaWF0ZUNvbXBsZXRpb25Gb3JUZXN0aW5nOworCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBf
c2Nyb2xsVmlldzsKKyAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gX2NvbnRlbnRWaWV3Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcj4gX2dlc3R1
cmVDb250cm9sbGVyOworICAgIFZlY3RvcjxCbG9ja1B0cjx2b2lkICgpPj4gX3Zpc2libGVDb250
ZW50UmVjdFVwZGF0ZUNhbGxiYWNrczsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4gX2Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyOworI2VuZGlmCisKKyAgICBDR1JlY3QgX2lucHV0Vmlld0JvdW5kczsKKyNl
bmRpZgogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg3LDYgKzExNyw4IEBAIHN0
cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9wcm9jZXNzV2lsbFN3YXA7CiAtICh2b2lkKV9kaWRS
ZWxhdW5jaFByb2Nlc3M7CiAKKy0gKFVJVmlldyAqKV9jdXJyZW50Q29udGVudFZpZXc7CisKIC0g
KHZvaWQpX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWU7CiAtICh2b2lkKV9kaWRDb21taXRMYXll
clRyZWU6KGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJl
ZVRyYW5zYWN0aW9uOwogLSAodm9pZClfbGF5ZXJUcmVlQ29tbWl0Q29tcGxldGU7CkBAIC05OSw4
ICsxMzEsMTAgQEAgc3RydWN0IFByaW50SW5mbzsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50
U2Nyb2xsUG9zaXRpb246KFdlYkNvcmU6OkZsb2F0UG9pbnQpc2Nyb2xsUG9zaXRpb24gc2Nyb2xs
T3JpZ2luOihXZWJDb3JlOjpJbnRQb2ludClzY3JvbGxPcmlnaW47CiAtIChCT09MKV9zY3JvbGxU
b1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6Rmxv
YXRQb2ludClvcmlnaW4gbWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xs
RGlzdGFuY2U7CisKIC0gKGRvdWJsZSlfaW5pdGlhbFNjYWxlRmFjdG9yOwogLSAoZG91YmxlKV9j
b250ZW50Wm9vbVNjYWxlOworCiAtIChkb3VibGUpX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JS
ZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXRhcmdldFJlY3QgY3VycmVudFNjYWxlOihk
b3VibGUpY3VycmVudFNjYWxlIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5p
bXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11
bVNjYWxlOwogLSAodm9pZClfem9vbVRvRm9jdXNSZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKWZvY3VzZWRFbGVtZW50UmVjdCBzZWxlY3Rpb25SZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKXNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgaW5zaWRlRml4ZWQ6KEJP
T0wpaW5zaWRlRml4ZWQgZm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmltdW1TY2FsZTooZG91
YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgYWxsb3dT
Y2FsaW5nOihCT09MKWFsbG93U2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3JjZVNjcm9sbDsK
IC0gKEJPT0wpX3pvb21Ub1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IHdpdGhP
cmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0
RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxl
Oihkb3VibGUpbWF4aW11bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11
bVNjcm9sbERpc3RhbmNlOwpAQCAtMTU2LDEzICsxOTAsMTAgQEAgc3RydWN0IFByaW50SW5mbzsK
IC0gKHZvaWQpX3Jlc2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKIAogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBXS1Bhc3N3b3JkVmlldyAqX3Bhc3N3b3JkVmlldzsKLQotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9pc0JhY2tncm91bmQ7Ci0KIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkg
Kl9jb250ZW50UHJvdmlkZXJSZWdpc3RyeTsKLQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBXS1NlbGVjdGlvbkdyYW51bGFyaXR5IF9zZWxlY3Rpb25HcmFudWxhcml0eTsKIAorQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9pc0JhY2tncm91bmQ7CiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2FsbG93c0RvdWJsZVRhcEdlc3R1cmVzOwog
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zdHlsdXNUYXBHZXN0dXJlU2hv
dWxkQ3JlYXRlRWRpdGFibGVJbWFnZTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Qk9PTCBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzOwpAQCAtMTcyLDYgKzIwMyw3IEBAIHN0cnVjdCBQ
cmludEluZm87CiAKIC0gKEJPT0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJc0Rhcms7CiAtIChCT09M
KV9lZmZlY3RpdmVVc2VySW50ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkOworCiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0x
ODAsNiArMjEyLDggQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX2RpZEludmFsaWRhdGVE
YXRhRm9yQXR0YWNobWVudDooQVBJOjpBdHRhY2htZW50JilhdHRhY2htZW50OwogI2VuZGlmCiAK
Ky0gKHZvaWQpX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4p
KHZvaWQpKXVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91
dFdhaXRpbmdGb3JQYWludGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09M
KXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU7CisKIC0gKHZvaWQpX3Nob3dTYWZlQnJv
d3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmcmKXdhcm5pbmcg
Y29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6
OkNvbnRpbnVlVW5zYWZlTG9hZCwgVVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZv
aWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKIC0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5n
V2FybmluZ0lmRm9yTWFpbkZyYW1lTmF2aWdhdGlvbjsKQEAgLTE5MCw3ICsyMjQsMTQgQEAgc3Ry
dWN0IFByaW50SW5mbzsKIC0gKFdlYktpdDo6V2ViUGFnZVByb3h5KilfcGFnZTsKIAogI2lmIFBM
QVRGT1JNKE1BQykKKworLSAodm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
biBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2NhbmNlbEltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0g
KHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCkpOworCistICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNl
bWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2U7CiAtICh2b2lkKV93ZWJfZ3JhbnRE
T01QYXN0ZUFjY2VzczsKKwogI2VuZGlmCiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IGZiMWU0NTViOTU1
YmNjNTllOTE0NzYyMjY2NmQyNzZkNzhjNjk3MWYuLjlhNzEzODA3MGQyYWNlZmY5NmQ5MTE2ZDA3
MjY0MzAzZGZiYmFmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMTcyLDYgKzE3MiwxMiBAQCB0eXBlZGVmIE5T
X09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIAogQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlvbjopIEJPT0wgX2FsbG93c1JlbW90
ZUluc3BlY3Rpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRSZW1v
dGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlOikgTlNTdHJpbmcgKl9yZW1vdGVJbnNwZWN0aW9uTmFt
ZU92ZXJyaWRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkpOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tJbnNwZWN0b3IgKl9pbnNwZWN0b3IgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgX1dLRnJhbWVIYW5kbGUgKl9tYWluRnJhbWUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKKworQHByb3BlcnR5IChub25hdG9taWMs
IHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOikgaWQgPF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9u
Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246
KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wg
c3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1f
c2V0QWRkc1Zpc2l0ZWRMaW5rczopIEJPT0wgX2FkZHNWaXNpdGVkTGlua3M7CiAKQEAgLTIxMiw2
ICsyMTgsMTQgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7
CiAtICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0
aXRsZSB3YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3Ry
aW5nICopZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAo
dm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZToo
TlNTdHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNB
dHRyaWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09M
KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3Mo
MTIuMikpOwogCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAo
Xikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygx
MC4wKSk7CistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0
aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7CisjaWYgVEFSR0VUX09TX0lQSE9ORQorLSAo
dm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Jsb2Nr
X3QpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworI2VuZGlmCisKKy0g
KHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50OihO
U1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb24g
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKKwogLSAodm9pZClf
aXNKSVRFbmFibGVkOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAtICh2b2lkKV9yZW1vdmVEYXRhRGV0
ZWN0ZWRMaW5rczooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAKQEAgLTIzOCw2ICsyNTIsMTAgQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKICNpZiBUQVJHRVRfT1Nf
SVBIT05FCiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9jb250ZW50
VmlzaWJsZVJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOworLSAoQ0dQb2ludClfY29u
dmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEwLjApKTsKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50
czooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CisKIC0gKHZvaWQp
X3NldEZvbnQ6KFVJRm9udCAqKWZvbnQgc2VuZGVyOihpZClzZW5kZXIgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTIuMikpOwogLSAodm9pZClfc2V0Rm9udFNpemU6KENHRmxvYXQpZm9udFNpemUgc2Vu
ZGVyOihpZClzZW5kZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMikpOwogLSAodm9pZClfc2V0
VGV4dENvbG9yOihVSUNvbG9yICopY29sb3Igc2VuZGVyOihpZClzZW5kZXIgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTIuMikpOwpAQCAtMjc2LDYgKzI5NCwxNCBAQCB0eXBlZGVmIE5TX09QVElPTlMo
TlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0RHJhZ0ludGVyYWN0aW9uUG9saWN5OikgX1dLRHJhZ0ludGVyYWN0aW9uUG9saWN5IF9k
cmFnSW50ZXJhY3Rpb25Qb2xpY3kgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklu
cHV0Vmlld0JvdW5kc0NoYW5nZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMy4wKSk7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRl
ciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgQ0dSZWN0IF91aVRleHRDYXJldFJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAu
MykpOworCistICh2b2lkKV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9p
bnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50
SW5mbyAqKSlibG9jayBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CisKKy0gKHZvaWQpZGlk
U3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsK
Ky0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlv
cygxMC4zKSk7CiAKIC0gKHZvaWQpX2JlZ2luSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5n
ZTsKIC0gKHZvaWQpX2VuZEludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2U7CkBAIC0zMDYs
MTggKzMzMiwzMyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2Up
IHsKIC0gKGlkKV9zbmFwc2hvdExheWVyQ29udGVudHNGb3JCYWNrRm9yd2FyZExpc3RJdGVtOihX
S0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDlfMCkpOwog
LSAoTlNBcnJheSAqKV9kYXRhRGV0ZWN0aW9uUmVzdWx0czsKIAorLSAodm9pZClfYWNjZXNzaWJp
bGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRo
VGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5
PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4zKSk7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24gV0tfQVBJX0FW
QUlMQUJMRShpb3MoMTEuMykpOworLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9u
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKKwogLSAodm9pZClfYWNjZXNzaWJpbGl0eVJl
dHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsK
IC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlEaWRHZXRTcGVha1NlbGVjdGlvbkNvbnRlbnQ6KE5TU3Ry
aW5nICopY29udGVudCBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CiAKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgVUlWaWV3ICpfc2FmZUJyb3dzaW5nV2FybmluZyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOworCistIChVSVZpZXcgKilfZnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7CisKICNl
bHNlCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVmlldyAqX3NhZmVCcm93c2lu
Z1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKKwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWZGb3JUcmFu
c2l0aW9uVG9XS1dlYlZpZXcgIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRy
b2xzTWFuYWdlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSk7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldElnbm9yZXNOb25XaGVlbEV2ZW50czopIEJP
T0wgX2lnbm9yZXNOb25XaGVlbEV2ZW50cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1ZpZXcgKl9zYWZlQnJvd3Np
bmdXYXJuaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCkpOwogCiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS1JlY3RFZGdlIF9waW5uZWRTdGF0ZSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3Nl
dFJ1YmJlckJhbmRpbmdFbmFibGVkOikgX1dLUmVjdEVkZ2UgX3J1YmJlckJhbmRpbmdFbmFibGVk
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogCiBAcHJvcGVydHkgKHJlYWRvbmx5
KSBOU0NvbG9yICpfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogQHByb3BlcnR5IChub25h
dG9taWMsIHNldHRlcj1fc2V0QmFja2dyb3VuZENvbG9yOikgTlNDb2xvciAqX2JhY2tncm91bmRD
b2xvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSwgc2V0dGVyPV9zZXRVbmRlcmxheUNvbG9yOikgTlNDb2xvciAqX3VuZGVybGF5Q29s
b3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBzZXR0ZXI9X3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOikgQ0dGbG9hdCBfdG90YWxIZWln
aHRPZkJhbm5lcnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiBAcHJvcGVydHkg
KG5vbmF0b21pYywgc2V0dGVyPV9zZXREcmF3c0JhY2tncm91bmQ6KSBCT09MIF9kcmF3c0JhY2tn
cm91bmQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUb3BDb250ZW50SW5zZXQ6
KSBDR0Zsb2F0IF90b3BDb250ZW50SW5zZXQ7CiAKQEAgLTMzMSw2ICszNzIsMjcgQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TSW50ZWdlciBfc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xNCkpOwogCiAtICh2b2lkKV9zZXRTaG91bGRTdXBwcmVzc0Zp
cnN0UmVzcG9uZGVyQ2hhbmdlczooQk9PTClzaG91bGRTdXBwcmVzczsKKy0gKEJPT0wpX2NhbkNo
YW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDooTlNF
dmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRTdGF0
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClfZGlzbWlzc0Nv
bnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKKy0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9m
ZnNldCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKworLSAodm9pZClfZ2VzdHVy
ZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOworCistICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRl
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2VuYWJsZUZyYW1l
U2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CisKKy0gKHZvaWQp
X2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEzLjQpKTsKKy0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3
SW5XaW5kb3dDaGFuZ2VzU3luYyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKwor
LSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3Mg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9zZXREaWRNb3ZlU3dp
cGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVjdCkpY2FsbGJhY2sgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29u
dGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMy40KSk7CisKKy0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldp
bmRvdyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIAogLy8gQ2xpZW50cyB0aGF0
IHdhbnQgdG8gbWFpbnRhaW4gZGVmYXVsdCBiZWhhdmlvciBjYW4gcmV0dXJuIG5pbC4gVG8gZGlz
YWJsZSB0aGUgaW1tZWRpYXRlIGFjdGlvbiBlbnRpcmVseSwgcmV0dXJuIE5TTnVsbC4gQW5kIHRv
CiAvLyBkbyBzb21ldGhpbmcgY3VzdG9tLCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgY29uZm9ybXMg
dG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlciBwcm90b2NvbC4KQEAg
LTM0Niw3ICs0MDgsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVk
Z2UpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEFsd2F5c1Nob3dzVmVydGlj
YWxTY3JvbGxlcjopIEJPT0wgX2Fsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIAogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9w
ZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvOwotLSAoTlNQcmlu
dE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICop
cHJpbnRJbmZvIGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkpOworLSAoTlNQcmludE9wZXJhdGlvbiAq
KV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZv
ckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIpKTsKIAogLy8gRklYTUU6IFRoaXMgU1BJIHNob3VsZCBiZWNvbWUgYSBwYXJ0IG9m
IHRoZSBXS1VJRGVsZWdhdGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYxNTM3CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzopIEJPT0wgX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEyLjMpKTsKQEAgLTM1Niw2ICs0MTgsNyBAQCB0eXBlZGVmIE5TX09QVElP
TlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIAogLSAodm9pZClfcHJlcGFyZUZvck1vdmVU
b1dpbmRvdzooTlNXaW5kb3cgKil0YXJnZXRXaW5kb3cgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykp
OwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9X3NldFVzZVN5c3Rl
bUFwcGVhcmFuY2U6KSBCT09MIF91c2VTeXN0ZW1BcHBlYXJhbmNlIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE92ZXJsYXlT
Y3JvbGxiYXJTdHlsZTopIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSBfb3ZlcmxheVNjcm9sbGJh
clN0eWxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogQHByb3BlcnR5IChzdHJv
bmcsIG5vbmF0b21pYywgc2V0dGVyPV9zZXRJbnNwZWN0b3JBdHRhY2htZW50VmlldzopIE5TVmll
dyAqX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCkpOwogCkBAIC00NTEsMTQyICs1MTQsNCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdl
ciwgX1dLUmVjdEVkZ2UpIHsKIEBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxVSVJlc3BvbmRlclN0
YW5kYXJkRWRpdEFjdGlvbnM+CiBAZW5kCiAKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLV2ViVmll
dyAoV0tUZXN0aW5nKQotCi0tICh2b2lkKV9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWRGb3JUZXN0aW5nOihCT09MKWVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKE5TRGljdGlvbmFyeSAqKV9jb250ZW50c09mVXNl
ckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW0gV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMi4zKSwgaW9zKDEwLjMpKTsKLQotI2lmIFRBUkdFVF9PU19JUEhPTkUK
LQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2NvbnRlbnRWaXNpYmxl
UmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0tIChDR1BvaW50KV9jb252ZXJ0UG9p
bnRGcm9tQ29udGVudHNUb1ZpZXc6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMCkpOwotLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1Bv
aW50KXBvaW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKLQotLSAodm9pZClrZXlib2Fy
ZEFjY2Vzc29yeUJhck5leHQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAodm9pZClr
ZXlib2FyZEFjY2Vzc29yeUJhclByZXZpb3VzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjApKTsK
LS0gKHZvaWQpZGlzbWlzc0Zvcm1BY2Nlc3NvcnlWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKLS0gKHZvaWQpX2Rpc21pc3NGaWxlUGlja2VyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEz
LjApKTsKLS0gKHZvaWQpc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNTdHJpbmcgKnRleHRDb250ZW50VHlwZUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTIuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAq
c2VsZWN0Rm9ybVBvcG92ZXJUaXRsZSBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpmb3JtSW5wdXRMYWJlbCBXS19B
UElfQVZBSUxBQkxFKGlvcygxMi4wKSk7Ci0tICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91
cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEyLjApKTsKLQotLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAq
KW5ld1N0cmluZyB0b1N0cmluZzooTlNTdHJpbmcgKilvbGRTdHJpbmcgd2l0aENvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxF
KGlvcygxMS4wKSk7Ci0KLS0gKHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRl
cmFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0KLS0gKHZvaWQpX2RpZFNob3dD
b250ZXh0TWVudSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKV9kaWREaXNt
aXNzQ29udGV4dE1lbnUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClfZG9B
ZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Jsb2NrX3QpdXBkYXRl
QmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotLSAodm9pZClfZG9BZnRlclJlc2V0
dGluZ1NpbmdsZVRhcEdlc3R1cmU6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKFdLX0lPU19UQkEpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU0FycmF5PE5TVmFsdWUgKj4gKl91aVRleHRTZWxlY3Rpb25SZWN0cyBXS19BUElfQVZBSUxB
QkxFKGlvcygxMC4zKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBf
dWlUZXh0Q2FyZXRSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9pbnB1dFZpZXdCb3VuZHMgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMykpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3Ry
aW5nICpfc2Nyb2xsaW5nVHJlZUFzVGV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0K
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNOdW1iZXIgKl9zdGFibGVTdGF0ZU92
ZXJyaWRlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLQotLSAoTlNEaWN0aW9uYXJ5ICop
X3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRCBXS19B
UElfQVZBSUxBQkxFKGlvcygxMS4wKSk7Ci0tICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlv
bkF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkp
OwotLSAodm9pZClfc2ltdWxhdGVUZXh0RW50ZXJlZDooTlNTdHJpbmcgKil0ZXh0IFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDEyLjApKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBD
R1JlY3QgX2RyYWdDYXJldFJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotCi0tICh2
b2lkKV9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNo
X2Jsb2NrX3QpYWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjApKTsKLQotLSAodm9pZClf
cmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBs
ZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sgV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZl
UmVjdHNBdFNlbGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJp
bmcgKil0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4g
KnJlY3RzKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Ci0t
ICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTEuMykpOwotLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDExLjMpKTsKLS0gKFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKLQotLSAodm9pZClfdHJpZ2dlclN5c3RlbVBy
ZXZpZXdBY3Rpb25PbkVsZW1lbnQ6KHVpbnQ2NF90KWVsZW1lbnRJRCBkb2N1bWVudDoodWludDY0
X3QpZG9jdW1lbnRJRCBwYWdlOih1aW50NjRfdClwYWdlSUQgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
V0tfSU9TX1RCQSkpOwotCi0tICh2b2lkKV9zZXREZXZpY2VPcmllbnRhdGlvblVzZXJQZXJtaXNz
aW9uSGFuZGxlckZvclRlc3Rpbmc6KEJPT0wgKF4pKHZvaWQpKWhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShpb3MoV0tfSU9TX1RCQSkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlciBXS19BUElfQVZBSUxBQkxFKGlvcygx
Mi4yKSk7Ci0jZWxzZQotLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX3NldEZyYW1lOihO
U1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdl
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2VuZERlZmVycmlu
Z1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0t
ICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3luYyBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRC
eVdlYkNvcmU6KE5TRXZlbnQgKilldmVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZp
ZXdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0Q3VzdG9t
U3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAoTlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tIChOU1dpbmRvdyAq
KV9mdWxsU2NyZWVuV2luZG93IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAo
dm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7Ci0tICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2NhbmNlbElt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsK
LS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMuNCkpOwotLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0Zy
YW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
Ci0tIChCT09MKV90cnlUb1N3aXBlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQ
aW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bpbm5lZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoo
dm9pZCheKShDR1JlY3QpKWNhbGxiYWNrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkp
OwotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6
KSBDR0Zsb2F0IF90b3RhbEhlaWdodE9mQmFubmVycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldFVuZGVybGF5
Q29sb3I6KSBOU0NvbG9yICpfdW5kZXJsYXlDb2xvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0SWdu
b3Jlc05vbldoZWVsRXZlbnRzOikgQk9PTCBfaWdub3Jlc05vbldoZWVsRXZlbnRzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBXS1BhZ2VSZWYgX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZpZXcgIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEyKSk7Ci0tICh2b2lkKV9yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLS0gKHZvaWQpX2hhbmRsZUNvbnRyb2xsZWRFbGVt
ZW50SURSZXNwb25zZTooTlNTdHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIuMykpOwotLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGU6KE5TVGV4dENo
ZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykp
OwotLSAodm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRlTGlz
dFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMp
KTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc2hvdWxkUmVxdWVzdENh
bmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lkKV9pbnNl
cnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJh
bmdlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOwotLSAoTlNSZWN0KV9jYW5kaWRh
dGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpKTsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTopIEJPT0wgX3Vz
ZVN5c3RlbUFwcGVhcmFuY2UgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCkpOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU01lbnUgKl9hY3RpdmVNZW51IFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOwotCi0tICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWln
aHQ6KGludCloZWlnaHQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0tICh2b2lk
KV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMi4zKSk7Ci0tICh2b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2
ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
NC40KSk7Ci0jZW5kaWYKLQotLSAodm9pZClfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9u
SW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0lu
dGVnZXIpKWNhbGxiYWNrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4z
KSk7Ci0KLS0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihD
R1BvaW50KW9yaWdpbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7Ci0tIChDR0Zsb2F0KV9w
YWdlU2NhbGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotCi0tICh2b2lkKV9kb0FmdGVy
TmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7Ci0tICh2b2lkKV9kb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0
aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjE0KSwgaW9zKDEyLjApKTsKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRl
V2l0aG91dFdhaXRpbmdGb3JQYWludGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSwgaW9zKDEwLjMpKTsKLS0gKHZvaWQpX2RvQWZ0
ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9j
ayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKLQotLSAodm9pZClf
ZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZyBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwotLSAodm9pZClfZXhlY3V0ZUVkaXRD
b21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQg
Y29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbiBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwotCi0tICh2b2lkKV9kZW55TmV4dFVzZXJNZWRpYVJl
cXVlc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7Ci0KLS0gKEJP
T0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZzsKLS0gKEJPT0wpX2NvbXBsZXRlQmFja1N3aXBl
Rm9yVGVzdGluZzsKLS0gKHZvaWQpX3NldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nOihCT09MKWRl
ZmVyc0xvYWRpbmc7Ci0KLS0gKHZvaWQpX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVs
eVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzooQk9PTClyZXNvbHZlZCBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIEJPT0wgX2hhc0luc3BlY3RvckZyb250ZW5kIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9X
S0luc3BlY3RvciAqX2luc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRs
ZSAqX21haW5GcmFtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikp
OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaywgc2V0dGVyPV9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6KSBpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPiBfdGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3Vy
YXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1
cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLS0gKHZvaWQp
X2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVt
IGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JU
ZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKLQotLSAodm9pZClfcHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7Ci0tICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1l
Rm9yVGVzdGluZzsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2Vy
dmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQk9PTCBfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKLS0gKHZvaWQpX3NldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZzooaW50KXN0YXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0KLUBlbmQK
KyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjYxNGU0YzRmYzNhYjFiZGNjYmE3YTY2MTA3YTRlOWNmMTg1NmIzYjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
UHJpdmF0ZUZvclRlc3RpbmcuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCIKKyNpbXBvcnQgIldLV2ViVmlld1By
aXZhdGVGb3JUZXN0aW5nTWFjLmgiCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3Rpbmcp
CisKKy0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihDR1Bv
aW50KW9yaWdpbjsKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZTsKKworLSAodm9pZClfc2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkOworLSAoTlNE
aWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2Vy
SW50ZXJmYWNlSXRlbTsKKworLSAodm9pZClfcmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9u
SW5mbzoodm9pZCheKShCT09MLCBCT09MLCBOU1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0lu
dGVnZXIpKWNhbGxiYWNrOworCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jazsKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jazsKKworLSAodm9pZClfZGlzYWJsZUJhY2tG
b3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZzsKKworLSAodm9pZClfZGVueU5leHRV
c2VyTWVkaWFSZXF1ZXN0OworCistIChCT09MKV9iZWdpbkJhY2tTd2lwZUZvclRlc3Rpbmc7Cist
IChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3Rpbmc7CistICh2b2lkKV9zZXREZWZlcnNM
b2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZlcnNMb2FkaW5nOworCistICh2b2lkKV9zZXRTaGFy
ZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRlc3Rpbmc6KEJPT0wp
cmVzb2x2ZWQ7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzSW5z
cGVjdG9yRnJvbnRlbmQ7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9s
bGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlz
YWJsZWRGb3JUZXN0aW5nOworCistICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
Rm9yVGVzdGluZzsKKy0gKHZvaWQpX3Byb2Nlc3NEaWRSZXN1bWVGb3JUZXN0aW5nOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3Vu
ZEFjdGl2aXR5Rm9yVGVzdGluZzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9P
TCBfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmc7CistICh2b2lk
KV9zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rpbmc6KGludClzdGF0ZTsKKworQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3Rpbmcu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45ZTYyNTY5OTlmOWE5Mzg2OTY2YTc0MWE2YTA2Y2ZkYjA4YWZiODA1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld1Rlc3RpbmcubW0KQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaCIKKwor
I2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJl
Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKKyNpbXBvcnQgIl9XS0ZyYW1l
SGFuZGxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1w
b3J0IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4KKworCitAaW1wbGVtZW50YXRpb24gV0tX
ZWJWaWV3IChXS1Rlc3RpbmcpCisKKy0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2Fs
ZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbgoreworICAgIF9wYWdlLT5zY2FsZVBhZ2Uoc2Nh
bGUsIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChvcmlnaW4pKTsKK30KKworLSAoQ0dGbG9hdClf
cGFnZVNjYWxlCit7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKK30KKwor
LSAodm9pZClfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzooQk9P
TCllbmFibGVkCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBbX2NvbnRlbnRWaWV3
IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDplbmFibGVkXTsKKyNlbHNlCisgICAg
X2ltcGwtPnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKKyNlbmRp
ZgorfQorCistIChOU0RpY3Rpb25hcnkgKilfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOihO
U1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtCit7CisgICAgaWYgKFt1c2VySW50ZXJmYWNlSXRl
bSBpc0VxdWFsVG9TdHJpbmc6QCJ2YWxpZGF0aW9uQnViYmxlIl0pIHsKKyAgICAgICAgYXV0byog
dmFsaWRhdGlvbkJ1YmJsZSA9IF9wYWdlLT52YWxpZGF0aW9uQnViYmxlKCk7CisgICAgICAgIFN0
cmluZyBtZXNzYWdlID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25CdWJibGUtPm1lc3Nh
Z2UoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIGRvdWJsZSBmb250U2l6ZSA9IHZhbGlkYXRp
b25CdWJibGUgPyB2YWxpZGF0aW9uQnViYmxlLT5mb250U2l6ZSgpIDogMDsKKyAgICAgICAgcmV0
dXJuIEB7IHVzZXJJbnRlcmZhY2VJdGVtOiBAeyBAIm1lc3NhZ2UiOiAoTlNTdHJpbmcgKiltZXNz
YWdlLCBAImZvbnRTaXplIjogW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Zm9udFNpemVdIH0g
fTsKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHJldHVybiBbX2NvbnRl
bnRWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlckludGVy
ZmFjZUl0ZW1dOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKKy0gKHZvaWQp
X3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm86KHZvaWQoXikoQk9PTCwgQk9PTCwg
TlNTdHJpbmcqLCBkb3VibGUsIGRvdWJsZSwgTlNJbnRlZ2VyKSljYWxsYmFjaworeworICAgIGlm
ICghX3BhZ2UpIHsKKyAgICAgICAgY2FsbGJhY2soTk8sIE5PLCBAIiIsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBoYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNhbGxiYWNrKTsKKyAgICBhdXRvIGxvY2FsQ2FsbGJhY2sgPSBX
ZWJLaXQ6Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2s6OmNyZWF0ZShbaGFuZGxlcl0oYm9vbCBhY3Rp
dmUsIGJvb2wgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCBTdHJpbmcgdGl0bGUs
IGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lLCB1aW50NjRfdCB1bmlxdWVJZGVu
dGlmaWVyLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgaGFuZGxlcihh
Y3RpdmUsIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9u
LCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRpZmllcik7CisgICAgfSk7CisKKyAgICBfcGFnZS0+
cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhXVEZNb3ZlKGxvY2FsQ2FsbGJhY2sp
KTsKK30KKworLSAoQk9PTClfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZworewor
ICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlOworICAgIHJldHVybiBOTzsKK30KKwor
LSAodm9pZClfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzooQk9PTClkaXNh
YmxlZAoreworfQorCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRh
dGVCbG9jaworeworICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBk
YXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRp
bmdGb3JBbmltYXRlZFJlc2l6ZTpZRVNdOworfQorCistICh2b2lkKV9kb0FmdGVyTmV4dFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKK3sKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFj
a3MuYXBwZW5kKG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jaykpOworICAgIFtzZWxmIF9zY2hlZHVs
ZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CisjZWxzZQorICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKKyNlbmRpZgorfQorCistICh2
b2lkKV9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nCit7Cisg
ICAgV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkuc2V0RGlzYWJsZVNuYXBz
aG90Vm9sYXRpbGl0eUZvclRlc3RpbmcodHJ1ZSk7Cit9CisKKy0gKEJPT0wpX2JlZ2luQmFja1N3
aXBlRm9yVGVzdGluZworeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPmJl
Z2luQmFja1N3aXBlRm9yVGVzdGluZygpOworI2Vsc2UKKyAgICBpZiAoIV9nZXN0dXJlQ29udHJv
bGxlcikKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBfZ2VzdHVyZUNvbnRyb2xsZXIt
PmJlZ2luU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZvclRlc3RpbmcoV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpCYWNrKTsKKyNlbmRpZgorfQorCistIChC
T09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcKK3sKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgcmV0dXJuIF9pbXBsLT5jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcoKTsKKyNlbHNlCisg
ICAgaWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1
cm4gX2dlc3R1cmVDb250cm9sbGVyLT5jb21wbGV0ZVNpbXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25G
b3JUZXN0aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6
QmFjayk7CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6
KEJPT0wpZGVmZXJzTG9hZGluZworeworICAgIF9wYWdlLT5zZXREZWZlcnNMb2FkaW5nRm9yVGVz
dGluZyhkZWZlcnNMb2FkaW5nKTsKK30KKworLSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRl
c0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVkCit7Cisg
ICAgX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rpbmcg
PSByZXNvbHZlZDsKK30KKworLSAoQk9PTClfaGFzSW5zcGVjdG9yRnJvbnRlbmQKK3sKKyAgICBy
ZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0luc3BlY3RvckZyb250ZW5kKCk7Cit9CisKKy0gKHZv
aWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nCit7CisgICAgaWYgKF9w
YWdlKQorICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKFdlYktp
dDo6SXNTdXNwZW5zaW9uSW1taW5lbnQ6OlllcywgW10geyB9KTsKK30KKworLSAodm9pZClfcHJv
Y2Vzc0RpZFJlc3VtZUZvclRlc3RpbmcKK3sKKyAgICBpZiAoX3BhZ2UpCisgICAgICAgIF9wYWdl
LT5wcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKK30KKworLSAodm9pZClfc2V0QXNz
ZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpdmFsdWUKK3sKKyAgICBpZiAoIV9wYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBfcGFnZS0+cHJvY2VzcygpLnNldEFzc2VydGlvblN0YXRlRm9y
VGVzdGluZyhzdGF0aWNfY2FzdDxXZWJLaXQ6OkFzc2VydGlvblN0YXRlPih2YWx1ZSkpOworfQor
CistIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwor
eworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+
cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0
eUZvclRlc3RpbmcoKSA6IGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKworLSAoQk9PTClfaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rp
bmcKK3sKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgcmV0dXJuIF9wYWdlID8gX3Bh
Z2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0
aXZpdHlGb3JUZXN0aW5nKCkgOiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKy0gKHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdAoreworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisgICAgV2ViS2l0OjpVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2lu
Z2xldG9uKCkuZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0KCk7CisjZW5kaWYKK30KKworQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2
YXRlRm9yVGVzdGluZ0lPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dl
YlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMmQ1OGMzNTczODEzNGVk
OTJkNTg2MzQ4OTI0MTFjMTQ5YTNmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgKQEAgLTAs
MCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5o
PgorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tUZXN0
aW5nSU9TKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICp0ZXh0
Q29udGVudFR5cGVGb3JUZXN0aW5nOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U1N0cmluZyAqc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsOworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBOU0FycmF5PE5TVmFsdWUgKj4gKl91aVRleHRTZWxlY3Rpb25SZWN0czsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9pbnB1dFZpZXdCb3VuZHM7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpfc2Nyb2xsaW5nVHJlZUFz
VGV4dDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNOdW1iZXIgKl9zdGFibGVT
dGF0ZU92ZXJyaWRlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2Ry
YWdDYXJldFJlY3Q7CisKKy0gKHZvaWQpa2V5Ym9hcmRBY2Nlc3NvcnlCYXJOZXh0OworLSAodm9p
ZClrZXlib2FyZEFjY2Vzc29yeUJhclByZXZpb3VzOworLSAodm9pZClkaXNtaXNzRm9ybUFjY2Vz
c29yeVZpZXc7CistICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcjsKKy0gKHZvaWQpc2VsZWN0Rm9y
bUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4OworCistICh2b2lkKXNldFRpbWVQaWNr
ZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlOwor
CistICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5nIHRvU3Ry
aW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOworCistICh2b2lkKV9kaWRTaG93Q29udGV4dE1lbnU7
CistICh2b2lkKV9kaWREaXNtaXNzQ29udGV4dE1lbnU7CistICh2b2lkKV9kb0FmdGVyUmVzZXR0
aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKKy0gKE5TRGlj
dGlvbmFyeSAqKV9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5zaWduZWQgbG9uZyBsb25nKWxh
eWVySUQ7CistICh2b2lkKV9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENHUG9p
bnQpbG9jYXRpb247CistICh2b2lkKV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAqKXRl
eHQ7CisKKy0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGlu
ZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CisKKy0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1QcmV2
aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2NF90
KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlEOworCistICh2b2lkKV9zZXREZXZpY2VP
cmllbnRhdGlvblVzZXJQZXJtaXNzaW9uSGFuZGxlckZvclRlc3Rpbmc6KEJPT0wgKF4pKHZvaWQp
KWhhbmRsZXI7CisKK0BlbmQKKworI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41YTJmMTRmMjdiZThjMjE3YTc4YzdiYjJhY2I2N2M1NjdkN2ZiN2RkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZp
ZXdUZXN0aW5nSU9TLm1tCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgi
CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5LmgiCisjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0
ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0
ICJfV0tBY3RpdmF0ZWRFbGVtZW50SW5mb0ludGVybmFsLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1dlYlZpZXcgKFdLVGVzdGluZ0lPUykKKworLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5l
eHQKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpZRVNdOworfQorCistICh2b2lk
KWtleWJvYXJkQWNjZXNzb3J5QmFyUHJldmlvdXMKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFjY2Vz
c29yeVRhYjpOT107Cit9CisKKy0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcg
KiluZXdTdHJpbmcgdG9TdHJpbmc6KE5TU3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbX2NvbnRl
bnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3
aXRoQ29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3Rz
KSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9XTsKK30KKwor
LSAodm9pZClkaXNtaXNzRm9ybUFjY2Vzc29yeVZpZXcKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFj
Y2Vzc29yeURvbmVdOworfQorCistICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgoreworICAgIFtf
Y29udGVudFZpZXcgZGlzbWlzc0ZpbGVQaWNrZXJdOworfQorCistICh2b2lkKXNldFRpbWVQaWNr
ZXJWYWx1ZVRvSG91cjooTlNJbnRlZ2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlCit7
CisgICAgW19jb250ZW50VmlldyBzZXRUaW1lUGlja2VyVmFsdWVUb0hvdXI6aG91ciBtaW51dGU6
bWludXRlXTsKK30KKworLSAodm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQp
cm93SW5kZXgKK3sKKyAgICBbX2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJS
b3c6cm93SW5kZXhdOworfQorCistIChOU1N0cmluZyAqKXNlbGVjdEZvcm1Qb3BvdmVyVGl0bGUK
K3sKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBzZWxlY3RGb3JtUG9wb3ZlclRpdGxlXTsKK30K
KworLSAoTlNTdHJpbmcgKil0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nCit7CisgICAgcmV0dXJu
IFtfY29udGVudFZpZXcgdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZ107Cit9CisKKy0gKE5TU3Ry
aW5nICopZm9ybUlucHV0TGFiZWwKK3sKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBmb3JtSW5w
dXRMYWJlbF07Cit9CisKKy0gKHZvaWQpX2RpZFNob3dDb250ZXh0TWVudQoreworICAgIC8vIEZv
ciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQorCistICh2b2lkKV9kaWREaXNtaXNzQ29udGV4
dE1lbnUKK3sKKyAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KK30KKworLSAoQ0dS
ZWN0KV9pbnB1dFZpZXdCb3VuZHMKK3sKKyAgICByZXR1cm4gX2lucHV0Vmlld0JvdW5kczsKK30K
KworLSAoTlNBcnJheTxOU1ZhbHVlICo+ICopX3VpVGV4dFNlbGVjdGlvblJlY3RzCit7CisgICAg
Ly8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQuCisgICAgW19j
b250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4gW19jb250
ZW50VmlldyBfdWlUZXh0U2VsZWN0aW9uUmVjdHNdOworfQorCistIChOU1N0cmluZyAqKV9zY3Jv
bGxpbmdUcmVlQXNUZXh0Cit7CisgICAgV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7
CisgICAgaWYgKCFjb29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuIEAiIjsKKworICAgIHJldHVy
biBjb29yZGluYXRvci0+c2Nyb2xsaW5nVHJlZUFzVGV4dCgpOworfQorCistIChOU051bWJlciAq
KV9zdGFibGVTdGF0ZU92ZXJyaWRlCit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJp
ZGUuCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNP
ZkxheWVyV2l0aElEOih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRAoreworICAgIENBTGF5ZXIq
IGxheWVyID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLmxheWVyV2l0aElERm9yVGVzdGluZyhsYXllcklEKTsK
KyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIEB7Cisg
ICAgICAgIEAiYm91bmRzIiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5ib3VuZHMu
b3JpZ2luLngpLAorICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYm91bmRzLm9yaWdpbi54KSwK
KyAgICAgICAgICAgIEAid2lkdGgiIDogQChsYXllci5ib3VuZHMuc2l6ZS53aWR0aCksCisgICAg
ICAgICAgICBAImhlaWdodCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLmhlaWdodCksCisKKyAgICAg
ICAgfSwKKyAgICAgICAgQCJwb3NpdGlvbiIgOiBAeworICAgICAgICAgICAgQCJ4IiA6IEAobGF5
ZXIucG9zaXRpb24ueCksCisgICAgICAgICAgICBAInkiIDogQChsYXllci5wb3NpdGlvbi55KSwK
KyAgICAgICAgfSwKKyAgICAgICAgQCJ6UG9zaXRpb24iIDogQChsYXllci56UG9zaXRpb24pLAor
ICAgICAgICBAImFuY2hvclBvaW50IiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5h
bmNob3JQb2ludC54KSwKKyAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLmFuY2hvclBvaW50Lnkp
LAorICAgICAgICB9LAorICAgICAgICBAImFuY2hvclBvaW50WiIgOiBAKGxheWVyLmFuY2hvclBv
aW50WiksCisgICAgICAgIEAidHJhbnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBA
KGxheWVyLnRyYW5zZm9ybS5tMTEpLAorICAgICAgICAgICAgQCJtMTIiIDogQChsYXllci50cmFu
c2Zvcm0ubTEyKSwKKyAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMyks
CisgICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTQpLAorCisgICAgICAg
ICAgICBAIm0yMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjEpLAorICAgICAgICAgICAgQCJtMjIi
IDogQChsYXllci50cmFuc2Zvcm0ubTIyKSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIu
dHJhbnNmb3JtLm0yMyksCisgICAgICAgICAgICBAIm0yNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5t
MjQpLAorCisgICAgICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzEpLAorICAg
ICAgICAgICAgQCJtMzIiIDogQChsYXllci50cmFuc2Zvcm0ubTMyKSwKKyAgICAgICAgICAgIEAi
bTMzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMyksCisgICAgICAgICAgICBAIm0zNCIgOiBAKGxh
eWVyLnRyYW5zZm9ybS5tMzQpLAorCisgICAgICAgICAgICBAIm00MSIgOiBAKGxheWVyLnRyYW5z
Zm9ybS5tNDEpLAorICAgICAgICAgICAgQCJtNDIiIDogQChsYXllci50cmFuc2Zvcm0ubTQyKSwK
KyAgICAgICAgICAgIEAibTQzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MyksCisgICAgICAgICAg
ICBAIm00NCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDQpLAorICAgICAgICB9LAorICAgICAgICBA
InN1YmxheWVyVHJhbnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnN1
YmxheWVyVHJhbnNmb3JtLm0xMSksCisgICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnN1Ymxh
eWVyVHJhbnNmb3JtLm0xMiksCisgICAgICAgICAgICBAIm0xMyIgOiBAKGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtLm0xMyksCisgICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVyLnN1YmxheWVyVHJh
bnNmb3JtLm0xNCksCisKKyAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFu
c2Zvcm0ubTIxKSwKKyAgICAgICAgICAgIEAibTIyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zv
cm0ubTIyKSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTIzKSwKKyAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTI0
KSwKKworICAgICAgICAgICAgQCJtMzEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzEp
LAorICAgICAgICAgICAgQCJtMzIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzIpLAor
ICAgICAgICAgICAgQCJtMzMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzMpLAorICAg
ICAgICAgICAgQCJtMzQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzQpLAorCisgICAg
ICAgICAgICBAIm00MSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MSksCisgICAgICAg
ICAgICBAIm00MiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MiksCisgICAgICAgICAg
ICBAIm00MyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBA
Im00NCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00NCksCisgICAgICAgIH0sCisKKyAg
ICAgICAgQCJoaWRkZW4iIDogQChsYXllci5oaWRkZW4pLAorICAgICAgICBAImRvdWJsZVNpZGVk
IiA6IEAobGF5ZXIuZG91YmxlU2lkZWQpLAorICAgICAgICBAIm1hc2tzVG9Cb3VuZHMiIDogQChs
YXllci5tYXNrc1RvQm91bmRzKSwKKyAgICAgICAgQCJjb250ZW50c1NjYWxlIiA6IEAobGF5ZXIu
Y29udGVudHNTY2FsZSksCisgICAgICAgIEAicmFzdGVyaXphdGlvblNjYWxlIiA6IEAobGF5ZXIu
cmFzdGVyaXphdGlvblNjYWxlKSwKKyAgICAgICAgQCJvcGFxdWUiIDogQChsYXllci5vcGFxdWUp
LAorICAgICAgICBAIm9wYWNpdHkiIDogQChsYXllci5vcGFjaXR5KSwKKyAgICB9OworfQorCist
ICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tf
dClhY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3IF9kb0FmdGVyUmVzZXR0aW5nU2luZ2xlVGFw
R2VzdHVyZTphY3Rpb25dOworfQorCistICh2b2lkKV9kb0FmdGVyUmVjZWl2aW5nRWRpdERyYWdT
bmFwc2hvdEZvclRlc3Rpbmc6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uCit7CisgICAgW19jb250
ZW50VmlldyBfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOmFjdGlv
bl07Cit9CisKKy0gKENHUmVjdClfZHJhZ0NhcmV0UmVjdAoreworI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpCisgICAgcmV0dXJuIF9wYWdlLT5jdXJyZW50RHJhZ0NhcmV0UmVjdCgpOworI2Vsc2UK
KyAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyNlbmRpZgorfQorCistICh2b2lkKV9zaW11bGF0ZUxv
bmdQcmVzc0FjdGlvbkF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24KK3sKKyAgICBbX2NvbnRl
bnRWaWV3IF9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246bG9jYXRpb25dOworfQor
CistICh2b2lkKV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAqKXRleHQKK3sKKyAgICBb
X2NvbnRlbnRWaWV3IF9zaW11bGF0ZVRleHRFbnRlcmVkOnRleHRdOworfQorCistICh2b2lkKV9k
eW5hbWljVXNlckludGVyZmFjZVRyYWl0RGlkQ2hhbmdlCit7CisgICAgaWYgKCFfcGFnZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIF9wYWdlLT5lZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCk7
CisgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kXTsKK30KKworLSAodm9pZClf
dHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25PbkVsZW1lbnQ6KHVpbnQ2NF90KWVsZW1lbnRJRCBk
b2N1bWVudDoodWludDY0X3QpZG9jdW1lbnRJRCBwYWdlOih1aW50NjRfdClwYWdlSUQKK3sKKyNp
ZiBVU0UoU1lTVEVNX1BSRVZJRVcpCisgICAgaWYgKF9wYWdlKSB7CisgICAgICAgIGlmIChhdXRv
KiBwcmV2aWV3Q29udHJvbGxlciA9IF9wYWdlLT5zeXN0ZW1QcmV2aWV3Q29udHJvbGxlcigpKQor
ICAgICAgICAgICAgcHJldmlld0NvbnRyb2xsZXItPnRyaWdnZXJTeXN0ZW1QcmV2aWV3QWN0aW9u
V2l0aFRhcmdldEZvclRlc3RpbmcoZWxlbWVudElELCBkb2N1bWVudElELCBwYWdlSUQpOworICAg
IH0KKyNlbmRpZgorfQorCistICh2b2lkKV9zZXREZXZpY2VPcmllbnRhdGlvblVzZXJQZXJtaXNz
aW9uSGFuZGxlckZvclRlc3Rpbmc6KEJPT0wgKF4pKCkpaGFuZGxlcgoreworICAgIEZ1bmN0aW9u
PGJvb2woKT4gaGFuZGxlcldyYXBwZXI7CisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIGhhbmRs
ZXJXcmFwcGVyID0gW2hhbmRsZXIgPSBtYWtlQmxvY2tQdHIoaGFuZGxlcildIHsgcmV0dXJuIGhh
bmRsZXIoKTsgfTsKKyAgICBfcGFnZS0+c2V0RGV2aWNlT3JpZW50YXRpb25Vc2VyUGVybWlzc2lv
bkhhbmRsZXJGb3JUZXN0aW5nKFdURk1vdmUoaGFuZGxlcldyYXBwZXIpKTsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdNYWMuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdN
YWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZmQxNTZhMjU2ZDQ1MTI1MzJiOTgzYmZmNmIzNmYxYzgwZWYyMGEy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dl
YlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0Jhc2UuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXcuaD4KKworI2lmICFUQVJHRVRfT1NfSVBIT05FCisKK0BjbGFzcyBfV0tGcmFtZUhhbmRsZTsK
KworQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZ01hYykKKworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcjsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc2hvdWxkUmVxdWVzdENhbmRp
ZGF0ZXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TTWVudSAqX2FjdGl2ZU1l
bnU7CisKKy0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElEOworLSAodm9pZClfaGFu
ZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CisK
Ky0gKHZvaWQpX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOihOU1RleHRDaGVja2luZ1Jlc3VsdCAq
KWNhbmRpZGF0ZTsKKy0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOworCistICh2
b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzOworLSAodm9pZClfZGlkVXBkYXRlQ2FuZGlkYXRl
TGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZTsKKworLSAodm9pZClfaW5zZXJ0VGV4dDooaWQp
c3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5nZTsKKy0gKE5T
UmVjdClfY2FuZGlkYXRlUmVjdDsKKworLSAodm9pZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0Oihp
bnQpaGVpZ2h0OworLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0Owor
LSAodm9pZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHM6KGRpc3BhdGNo
X2Jsb2NrX3QpYWN0aW9uOworCitAZW5kCisKKyNlbmRpZiAvLyAhVEFSR0VUX09TX0lQSE9ORQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0
aW5nTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2YzU5NmQ4Yjk1ODkzMjZjZjYzNDUyZWFkOWM3Njc5Yjhj
YmJmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFj
L1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3Rp
bmdNYWMuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKKworQGltcGxlbWVudGF0
aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nTWFjKQorCistICh2b2lkKV9yZXF1ZXN0Q29udHJvbGxl
ZEVsZW1lbnRJRAoreworICAgIGlmIChfcGFnZSkKKyAgICAgICAgX3BhZ2UtPnJlcXVlc3RDb250
cm9sbGVkRWxlbWVudElEKCk7Cit9CisKKy0gKHZvaWQpX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50
SURSZXNwb25zZTooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgLy8gT3ZlcnJpZGRlbiBi
eSBzdWJjbGFzc2VzLgorfQorCistICh2b2lkKV9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTooTlNU
ZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUKK3sKKyAgICBfaW1wbC0+aGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGUoY2FuZGlkYXRlKTsKK30KKworLSAodm9pZClfZGlkSGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUKK3sKKyAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCit9CisKKy0gKHZv
aWQpX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKXZpc2libGUKK3sKKyAg
ICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCit9CisKKy0gKHZvaWQpX2ZvcmNlUmVxdWVz
dENhbmRpZGF0ZXMKK3sKKyAgICBfaW1wbC0+Zm9yY2VSZXF1ZXN0Q2FuZGlkYXRlc0ZvclRlc3Rp
bmcoKTsKK30KKworLSAoQk9PTClfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICByZXR1
cm4gX2ltcGwtPnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCk7Cit9CisKKy0gKHZvaWQpX2luc2Vy
dFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFu
Z2UKK3sKKyAgICBbc2VsZiBpbnNlcnRUZXh0OnN0cmluZyByZXBsYWNlbWVudFJhbmdlOnJlcGxh
Y2VtZW50UmFuZ2VdOworfQorCistIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QKK3sKKyAgICByZXR1
cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5mb2N1c2VkRWxlbWVudFJl
Y3Q7Cit9CisKKy0gKHZvaWQpdmlld0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2UKK3sKKyAg
ICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVyaW5nIFtzdXBlciBpbml0V2l0aENvZGVyOl0gYW5k
IFtzdXBlciBpbml0V2l0aEZyYW1lOl0uCisgICAgLy8gVGhhdCBpcyBiZWZvcmUgX2ltcGwgaXMg
cmVhZHkgdG8gYmUgdXNlZCwgc28gY2hlY2suIDxyZGFyOi8vcHJvYmxlbS8zOTYxMTIzNj4KKyAg
ICBpZiAoIV9pbXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBfaW1wbC0+ZWZmZWN0aXZlQXBw
ZWFyYW5jZURpZENoYW5nZSgpOworfQorCistICh2b2lkKV9zZXRIZWFkZXJCYW5uZXJIZWlnaHQ6
KGludCloZWlnaHQKK3sKKyAgICBfcGFnZS0+c2V0SGVhZGVyQmFubmVySGVpZ2h0Rm9yVGVzdGlu
ZyhoZWlnaHQpOworfQorCistICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWln
aHQKK3sKKyAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQp
OworfQorCistICh2b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdNb3VzZUV2ZW50czoo
ZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KK3sKKyAgICBfaW1wbC0+ZG9BZnRlclByb2Nlc3NpbmdB
bGxQZW5kaW5nTW91c2VFdmVudHMoYWN0aW9uKTsKK30KKworLSAoTlNNZW51ICopX2FjdGl2ZU1l
bnUKK3sKKyAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2VzcyBtZW51IGlzIHN1
cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQorICAgIC8vIGV4dGVu
ZGVkIHRvIHJlY29nbml6ZSB0aGUgcmVndWxhciBjb250ZXh0IG1lbnUgYXMgd2VsbC4KKyAgICBy
ZXR1cm4gX2ltcGwtPmRvbVBhc3RlTWVudSgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdl
Q2xpZW50SW1wbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNs
aWVudEltcGxDb2NvYS5tbQppbmRleCBmNTg5ZTlkMzM2MWZhMWZiNjAzNWRhYTEzOTIxNTIyMDE2
NmJjZTEwLi5lN2Q3MzgyZGI1YjhmNzYxNzhjNmRlNTlmMzk3NDQ5MzdhZTAwYTNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2Eu
bW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblBy
aXZhdGUuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZp
ZXdQcml2YXRlRm9yVGVzdGluZy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGRjOWY3
NGM0OWE2YmVhOWVkYzE1MDZjNWFiOTU3ZTAwNmEyMDdhNWUuLjRkZjNhZDU1NTUwNWQ2ZDgzYWQy
YWQxYWZkOTg1MzZkMTFmYjZlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbXBvcnQgIldLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFBy
b3ZpZGVyUmVnaXN0cnkuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0
ICJXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oIgogI2ltcG9ydCAiV2ViQ29udGV4dE1lbnVQ
cm94eS5oIgogI2ltcG9ydCAiV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duSU9TLmgiCiAj
aW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCBiYzhhZTAy
MjFjNGU2MWI2NGE5N2NlNWQ0MjhmMzE2ZDRlMDc4MGNjLi5iMzc2NTBiZTRkZTg2YTE3NWM2MWRk
MWQxZjdlOTUxMWY0YzhhNDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTcxLDYgKzcxLDcgQEAKICNp
bXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAjaW1wb3J0ICJXS1dlYlZp
ZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tX
ZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCIKICNpbXBvcnQgIldlYkF1dG9jb3JyZWN0aW9u
Q29udGV4dC5oIgogI2ltcG9ydCAiV2ViQXV0b2NvcnJlY3Rpb25EYXRhLmgiCiAjaW1wb3J0ICJX
ZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCA1NjI4
Y2YzNWI4Y2NiMmQxZmI5MTlkMWMyYTcwODQzZjc2ODc4ODdkLi40NDEwYjdkMTNmMDZjMTJjNmFi
ZWFkOGEzNjc1MjAwNmQ2OWQyNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLTW91c2VHZXN0dXJlUmVjb2duaXplci5oCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpZiBIQVZFKEhPVkVSX0dFU1RVUkVfUkVDT0dOSVpFUikKIAorI2ltcG9ydCA8VUlLaXQvVUlH
ZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogCiBA
aW50ZXJmYWNlIFdLTW91c2VHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCmluZGV4IDFh
MmJmZDg3NTJlNzc2MTJkMzgwOWFmMjJlOTA1ZWRlNjkzMWU3Y2QuLjg1ZWE4MjA2YTNlZDY2YTE4
MjYwOTJlNDVmODZlMDcxNjNiYzJkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5tbQpAQCAtMzMsNyArMzMsNyBAQAogI2ltcG9ydCAiV0tGdWxsc2Ny
ZWVuU3RhY2tWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmll
d0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dl
YlZpZXdQcml2YXRlRm9yVGVzdGluZy5oIgogI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5tbQppbmRleCAyMjY1M2Q3NDM5ODg2ZGJmNWVjZGNkZGFmZTcyZDAyZDdiODMxZDAw
Li5iZjdkYzEzMmIxZWY5ZTA4MTI3NWNiZWNiNTYyZGQxYmZkM2EyYTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCkBAIC00OCw2ICs0
OCw3IEBACiAjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZh
dGVGb3JUZXN0aW5nTWFjLmgiCiAjaW1wb3J0ICJXZWJDb2xvclBpY2tlck1hYy5oIgogI2ltcG9y
dCAiV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oIgogI2ltcG9ydCAiV2ViRGF0YUxpc3RTdWdnZXN0
aW9uc0Ryb3Bkb3duTWFjLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaAppbmRleCA0ZGVkYzBhNmFhMmEy
MjM4OTYxNTYxZWYwOTYzNmZiZjFlN2Q1MTE1Li4wMWQ3YTJhYjc1MThlNjM3OThlZmFmMjZkMzlj
Njk1NTgwMWM3Y2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgKQEAgLTIzLDggKzIzLDkgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oTUFDKQog
CisjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CiAjaW1wb3J0ICJHZW5lcmljQ2FsbGJhY2suaCIK
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDY2Y2RlOTljZWRhNDFhYjNkMTI1YjAyNTJi
YTI5YzZhOTFmMjg2Yy4uYWYyOWIyYTM2OWY0MTNjMTNlMGIwOTI1ZDAzZWNiMjk1NzQyZGViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC05OCw2ICs5OCw5IEBACiAJCTBGMDhDRjU0MUQ2M0MxNDAwMEI0OERGMSAvKiBXS0Zvcm1TZWxl
Y3RQb3BvdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjA4Q0Y1MzFENjNDMTQwMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UG9wb3Zlci5oICovOyB9
OwogCQkwRjE3NEFBMzE0MkE0Q0I3MDAzOTI1MEYgLyogQVBJR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTc0QUEyMTQyQTRDQjYwMDM5
MjUwRiAvKiBBUElHZW9tZXRyeS5oICovOyB9OwogCQkwRjNDNzI1QjE5NkY2MDRFMDBBRUREMEMg
LyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0
b3JIaWdobGlnaHRWaWV3LmggKi87IH07CisJCTBGNDVBMzMxMjM5RDg5QTEwMDI5NEFCRiAvKiBX
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8qIFdLV2ViVmll
d1ByaXZhdGVGb3JUZXN0aW5nSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY0NUEzMzUyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1By
aXZhdGVGb3JUZXN0aW5nTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3UHJpdmF0ZUZv
clRlc3RpbmdNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjQ1QTMzRDIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3UHJpdmF0ZUZvclRl
c3RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDVBMzNCMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTk0Nzkw
MTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1OTQ3OEQxODdCM0IzQTAw
NDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi87IH07CiAJCTBGNTk0NzlC
MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU5NDc5NTE4N0Iz
QjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oICovOyB9Owog
CQkwRjU5NDc5RDE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1OTQ3OTcxODdCM0I2
MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUuaCAqLzsgfTsKQEAgLTEwOSw2ICsxMTIs
OSBAQAogCQkwRjkzMUMxQzE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzFDMUExOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MuaCAqLzsgfTsKIAkJMEY5MzFDMUMxOEM1NzExOTAwREJCOEQ0IC8q
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMxQzFBMThDNTcxMTkwMERCQjhENCAv
KiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmggKi87IH07CiAJCTBGQjY1
OTIzMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3aW5nQXJlYUluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAv
KiBEcmF3aW5nQXJlYUluZm8uaCAqLzsgfTsKKwkJMEZCOTQ4MzcyMzlGMzFEMTAwOTI2QThGIC8q
IFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJG
IC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmggKi87IH07CisJCTBGQjk0ODM4MjM5RjMy
MzgwMDkyNkE4RiAvKiBXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5oIGluIENvcHkgVGVz
dGluZyBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzJG
MjM5RDg5QTAwMDI5NEFCRiAvKiBXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5oICovOyB9
OworCQkwRkI5NDgzOTIzOUYzMjM4MDA5MjZBOEYgLyogV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3Rp
bmdNYWMuaCBpbiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3UHJpdmF0ZUZv
clRlc3RpbmdNYWMuaCAqLzsgfTsKIAkJMEZDQjRFNDYxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VD
bGllbnRJbXBsSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkNCNEUzNjE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJT1MuaCAqLzsg
fTsKIAkJMEZDQjRFNDgxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTM4MThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggKi87IH07CiAJCTBGQ0I0RTRBMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzQTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5oICovOyB9OwpAQCAtMTkyNCw2ICsxOTMwLDE5IEBACiAvKiBFbmQg
UEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29weUZpbGVz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGQjk0ODM2MjM5RjMxQjcwMDkyNkE4RiAvKiBDb3B5
IFRlc3RpbmcgSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7
CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZHN0UGF0aCA9IFdlYktpdFRl
c3RTdXBwb3J0OworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OworCQkJZmlsZXMgPSAoCisJCQkJ
MEZCOTQ4MzcyMzlGMzFEMTAwOTI2QThGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmgg
aW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCisJCQkJMEZCOTQ4MzgyMzlGMzIzODAwOTI2QThG
IC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmggaW4gQ29weSBUZXN0aW5nIEhlYWRl
cnMgKi8sCisJCQkJMEZCOTQ4MzkyMzlGMzIzODAwOTI2QThGIC8qIFdLV2ViVmlld1ByaXZhdGVG
b3JUZXN0aW5nTWFjLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8sCisJCQkpOworCQkJbmFt
ZSA9ICJDb3B5IFRlc3RpbmcgSGVhZGVycyI7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMUEwN0QyRjcxOTE5QjM2NTAwRUNEQTE2IC8qIENvcHkg
TWVzc2FnZSBHZW5lcmF0aW9uIFNjcmlwdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTIwMjYsNiAr
MjA0NSwxMiBAQAogCQkwRjE3NEFBNjE0MkFBQzYxMDAzOTI1MEYgLyogV0tHZW9tZXRyeS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0dlb21ldHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8qIFdL
SW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzQzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxp
Z2h0Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzMkYyMzlE
ODlBMDAwMjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzMwMjM5RDg5QTEwMDI5NEFCRiAv
KiBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0
aW5nTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1ByaXZh
dGVGb3JUZXN0aW5nTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDVBMzM0
MjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ01hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2Vi
Vmlld1ByaXZhdGVGb3JUZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNDVBMzNDMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OEQxODdCM0IzQTAwNDM3ODU3IC8q
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNTk0NzhFMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1OTQ3OEYxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDcyLDYgKzUw
OTcsMTUgQEAKIAkJCXRhYldpZHRoID0gODsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMEY0
NUEzMkUyMzlEODk2MDAwMjk0QUJGIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8qIFdLV2ViVmll
d1ByaXZhdGVGb3JUZXN0aW5nSU9TLmggKi8sCisJCQkJMEY0NUEzMzAyMzlEODlBMTAwMjk0QUJG
IC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTEwNThDN0IwRkVBNTU4NUUxMUNBMkNC
QiAvKiBMaW5rZWQgRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC02NzUyLDYgKzY3ODYsOCBAQAogCQkJCTFBQzE0MTUwMThBQzQ3RUUwMDZD
NjAyQyAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oICovLAogCQkJCTFBNjZCRjhF
MThBMDUyRUQwMDIwNzFCNCAvKiBXS1dlYlZpZXdJbnRlcm5hbC5oICovLAogCQkJCTI2RjlBODNB
MThBMzQ2M0YwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmggKi8sCisJCQkJMEY0NUEzM0Iy
MzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmggKi8sCisJCQkJ
MEY0NUEzM0MyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcubW0gKi8sCiAJCQkJ
MUFENjBGNUMxOEUyMEY0QzAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXMuaCAqLywKIAkJCQkx
QUQ2MEY1QjE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5tbSAqLywKIAkJCQkx
QUQ2MEY1RjE4RTIwRjc0MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlc0ludGVybmFsLmggKi8s
CkBAIC04MTgzLDYgKzgyMTksNyBAQAogCQkJCUJDMEMzNzY2MTBGODA3NjYwMDc2RDdDQiAvKiBD
ICovLAogCQkJCTM3QzRDMDgzMTgxNDlDMkEwMDM2ODhCOSAvKiBDb2NvYSAqLywKIAkJCQlCQzhB
NTAxMzExNzY1RjQ1MDA3NTc1NzMgLyogY3BwICovLAorCQkJCTBGNDVBMzJFMjM5RDg5NjAwMDI5
NEFCRiAvKiBpb3MgKi8sCiAJCQkJQkMxMTFCNDcxMTJGNjE2OTAwMzM3QkFCIC8qIG1hYyAqLywK
IAkJCQk2MzQ4NDI0RjFGQjI2RTcxMDA5NDZFM0MgLyogQVBJQXBwbGljYXRpb25NYW5pZmVzdC5o
ICovLAogCQkJCTJFNUM3NzBEMUZBN0Q0MjkwMDU5MzJDMyAvKiBBUElBdHRhY2htZW50LmNwcCAq
LywKQEAgLTg0NjYsNiArODUwMyw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCQzg2OTlCMzEx
NkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICovLAogCQkJCUJDODY5OUI0MTE2QUFEQUEwMDJB
OTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oICovLAorCQkJCTBGNDVBMzMzMjM5RDg5QUYwMDI5NEFC
RiAvKiBXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oICovLAorCQkJCTBGNDVBMzM0MjM5
RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA3NDEsNiArMTA3ODAs
OSBAQAogCQkJCTJEQzZEOUMzMThDNDRBNjEwMDQzQkFENCAvKiBXS1dlYlZpZXdDb250ZW50UHJv
dmlkZXJSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2NkJGOEYxOEEwNTJFRDAwMjA3
MUI0IC8qIFdLV2ViVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkY5QTgzQjE4
QTM0NjgxMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY0NUEzM0QyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjQ1QTMzMTIzOUQ4OUExMDAyOTRBQkYgLyogV0tXZWJWaWV3
UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDVBMzM1MjM5RDg5
QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ01hYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFENjBGNUUxOEUyMEY0QzAwMjBDMDM0IC8qIFdLV2luZG93RmVhdHVyZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRDYwRjYwMThFMjBGNzQwMDIwQzAzNCAvKiBXS1dpbmRvd0Zl
YXR1cmVzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTZBNTA4MEJGMUYwRURBQUEwMEU2
MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDg1
OCw2ICsxMDkwMCw3IEBACiAJCQkJMUEyMTgwMTYxQjU0NTQ2MjAwNDZBRUM0IC8qIEFkZCBTeW1s
aW5rIGluIC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrcyAqLywKIAkJCQk1Mzc5QzdB
QzIxRTUyODg1MDBFNEE4RjYgLyogQ2hlY2sgLnhjZmlsZWxpc3RzICovLAogCQkJCTkzMzE3MDA3
MjIzNDY3NDUwMEIzMjU1NCAvKiBDcmVhdGUgc3ltbGlua3MgdG8gWFBDIHNlcnZpY2VzIGZvciBl
bmdpbmVlcmluZyBidWlsZHMgKi8sCisJCQkJMEZCOTQ4MzYyMzlGMzFCNzAwOTI2QThGIC8qIENv
cHkgVGVzdGluZyBIZWFkZXJzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAoCiAJCQkJNTM1
RTA4QzQyMjU0NUI3MjAwREYwMENBIC8qIFBCWEJ1aWxkUnVsZSAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NzgxODI2NTFiMTJmNGE3NmIy
YWU1MzM1ODI0YzlkZGQyYmQ4MGIyLi5lN2RlNzNiNjA3NzliYTExMzkyMDgzOGI5Yjk5Njk3MDk2
YTNmY2M5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTAgQEAKKzIwMTktMTItMTIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBXS1dlYlZpZXcgY29kZSByZWxhdGVkIHRvIHRl
c3RpbmcgdG8gbmV3IGZpbGVzLCB3aXRoIHRoZWlyIG93biBoZWFkZXJzLCBhbmQgc3RvcCBleHBv
c2luZyB0ZXN0LW9ubHkgZnVuY3Rpb25zIGFzIFNQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTAyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTW92ZSB0ZXN0aW5nLW9ubHkgU1BJIHRv
IG5ldyBwcml2YXRlIGhlYWRlcnMgdG8gZGlzY291cmFnZSBmaXJzdCBwYXJ0aWVzIGZyb20gdXNp
bmcKKyAgICAgICAgdGhlbSBieSBtaXN0YWtlLiBNb3ZlIHRlc3Qtb25seSBjb2RlIHRvIG5ldyBm
aWxlcyB0byByZWR1Y2UgdGhlIHNpemUgb2YgV0tXZWJWaWV3Lm1tLgorCisgICAgICAgICogTWlu
aUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm06CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW06CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EZXZpY2VPcmllbnRhdGlvbi5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvdWJsZURlZmVyc0xv
YWRpbmcubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRl
cmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0dXJl
RGVsZWdhdGUubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW06Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1t
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmll
dy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdh
dGUubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyTWVk
aWFTaW11bGF0ZUZhaWxlZFNhbmRib3gubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVu
dEluZm8ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdDYW5kaWRhdGVUZXN0cy5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW06
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9T
Lm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9u
VGVzdHMubW06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRl
bGVnYXRlLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxh
dG9ySU9TLm1tOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxh
dG9yTWFjLm1tOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xs
ZXJDb2NvYS5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJX
S1dlYlZpZXcubW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENv
bnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29u
dHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENv
bnRyb2xsZXJJT1MubW06CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRD
b250cm9sbGVyTWFjLm1tOgorCiAyMDE5LTEyLTEyICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBEZW55IG1hY2ggbG9va3VwIGFjY2VzcyB0byBj
b250ZW50IGZpbHRlciBzZXJ2aWNlIGluIHRoZSBXZWJDb250ZW50IHNhbmRib3gKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tIGIv
VG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KaW5kZXgg
MDA2MzI2NmVkMzNlN2RhN2EyYWI5MTQyYTJhZjBhMTJjNTkwZDBkOS4uYTA2NDM5NWMwYzQ0YWFk
NGExM2Y4MWFlMDJmOTFmYzFkNjhmMzljNiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
bWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
bWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBv
cnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tJY29uTG9hZGluZ0RlbGVn
YXRlLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0VkaXRpbmdUZXN0SGFybmVz
cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rlc3RIYXJuZXNzLm1tCmluZGV4IGYw
OTZmYjc1NmYwMDQzZTYzNjZkZWM0ZjAxYTkwYmMxZDA3MzdjM2IuLjllN2NkMGZlYjhlNWVjYjU3
NGEzM2NjNjljY2Y5ZmQwOGIyOGVjYjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
RWRpdGluZ1Rlc3RIYXJuZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvRWRpdGluZ1Rl
c3RIYXJuZXNzLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1Rlc3RIYXJu
ZXNzLmgiCiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JU
ZXN0aW5nLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBFZGl0aW5nVGVzdEhhcm5lc3MKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5lc3NUaW1l
ckNyYXNoLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVzcG9uc2l2ZW5l
c3NUaW1lckNyYXNoLm1tCmluZGV4IDI3MTJjNWYwNDBhZGUxYWJlZTYyNDUxOTI4ZGU3ZDczOGI3
YTExY2QuLmNiMWZmNWEwNmE0ZmM2N2ZmMzA3MDQzNzI5N2E0ZWViNzg0NDhiM2MgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJD
cmFzaC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9SZXNwb25zaXZl
bmVzc1RpbWVyQ3Jhc2gubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRlTWFjLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVG
b3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0FuaW1hdGVkUmVzaXplLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9BbmltYXRlZFJlc2l6ZS5tbQppbmRleCAzMTE5YzNjMzk5MDMwMjVjMWQyNzEwYzFiZWRi
ZGI0Njc2MjMzMDU1Li5lYTFkMGRkMTNmYjdlZjNkODEwOWRkNGY3NTk2N2NlMTFhNmU2MWI2IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FuaW1hdGVk
UmVzaXplLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQW5p
bWF0ZWRSZXNpemUubW0KQEAgLTMzLDcgKzMzLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZp
ZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3Rpbmcu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9EZXZpY2VPcmllbnRhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvRGV2aWNlT3JpZW50YXRpb24ubW0KaW5kZXggOTAwNGY4YzUz
MmFhZGRmOTMyYzRmMTY0NDIyNDM4MWEyNmE4YjAzNi4uZGI5MTk4ZDZiODk2ZDE1ODNlYzFkNzU2
YjQxZTk1MTQ0NjdjZjYxYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9EZXZpY2VPcmllbnRhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0RldmljZU9yaWVudGF0aW9uLm1tCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9G
dW5jdGlvbi5oPgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG91YmxlRGVmZXJzTG9hZGluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG91YmxlRGVmZXJzTG9hZGluZy5tbQppbmRleCA2NGRjNDZiNGY3NzcyYmRjZmU4NzFl
MmY4NWVlMjllNjEzNGEwZGM4Li4zY2NiYjU0NTgyODJlNmRkNjllMTQ5M2FkMGU3NzJhNjRlNjlm
MzFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rv
dWJsZURlZmVyc0xvYWRpbmcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Eb3VibGVEZWZlcnNMb2FkaW5nLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
LSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRs
b2NrQWZ0ZXJDcmFzaC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0KaW5kZXggZDQzMjRhOGY2YzZhOWRmMjNk
ZTg4NGJmNTlhNjQ2MTE1ZDI4OTEwYy4uMzdhZDE0OGE1YTAwODZhMWVjZTcxYmYxYTJlOGZkMmU2
YjAzMTNiNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tBZnRlckNyYXNoLm1tCkBA
IC0zMCw3ICszMCw3IEBACiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJh
dGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1ZmZlcmluZ1Bv
bGljeS5tbQppbmRleCA2YzJkN2I2ZjRlMDBlY2YwNTJkMTA1OTM4MTM4ZDdjMDZiZTEyNTlhLi5k
Nzc1OTVkZDYzZjEwNzg5Y2VmMWMwOTMzYmNiNjliZGI5YmZkZDI0IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFCdWZmZXJp
bmdQb2xpY3kubW0KQEAgLTI5LDkgKzI5LDggQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLQogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAK
IHN0YXRpYyB2b2lkIHdhaXRVbnRpbEJ1ZmZlcmluZ1BvbGljeUlzRXF1YWxUbyhXS1dlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IGNoYXIqIGV4cGVjdGVkKQogewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWluZ0NvbnRyb2xz
VGVzdHMubW0KaW5kZXggNTAwMTJmMGYxOWRmZTVlY2Q4ZWRkNWFjYjMzZjdiNTdlMmIxMDBmOC4u
ZTc5YzYyNDUzMGRhN2YxMzcyZmM5ZTRiNDBkOWI5MTdiNzIyNTIwZSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNUZXN0
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlp
bmdDb250cm9sc1Rlc3RzLm1tCkBAIC0yNyw5ICsyNyw4IEBACiAKICNpbXBvcnQgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGlu
Zy5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0dXJlRGVsZWdhdGUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVE
ZWxlZ2F0ZS5tbQppbmRleCA1ZGMxYTE5Nzg5ODQ0MzE5ZDI2MTlhNWM3YTFmOGZjOTJmNmU4OTM4
Li5jOGQwNTlkNDQ4Y2U3OWQ5OGI2NTE3MmU1MTU4Mjc3M2NlZTJmNDhmIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxl
Z2F0ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1
cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbQpAQCAtMzgsOSArMzgsOSBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VSTENGLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3
dGYvU2Vjb25kcy5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0K
aW5kZXggODQ3YmZiNjdlZTZmMGI4MGQ5Mjc2YTQzNjliMTRkZjc3NjM0MDBiZS4uNjYzZjRmNGI0
OWNiN2MwYjE0NWY2YTFiYzhkOWEyMzk5NWY4NTZjMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N1c3Bl
bmRNZWRpYUJ1ZmZlcmluZy5tbQpAQCAtMjksOSArMjksOCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCiAjaW1wb3J0IDxXZWJL
aXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3Rp
bmcuaD4KIAogVEVTVChXZWJLaXQsIFByb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcpCiB7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbQppbmRleCAxMTU3NzdlNzRkOWJiZmRmYzRjZTNl
MDNhYzYzMjIxODZmODMyMWU4Li5kMjMzZjQ0OGJjNmFkNWI5MGZjNGE2NTcyZjNkOWI5NDlkNTFm
OGI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1By
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KQEAgLTM5LDcgKzM5LDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZUhhbmRsZXIuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNp
Yy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tCmluZGV4IDViNjY5ZWFiMDIzODlmMjEzYTA1MTdmNzVkZDZiOGM1NDY4YjkxMDku
LmQ4ZmM5MzY4ZGEyMDUxNjJmMWZlYTkzYTc2ZjBjNTY2ODk0OWM3ZTQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtl
ckJhc2ljLm1tCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVI
YW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYktpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9TbmFwc2hvdFN0b3JlLm1tCmluZGV4IDZjMmY4NDMyZThhYWE2NjY3Njk5MWFh
N2ZiYWUxZmMwNjBjNTdlNTUuLmI4MmY3YjBjODVmODEzYTk3ZGMwNDk5YmI4Y2FjNzI4ZGIyM2I4
ZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25h
cHNob3RTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1NuYXBzaG90U3RvcmUubW0KQEAgLTM2LDcgKzM2LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Bh
Z2UuaD4KICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAKIHN0YXRpYyBib29sIGRpZEZvcmNlUmVwYWludDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbQppbmRl
eCBkOWFkZWY0NDMyZDk4M2U0YjQ3MTAyMDc0MDY5YTYyZGE5YzFiN2MzLi44YmM2NTNjYTkwNjVi
MjdkZGJjMmFjZmY2ZDg2YmQyYzk3N2EyNTdjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1tCkBAIC0zMSw3ICszMSw3
IEBACiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRp
b25FeHRyYXMuaCIKICNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRlLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAKIHN0YXRpYyBib29s
IGhhc1RyaWdnZXJJbmZvOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9VSURlbGVnYXRlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9VSURlbGVnYXRlLm1tCmluZGV4IDc5MTdiOGY5ZDJmNjc5YTExOTk4MmI4ZTUwMTIy
Y2FlZTEyZGYzZWMuLjM2MTQ0MTdjZTVjYjI4ZDM3YTE1YzZmOTAwN2U1MTMzODFiMzIxNWYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxlZ2F0
ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VJRGVsZWdh
dGUubW0KQEAgLTM2LDcgKzM2LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVSURlbGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tJbnNwZWN0
b3IuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlck1lZGlhU2ltdWxhdGVGYWlsZWRTYW5kYm94
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyTWVkaWFTaW11
bGF0ZUZhaWxlZFNhbmRib3gubW0KaW5kZXggM2I4ODM3YzFkZjMzNDViMmU3OGRjOTIxMWVjNDRh
ODUzZjJiNWRkZS4uN2RkY2MxMDEyMjkzMTMyYTMwOGFlZmEzMzc4NjViY2ExMmVkY2UzNyAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyTWVkaWFT
aW11bGF0ZUZhaWxlZFNhbmRib3gubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Vc2VyTWVkaWFTaW11bGF0ZUZhaWxlZFNhbmRib3gubW0KQEAgLTI4LDExICsy
OCwxMSBAQAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIK
ICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLQogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IDdhMDg5NjNmMTA2
NjExNmMwMDZlMjhiZDJhODY2YmZjYmIwNjI1NDYuLjg1MWQzNGEwNmQxOWVlOGZjZGRhNDBhMTg5
ZmY3MWI4MmE1MWRkODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVmlkZW9Db250cm9sc01hbmFnZXIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbQpAQCAtMjcsOSArMjcs
OCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgotCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUu
aD4KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
IAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCmluZGV4IGI2ZmNkOTM1ODUw
ZWJkNjdiMmIxODYxMGU0ODg5MDY2NWUzMTkyYWIuLjE4NjBkYzM1YmU3YzliYTQxYmU4MTgwMTY5
MTQ3Yzg4ZTQ0YjgxYzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQpAQCAtMzcsNyArMzcsNyBAQAog
I2ltcG9ydCA8Q29udGFjdHMvQ29udGFjdHMuaD4KICNpbXBvcnQgPE1hcEtpdC9NYXBLaXQuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRl
Rm9yVGVzdGluZy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFyY2hpdmUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXRQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2
YXRlZEVsZW1lbnRJbmZvLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQppbmRleCA5OTNmMGJiZmYzYWY1MmMz
M2QzZWU2NzMxZWExNzVjMTY0NTAwYmM0Li5mYjY0NDNlMWJlNmUzYWI1NGRhOGNkNjNmNTVlYzJl
ZjU3NWM3MDc2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJbmZvLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEluZm8ubW0K
QEAgLTI5LDggKzI5LDggQEAKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0
aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLQWN0aXZhdGVkRWxlbWVudEluZm8uaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0
ZVRlc3RzLm1tCmluZGV4IDgxNjUwMDFmM2U4MzRlZDYyMjQ4ZDQ1NWUzOWQwNzNjYWY1MmI2MjMu
LjBlN2FlOTZlMWI2YTEzNzhhMGVjZjI3NmZkM2Q4NmNkMWRjYmJjNzcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVz
dHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZp
ZXdDYW5kaWRhdGVUZXN0cy5tbQpAQCAtMjksOCArMjksOCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotCiAjaW1wb3J0IDxDYXJi
b24vQ2FyYm9uLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3Rpbmcu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAKIHN0YXRpYyBOU1N0cmluZyAq
R2V0SW5wdXRWYWx1ZUpTRXhwcmVzc2lvbiA9IEAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5w
dXQnKS52YWx1ZSI7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFZGl0QWN0aW9ucy5tbQppbmRleCA5ZDFiN2M2MjU0OTg0
YWZhMDE0ZDI5MmVmYTE1OGI4YjhhMzFiOTk4Li42ZDZlMzdmN2I1NmI4YTNlY2QyNDFjM2ZlM2E1
Njc1ZjJkMWNmMjk0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLV2ViVmlld0VkaXRBY3Rpb25zLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlvbnMubW0KQEAgLTI4LDYgKzI4LDcg
QEAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJUZXN0cy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3Rmlyc3RSZXNwb25kZXJU
ZXN0cy5tbQppbmRleCA3ZDI1N2ZkNzMyYzQ3N2U3Y2FkNWRmOWI2YzJiMDllNjYzMGJkOTYwLi4y
NTY0NmU4ZDlkMGNmNjMxYWI0M2Y2MzNkOWM0NDcwOWQwZjFkNTZmIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVy
VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdGaXJzdFJlc3BvbmRlclRlc3RzLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJU
ZXN0SW5wdXREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlRm9yVGVzdGluZy5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1t
CmluZGV4IDFmNmEwOTM3YjcwNjg4ZGJjNzM1MTViOTAxOTU0M2VmMmY4YmYzNGUuLjdlOTU2NjNh
NGNkNzBiMzU3M2RiYzY5MjQ0ZjkxM2EwOGQ3OWE0ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0c0lPUy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW0KQEAgLTMyLDYg
KzMyLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0Nv
bmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQg
PFdlYktpdC9fV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tS
ZW1vdGVPYmplY3RSZWdpc3RyeS5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbQppbmRleCBlODFmMTAyZWY2YzFiMzJhZTdkMzE5MWE1
YzQ1OGE4NWMwYWM5NWNjLi5kNjhhMzY0MDYxMjliZDg3MTZmNDNlM2FiODkyZWRjOGI0NTY1YzU3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY3Rpb25TaGVldFRl
c3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVz
dHMubW0KQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0IDxN
b2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVSURlbGVnYXRlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
RWxlbWVudEFjdGlvbi5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0c0lPUy5tbQpp
bmRleCBmMDkyOWY4N2MyYWMxNDc4OGExOTgyNWI3MzUwZDJjMTgxNzU0YzIwLi5lMjQ0ZmEzZjIz
NDg4Mzc3OTE5ZTg4YjBmNDMyMDhiMmQzNzFkYjU0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0KQEAgLTMyLDYg
KzMyLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAKIEBpbnRlcmZhY2UgVGVzdFdLV2ViVmlldyAo
QXV0b2NvcnJlY3Rpb25UZXN0cykKIC0gKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICopYXV0b2Nv
cnJlY3Rpb25SZWN0c0ZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbQpp
bmRleCA0OTU2MjBjNDNlZGU3NzRhOWM5ZTM2YjczMDBhMTg1YmMzZmY0YmQyLi44YTlkM2JmNGE2
YWFkYWEwMzFkMGI3MjI3MjE1NmMyMGNkYTNjMGQ3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW0KQEAgLTMzLDYg
KzMzLDcgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSW5wdXREZWxl
Z2F0ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbQppbmRleCA5Njc2YTMzYmIy
NmNhZjk5ZWI3YmMxOTJkMjgwOWZkODY2ZmVmZDJkLi4zM2UyMTFiNDFmNGM3ZmNkZDVmYzZlNGQy
ZDgxYjNiNDU5NWQwYjY1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJUZXN0
TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAKICNpbXBvcnQgIlV0aWxpdGllcy5oIgorI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBUZXN0TmF2aWdhdGlvbkRlbGVnYXRlCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCmluZGV4
IDY5Y2Q0OTdkYzE2NmJiYTYyYTJlZTIwMmY5NGFjMGY5NmM3ZDY3ZjIuLmUxMWYyZDFlYWYwMjg0
YTgzM2JiZjFjYjVkM2ZkMWQyMWVjOTdhNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCkBAIC0zMSwxMiArMzEsMTEgQEAKICNp
bXBvcnQgIkluc3RhbmNlTWV0aG9kU3dpenpsZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgotCiAjaW1wb3J0IDxVSUtpdC9VSURyYWdJbnRl
cmFjdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSXRlbS5oPgogI2ltcG9ydCA8VUlLaXQv
VUlEcm9wSW50ZXJhY3Rpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJSW50ZXJhY3Rpb24uaD4KLSNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3UHJpdmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2VkRWxlbWVu
dEluZm8uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9E
cmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdB
bmREcm9wU2ltdWxhdG9yTWFjLm1tCmluZGV4IDEwMDVlZTQ3OGI1N2RmZmVjODdmNDUzZDQyMjQ0
OTQ0MTNhOTNmNGQuLmIyMDU2NzlkNzAwMTcwYWNiZWFiNWJmODg2ZWIzNzRjMDRmZWM5M2EgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFj
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFj
Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2lt
cG9ydCAiVGVzdERyYWdnaW5nSW5mby5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDxjbWF0
aD4KICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXggZTkyM2I4NTFhM2U5
ZGQ2NGMyZDYzYTRlMjYxNDM1NDE2ZGM2YmJkYy4uMTg4NjgxNGYxZWY5Y2IyYjdmNzFkZTQxYTVi
NTVkOGFhYmEyMjBlNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9U
ZXN0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFSZWNvcmRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVu
bmVyV0tXZWJWaWV3Lm1tCmluZGV4IGVjYTAwNmM2ODkzNGY4ZjdjM2JmZTMzMzEzNzk3NTI3NjFj
MjU4ZjIuLjVhNDlmYzI0NGU1ZGVlNGExMjMzYmJiMTZmNzRmNDAwODRhZDE2M2MgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5m
by5oIgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+
CkBAIC0zNiw2ICszNyw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJ
S2l0U1BJLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorCiBAaW50ZXJm
YWNlIFdLV2ViVmlldyAoKQogCiAvLyBGSVhNRTogbW92ZSB0aGVzZSB0byBXS1dlYlZpZXdfUHJp
dmF0ZS5oCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0
Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlw
dENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCBiZWUwNDk3YmY1NmQyMzYwMDZhMzgxYmExMTYxYTcw
YjkzMGVmY2YzLi44NDRmMDNhMDhjODFjMTZiYzdjYTI0NzkyMWQxM2FkZjg0YmJlZWY5IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNv
Y29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlVJU2NyaXB0Q29udGV4dC5o
IgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0
ZUZvclRlc3RpbmcuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KaW5kZXggYWUyYTk0YTE1YjAwOTkyYjFl
ODk1Zjk0ODc2NjI1YTE4YzFhNDlmZi4uOGRhMmMxMzE1ZjNjOWY2NTRmNGZiNmFmNGU1OWExMmYz
ZTQ3ZWE5OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRy
b2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xs
ZXJJT1MubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8b2JqYy9y
dW50aW1lLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDk5OWNhODcxZWNhMWVkYmExOGI1
NThjYTIwZTg1Yjg1MWU3MTA3Y2UuLjEyZTEyOTUyYTgzNWViMTVlODhjNjAwMWNiOWNjMWNkZjU0
ODZhY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENv
bnRyb2xsZXJJT1MubW0KQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRQ
b2ludC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZUZvclRl
c3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9z
L0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1t
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCmlu
ZGV4IDZiZGUyNjE1ZWVmMDgyZDJkOTdmNTg0ZWI5NzE4MDE5ODc2MjUzYTMuLmE0NGNmZDBjMThk
NTg0YmQ0OTUyMmExZjQ4YmRkYzU0M2NhOTY4YzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDkgKzMwLDggQEAK
ICNpbXBvcnQgIkV2ZW50U2VyaWFsaXplck1hYy5oIgogI2ltcG9ydCAiUGxhdGZvcm1WaWV3SGVs
cGVycy5oIgogI2ltcG9ydCAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW1wb3J0ICJTaGFyZWRFdmVu
dFN0cmVhbXNNYWMuaCIKLSNpbXBvcnQgIlRlc3RDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybVdlYlZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlZEV2ZW50U3RyZWFtc01hYy5oIgogI2ltcG9y
dCAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW1wb3J0ICJUZXN0Q29udHJvbGxlci5oIgogI2ltcG9y
dCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgpAQCAtNDMsNiArNDIsNyBAQAogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL09w
YXF1ZUpTU3RyaW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KIAogbmFtZXNwYWNlIFdUUiB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>