<?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>198874</bug_id>
          
          <creation_ts>2019-06-14 17:30:59 -0700</creation_ts>
          <short_desc>Move SOAuthorization from WebKitAdditions to WebKit</short_desc>
          <delta_ts>2025-08-28 17:09:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>
          
          <blocked>298073</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1544902</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-14 17:30:59 -0700</bug_when>
    <thetext>Move SOAuthorization from WebKitAdditions to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544903</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-14 17:31:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/47573431&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544912</commentid>
    <comment_count>2</comment_count>
      <attachid>372158</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-14 17:53:34 -0700</bug_when>
    <thetext>Created attachment 372158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544913</commentid>
    <comment_count>3</comment_count>
      <attachid>372158</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-14 18:02:10 -0700</bug_when>
    <thetext>Comment on attachment 372158
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:110
&gt; +

Deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544920</commentid>
    <comment_count>4</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-14 18:07:51 -0700</bug_when>
    <thetext>The internal counterpart is on &lt;rdar://problem/51768865&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544929</commentid>
    <comment_count>5</comment_count>
      <attachid>372164</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-14 19:05:09 -0700</bug_when>
    <thetext>Created attachment 372164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545338</commentid>
    <comment_count>6</comment_count>
      <attachid>372164</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-06-17 11:52:48 -0700</bug_when>
    <thetext>Comment on attachment 372164
Patch

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

r=me. Nice to get it into Open Source finally.

&gt; Source/WebKit/ChangeLog:10
&gt; +        Besides, it replaces all the load optimizer nonsenses with SOAuthorization.

I&apos;d say: &quot;It also replaces the LoadOptimizer nonsense with the actual SOAuthorization API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545345</commentid>
    <comment_count>7</comment_count>
      <attachid>372164</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-06-17 11:58:48 -0700</bug_when>
    <thetext>Comment on attachment 372164
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:42
&gt; +class NavigationSOAuthorizationSession : public WebViewDidMoveToWindowObserver, public SOAuthorizationSession {

Can either of the base classes be private or protected instead of pubic?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:44
&gt; +    using Callback = CompletionHandler&lt;void(bool)&gt;;

Can this be protected instead of public?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:47
&gt; +    using WebViewDidMoveToWindowObserver::weakPtrFactory;
&gt; +    using WeakValueType = WebViewDidMoveToWindowObserver::WeakValueType;

Can either of these be protected or private?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:52
&gt; +    // WebViewDidMoveToWindowObserver
&gt; +    void webViewDidMoveToWindow() final;

This could be private. Why public?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:57
&gt; +    void callback(bool intercepted) { m_callback(intercepted); }

The word &quot;callback&quot; is a noun, not a verb. So this function should ideally be named something like invokeCallback.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.h:47
&gt; +    static Ref&lt;SOAuthorizationSession&gt; create(SOAuthorization *soAuthorization, WebPageProxy&amp; page, Ref&lt;API::NavigationAction&gt;&amp;&amp; navigationAction, NewPageCallback&amp;&amp; newPageCallback, UIClientCallback&amp;&amp; uiClientCallback)

I think it’s a slightly better pattern to have the function body be in the .cpp file. Nicer to inline the constructor in the not-inlined create function instead of inlining the create function at the call site and calling the constructor out of line. If this is called more than once, it’s better for code size to share a single create function. Also a tiny bit better to have a little less code in headers.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:40
&gt; +@package

Why @package? This is private within a single file so it seems @private would be OK.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:42
&gt; +WeakPtr&lt;WebKit::PopUpSOAuthorizationSession&gt; _session;
&gt; +BOOL _isFirstNavigation;

normally we would indent these.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:53
&gt; +    if (self = [super init]) {

Usually requires an extra set of parentheses in this line of code to avoid a warning. I’m surprised there is no warning!

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationCoordinator.h:64
&gt; +    inline bool canAuthorize(const URL&amp;) const;

This use of &quot;inline&quot; is not valuable. I think you can omit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545346</commentid>
    <comment_count>8</comment_count>
      <attachid>372164</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-17 11:59:53 -0700</bug_when>
    <thetext>Comment on attachment 372164
Patch

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

Thanks Brent for r+ this patch.

&gt;&gt; Source/WebKit/ChangeLog:10
&gt;&gt; +        Besides, it replaces all the load optimizer nonsenses with SOAuthorization.
&gt; 
&gt; I&apos;d say: &quot;It also replaces the LoadOptimizer nonsense with the actual SOAuthorization API.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545367</commentid>
    <comment_count>9</comment_count>
      <attachid>372164</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-17 12:53:11 -0700</bug_when>
    <thetext>Comment on attachment 372164
Patch

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

Thanks Darin for reviewing the patch.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:42
&gt;&gt; +class NavigationSOAuthorizationSession : public WebViewDidMoveToWindowObserver, public SOAuthorizationSession {
&gt; 
&gt; Can either of the base classes be private or protected instead of pubic?

Moved WebViewDidMoveToWindowObserver to private and keep SOAuthorizationSession public in order to use RefCounted/WeakPtr.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:44
&gt;&gt; +    using Callback = CompletionHandler&lt;void(bool)&gt;;
&gt; 
&gt; Can this be protected instead of public?

Yes.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:47
&gt;&gt; +    using WeakValueType = WebViewDidMoveToWindowObserver::WeakValueType;
&gt; 
&gt; Can either of these be protected or private?

I don&apos;t think so as WebPageProxy::addObserver needs to make WeakPtrs for NavigationSOAuthorizationSession objects.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:52
&gt;&gt; +    void webViewDidMoveToWindow() final;
&gt; 
&gt; This could be private. Why public?

True.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.h:57
&gt;&gt; +    void callback(bool intercepted) { m_callback(intercepted); }
&gt; 
&gt; The word &quot;callback&quot; is a noun, not a verb. So this function should ideally be named something like invokeCallback.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.h:47
&gt;&gt; +    static Ref&lt;SOAuthorizationSession&gt; create(SOAuthorization *soAuthorization, WebPageProxy&amp; page, Ref&lt;API::NavigationAction&gt;&amp;&amp; navigationAction, NewPageCallback&amp;&amp; newPageCallback, UIClientCallback&amp;&amp; uiClientCallback)
&gt; 
&gt; I think it’s a slightly better pattern to have the function body be in the .cpp file. Nicer to inline the constructor in the not-inlined create function instead of inlining the create function at the call site and calling the constructor out of line. If this is called more than once, it’s better for code size to share a single create function. Also a tiny bit better to have a little less code in headers.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:40
&gt;&gt; +@package
&gt; 
&gt; Why @package? This is private within a single file so it seems @private would be OK.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:42
&gt;&gt; +BOOL _isFirstNavigation;
&gt; 
&gt; normally we would indent these.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm:53
&gt;&gt; +    if (self = [super init]) {
&gt; 
&gt; Usually requires an extra set of parentheses in this line of code to avoid a warning. I’m surprised there is no warning!

Added in case anything happens later.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationCoordinator.h:64
&gt;&gt; +    inline bool canAuthorize(const URL&amp;) const;
&gt; 
&gt; This use of &quot;inline&quot; is not valuable. I think you can omit it.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545368</commentid>
    <comment_count>10</comment_count>
      <attachid>372265</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-17 12:57:26 -0700</bug_when>
    <thetext>Created attachment 372265
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545372</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-06-17 13:13:55 -0700</bug_when>
    <thetext>Is &quot;SO&quot; a common enough acronym that we should use it here? I assume it stands for &quot;sign-on&quot;, but I am not totally sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545382</commentid>
    <comment_count>12</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-17 13:38:13 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; Is &quot;SO&quot; a common enough acronym that we should use it here? I assume it
&gt; stands for &quot;sign-on&quot;, but I am not totally sure.

Probably not. I followed the naming conversion on the SPI that I called, and therefore it is easier to connect them together instead of having our own names, for example, @interface WKSOAuthorizationDelegate : NSObject &lt;SOAuthorizationDelegate&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545384</commentid>
    <comment_count>13</comment_count>
      <attachid>372265</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-17 13:40:16 -0700</bug_when>
    <thetext>Comment on attachment 372265
Patch for landing

Clearing flags on attachment: 372265

Committed r246514: &lt;https://trac.webkit.org/changeset/246514&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545419</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-06-17 15:27:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/r246519</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545490</commentid>
    <comment_count>15</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-17 17:27:11 -0700</bug_when>
    <thetext>Another build fix:
Committed r246527: &lt;https://trac.webkit.org/changeset/246527&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372158</attachid>
            <date>2019-06-14 17:53:34 -0700</date>
            <delta_ts>2019-06-14 19:05:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198874-20190614175333.patch</filename>
            <type>text/plain</type>
            <size>236230</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVkZjJjZWZkNGM1NzQ3Nzc3OTQxNDI3
M2NhY2NiZTk0ZjkyOWE2MjEuLmE1ZjIyOWU2YTE2N2Q3MzZjOTQ3MDgyNzI1MzQ3NjY1YWYxYmVm
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDYtMTQgIEppZXdlbiBUYW4gIDxqaWV3ZW5f
dGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNPQXV0aG9yaXphdGlvbiBmcm9tIFdlYktp
dEFkZGl0aW9ucyB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc1NzM0MzE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKyAgICAgICAgQWRkcyBhIGZlYXR1cmUgZmxhZyB0byBkZXRlY3QgQXBwU1NPIGZy
YW1ld29yay4KKwogMjAxOS0wNi0xMiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFNob3cgdGhlIHdlYiBwYWdlIFVSTCB3aGVuIHNoYXJpbmcgYW4gQVIgbW9k
ZWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGVlMDU2NzgyMzYxNTdkY2YxZGFkNTA3ZTY3MzQwZWFi
NDNkNjQ0YTAuLjEyYmM5YmQ0MzNlMmZlNGU4M2E2N2RlM2FjN2U0ZWU5MjJkNTgyNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTA2LTE0ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTT0F1dGhvcml6YXRpb24gZnJv
bSBXZWJLaXRBZGRpdGlvbnMgdG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ3NTcz
NDMxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbW92ZXMgQXBwU1NPU29mdExpbmsgZnJvbSBXZWJLaXRBZGRpdGlvbnMgdG8gV2Vi
S2l0LCBhbmQgaW50cm9kdWNlcworICAgICAgICBBdXRoS2l0U1BJLmguCisKKyAgICAgICAgKiBQ
QUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWwvY29jb2EvQXBwU1NP
U29mdExpbmsuaDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UZXN0TG9hZE9wdGltaXplci5tbS4KKyAgICAgICAgKiBwYWwvY29jb2EvQXBwU1NPU29m
dExpbmsubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogcGFsL3NwaS9jZi9DRk5ldHdvcmtT
UEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL2NvY29hL0F1dGhLaXRTUEkuaDogQ29waWVkIGZyb20g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5t
bS4KKwogMjAxOS0wNi0xNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIERpc2FibGUgQXBwU1NPIGZvciB3ZWIgcHJvY2Vzc2VzIGFuZCBwbHVnaW4gcHJvY2Vz
c2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGY4ZTNiMDFjNjZhZjc1ZGVjMTEyMjA5N2JiM2ZkMmI4MTgzZGQ5NGEu
LjUzYzMzMWNlNzE2ZWRkMDcwOTA0YmFkMDA5ZGVjOGQ3NjhlMDM1MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTE0IEBACisyMDE5LTA2LTE0ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSBTT0F1dGhvcml6YXRpb24gZnJvbSBXZWJLaXRBZGRpdGlvbnMg
dG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTg4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ3NTczNDMxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYmFzaWNhbGx5
IG1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSBleGlzdGluZyBXZWJLaXRBZGRpdGlvbnMgdG8gV2ViS2l0
LgorICAgICAgICBCZXNpZGVzLCBpdCByZXBsYWNlcyBhbGwgdGhlIGxvYWQgb3B0aW1pemVyIG5v
bnNlbnNlcyB3aXRoIFNPQXV0aG9yaXphdGlvbi4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25z
L1dlYktpdC54Y2NvbmZpZzoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpO
ZXR3b3JrU2Vzc2lvbkNvY29hKToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Q
cm9jZXNzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVQbHVnaW5Qcm9jZXNzKToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6OnRyeVNP
QXV0aG9yaXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRyeUludGVyY2VwdE5hdmlnYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojp0cnlPcHRp
bWl6aW5nTG9hZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OmNhbGxiYWNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlv
blNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6fk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwp
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6d2Vi
Vmlld0RpZE1vdmVUb1dpbmRvdyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b24ubW06IEFkZGVkLgorICAgICAgICAoLVtXS1NPU2VjcmV0RGVsZWdhdGUgaW5pdFdpdGhTZXNz
aW9uOl0pOgorICAgICAgICAoLVtXS1NPU2VjcmV0RGVsZWdhdGUgd2ViVmlld0RpZENsb3NlOl0p
OgorICAgICAgICAoLVtXS1NPU2VjcmV0RGVsZWdhdGUgd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tTT1NlY3Jl
dERlbGVnYXRlIHdlYlZpZXc6ZGlkRmluaXNoTmF2aWdhdGlvbjpdKToKKyAgICAgICAgKFdlYktp
dDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b24pOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246On5Qb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpQ
b3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJu
YWwpOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBs
ZXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9u
Ojppbml0U2VjcmV0V2ViVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDogQ29waWVkIGZyb20gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5tbS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0U09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1Rv
V2ViUGF0aEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjphYm9ydEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6
UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRv
ci5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW06IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6U09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3IpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6Y2FuQXV0
aG9yaXplIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3I6OnRyeUF1dGhvcml6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNVUkxF
eHRyYXMubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICgrW05TVVJMIF93ZWJfY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6cGFnZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpuYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW06IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpTT0F1dGhvcml6
YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
flNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpyZWxlYXNlTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNP
QXV0aG9yaXphdGlvblNlc3Npb246OmJlY29tZUNvbXBsZXRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlNP
QXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6U09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6Y29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpwcmVzZW50Vmlld0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpkaXNtaXNzVmlld0NvbnRyb2xsZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmg6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OlN1YkZyYW1lU09BdXRo
b3JpemF0aW9uU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6
OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5h
bCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVm
b3JlU3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Np
b246OmxvYWREYXRhVG9GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6cG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudCk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRl
Lmg6IFJlbmFtZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbTogQWRkZWQuCisgICAgICAgICgtW1dL
U09BdXRob3JpemF0aW9uRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpwcmVzZW50Vmlld0NvbnRyb2xs
ZXI6d2l0aENvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLU09BdXRob3JpemF0aW9uRGVsZWdh
dGUgYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ2FuY2VsOl0pOgorICAgICAgICAoLVtXS1NP
QXV0aG9yaXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb25EaWRDb21wbGV0ZTpdKToKKyAgICAg
ICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmRpZENvbXBsZXRl
V2l0aEhUVFBBdXRob3JpemF0aW9uSGVhZGVyczpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpo
dHRwQm9keTpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3Jp
emF0aW9uOmRpZENvbXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtXS1NPQXV0aG9yaXph
dGlvbkRlbGVnYXRlIHNldFNlc3Npb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRyeVNPQXV0aG9yaXphdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAg
IChXZWJLaXQ6OnRyeU9wdGltaXppbmdMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hv
dWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhv
cml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2Ev
V2ViUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVQcm9jZXNzKToKKwogMjAxOS0wNi0xNCAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgQXBwU1NPIGZvciB3ZWIgcHJvY2Vzc2Vz
IGFuZCBwbHVnaW4gcHJvY2Vzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBkNTZiMGIyOWNkYTM3MzUyNmI0
MzJlNTQ0Njg0ZTk2MDllMmRlZWU4Li4xZWI3OTk3MGE3NzQwMDI4NmM0NTRiOTNlZDk3ZDdhOWZi
ZmEzMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTE1NzEsMyArMTU3MSw2IEBACiAjZGVmaW5lIEhBVkVf
Q09SRVRFWFRfQVVUT19PUFRJQ0FMX1NJWklORyAxCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8fCBQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNTAwKQor
I2RlZmluZSBIQVZFX0FQUF9TU08gMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
UEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzY1NjM3ODM1NzU3ZjA2ZGE4ZDRl
YzZiNzc3NTg1ZTQyZDRlZWZkOC4uYWI4NWU0OGJmODVlMmNjMWNlZmMxNjFlNWNkZTJkZjRiOGYw
ZDk5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTIwLDYgKzEyMCw5IEBACiAJCTQ0RTFBOEIwMjFGQTU0RUIwMEMzMDQ4RSAv
KiBMb29rdXBTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0RTFBOEFFMjFGQTU0REEwMEMzMDQ4RSAvKiBMb29rdXBTb2Z0TGluay5tbSAq
LzsgfTsKIAkJNTcwQUI4RjEyMEFFMkU4RDAwQjhCRTg3IC8qIFNlY0tleVByb3h5U1BJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzBBQjhGMDIwQUUy
RThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLzsgfTsKIAkJNTcwQUI4RjkyMEFGNkUz
RDAwQjhCRTg3IC8qIE5TWFBDQ29ubmVjdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwQUI4RjgyMEFGNkUzRDAwQjhCRTg3IC8qIE5TWFBD
Q29ubmVjdGlvblNQSS5oICovOyB9OworCQk1NzJBMTA3ODIyQjQ1NkY1MDBGNDEwQzggLyogQXV0
aEtpdFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTcyQTEwNzcyMkI0NTZGNTAwRjQxMEM4IC8qIEF1dGhLaXRTUEkuaCAqLzsgfTsKKwkJNTdGRDMx
OEEyMkIzNTkzRTAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxODkyMkIzNTkzRTAwOEQwRThCIC8q
IEFwcFNTT1NvZnRMaW5rLm1tICovOyB9OworCQk1N0ZEMzE4QjIyQjM1OTg5MDA4RDBFOEIgLyog
QXBwU1NPU29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3RkQzMTg4MjJCMzU5MkYwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oICovOyB9
OwogCQk2M0M3RURDNzIxQUZBRTA0MDA2QTdCOTkgLyogTlNQcm9ncmVzc1NQSS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNFMzY5RjkyMUFGQTgzRjAw
MUMxNEJDIC8qIE5TUHJvZ3Jlc3NTUEkuaCAqLzsgfTsKIAkJN0ExNjU2NDQxRjk3QjJCOTAwQkEz
Q0U0IC8qIE5TS2V5ZWRBcmNoaXZlclNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0ExNjU2NDMxRjk3QjJCODAwQkEzQ0U0IC8qIE5TS2V5ZWRBcmNo
aXZlclNQSS5oICovOyB9OwogCQk3QTM2RDBGOTIyM0FEOUFCMDBCMDUyMkUgLyogQ29tbW9uQ3J5
cHRvU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QTM2RDBGODIyM0FEOUFCMDBCMDUyMkUgLyogQ29tbW9uQ3J5cHRvU1BJLmggKi87IH07CkBAIC0y
ODQsNiArMjg3LDkgQEAKIAkJNDRFMUE4QUUyMUZBNTREQTAwQzMwNDhFIC8qIExvb2t1cFNvZnRM
aW5rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9va3VwU29mdExpbmsubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNLZXlQcm94eVNQSS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzBBQjhGODIwQUY2RTNEMDBCOEJFODcgLyogTlNYUENDb25uZWN0
aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5TWFBDQ29ubmVjdGlvblNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1NzJBMTA3NzIyQjQ1NkY1MDBGNDEwQzggLyogQXV0aEtpdFNQ
SS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdXRoS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3RkQzMTg4MjJCMzU5MkYwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBTU09Tb2Z0TGluay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE4OTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29m
dExpbmsubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBTU09T
b2Z0TGluay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNFMzY5RjkyMUFGQTgz
RjAwMUMxNEJDIC8qIE5TUHJvZ3Jlc3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNQcm9ncmVzc1NQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTE2NTY0MzFGOTdCMkI4MDBCQTND
RTQgLyogTlNLZXllZEFyY2hpdmVyU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5TS2V5ZWRBcmNoaXZlclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QTM2RDBGODIyM0FEOUFCMDBCMDUyMkUgLyogQ29tbW9uQ3J5cHRvU1BJLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbkNyeXB0b1NQSS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzkwLDYgKzM5Niw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCTJEMDJFOTNCMjA1NkZBQTcwMEExMzc5NyAvKiBBdWRpb1Rvb2xib3hT
UEkuaCAqLywKKwkJCQk1NzJBMTA3NzIyQjQ1NkY1MDBGNDEwQzggLyogQXV0aEtpdFNQSS5oICov
LAogCQkJCTBDMkRBMTIyMUYzQkVCNDkwMERCQzMxNyAvKiBBVktpdFNQSS5oICovLAogCQkJCTBD
MkRBMTIzMUYzQkVCNDkwMERCQzMxNyAvKiBDRk5TVVJMQ29ubmVjdGlvblNQSS5oICovLAogCQkJ
CTdBMzZEMEY4MjIzQUQ5QUIwMEIwNTIyRSAvKiBDb21tb25DcnlwdG9TUEkuaCAqLywKQEAgLTU3
OSw2ICs1ODYsOCBAQAogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VFQkQgLyogY29jb2EgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU3RkQzMTg4MjJCMzU5
MkYwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oICovLAorCQkJCTU3RkQzMTg5MjJCMzU5M0Uw
MDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5tbSAqLywKIAkJCQkwNzdFODdCMDIyNkE0NjAyMDBB
MkFGRjAgLyogQVZGb3VuZGF0aW9uU29mdExpbmsuaCAqLywKIAkJCQkwNzdFODdBRjIyNkE0NjAy
MDBBMkFGRjAgLyogQVZGb3VuZGF0aW9uU29mdExpbmsubW0gKi8sCiAJCQkJRjQ0MjkxNjYxRkE1
MjcwNTAwMkNDOTNFIC8qIEZpbGVTaXplRm9ybWF0dGVyQ29jb2EubW0gKi8sCkBAIC02NzcsNyAr
Njg2LDkgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTU3RkQzMThCMjJCMzU5ODkwMDhE
MEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQwMkU5M0MyMDU2
RkFBNzAwQTEzNzk3IC8qIEF1ZGlvVG9vbGJveFNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTcy
QTEwNzgyMkI0NTZGNTAwRjQxMEM4IC8qIEF1dGhLaXRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA3N0U4N0IyMjI2QTQ2MDMwMEEyQUZGMCAvKiBBVkZvdW5kYXRpb25Tb2Z0TGluay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEM3Nzg1ODkxRjQ1MTMwRjAwRjRFQkI2IC8qIEFWRm91bmRhdGlvblNQ
SS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEMyREExM0UxRjNCRUI0OTAwREJDMzE3IC8qIEFWS2l0
U1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTg0Myw2ICs4NTQsNyBAQAogCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBlbjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdp
b25zID0gKAorCQkJCWVuLAogCQkJCUVuZ2xpc2gsCiAJCQkJSmFwYW5lc2UsCiAJCQkJRnJlbmNo
LApAQCAtODg0LDYgKzg5Niw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1N0ZEMzE4
QTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkwNzdFODdCMTIyNkE0NjAyMDBBMkFGRjAgLyogQVZGb3VuZGF0aW9uU29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQkwQzVGRkYwRjFGNzhEOURBMDA5RUZGMUEgLyogQ2xvY2tDTS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTBDRjk5Q0E4MUY3Mzg0MzcwMDdFRTc5MyAvKiBDb3JlTWVkaWFT
b2Z0TGluay5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY29j
b2EvQXBwU1NPU29mdExpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTRjNTM3ZmY0ZTJlOWRmMjA3N2QwMmM5
MmE3MzFhMGExYzk3Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVBQX1NTTykKKworI2ltcG9ydCA8QXBwU1NPL0FwcFNT
Ty5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUktf
Rk9SX0hFQURFUihQQUwsIEFwcFNTTyk7CisKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFBB
TCwgU09BdXRob3JpemF0aW9uKTsKKworU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoUEFM
LCBBcHBTU08sIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQsIE5TU3Ry
aW5nKik7CisjZGVmaW5lIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQg
UEFMOjpnZXRfQXBwU1NPX1NPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQo
KQorCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihQQUwsIEFwcFNTTywgU09FcnJvckRv
bWFpbiwgTlNFcnJvckRvbWFpbik7CisjZGVmaW5lIFNPRXJyb3JEb21haW4gUEFMOjpnZXRfQXBw
U1NPX1NPRXJyb3JEb21haW4oKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvY29jb2EvQXBwU1NPU29mdExpbmsubW0gYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2NvY29hL0FwcFNTT1NvZnRMaW5rLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmMWNkMjA3NjBlMjY2NTQ0MWQz
MmNhOGM0ZDFkNzA0ZTczZmQwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2NvY29hL0FwcFNTT1NvZnRMaW5rLm1tCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX0ZPUl9TT1VSQ0VfV0lU
SF9FWFBPUlQoUEFMLCBBcHBTU08sIFBBTF9FWFBPUlQpOworCisjaWYgUExBVEZPUk0oTUFDKQor
U09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0VfT1BUSU9OQUxfV0lUSF9FWFBPUlQoUEFMLCBBcHBT
U08sIFNPQXV0aG9yaXphdGlvbiwgUEFMX0VYUE9SVCk7CisjZWxzZQorU09GVF9MSU5LX0NMQVNT
X0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBBcHBTU08sIFNPQXV0aG9yaXphdGlvbiwgUEFM
X0VYUE9SVCk7CisjZW5kaWYKKworU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0VfV0lUSF9F
WFBPUlQoUEFMLCBBcHBTU08sIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0
ZWQsIE5TU3RyaW5nKiwgUEFMX0VYUE9SVCk7CisKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09V
UkNFX1dJVEhfRVhQT1JUKFBBTCwgQXBwU1NPLCBTT0Vycm9yRG9tYWluLCBOU0Vycm9yRG9tYWlu
LCBQQUxfRVhQT1JUKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2Nm
L0NGTmV0d29ya1NQSS5oCmluZGV4IDE4MmZmOGJlNjUxYThkMjYyY2M2ODY0M2YyZGFkZGQyNjY1
OTRiNzUuLjQ1NTcwODVkODBlMDM3MDRhMzJiYmU4M2JmZWEyNTk3ZjEyYTZhMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oCkBAIC0yMzYsNyArMjM2
LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgTlNVUkxTZXNzaW9uQ29tcGFuaW9uUHJv
eHlQcmVmZXJlbmNlKSB7CiAjaWYgSEFWRShDRk5FVFdPUktfTlNVUkxTRVNTSU9OX1NUUklDVFJV
U1RFVkFMVUFURSkKICsgKHZvaWQpX3N0cmljdFRydXN0RXZhbHVhdGU6KE5TVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgcXVldWU6KGRpc3BhdGNoX3F1ZXVlX3QpcXVldWUg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
KmNoYWxsZW5nZSwgT1NTdGF0dXMgdHJ1c3RSZXN1bHQpKWNiOwogI2VuZGlmCi0jaWYgSEFWRShM
T0FEX09QVElNSVpFUikKKyNpZiBIQVZFKEFQUF9TU08pCiArICh2b2lkKV9kaXNhYmxlQXBwU1NP
OwogI2VuZGlmCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9j
b2NvYS9BdXRoS2l0U1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9BdXRo
S2l0U1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM4MmVjOTM3Yjk1NDYxZTU5YTMxNWY5Mjc1ODdjOWM1Njhh
YTkwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29h
L0F1dGhLaXRTUEkuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisj
aW1wb3J0IDxBdXRoS2l0L0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIuaD4KKworI2Vsc2UKKwor
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBBS0F1dGhvcml6YXRpb25Db250
cm9sbGVyIDogTlNPYmplY3QKKworKyAoQk9PTClpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOihO
U1VSTCAqKXVybDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8v
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNlbmRpZiAvLyBIQVZFKEFQUF9TU08pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZyBiL1Nv
dXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvV2ViS2l0LnhjY29uZmlnCmluZGV4IGQ5ZGRhMmM5
N2VlNjQ0MmFjYzQ0YTI4MjQ4MWE1YzFjYTI4ZmJkNjcuLjQzMGY3ZGYyYjVkYmRkMDM4NGRhNWY5
NzkwNTUzNjVjYjkzOTU1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlv
bnMvV2ViS2l0LnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvV2Vi
S2l0LnhjY29uZmlnCkBAIC0xMjcsNyArMTI3LDE0IEBAIFdLX1VSTF9GT1JNQVRUSU5HX0xERkxB
R1NfWUVTID0gLWZyYW1ld29yayBVUkxGb3JtYXR0aW5nOwogV0tfV0VCSU5TUEVDVE9SVUlfTERG
TEFHUyA9ICQoV0tfV0VCSU5TUEVDVE9SVUlfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsK
IFdLX1dFQklOU1BFQ1RPUlVJX0xERkxBR1NfbWFjb3N4ID0gLXdlYWtfZnJhbWV3b3JrIFdlYklu
c3BlY3RvclVJOwogCi1GUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHUyA9IC1sb2JqYyAtZnJh
bWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVBdWRpbyAtZnJhbWV3b3JrIENvcmVGb3Vu
ZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQgLWZyYW1l
d29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIElPS2l0IC1mcmFt
ZXdvcmsgV2ViS2l0TGVnYWN5IC1sbmV0d29yayAkKFdLX0FDQ0VTU0lCSUxJVFlfTERGTEFHUykg
JChXS19BUFBLSVRfTERGTEFHUykgJChXS19BU1NFUlRJT05fU0VSVklDRVNfTERGTEFHUykgJChX
S19DQVJCT05fTERGTEFHUykgJChXS19DT1JFX1BERl9MREZMQUdTKSAkKFdLX0NPUkVfUFJFRElD
VElPTl9MREZMQUdTKSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19ERVZJQ0VfSURF
TlRJVFlfTERGTEFHUykgJChXS19HUkFQSElDU19TRVJWSUNFU19MREZMQUdTKSAkKFdLX0lPU1VS
RkFDRV9MREZMQUdTKSAkKFdLX0xJQlNBTkRCT1hfTERGTEFHUykgJChXS19MSUJXRUJSVENfTERG
TEFHUykgJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX01PQklMRV9HRVNU
QUxUX0xERkxBR1MpICQoV0tfT1BFTkdMX0xERkxBR1MpICQoV0tfUERGS0lUX0xERkxBR1MpICQo
V0tfU0FGRV9CUk9XU0lOR19MREZMQUdTKSAkKFdLX1NFQ1VSSVRZX0lOVEVSRkFDRV9MREZMQUdT
KSAkKFdLX1VJS0lUX0xERkxBR1MpICQoV0tfVVJMX0ZPUk1BVFRJTkdfTERGTEFHUykgJChXS19X
RUJJTlNQRUNUT1JVSV9MREZMQUdTKTsKK1dLX0FVVEhLSVRfTERGTEFHUyA9ICQoV0tfQVVUSEtJ
VF9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tfQVVUSEtJVF9MREZMQUdTX2lwaG9u
ZW9zID0gJChXS19BVVRIS0lUX0xERkxBR1MkKFdLX0lPU18xMykpOworV0tfQVVUSEtJVF9MREZM
QUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfQVVUSEtJVF9MREZMQUdTJChXS19JT1NfMTMpKTsK
K1dLX0FVVEhLSVRfTERGTEFHU19JT1NfU0lOQ0VfMTMgPSAtZnJhbWV3b3JrIEF1dGhLaXQ7CitX
S19BVVRIS0lUX0xERkxBR1NfbWFjb3N4ID0gJChXS19BVVRIS0lUX0xERkxBR1MkKFdLX01BQ09T
XzEwMTUpKTsKK1dLX0FVVEhLSVRfTERGTEFHU19NQUNPU19TSU5DRV8xMDE1ID0gLWZyYW1ld29y
ayBBdXRoS2l0OworCitGUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHUyA9IC1sb2JqYyAtZnJh
bWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVBdWRpbyAtZnJhbWV3b3JrIENvcmVGb3Vu
ZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQgLWZyYW1l
d29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIElPS2l0IC1mcmFt
ZXdvcmsgV2ViS2l0TGVnYWN5IC1sbmV0d29yayAkKFdLX0FDQ0VTU0lCSUxJVFlfTERGTEFHUykg
JChXS19BUFBLSVRfTERGTEFHUykgJChXS19BU1NFUlRJT05fU0VSVklDRVNfTERGTEFHUykgJChX
S19BVVRIS0lUX0xERkxBR1MpICQoV0tfQ0FSQk9OX0xERkxBR1MpICQoV0tfQ09SRV9QREZfTERG
TEFHUykgJChXS19DT1JFX1BSRURJQ1RJT05fTERGTEFHUykgJChXS19DT1JFX1NFUlZJQ0VTX0xE
RkxBR1MpICQoV0tfREVWSUNFX0lERU5USVRZX0xERkxBR1MpICQoV0tfR1JBUEhJQ1NfU0VSVklD
RVNfTERGTEFHUykgJChXS19JT1NVUkZBQ0VfTERGTEFHUykgJChXS19MSUJTQU5EQk9YX0xERkxB
R1MpICQoV0tfTElCV0VCUlRDX0xERkxBR1MpICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERG
TEFHUykgJChXS19NT0JJTEVfR0VTVEFMVF9MREZMQUdTKSAkKFdLX09QRU5HTF9MREZMQUdTKSAk
KFdLX1BERktJVF9MREZMQUdTKSAkKFdLX1NBRkVfQlJPV1NJTkdfTERGTEFHUykgJChXS19TRUNV
UklUWV9JTlRFUkZBQ0VfTERGTEFHUykgJChXS19VSUtJVF9MREZMQUdTKSAkKFdLX1VSTF9GT1JN
QVRUSU5HX0xERkxBR1MpICQoV0tfV0VCSU5TUEVDVE9SVUlfTERGTEFHUyk7CiAKIC8vIFByZXZl
bnQgQysrIHN0YW5kYXJkIGxpYnJhcnkgYmFzaWNfc3RyaW5nc3RyZWFtLCBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCiBVTkVYUE9SVEVEX1NZTUJPTF9MREZMQUdTID0gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5
bWJvbCAtV2wsX19aVElTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19a
VFNTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFNTdDlleGNlcHRp
b24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aZGxQdlNfIC1XbCwtdW5leHBvcnRlZF9z
eW1ib2wgLVdsLF9fWm53bVB2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWm53bSAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3JlMTJQ
b2xpY3lBY3Rpb25FRUVDMkVPUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNf
XzE4ZnVuY3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRUMxRU9TNF8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCAtV2wsX19aTlN0M19fMThmdW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5
QWN0aW9uRUVFYVNFRG4gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTktTdDNfXzE4ZnVu
Y3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRWNsRVMyXyAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3JlMTJQb2xpY3lBY3Rpb25F
RUU0c3dhcEVSUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rp
b25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRUMxRVJLUzRfIC1XbCwtdW5leHBvcnRlZF9z
eW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVF
RUMyRVJLUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25J
RnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAt
V2wsX19aTlN0M19fMThmdW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9uRUVFRDJFdiAt
V2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3Jl
MTJQb2xpY3lBY3Rpb25FRUVhU0VSS1M0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pU
Vk5TdDNfXzExN2JhZF9mdW5jdGlvbl9jYWxsRSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxf
X1pUQ05TdDNfXzExOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185
YWxsb2NhdG9ySWNFRUVFMF9OU18xM2Jhc2ljX2lzdHJlYW1JY1MyX0VFIC1XbCwtdW5leHBvcnRl
ZF9zeW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJf
dHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUwX05TXzE0YmFzaWNfaW9zdHJlYW1JY1MyX0VF
IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3Ry
ZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUxNl9OU18xM2Jhc2lj
X29zdHJlYW1JY1MyX0VFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRUTlN0M19fMTE4
YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VF
RUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFZOU3QzX18xMTViYXNpY19zdHJpbmdi
dWZJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRSAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sIC1XbCxfX1pUVk5TdDNfXzExOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFy
X3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVds
LF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5T
XzlhbGxvY2F0b3JJY0VFRUU4X05TXzEzYmFzaWNfb3N0cmVhbUljUzJfRUU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW0KaW5kZXggMjYyNTBkNmU0ZmI3MzVjMzI5MmM0OGFhYTA3YmU3N2UyZDFkN2JiYy4uYmRi
ZjliNDVjYzNmZTVlMDRjZTZhMGUxOGRkODAzOGFmMjFhZDQyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5t
bQpAQCAtOTQyLDggKzk0Miw4IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9u
Q29jb2EoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrCiAKICAgICBOU1VS
TFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclNl
c3Npb25JRChtX3Nlc3Npb25JRCk7CiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotICAgIE5F
VFdPUktTRVNTSU9OQ09DT0FfTE9BRE9QVElNSVpFUl9BRERJVElPTlMKKyNpZiBIQVZFKEFQUF9T
U08pCisgICAgY29uZmlndXJhdGlvbi5fcHJldmVudHNBcHBTU08gPSB0cnVlOwogI2VuZGlmCiAK
ICNpZiBVU0UoQ0ZORVRXT1JLX0FVVE9fQURERURfSFRUUF9IRUFERVJfU1VQUFJFU1NJT04pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMu
bW0KaW5kZXggNzg3YmNiYWU0MTA1NWM1N2I0ZjU5YWFlNmQ1Zjk4MjJkMzE2MDVhNi4uZDYwMDM3
ZmQzZWM2NTZkNzVkNzA2N2QzMmEyZTM0MzcxZmQwZDAwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbQpAQCAtNDA1LDcgKzQw
NSw3IEBAIHZvaWQgUGx1Z2luUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUGx1Z2luUHJvY2Vz
cyhQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0CiAgICAgLy8gRGlzYWJsZSBEYXJrIE1vZGUg
aW4gdGhlIHBsdWdpbiBwcm9jZXNzIHRvIGF2b2lkIHJlbmRlcmluZyBpc3N1ZXMuCiAgICAgW05T
QXBwIHNldEFwcGVhcmFuY2U6W05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJh
bmNlTmFtZUFxdWFdXTsKICNlbmRpZgotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCisjaWYgSEFW
RShBUFBfU1NPKQogICAgIFtOU1VSTFNlc3Npb24gX2Rpc2FibGVBcHBTU09dOwogI2VuZGlmCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNDY2MTdiZTg2MjRjOWI4ZDlhNGFlMjFmMWY5OWQz
NzYyZjRlYWYzOS4uMjdkY2YwOTQzYTcxYTA2NzM2MDA4OTY3MWE3MmI3MDI5ZmZkMmI5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dApAQCAtMzI4LDYgKzMyOCwxNSBAQCBVSVByb2Nlc3MvQXV0b21h
dGlvbi9pb3MvV2ViQXV0b21hdGlvblNlc3Npb25JT1MubW0KIAogVUlQcm9jZXNzL0F1dG9tYXRp
b24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCiAKK1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KK1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCitV
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25D
b29yZGluYXRvci5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6
YXRpb25OU1VSTEV4dHJhcy5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tCitVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tCisKIFVJUHJvY2Vzcy9Db2NvYS9B
dXRvbWF0aW9uQ2xpZW50Lm1tCiBVSVByb2Nlc3MvQ29jb2EvQXV0b21hdGlvblNlc3Npb25DbGll
bnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgKaW5kZXgg
YzE1MjhmOGI1MTUyYWY1ZmE3ODEyN2ZjNTYxODdmYzA3OTJmNzU3Zi4uNGY4MWZkZjFhNDkwZDVj
MGNiZWI1NWU5ZWY5ZWY5NDY2OTUwMzc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCkBAIC02OSw4ICs2OSw5IEBAIHB1YmxpYzoK
IAogICAgIE5hdmlnYXRpb24qIG1haW5GcmFtZU5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X21haW5GcmFtZU5hdmlnYXRpb24uZ2V0KCk7IH0KIAotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIp
Ci1BUElOQVZJR0FUSU9OQUNUSU9OX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzEKKyNpZiBIQVZF
KEFQUF9TU08pCisgICAgYm9vbCBzaG91bGRQZXJmb3JtU09BdXRob3JpemF0aW9uKCkgeyByZXR1
cm4gbV9zaG91bGRQZXJmb3JtU09BdXRob3JpemF0aW9uOyB9CisgICAgdm9pZCB1bnNldFNob3Vs
ZFBlcmZvcm1TT0F1dGhvcml6YXRpb24oKSB7IG1fc2hvdWxkUGVyZm9ybVNPQXV0aG9yaXphdGlv
biA9IGZhbHNlOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTEwMCw4ICsxMDEsOCBAQCBwcml2
YXRlOgogICAgIFdURjo6VVJMIG1fb3JpZ2luYWxVUkw7CiAKICAgICBib29sIG1fc2hvdWxkT3Bl
bkFwcExpbmtzOwotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1BUElOQVZJR0FUSU9OQUNUSU9O
X0xPQURPUFRJTUlaRVJfQURESVRJT05TXzIKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgYm9vbCBt
X3Nob3VsZFBlcmZvcm1TT0F1dGhvcml6YXRpb24geyB0cnVlIH07CiAjZW5kaWYKIAogICAgIFJl
ZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiBtX3VzZXJJbml0aWF0ZWRBY3Rpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KaW5kZXggYTRl
YTZiNzMxYjA0M2UwMzVlZDcxMzNkNTE1OGRkYmJkMWI3YTM0Mi4uMzI1ZmY4MTBiZTJiZjMxMTUx
YTc3N2RmNzRhOTQ5YjAwYThiZmQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiTG9n
Z2luZy5oIgogI2ltcG9ydCAiTmF2aWdhdGlvbkFjdGlvbkRhdGEuaCIKICNpbXBvcnQgIlBhZ2VM
b2FkU3RhdGUuaCIKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW1w
b3J0ICJXS0JhY2tGb3J3YXJkTGlzdEludGVybmFsLmgiCiAjaW1wb3J0ICJXS0JhY2tGb3J3YXJk
TGlzdEl0ZW1JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgpAQCAt
ODEsMTAgKzgyLDYgQEAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGF1bmNoU2VydmljZXNTUEku
aD4KICNlbmRpZgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktp
dEFkZGl0aW9ucy9OYXZpZ2F0aW9uU3RhdGVBZGRpdGlvbnMubW0+Ci0jZW5kaWYKLQogI2lmIFVT
RShRVUlDS19MT09LKQogI2ltcG9ydCAiUXVpY2tMb29rRG9jdW1lbnREYXRhLmgiCiAjZW5kaWYK
QEAgLTQ3NCwxMiArNDcxLDE4IEBAIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViUGFnZVByb3h5CiB9CiAjZW5kaWYK
IAotI2lmICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotc3RhdGljIHZvaWQgdHJ5T3B0aW1pemlu
Z0xvYWQoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgRnVuY3Rp
b248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRpYyB2b2lkIHRyeVNPQXV0
aG9yaXphdGlvbihSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24s
IFdlYlBhZ2VQcm94eSYgcGFnZSwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgaWYgKCFuYXZpZ2F0aW9uQWN0aW9uLT5z
aG91bGRQZXJmb3JtU09BdXRob3JpemF0aW9uKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhZ2Uud2Vic2l0ZURhdGFT
dG9yZSgpLnNvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKCkudHJ5QXV0aG9yaXplKFdURk1vdmUo
bmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNl
bHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotfQogI2VuZGlmCit9CiAKIHN0YXRp
YyB2b2lkIHRyeUludGVyY2VwdE5hdmlnYXRpb24oUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4m
JiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIFdURjo6RnVuY3Rpb248dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKQEAgLTQ4OSw3ICs0OTIsNyBAQCBzdGF0
aWMgdm9pZCB0cnlJbnRlcmNlcHROYXZpZ2F0aW9uKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+
JiYgbmF2aWdhdGlvbkFjdGlvbgogICAgICAgICBhdXRvKiBsb2NhbENvbXBsZXRpb25IYW5kbGVy
ID0gbmV3IFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCk+KFtuYXZpZ2F0aW9uQWN0aW9uID0gV1RG
TW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgd2Vha1BhZ2UgPSBtYWtlV2Vha1B0cihwYWdlKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJvb2wgc3VjY2Vz
cykgbXV0YWJsZSB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzICYmIHdlYWtQYWdlKSB7Ci0gICAgICAgICAgICAgICAgdHJ5
T3B0aW1pemluZ0xvYWQoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgKndlYWtQYWdlLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICAgICAgdHJ5U09BdXRob3JpemF0
aW9uKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksICp3ZWFrUGFnZSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwpAQCAtNTA0LDcgKzUwNyw3IEBA
IHN0YXRpYyB2b2lkIHRyeUludGVyY2VwdE5hdmlnYXRpb24oUmVmPEFQSTo6TmF2aWdhdGlvbkFj
dGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uCiAgICAgfQogI2VuZGlmCiAKLSAgICB0cnlPcHRpbWl6
aW5nTG9hZChXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgdHJ5U09BdXRob3JpemF0aW9uKFdURk1vdmUobmF2aWdhdGlvbkFj
dGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHksIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rp
b24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4m
JiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQpAQCAtNjE4LDcgKzYyMSw3IEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKFdlYlBhZ2VQCiAgICAgICAgICAgICBsb2NhbExpc3RlbmVyLT5kb3dubG9h
ZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgX1dLTmF2aWdhdGlvbkFjdGlv
blBvbGljeUFsbG93V2l0aG91dFRyeWluZ0FwcExpbms6Ci0gICAgICAgICAgICB0cnlPcHRpbWl6
aW5nTG9hZChXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCB3ZWJQYWdlUHJveHksIFtsb2NhbExp
c3RlbmVyID0gV1RGTW92ZShsb2NhbExpc3RlbmVyKSwgd2Vic2l0ZVBvbGljaWVzID0gV1RGTW92
ZShhcGlXZWJzaXRlUG9saWNpZXMpXSAoYm9vbCBvcHRpbWl6ZWRMb2FkKSB7CisgICAgICAgICAg
ICB0cnlTT0F1dGhvcml6YXRpb24oV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgd2ViUGFnZVBy
b3h5LCBbbG9jYWxMaXN0ZW5lciA9IFdURk1vdmUobG9jYWxMaXN0ZW5lciksIHdlYnNpdGVQb2xp
Y2llcyA9IFdURk1vdmUoYXBpV2Vic2l0ZVBvbGljaWVzKV0gKGJvb2wgb3B0aW1pemVkTG9hZCkg
ewogICAgICAgICAgICAgICAgIGlmIChvcHRpbWl6ZWRMb2FkKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGxvY2FsTGlzdGVuZXItPmlnbm9yZSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vz
c2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU2ODMzMGExMGY4MzZlNzcwZjBiOTg5MjVjNTBmZDJjMTIwYzBl
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisK
KyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViVmlld0Rp
ZE1vdmVUb1dpbmRvd09ic2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBXaGVuIHRoZSBXZWJWaWV3LCBvd25lciBv
ZiB0aGUgcGFnZSwgaXMgbm90IGluIHRoZSB3aW5kb3csIHRoZSBzZXNzaW9uIHdpbGwgdGhlbiBw
YXVzZQorLy8gYW5kIGxhdGVyIHJlc3VtZSBhZnRlciB0aGUgV2ViVmlldyBiZWluZyBtb3ZlZCBp
bnRvIHRoZSB3aW5kb3cuCisvLyBUaGUgcmVhc29uIHRvIGFwcGx5IHRoZSBhYm92ZSBydWxlIHRv
IHRoZSB3aG9sZSBzZXNzaW9uIGluc3RlYWQgb2YgVUkgc2Vzc2lvbiBvbmx5IGlzIFVJCisvLyBj
YW4gYmUgc2hvd24gb3V0IG9mIHByb2Nlc3MsIGluIHdoaWNoIGNhc2UgV2ViS2l0IHdpbGwgbm90
IGV2ZW4gZ2V0IG5vdGlmaWVkLgorLy8gRlNNOiBJZGxlID0+IGlzSW5XaW5kb3cgPT4gQWN0aXZl
ID0+IENvbXBsZXRlZAorLy8gICAgICBJZGxlID0+ICFpc0luV2luZG93ID0+IFdhaXRpbmcgPT4g
YmVjb21lIGlzSW5XaW5kb3cgPT4gQWN0aXZlID0+IENvbXBsZXRlZAorY2xhc3MgTmF2aWdhdGlv
blNPQXV0aG9yaXphdGlvblNlc3Npb24gOiBwdWJsaWMgV2ViVmlld0RpZE1vdmVUb1dpbmRvd09i
c2VydmVyLCBwdWJsaWMgU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgdXNp
bmcgQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPjsKKworICAgIHVzaW5n
IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlcjo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNp
bmcgV2Vha1ZhbHVlVHlwZSA9IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlcjo6V2Vha1Zh
bHVlVHlwZTsKKworICAgIH5OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbigpOworCisg
ICAgLy8gV2ViVmlld0RpZE1vdmVUb1dpbmRvd09ic2VydmVyCisgICAgdm9pZCB3ZWJWaWV3RGlk
TW92ZVRvV2luZG93KCkgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBOYXZpZ2F0aW9uU09BdXRo
b3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFj
dGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgSW5pdGlhdGluZ0FjdGlvbiwgQ2FsbGJhY2smJik7CisK
KyAgICB2b2lkIGNhbGxiYWNrKGJvb2wgaW50ZXJjZXB0ZWQpIHsgbV9jYWxsYmFjayhpbnRlcmNl
cHRlZCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNob3VsZFN0YXJ0SW50ZXJuYWwoKSBmaW5h
bDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVmb3JlU3RhcnQoKSA9IDA7CisKKyAgICBDYWxsYmFjayBt
X2NhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmln
YXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQyMjZiYmVjZTRmOTVjMTIxODY1OTBhYWVmYzJjZTFkOWQwOTk5OWIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXZpZ2F0aW9u
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246
Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqc29BdXRo
b3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24s
IFdlYlBhZ2VQcm94eSYgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbiBhY3Rpb24sIENhbGxiYWNrJiYg
Y29tcGxldGlvbkhhbmRsZXIpCisgICAgOiBTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9y
aXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgYWN0aW9uKQorICAgICwg
bV9jYWxsYmFjayhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKK3sKK30KKworTmF2aWdhdGlv
blNPQXV0aG9yaXphdGlvblNlc3Npb246On5OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lv
bigpCit7CisgICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgIG1fY2FsbGJhY2sodHJ1ZSk7Cisg
ICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OldhaXRpbmcgJiYgcGFnZSgpKQorICAgICAgICBwYWdl
KCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKK30KKwordm9pZCBOYXZpZ2F0aW9uU09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJbnRlcm5hbCgpCit7CisgICAgYXV0byogcGFnZVB0
ciA9IHBhZ2UoKTsKKyAgICBBU1NFUlQocGFnZVB0cik7CisgICAgYmVmb3JlU3RhcnQoKTsKKyAg
ICBpZiAoIXBhZ2VQdHItPmlzSW5XaW5kb3coKSkgeworICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6
V2FpdGluZyk7CisgICAgICAgIHBhZ2VQdHItPmFkZE9ic2VydmVyKCp0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBzdGFydCgpOworfQorCit2b2lkIE5hdmlnYXRpb25TT0F1dGhv
cml6YXRpb25TZXNzaW9uOjp3ZWJWaWV3RGlkTW92ZVRvV2luZG93KCkKK3sKKyAgICBhdXRvKiBw
YWdlUHRyID0gcGFnZSgpOworICAgIGlmIChzdGF0ZSgpICE9IFN0YXRlOjpXYWl0aW5nIHx8ICFw
YWdlUHRyIHx8ICFwYWdlUHRyLT5pc0luV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBz
dGFydCgpOworICAgIHBhZ2VQdHItPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1MDMwNjAzOGYyMDY2MjBlMDM2MGEw
NWQxOGQ5NGFjZDhhMWZiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShB
UFBfU1NPKQorCisjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCitPQkpDX0NM
QVNTIFdLU09TZWNyZXREZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworCituYW1lc3Bh
Y2UgQVBJIHsKK2NsYXNzIE5hdmlnYXRpb25BY3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBGU006IElkbGUgPT4gQWN0aXZlID0+IENvbXBsZXRlZAorY2xhc3MgUG9wVXBTT0F1
dGhvcml6YXRpb25TZXNzaW9uIGZpbmFsIDogcHVibGljIFNPQXV0aG9yaXphdGlvblNlc3Npb24g
eworcHVibGljOgorICAgIHVzaW5nIE5ld1BhZ2VDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4mJik+OworICAgIHVzaW5nIFVJQ2xpZW50Q2FsbGJh
Y2sgPSBGdW5jdGlvbjx2b2lkKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIE5ld1BhZ2VD
YWxsYmFjayYmKT47CisKKyAgICBzdGF0aWMgUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IGNy
ZWF0ZShTT0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdl
LCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIE5ld1BhZ2VD
YWxsYmFjayYmIG5ld1BhZ2VDYWxsYmFjaywgVUlDbGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2Fs
bGJhY2spCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb24oc29BdXRob3JpemF0aW9uLCBwYWdlLCBXVEZNb3ZlKG5hdmlnYXRpb25B
Y3Rpb24pLCBXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjayksIFdURk1vdmUodWlDbGllbnRDYWxsYmFj
aykpKTsKKyAgICB9CisgICAgflBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbigpOworCisgICAg
dm9pZCBjbG9zZShXS1dlYlZpZXcgKik7CisKK3ByaXZhdGU6CisgICAgUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBXZWJQYWdlUHJveHkmLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmLCBOZXdQYWdlQ2FsbGJhY2smJiwgVUlDbGllbnRDYWxsYmFjayYm
KTsKKworICAgIHZvaWQgc2hvdWxkU3RhcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgZmFs
bEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgYWJvcnRJbnRlcm5hbCgp
IGZpbmFsOworICAgIHZvaWQgY29tcGxldGVJbnRlcm5hbChXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiYsIE5TRGF0YSAqKSBmaW5hbDsKKworICAgIHZvaWQgaW5pdFNlY3JldFdlYlZpZXcoKTsK
KworICAgIE5ld1BhZ2VDYWxsYmFjayBtX25ld1BhZ2VDYWxsYmFjazsKKyAgICBVSUNsaWVudENh
bGxiYWNrIG1fdWlDbGllbnRDYWxsYmFjazsKKworICAgIFJldGFpblB0cjxXS1NPU2VjcmV0RGVs
ZWdhdGU+IG1fc2VjcmV0RGVsZWdhdGU7CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gbV9zZWNy
ZXRXZWJWaWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVw
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmFiMzEwYWZiZjU2NjQ2NjNhNmJlZGM3M2UwZDJhMTJmOTljYzgzYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLVUlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYktpdC9BUElO
YXZpZ2F0aW9uQWN0aW9uLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKworQGludGVyZmFj
ZSBXS1NPU2VjcmV0RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdL
VUlEZWxlZ2F0ZT4geworQHBhY2thZ2UKK1dlYWtQdHI8V2ViS2l0OjpQb3BVcFNPQXV0aG9yaXph
dGlvblNlc3Npb24+IF9zZXNzaW9uOworQk9PTCBfaXNGaXJzdE5hdmlnYXRpb247Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFNlc3Npb246KFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRp
b25TZXNzaW9uICopc2Vzc2lvbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tTT1NlY3Jl
dERlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNlc3Npb246KFdlYktpdDo6UG9w
VXBTT0F1dGhvcml6YXRpb25TZXNzaW9uICopc2Vzc2lvbgoreworICAgIGlmIChzZWxmID0gW3N1
cGVyIGluaXRdKSB7CisgICAgICAgIF9zZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lvbik7Cisg
ICAgICAgIF9pc0ZpcnN0TmF2aWdhdGlvbiA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy8vIFdLVUlEZWxlZ2F0ZQorLSAodm9pZCl3ZWJWaWV3RGlkQ2xvc2U6KFdLV2ViVmll
dyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIV9zZXNzaW9uKQorICAgICAgICByZXR1cm47CisgICAg
X3Nlc3Npb24tPmNsb3NlKHdlYlZpZXcpOworfQorCisvLyBXS05hdmlnYXRpb25EZWxlZ2F0ZQor
LSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNp
b25IYW5kbGVyOih2b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFu
ZGxlcgoreworICAgIC8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzQ4Nzg3ODM5PjogV2Ugc2hvdWxk
IHJlc3RyaWN0IHRoZSBsb2FkIHRvIG9ubHkgc3Vic3RpdHV0ZSBkYXRhLgorICAgIC8vIFVzZSB0
aGUgZm9sbG93aW5nIGhldXJpc3RpYyBhcyBhIHdvcmthcm91bmQgcmlnaHQgbm93LgorICAgIC8v
IElnbm9yZSB0aGUgZmlyc3QgbG9hZCBpbiB0aGUgc2VjcmV0IHdpbmRvdywgd2hpY2ggbmF2aWdh
dGVzIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCisgICAgaWYgKF9pc0ZpcnN0TmF2aWdhdGlv
bikgeworICAgICAgICBfaXNGaXJzdE5hdmlnYXRpb24gPSBOTzsKKyAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgZGVjaXNpb25IYW5kbGVyKF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxv
d1dpdGhvdXRUcnlpbmdBcHBMaW5rKTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24K
K3sKKyAgICBpZiAoIV9zZXNzaW9uKQorICAgICAgICByZXR1cm47CisgICAgX3Nlc3Npb24tPmNs
b3NlKHdlYlZpZXcpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQb3BVcFNP
QXV0aG9yaXphdGlvblNlc3Npb246OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhv
cml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIE5ld1BhZ2VDYWxsYmFjayYmIG5l
d1BhZ2VDYWxsYmFjaywgVUlDbGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2FsbGJhY2spCisgICAg
OiBTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0
aW9uQWN0aW9uKSwgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbjo6UG9wVXApCisgICAgLCBtX25ld1Bh
Z2VDYWxsYmFjayhXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjaykpCisgICAgLCBtX3VpQ2xpZW50Q2Fs
bGJhY2soV1RGTW92ZSh1aUNsaWVudENhbGxiYWNrKSkKK3sKK30KKworUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjp+UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uKCkKK3sKKyAgICBBU1NF
UlQoc3RhdGUoKSAhPSBTdGF0ZTo6V2FpdGluZyk7CisgICAgaWYgKG1fbmV3UGFnZUNhbGxiYWNr
KQorICAgICAgICBtX25ld1BhZ2VDYWxsYmFjayhudWxscHRyKTsKK30KKwordm9pZCBQb3BVcFNP
QXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwoKQoreworICAgIEFTU0VS
VChwYWdlKCkgJiYgcGFnZSgpLT5pc0luV2luZG93KCkpOworICAgIHN0YXJ0KCk7Cit9CisKK3Zv
aWQgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFs
KCkKK3sKKyAgICBtX3VpQ2xpZW50Q2FsbGJhY2socmVsZWFzZU5hdmlnYXRpb25BY3Rpb24oKSwg
V1RGTW92ZShtX25ld1BhZ2VDYWxsYmFjaykpOworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCgpCit7CisgICAgaWYgKCFwYWdlKCkpIHsKKyAgICAg
ICAgbV9uZXdQYWdlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpbml0U2VjcmV0V2ViVmlldygpOworICAgIG1fbmV3UGFnZUNhbGxiYWNrKG1fc2VjcmV0
V2ViVmlldy0+X3BhZ2UuZ2V0KCkpOworICAgIFttX3NlY3JldFdlYlZpZXcgZXZhbHVhdGVKYXZh
U2NyaXB0OiBAIndpbmRvdy5jbG9zZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworfQorCit2
b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkKK3sKKyAgICBpZiAo
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDAgfHwgIXBhZ2UoKSkgeworICAgICAgICBm
YWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpbml0U2VjcmV0V2ViVmlldygpOworICAgIG1fbmV3UGFnZUNhbGxiYWNrKG1fc2VjcmV0V2Vi
Vmlldy0+X3BhZ2UuZ2V0KCkpOworICAgIFttX3NlY3JldFdlYlZpZXcgbG9hZERhdGE6ZGF0YSBN
SU1FVHlwZTpAInRleHQvaHRtbCIgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOkAiVVRGLTgiIGJhc2VV
Ukw6cmVzcG9uc2UudXJsKCldOworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6Y2xvc2UoV0tXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIGlmICghbV9zZWNyZXRXZWJWaWV3
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkgIT0gU3RhdGU6OkNvbXBsZXRlZCB8
fCB3ZWJWaWV3ICE9IG1fc2VjcmV0V2ViVmlldy5nZXQoKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3NlY3JldFdlYlZpZXcg
PSBudWxscHRyOworICAgIFdURkxvZ0Fsd2F5cygiU2VjcmV0V2ViVmlldyBpcyBjbGVhbmVkLiIp
OworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6aW5pdFNlY3JldFdlYlZp
ZXcoKQoreworICAgIEFTU0VSVChwYWdlKCkpOworICAgIGF1dG8gaW5pdGlhdG9yV2ViVmlldyA9
IGZyb21XZWJQYWdlUHJveHkoKnBhZ2UoKSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbaW5pdGlhdG9yV2ViVmlldy5jb25maWd1cmF0aW9uIGNvcHldKTsKKyAgICBbY29uZmln
dXJhdGlvbiBfc2V0UmVsYXRlZFdlYlZpZXc6aW5pdGlhdG9yV2ViVmlld107CisgICAgbV9zZWNy
ZXRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RaZXJvIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgbV9zZWNy
ZXREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NPU2VjcmV0RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
U2Vzc2lvbjp0aGlzXSk7CisgICAgW21fc2VjcmV0V2ViVmlldyBzZXRVSURlbGVnYXRlOm1fc2Vj
cmV0RGVsZWdhdGUuZ2V0KCldOworICAgIFttX3NlY3JldFdlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOm1fc2VjcmV0RGVsZWdhdGUuZ2V0KCldOworCisgICAgbV9zZWNyZXRXZWJWaWV3LT5f
cGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbigpOworICAgIFdURkxvZ0Fsd2F5cygiU2VjcmV0V2ViVmlldyBpcyBjcmVhdGVk
LiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1
dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmQ4ODkxMGU2ODBjYzRjYjVhOWQ4YWI1OGM0ZWQyMmUxZjNkMDA2OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVj
dFNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbmNsdWRlICJOYXZpZ2F0aW9u
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uIGZpbmFsIDogcHVibGljIE5hdmlnYXRpb25T
T0F1dGhvcml6YXRpb25TZXNzaW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDYWxsYmFjayA9IENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+OworCisgICAgc3RhdGljIFJlZjxTT0F1dGhvcml6
YXRpb25TZXNzaW9uPiBjcmVhdGUoU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJl
ZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5
JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9y
aXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVkaXJlY3RTT0F1dGhvcml6
YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9u
PiYmLCBXZWJQYWdlUHJveHkmLCBDYWxsYmFjayYmKTsKKworICAgIC8vIFNPQXV0aG9yaXphdGlv
blNlc3Npb24KKyAgICB2b2lkIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKSBmaW5hbDsKKyAg
ICB2b2lkIGFib3J0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGNvbXBsZXRlSW50ZXJuYWwo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBOU0RhdGEgKikgZmluYWw7CisKKyAgICAvLyBO
YXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbgorICAgIHZvaWQgYmVmb3JlU3RhcnQoKSBm
aW5hbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhlZWY3NzQxMmNjZWUwNTViZTkxMjc1ZTQyYTRmNmJhZjM5MTlhODEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVk
aXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlZGlyZWN0U09BdXRob3JpemF0aW9u
U2Vzc2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNl
LmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6UmVkaXJlY3RTT0F1dGhv
cml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJ
OjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFn
ZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICA6IE5hdmlnYXRpb25TT0F1dGhv
cml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9u
KSwgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbjo6UmVkaXJlY3QsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKQoreworfQorCit2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFs
bEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpCit7CisgICAgY2FsbGJhY2soZmFsc2UpOworfQorCit2
b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCgpCit7Cisg
ICAgY2FsbGJhY2sodHJ1ZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjpjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25z
ZSwgTlNEYXRhICpkYXRhKQoreworICAgIGF1dG8qIHBhZ2VQdHIgPSBwYWdlKCk7CisgICAgaWYg
KChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDMwMiAmJiByZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpICE9IDIwMCkgfHwgIXBhZ2VQdHIpIHsKKyAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJ
bnRlcm5hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhbGxiYWNrKHRydWUpOwor
ICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwMikgeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgYXV0byogbmF2aWdhdGlvbkFjdGlvblB0ciA9IG5hdmlnYXRpb25BY3Rp
b24oKTsKKyAgICAgICAgQVNTRVJUKG5hdmlnYXRpb25BY3Rpb25QdHIpOworICAgICAgICAvLyBN
b2JpbGVTYWZhcmkgaGFzIGEgV0JTVVJMU3Bvb2ZpbmdNaXRpZ2F0b3IsIHdoaWNoIHdpbGwgbm90
IGRpc3BsYXkgdGhlIHByb3Zpc2lvbmFsIFVSTCBmb3IgbmF2aWdhdGlvbnMgd2l0aG91dCB1c2Vy
IGdlc3R1cmVzLgorICAgICAgICAvLyBGb3Igc2xvdyBsb2FkcyB0aGF0IGFyZSBpbml0aWF0ZWQg
ZnJvbSB0aGUgTW9iaWxlU2FmYXJpIEZhdm9yaXRlcyBzY3JlZW4sIHRoZSBhZm9yZW1lbnRpb25l
ZCBiZWhhdmlvciB3aWxsIGNyZWF0ZSBhIHBlcmlvZAorICAgICAgICAvLyBhZnRlciBhdXRoZW50
aWNhdGlvbiBjb21wbGV0aW9uIHdoZXJlIHRoZSBuZXcgcmVxdWVzdCB0byB0aGUgYXBwbGljYXRp
b24gc2l0ZSBsb2FkcyB3aXRoIGEgYmxhbmsgVVJMIGFuZCBibGFuayBwYWdlLiBUbworICAgICAg
ICAvLyB3b3JrYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGxvYWQgYW4gaHRtbCBwYWdlIHRoYXQgZG9l
cyBhIGNsaWVudCBzaWRlIHJlZGlyZWN0aW9uIHRvIHRoZSBhcHBsaWNhdGlvbiBzaXRlIG9uIGJl
aGFsZiBvZiB0aGUKKyAgICAgICAgLy8gcmVxdWVzdCBVUkwsIGluc3RlYWQgb2YgZGlyZWN0bHkg
bG9hZGluZyBhIG5ldyByZXF1ZXN0LiBUaGUgaHRtbCBwYWdlIHNob3VsZCBiZSBzdXBlciBmYXN0
IHRvIGxvYWQgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdAorICAgICAgICAvLyBzaG93IGFuIGVtcHR5
IFVSTCBvciBhIGJsYW5rIHBhZ2UuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIGEgcmVsZXZhbnQgVVJM
IGJhciBhbmQgdXNlZnVsIHBhZ2UgY29udGVudCBkdXJpbmcgdGhlIGxvYWQuCisgICAgICAgIGlm
ICghbmF2aWdhdGlvbkFjdGlvblB0ci0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgeworICAg
ICAgICAgICAgcGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAgICAgIGF1dG8gaHRtbCA9IG1ha2VT
dHJpbmcoIjxzY3JpcHQ+bG9jYXRpb24gPSAnIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygp
LmdldChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLCAiJzwvc2NyaXB0PiIpLnV0
ZjgoKTsKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihodG1sLmRhdGEoKSksIGh0bWwubGVuZ3RoKCkpOwor
ICAgICAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCJfcywgIlVURi04
Il9zLCBuYXZpZ2F0aW9uQWN0aW9uUHRyLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcGFnZVB0ci0+bG9hZFJlcXVlc3Qo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5nZXQo
V2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKSkpOworICAgIH0KKyAgICBpZiAocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDApIHsKKyAgICAgICAgcGFnZVB0ci0+c2V0U2hv
dWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24o
KTsKKyAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoSVBDOjpEYXRhUmVmZXJlbmNlKHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpLCAidGV4dC9odG1s
Il9zLCAiVVRGLTgiX3MsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCgpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGlu
YXRvci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NP
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZkM2NkZTMzNzc5ZDVhZTU4
YjljYzc2Yjk2MWRlODdhN2FhNjlkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRv
ci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhB
VkUoQVBQX1NTTykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFNP
QXV0aG9yaXphdGlvbjsKK09CSkNfQ0xBU1MgV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZTsKKwor
bmFtZXNwYWNlIEFQSSB7CitjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcik7CitwdWJsaWM6CisgICAgU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3IoKTsKKworICAgIC8vIEZvciBOYXZpZ2F0aW9uIGludGVyY2VwdGlv
bi4KKyAgICB2b2lkIHRyeUF1dGhvcml6ZShSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBX
ZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmKTsKKworICAgIC8vIEZvciBQb3BV
cCBpbnRlcmNlcHRpb24uCisgICAgdXNpbmcgTmV3UGFnZUNhbGxiYWNrID0gQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChSZWZQdHI8V2ViUGFnZVByb3h5PiYmKT47CisgICAgdXNpbmcgVUlDbGllbnRD
YWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgTmV3
UGFnZUNhbGxiYWNrJiYpPjsKKyAgICB2b2lkIHRyeUF1dGhvcml6ZShSZWY8QVBJOjpOYXZpZ2F0
aW9uQWN0aW9uPiYmLCBXZWJQYWdlUHJveHkmLCBOZXdQYWdlQ2FsbGJhY2smJiwgVUlDbGllbnRD
YWxsYmFjayYmKTsKKworcHJpdmF0ZToKKyAgICBpbmxpbmUgYm9vbCBjYW5BdXRob3JpemUoY29u
c3QgVVJMJikgY29uc3Q7CisKKyAgICBSZXRhaW5QdHI8U09BdXRob3JpemF0aW9uPiBtX3NvQXV0
aG9yaXphdGlvbjsKKyAgICBSZXRhaW5QdHI8V0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4gbV9z
b0F1dGhvcml6YXRpb25EZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYjQ0ZGUyNTRmNDBmZDRkOTlmODI3NWUzMjQxZmU3ZGJjMWYzMTE4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvbkNv
b3JkaW5hdG9yLmgiCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgIlBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oIgorI2ltcG9ydCAiUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmgiCisjaW1wb3J0ICJTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKyNpbXBv
cnQgIldLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0F1
dGhLaXRTUEkuaD4KKyNpbXBvcnQgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I6OlNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYmFzZSBz
eXN0ZW0sIHdoaWNoIGRvZXNuJ3QgaGF2ZSBBcHBTU08uZnJhbWV3b3JrLgorICAgIGlmICghUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAg
ICBtX3NvQXV0aG9yaXphdGlvbiA9IGFkb3B0TlMoW1BBTDo6YWxsb2NTT0F1dGhvcml6YXRpb25J
bnN0YW5jZSgpIGluaXRdKTsKKyAgICBtX3NvQXV0aG9yaXphdGlvbkRlbGVnYXRlID0gYWRvcHRO
UyhbW1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBtX3NvQXV0
aG9yaXphdGlvbi5nZXQoKS5kZWxlZ2F0ZSA9IG1fc29BdXRob3JpemF0aW9uRGVsZWdhdGUuZ2V0
KCk7CisgICAgW05TVVJMU2Vzc2lvbiBfZGlzYWJsZUFwcFNTT107Cit9CisKK2Jvb2wgU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3I6OmNhbkF1dGhvcml6ZShjb25zdCBVUkwmIHVybCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zb0F1dGhvcml6YXRpb24gJiYgW1BBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSBjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6dXJsIHJlc3BvbnNlQ29k
ZTowXTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9yaXpl
KFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVBy
b3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGlmICghY2FuQXV0aG9yaXplKG5hdmlnYXRpb25BY3Rpb24tPnJlcXVlc3QoKS51cmwoKSkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIHNob3VsZCBvbmx5
IGJlIGFsbG93ZWQgZm9yIEFwcGxlIGZpcnN0IHBhcnRpZXMuCisgICAgYm9vbCBzdWJmcmFtZU5h
dmlnYXRpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLT50YXJnZXRGcmFtZSgpICYmICFuYXZpZ2F0aW9u
QWN0aW9uLT50YXJnZXRGcmFtZSgpLT5pc01haW5GcmFtZSgpOworICAgIGlmIChzdWJmcmFtZU5h
dmlnYXRpb24gJiYgKCFwYWdlLm1haW5GcmFtZSgpIHx8ICFbQUtBdXRob3JpemF0aW9uQ29udHJv
bGxlciBpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOnBhZ2UubWFpbkZyYW1lKCktPnVybCgpXSkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBzZXNzaW9uID0gc3ViZnJhbWVOYXZpZ2F0aW9uID8gU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUobV9zb0F1dGhvcml6YXRpb24uZ2V0KCksIFdU
Rk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSA6IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKG1fc29BdXRob3JpemF0
aW9uLmdldCgpLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgW21fc29BdXRob3JpemF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lv
bjpXVEZNb3ZlKHNlc3Npb24pXTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cjo6dHJ5QXV0aG9yaXplKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFj
dGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBOZXdQYWdlQ2FsbGJhY2smJiBuZXdQYWdlQ2FsbGJh
Y2ssIFVJQ2xpZW50Q2FsbGJhY2smJiB1aUNsaWVudENhbGxiYWNrKQoreworICAgIGJvb2wgc3Vi
ZnJhbWVOYXZpZ2F0aW9uID0gbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKSAmJiAhbmF2
aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKS0+aXNNYWluRnJhbWUoKTsKKyAgICBpZiAoc3Vi
ZnJhbWVOYXZpZ2F0aW9uIHx8ICFuYXZpZ2F0aW9uQWN0aW9uLT5pc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpIHx8ICFjYW5BdXRob3JpemUobmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpLnVybCgp
KSkgeworICAgICAgICB1aUNsaWVudENhbGxiYWNrKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiks
IFdURk1vdmUobmV3UGFnZUNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIHNlc3Npb24gPSBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShtX3Nv
QXV0aG9yaXphdGlvbi5nZXQoKSwgcGFnZSwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgV1RG
TW92ZShuZXdQYWdlQ2FsbGJhY2spLCBXVEZNb3ZlKHVpQ2xpZW50Q2FsbGJhY2spKTsKKyAgICBb
bV9zb0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBzZXRTZXNzaW9uOldURk1vdmUoc2Vzc2lvbildOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNV
UkxFeHRyYXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlYjYwOWQ5NWRkZDE3
NjNjMjE5MTlkMDkwMjc1ZDM1YWFlNjE3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNVUkxF
eHRyYXMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBIQVZFKEFQUF9TU08pCisKKy8vIEZJWE1FIHJkYXI6Ly9wcm9ibGVtLzUwMDI4MjQ2IFJlbW92
ZSB0aGUgZm9sbG93aW5nIG9uY2UgdGhlIHJhZGFyIGlzIGZpeGVkLgorQGludGVyZmFjZSBOU1VS
TCAoU09BdXRob3JpemF0aW9uRXh0cmFzKQorCisrIChCT09MKV93ZWJfY2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMOihOU1VSTCAqKXVybDsKKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhv
cml6YXRpb25OU1VSTEV4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NWEwZWRiNjFjYjdmMDZhZGU1N2EyYTc0NmVhZTYwMWIwMDRhYmY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9y
aXphdGlvbk5TVVJMRXh0cmFzLm1tCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmgiCisK
KyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5o
PgorCitAaW1wbGVtZW50YXRpb24gTlNVUkwgKFNPQXV0aG9yaXphdGlvbkV4dHJhcykKKworKyAo
Qk9PTClfd2ViX2NhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDooTlNVUkwgKil1cmwKK3sK
KyAgICByZXR1cm4gW1BBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSBjYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkw6dXJsIHJlc3BvbnNlQ29kZTowXTsKK30KKworQGVuZAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkMWRiMjNkOWZiZDUyZjE0NmYwNDhjZjk4Nzg5MmFmOWE4MmU0OGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbmNsdWRlIDxBcHBTU08vU09CYXNlLmg+
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha09iakNQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitPQkpDX0NMQVNTIFNPQXV0aG9yaXphdGlvbjsK
KworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworfQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCisvLyBBIHNlc3Npb24gd2lsbCBvbmx5IGJl
IGV4ZWN1dGVkIG9uY2UuCitjbGFzcyBTT0F1dGhvcml6YXRpb25TZXNzaW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxT
T0F1dGhvcml6YXRpb25TZXNzaW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBJbml0aWF0
aW5nQWN0aW9uIDogdWludDhfdCB7CisgICAgICAgIFJlZGlyZWN0LAorICAgICAgICBQb3BVcCwK
KyAgICAgICAgU3ViRnJhbWUKKyAgICB9OworCisgICAgdXNpbmcgVUlDYWxsYmFjayA9IHZvaWQg
KF4pKEJPT0wsIE5TRXJyb3IgKik7CisKKyAgICB2aXJ0dWFsIH5TT0F1dGhvcml6YXRpb25TZXNz
aW9uKCk7CisKKyAgICAvLyBQcm9iYWJseSBub3Qgc3RhcnQgaW1tZWRpYXRlbHkuCisgICAgdm9p
ZCBzaG91bGRTdGFydCgpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgb25seSBiZSBj
YWxsZWQgYnkgU09BdXRob3JpemF0aW9uRGVsZWdhdGUgbWV0aG9kcy4KKyAgICB2b2lkIGZhbGxC
YWNrVG9XZWJQYXRoKCk7CisgICAgdm9pZCBhYm9ydCgpOworICAgIC8vIE9ubHkgcmVzcG9uc2Vz
IHRoYXQgbWVldCBhbGwgb2YgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgd2lsbCBiZSBwcm9j
ZXNzZWQ6CisgICAgLy8gMSkgaXQgaGFzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgcmVxdWVzdDsK
KyAgICAvLyAyKSBpdCBoYXMgYSBzdGF0dXMgY29kZSBvZiAzMDIgb3IgMjAwLgorICAgIC8vIE90
aGVyd2lzZSwgaXQgZmFsbHMgYmFjayB0byB0aGUgd2ViIHBhdGguCisgICAgLy8gT25seSB0aGUg
Zm9sbG93aW5nIEhUVFAgaGVhZGVycyB3aWxsIGJlIHByb2Nlc3NlZDoKKyAgICAvLyB7IFNldC1D
b29raWUsIExvY2F0aW9uIH0uCisgICAgdm9pZCBjb21wbGV0ZShOU0hUVFBVUkxSZXNwb25zZSAq
LCBOU0RhdGEgKik7CisgICAgdm9pZCBwcmVzZW50Vmlld0NvbnRyb2xsZXIoU09BdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXIsIFVJQ2FsbGJhY2spOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRlNN
IGRlcGVuZHMgb24gZGVyaXZlZCBjbGFzc2VzLgorICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50
OF90IHsKKyAgICAgICAgSWRsZSwKKyAgICAgICAgQWN0aXZlLAorICAgICAgICBXYWl0aW5nLAor
ICAgICAgICBDb21wbGV0ZWQKKyAgICB9OworCisgICAgU09BdXRob3JpemF0aW9uU2Vzc2lvbihT
T0F1dGhvcml6YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVBy
b3h5JiwgSW5pdGlhdGluZ0FjdGlvbik7CisKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgV2ViUGFn
ZVByb3h5KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CisgICAgU3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0
ZSBzdGF0ZSkgeyBtX3N0YXRlID0gc3RhdGU7IH0KKyAgICBjb25zdCBBUEk6Ok5hdmlnYXRpb25B
Y3Rpb24qIG5hdmlnYXRpb25BY3Rpb24oKSB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb24uZ2V0
KCk7IH0KKyAgICBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiByZWxlYXNlTmF2aWdhdGlvbkFj
dGlvbigpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBzaG91bGRTdGFydEludGVybmFs
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBhYm9ydEludGVybmFsKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgTlNEYXRhICop
ID0gMDsKKworICAgIHZvaWQgYmVjb21lQ29tcGxldGVkKCk7CisgICAgdm9pZCBkaXNtaXNzVmll
d0NvbnRyb2xsZXIoKTsKKworICAgIFN0YXRlIG1fc3RhdGUgIHsgU3RhdGU6OklkbGUgfTsKKyAg
ICBXZWFrT2JqQ1B0cjxTT0F1dGhvcml6YXRpb24gKj4gbV9zb0F1dGhvcml6YXRpb247CisgICAg
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4gbV9uYXZpZ2F0aW9uQWN0aW9uOworICAgIFdl
YWtQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7CisgICAgSW5pdGlhdGluZ0FjdGlvbiBtX2FjdGlv
bjsKKworICAgIFJldGFpblB0cjxTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcj4gbV92aWV3
Q29udHJvbGxlcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPE5TV2luZG93PiBt
X3NoZWV0V2luZG93OworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9zaGVldFdpbmRvd1dpbGxD
bG9zZU9ic2VydmVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgzYmI1YzZjYjZhMDlkNzExNDllNzkyNDQ4Nzg1NDc2YzI4MzczOTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisK
KyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2lt
cG9ydCAiQVBJTmF2aWdhdGlvbi5oIgorI2ltcG9ydCAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgor
I2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIldLVUlEZWxlZ2F0ZS5oIgorI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJTaXRlRGF0YVN0b3JlLmgiCisjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlP
cmlnaW4uaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgorI2ltcG9ydCA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIHsKKworc3Rh
dGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHRvQ29va2llVmVjdG9yKE5TQXJyYXk8TlNIVFRQ
Q29va2llICo+ICpjb29raWVzKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHJlc3Vs
dDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb29raWVzLmNvdW50KTsKKyAg
ICBmb3IgKGlkIGNvb2tpZSBpbiBjb29raWVzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGNvb2tpZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgaXNTYW1l
T3JpZ2luKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgYXV0byByZXF1ZXN0T3Jp
Z2luID0gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXF1ZXN0LnVybCgpKTsKKyAg
ICByZXR1cm4gcmVxdWVzdE9yaWdpbi0+aXNTYW1lT3JpZ2luQXMoV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShyZXNwb25zZS51cmwoKSkuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZQorCitTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0
aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYm
IG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbiBh
Y3Rpb24pCisgICAgOiBtX3NvQXV0aG9yaXphdGlvbihzb0F1dGhvcml6YXRpb24pCisgICAgLCBt
X25hdmlnYXRpb25BY3Rpb24oV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSkKKyAgICAsIG1fcGFn
ZShtYWtlV2Vha1B0cihwYWdlKSkKKyAgICAsIG1fYWN0aW9uKGFjdGlvbikKK3sKK30KKworU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6flNPQXV0aG9yaXphdGlvblNlc3Npb24oKQoreworICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUgJiYgISFtX3NvQXV0aG9yaXphdGlvbikKKyAgICAg
ICAgW21fc29BdXRob3JpemF0aW9uIGNhbmNlbEF1dGhvcml6YXRpb25dOworICAgIGlmIChtX3N0
YXRlICE9IFN0YXRlOjpJZGxlICYmIG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAg
ICAgYmVjb21lQ29tcGxldGVkKCk7Cit9CisKK1JlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+IFNP
QXV0aG9yaXphdGlvblNlc3Npb246OnJlbGVhc2VOYXZpZ2F0aW9uQWN0aW9uKCkKK3sKKyAgICBy
ZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uLnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxldGVkKCkKK3sKKyAgICBBU1NFUlQobV9z
dGF0ZSA9PSBTdGF0ZTo6QWN0aXZlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmcpOworICAg
IG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOworICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQor
ICAgICAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpzaG91bGRTdGFydCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6
OklkbGUpOworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgc2hvdWxkU3Rh
cnRJbnRlcm5hbCgpOworfQorCit2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXJ0KCkK
K3sKKyAgICBBU1NFUlQoKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6V2FpdGluZykgJiYgbV9wYWdlICYmIG1fbmF2aWdhdGlvbkFjdGlvbik7CisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpBY3RpdmU7CisgICAgaWYgKCFtX3NvQXV0aG9yaXphdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUU8cmRhcjovL3Byb2JsZW0vNDg5MDkzMzY+OiBSZXBsYWNl
IHRoZSBiZWxvdyB3aXRoIEFwcFNTTyBjb25zdGFudHMuCisgICAgYXV0byBpbml0aWF0b3JPcmln
aW4gPSBlbXB0eVN0cmluZygpOworICAgIGlmIChtX25hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZy
YW1lKCkpCisgICAgICAgIGluaXRpYXRvck9yaWdpbiA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+c291
cmNlRnJhbWUoKS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigpLnRvU3RyaW5nKCk7
CisgICAgaWYgKG1fYWN0aW9uID09IEluaXRpYXRpbmdBY3Rpb246OlN1YkZyYW1lICYmIG1fcGFn
ZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIGluaXRpYXRvck9yaWdpbiA9IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUobV9wYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkpLT50b1N0cmluZygp
OworICAgIE5TRGljdGlvbmFyeSAqYXV0aG9yaXphdGlvbk9wdGlvbnMgPSBAeworICAgICAgICBT
T0F1dGhvcml6YXRpb25PcHRpb25Vc2VyQWN0aW9uSW5pdGlhdGVkOiBAKG1fbmF2aWdhdGlvbkFj
dGlvbi0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSksCisgICAgICAgIEAiaW5pdGlhdG9yT3Jp
Z2luIjogKE5TU3RyaW5nICopaW5pdGlhdG9yT3JpZ2luLAorICAgICAgICBAImluaXRpYXRpbmdB
Y3Rpb24iOiBAKHN0YXRpY19jYXN0PE5TSW50ZWdlcj4obV9hY3Rpb24pKQorICAgIH07CisgICAg
W21fc29BdXRob3JpemF0aW9uIHNldEF1dGhvcml6YXRpb25PcHRpb25zOmF1dGhvcml6YXRpb25P
cHRpb25zXTsKKworICAgIGF1dG8gKm5zUmVxdWVzdCA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+cmVx
dWVzdCgpLm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRl
SFRUUEJvZHkpOworICAgIFttX3NvQXV0aG9yaXphdGlvbiBiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOm5zUmVxdWVzdC5VUkwgaHR0cEhlYWRlcnM6bnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVs
ZHMgaHR0cEJvZHk6bnNSZXF1ZXN0LkhUVFBCb2R5XTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aCgpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU3Rh
dGU6OkFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJlY29tZUNvbXBsZXRlZCgpOworICAg
IGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjphYm9ydCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUgfHwgbV9z
dGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisgICAgYmVjb21lQ29t
cGxldGVkKCk7CisgICAgYWJvcnRJbnRlcm5hbCgpOworfQorCit2b2lkIFNPQXV0aG9yaXphdGlv
blNlc3Npb246OmNvbXBsZXRlKE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UsIE5TRGF0
YSAqZGF0YSkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6QWN0aXZlKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKG1fbmF2aWdhdGlvbkFjdGlvbik7CisgICAgYmVjb21lQ29tcGxl
dGVkKCk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSho
dHRwUmVzcG9uc2UpOworICAgIGlmICghaXNTYW1lT3JpZ2luKG1fbmF2aWdhdGlvbkFjdGlvbi0+
cmVxdWVzdCgpLCByZXNwb25zZSkpIHsKKyAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5h
bCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2V0IGNvb2tpZXMuCisgICAg
YXV0byBjb29raWVzID0gdG9Db29raWVWZWN0b3IoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJl
c3BvbnNlSGVhZGVyRmllbGRzOmh0dHBSZXNwb25zZS5hbGxIZWFkZXJGaWVsZHMgZm9yVVJMOnJl
c3BvbnNlLnVybCgpXSk7CisgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNv
bXBsZXRlSW50ZXJuYWwoV1RGTW92ZShyZXNwb25zZSksIGRhdGEpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5jb29raWVTdG9yZSgpLnNldENvb2tpZXMoY29va2llcywgW3dl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXNwb25zZSA9IFdURk1vdmUocmVzcG9uc2Up
LCBkYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHdlYWtUaGlzLT5jb21wbGV0ZUludGVybmFsKFdURk1vdmUocmVzcG9uc2UpLCBkYXRh
LmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwcmVz
ZW50Vmlld0NvbnRyb2xsZXIoU09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgdmlld0NvbnRy
b2xsZXIsIFVJQ2FsbGJhY2sgdWlDYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBT
dGF0ZTo6QWN0aXZlKTsKKyAgICAvLyBPbmx5IGV4cGVjdCBhdCBtb3N0IG9uZSBVSSBzZXNzaW9u
IGZvciB0aGUgd2hvbGUgYXV0aG9yaXphdGlvbiBzZXNzaW9uLgorICAgIGlmICghbV9wYWdlIHx8
IG1fdmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgdWlDYWxsYmFjayhOTywgYWRvcHROUyhbW05T
RXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlNPRXJyb3JEb21haW4gY29kZTprU09FcnJvckF1
dGhvcml6YXRpb25QcmVzZW50YXRpb25GYWlsZWQgdXNlckluZm86bmlsXSkuZ2V0KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV92aWV3Q29udHJvbGxlciA9IHZpZXdDb250cm9s
bGVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBBU1NFUlQoIW1fc2hlZXRXaW5kb3cpOworICAg
IG1fc2hlZXRXaW5kb3cgPSBbTlNXaW5kb3cgd2luZG93V2l0aENvbnRlbnRWaWV3Q29udHJvbGxl
cjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKKworICAgIEFTU0VSVCghbV9zaGVldFdpbmRvd1dp
bGxDbG9zZU9ic2VydmVyKTsKKyAgICBtX3NoZWV0V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIgPSBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpO
U1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9zaGVldFdpbmRvdy5nZXQoKSBx
dWV1ZTpuaWwgdXNpbmdCbG9jazpbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIChOU05v
dGlmaWNhdGlvbiAqKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHdlYWtUaGlzLT5kaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKKyAgICB9XTsK
KworICAgIE5TV2luZG93ICpwcmVzZW50aW5nV2luZG93ID0gbV9wYWdlLT5wbGF0Zm9ybVdpbmRv
dygpOworICAgIGlmICghcHJlc2VudGluZ1dpbmRvdykgeworICAgICAgICB1aUNhbGxiYWNrKE5P
LCBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46U09FcnJvckRvbWFpbiBj
b2RlOmtTT0Vycm9yQXV0aG9yaXphdGlvblByZXNlbnRhdGlvbkZhaWxlZCB1c2VySW5mbzpuaWxd
KS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgW3ByZXNlbnRpbmdXaW5kb3cg
YmVnaW5TaGVldDptX3NoZWV0V2luZG93LmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Cisj
ZWxpZiBQTEFURk9STShJT1MpCisgICAgVUlWaWV3Q29udHJvbGxlciAqcHJlc2VudGluZ1ZpZXdD
b250cm9sbGVyID0gbV9wYWdlLT51aUNsaWVudCgpLnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigp
OworICAgIGlmICghcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIHVpQ2FsbGJh
Y2soTk8sIGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpTT0Vycm9yRG9t
YWluIGNvZGU6a1NPRXJyb3JBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uRmFpbGVkIHVzZXJJbmZv
Om5pbF0pLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtwcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyOm1fdmlld0NvbnRyb2xsZXIuZ2V0
KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKKyNlbmRpZgorCisgICAgdWlDYWxsYmFj
ayhZRVMsIG5pbCk7Cit9CisKK3ZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlzbWlzc1Zp
ZXdDb250cm9sbGVyKCkKK3sKKyAgICBBU1NFUlQobV92aWV3Q29udHJvbGxlcik7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIEFTU0VSVChtX3NoZWV0V2luZG93ICYmIG1fc2hlZXRXaW5kb3dXaWxs
Q2xvc2VPYnNlcnZlcik7CisKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOm1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlci5nZXQoKV07
CisgICAgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyID0gbnVsbHB0cjsKKworICAgIFtb
bV9zaGVldFdpbmRvdyBzaGVldFBhcmVudF0gZW5kU2hlZXQ6bV9zaGVldFdpbmRvdy5nZXQoKV07
CisgICAgbV9zaGVldFdpbmRvdyA9IG51bGxwdHI7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAg
W1ttX3ZpZXdDb250cm9sbGVyIHByZXNlbnRpbmdWaWV3Q29udHJvbGxlcl0gZGlzbWlzc1ZpZXdD
b250cm9sbGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKKyNlbmRpZgorCisgICAgbV92
aWV3Q29udHJvbGxlciA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNl
c3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYjZjM2M5OTAyYzAwYjI1NDFiYzFkOTQzNGViMWY3ZTAyODlj
YjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVBQX1NTTykKKwor
I2luY2x1ZGUgIk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisKK25hbWVzcGFj
ZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBOYXZp
Z2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQ2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPjsKKworICAgIHN0YXRpYyBSZWY8U09B
dXRob3JpemF0aW9uU2Vzc2lvbj4gY3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0
aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBh
Z2VQcm94eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihz
b0F1dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN1YkZyYW1lU09B
dXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlv
bkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgQ2FsbGJhY2smJik7CisKKyAgICAvLyBTT0F1dGhv
cml6YXRpb25TZXNzaW9uCisgICAgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkgZmlu
YWw7CisgICAgdm9pZCBhYm9ydEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBjb21wbGV0ZUlu
dGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgTlNEYXRhICopIGZpbmFsOworCisg
ICAgLy8gTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24KKyAgICB2b2lkIGJlZm9yZVN0
YXJ0KCkgZmluYWw7CisKKyAgICB2b2lkIGxvYWREYXRhVG9GcmFtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBVUkwmKTsKKyAgICB2b2lkIHBvc3REaWRDYW5jZWxNZXNzYWdlVG9Q
YXJlbnQoRnVuY3Rpb248dm9pZCgpPiYmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0
aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjOWE4ZWZjMDQ1OTU0ZWQ4OTE1OWFiYWNiMDgyYWUz
NzM5ODJjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0w
LDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKworI2lmIEhBVkUoQVBQX1NTTykKKwor
I2ltcG9ydCAiQVBJRnJhbWVIYW5kbGUuaCIKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb25BY3Rpb24u
aCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgor
I2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IGNoYXIqIHNvQXV0aG9yaXphdGlvblBv
c3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCA9ICI8c2NyaXB0PnBhcmVudC5wb3N0TWVzc2FnZSgn
U09BdXRob3JpemF0aW9uRGlkU3RhcnQnLCAnKicpOzwvc2NyaXB0PiI7Citjb25zdCBjaGFyKiBz
b0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50ID0gInBhcmVudC5wb3N0
TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkQ2FuY2VsJywgJyonKTsiOworCitTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb246OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1
dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4m
JiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgOiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihzb0F1
dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIEluaXRpYXRpbmdB
Y3Rpb246OlN1YkZyYW1lLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKK3sKK30KKwordm9p
ZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJu
YWwoKQoreworICAgIC8vIEluc3RlYWQgb2YgaXNzdWluZyBhIGxvYWQsIHdlIGV4ZWN1dGUgdGhl
IEphdmFzY3JpcHQgZGlyZWN0bHkuIFRoaXMgcHJvdmlkZXMgdXMgYSBjYWxsYmFjaworICAgIC8v
IHRvIGVuc3VyZSB0aGUgZmluYWwgbG9hZCBpcyBpc3N1ZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMg
cG9zdGVkLgorICAgIHBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQoW3dlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8qIHBhZ2VQdHIgPSB3ZWFrVGhpcy0+cGFnZSgpOworICAgICAg
ICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gd2Vha1RoaXMtPm5hdmlnYXRpb25BY3Rpb24o
KTsKKyAgICAgICAgaWYgKCFwYWdlUHRyIHx8ICFuYXZpZ2F0aW9uQWN0aW9uUHRyKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRp
b25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmcmFt
ZSA9IHBhZ2VQdHItPnByb2Nlc3MoKS53ZWJGcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJh
bWVJRCgpKSkgeworICAgICAgICAgICAgICAgIHBhZ2VQdHItPnNldFNob3VsZFN1cHByZXNzU09B
dXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7CisgICAgICAgICAg
ICAgICAgLy8gSXNzdWUgYSBuZXcgbG9hZCB0byB0aGUgb3JpZ2luYWwgVVJMIGFzIHRoZSBvcmln
aW5hbCBsb2FkIGlzIGFib3J0ZWQgYmVmb3JlIHN0YXJ0LgorICAgICAgICAgICAgICAgIGZyYW1l
LT5sb2FkVVJMKG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3QoKS51cmwoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRl
cm5hbChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkK
K3sKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDApIHsKKyAgICAgICAg
ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGxvYWREYXRhVG9GcmFtZShJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSwgcmVzcG9uc2UudXJsKCkpOwor
fQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQoKQor
eworICAgIC8vIENhbmNlbGxlZCB0aGUgY3VycmVudCBsb2FkIGJlZm9yZSBsb2FkaW5nIHRoZSBk
YXRhIHRvIHBvc3QgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgdG8gdGhlIHBhcmVudCBmcmFtZS4K
KyAgICBjYWxsYmFjayh0cnVlKTsKKyAgICAvLyBDdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLCBzaG91bGQgc3RhcnQgYSBuZXcgbG9hZCBh
ZnRlci4KKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5wYWdlKCkg
fHwgIXdlYWtUaGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIC8vIEluc3RlYWQgb2YgZXhlY3V0aW5nIHRoZSBKYXZhc2NyaXB0IGRpcmVjdGx5LCBp
c3N1aW5nIGEgbG9hZC4gVGhpcyB3aWxsIHNldCB0aGUgb3JpZ2luIHByb3Blcmx5LgorICAgICAg
ICB3ZWFrVGhpcy0+bG9hZERhdGFUb0ZyYW1lKElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb0F1dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdl
VG9QYXJlbnQpLCBzdHJsZW4oc29BdXRob3JpemF0aW9uUG9zdERpZFN0YXJ0TWVzc2FnZVRvUGFy
ZW50KSksIHdlYWtUaGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpsb2FkRGF0
YVRvRnJhbWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBVUkwmIGJhc2VV
UkwpCit7CisgICAgYXV0byogcGFnZVB0ciA9IHBhZ2UoKTsKKyAgICBhdXRvKiBuYXZpZ2F0aW9u
QWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOworICAgIGlmICghcGFnZVB0ciB8fCAhbmF2
aWdhdGlvbkFjdGlvblB0cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHRhcmdl
dEZyYW1lID0gbmF2aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkgeworICAgICAgICBp
ZiAoYXV0byogZnJhbWUgPSBwYWdlUHRyLT5wcm9jZXNzKCkud2ViRnJhbWUodGFyZ2V0RnJhbWUt
PmhhbmRsZSgpLmZyYW1lSUQoKSkpIHsKKyAgICAgICAgICAgIHBhZ2VQdHItPnNldFNob3VsZFN1
cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7Cisg
ICAgICAgICAgICBmcmFtZS0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCIsICJVVEYtOCIsIGJh
c2VVUkwpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6cG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudChGdW5jdGlvbjx2b2lkKCk+
JiYgY2FsbGJhY2spCit7CisgICAgYXV0byogcGFnZVB0ciA9IHBhZ2UoKTsKKyAgICBhdXRvKiBu
YXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOworICAgIGlmICghcGFnZVB0
ciB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1
dG8qIHRhcmdldEZyYW1lID0gbmF2aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkgewor
ICAgICAgICBwYWdlUHRyLT5ydW5KYXZhU2NyaXB0SW5GcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxl
KCkuZnJhbWVJRCgpLCBzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50
LCBmYWxzZSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChBUEk6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSosIGJvb2wsIGNvbnN0IEV4Y2VwdGlvbkRldGFpbHMmLCBTY3JpcHRWYWx1ZUNh
bGxiYWNrOjpFcnJvcikgeworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzFkY2M5N2Mx
NjUyYzZiNTRlNDhiNzM0ZjE3Mjc5MDAyNzJkYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dLU09BdXRob3JpemF0aW9u
RGVsZWdhdGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgorI2ltcG9ydCA8d3RmL1JlZkNv
dW50ZWQuaD4KKworI2lmIEhBVkUoQVBQX1NTTykKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBTT0F1dGhvcml6YXRpb25TZXNzaW9uOworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAaW50
ZXJmYWNlIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8U09BdXRob3JpemF0
aW9uRGVsZWdhdGU+IHsKK0BwYWNrYWdlCitSZWZQdHI8V2ViS2l0OjpTT0F1dGhvcml6YXRpb25T
ZXNzaW9uPiBfc2Vzc2lvbjsKK30KKworLSAodm9pZClzZXRTZXNzaW9uOihSZWZQdHI8V2ViS2l0
OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uPiYmKXNlc3Npb247CisKK0BlbmQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24v
V0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwNTE0ZjA0OGU3ZTdmMzBhYTQzNDc0ZTgzNmI2MDUzY2M1OWRiYWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tT
T0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5o
IgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJTT0F1dGhvcml6YXRpb25TZXNzaW9u
LmgiCisjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorCitAaW1wbGVtZW50YXRpb24gV0tTT0F1dGhv
cml6YXRpb25EZWxlZ2F0ZQorCistICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlv
biAqKWF1dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOihTT0F1dGhvcml6YXRpb25W
aWV3Q29udHJvbGxlcil2aWV3Q29udHJvbGxlciB3aXRoQ29tcGxldGlvbjoodm9pZCAoXikoQk9P
TCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcikpY29tcGxldGlvbgoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSAmJiBjb21wbGV0aW9uKTsKKyAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjb21wbGV0aW9uKE5PLCBuaWwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIF9zZXNzaW9uLT5wcmVzZW50Vmlld0NvbnRyb2xs
ZXIodmlld0NvbnRyb2xsZXIsIGNvbXBsZXRpb24pOworfQorCistICh2b2lkKWF1dGhvcml6YXRp
b25EaWROb3RIYW5kbGU6KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24KK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIExPR19FUlJPUigiQ291bGQgbm90IGhhbmRs
ZSBBcHBTU08uIik7CisgICAgaWYgKCFfc2Vzc2lvbikgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfc2Vzc2lvbi0+ZmFsbEJhY2tU
b1dlYlBhdGgoKTsKK30KKworLSAodm9pZClhdXRob3JpemF0aW9uRGlkQ2FuY2VsOihTT0F1dGhv
cml6YXRpb24gKilhdXRob3JpemF0aW9uCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIF9zZXNzaW9uLT5hYm9ydCgpOworfQorCistICh2
b2lkKWF1dGhvcml6YXRpb25EaWRDb21wbGV0ZTooU09BdXRob3JpemF0aW9uICopYXV0aG9yaXph
dGlvbgoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTE9HX0VSUk9SKCJD
b21wbGV0ZSBBcHBTU08gd2l0aG91dCBhbnkgZGF0YS4iKTsKKyAgICBpZiAoIV9zZXNzaW9uKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2ViUGF0aCgpOworfQorCistICh2b2lkKWF1dGhvcml6
YXRpb246KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRU
UEF1dGhvcml6YXRpb25IZWFkZXJzOihOU0RpY3Rpb25hcnkgKilodHRwQXV0aG9yaXphdGlvbkhl
YWRlcnMKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIExPR19FUlJPUigi
Q29tcGxldGUgQXBwU1NPIHdpdGggdW5leHBlY3RlZCBjYWxsYmFjay4iKTsKKyAgICBpZiAoIV9z
ZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2ViUGF0aCgpOworfQorCistICh2b2lk
KWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxl
dGVXaXRoSFRUUFJlc3BvbnNlOihOU0hUVFBVUkxSZXNwb25zZSAqKWh0dHBSZXNwb25zZSBodHRw
Qm9keTooTlNEYXRhICopaHR0cEJvZHkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX3Nlc3Npb24tPmNvbXBsZXRlKGh0dHBSZXNwb25z
ZSwgaHR0cEJvZHkpOworfQorCistICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlv
biAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY29tcGxldGUgQXBwU1NPOiAlZCIsIGVycm9yLmNvZGUpOworICAgIGlmICghX3Nlc3Npb24p
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgX3Nlc3Npb24tPmZhbGxCYWNrVG9XZWJQYXRoKCk7Cit9CisKKy0gKHZvaWQpc2V0U2Vz
c2lvbjooUmVmUHRyPFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbj4mJilzZXNzaW9uCit7
CisgICAgX3Nlc3Npb24gPSBXVEZNb3ZlKHNlc3Npb24pOworICAgIGlmIChfc2Vzc2lvbikKKyAg
ICAgICAgX3Nlc3Npb24tPnNob3VsZFN0YXJ0KCk7Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAzMDNlNzRmYjczYWY4YWJm
YWZkYTBhNGIzYjA3MjJhYjNjNzcxMTk5Li4xNTk4MmVmMmM4YTg3MGRiYTg4NjBkMTFjMjUzYTMw
OWU4NjU4ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAg
LTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2luY2x1
ZGUgIlByaW50SW5mby5oIgogI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5j
bHVkZSAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTYWZlQnJvd3Np
bmdXYXJuaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVTaGVldENhbGxiYWNrSUQuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmgiCkBAIC00NzMwLDggKzQ3MzEsOSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihSZWY8V2ViUHJv
Y2Vzc1Byb3h5PiYmIHByb2NlcwogCiAgICAgICAgIGF1dG8gbmF2aWdhdGlvbkFjdGlvbiA9IEFQ
STo6TmF2aWdhdGlvbkFjdGlvbjo6Y3JlYXRlKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbkRhdGEp
LCBzb3VyY2VGcmFtZUluZm8uZ2V0KCksIGRlc3RpbmF0aW9uRnJhbWVJbmZvLnB0cigpLCBXVEY6
Om51bGxvcHQsIFdURk1vdmUocmVxdWVzdCksIG9yaWdpbmFsUmVxdWVzdC51cmwoKSwgc2hvdWxk
T3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVzZXJJbml0aWF0ZWRBY3Rpdml0eSksIG1haW5GcmFtZU5h
dmlnYXRpb24pOwogCi0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKLVdFQlBBR0VQUk9YWV9MT0FE
T1BUSU1JWkVSX0FERElUSU9OU18zCisjaWYgSEFWRShBUFBfU1NPKQorICAgICAgICBpZiAobV9z
aG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
biB8fCBtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5BbGxOYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24pCisgICAgICAgICAgICBuYXZpZ2F0aW9uQWN0aW9uLT51bnNldFNob3VsZFBlcmZv
cm1TT0F1dGhvcml6YXRpb24oKTsKICNlbmRpZgogCiAgICAgICAgIG1fbmF2aWdhdGlvbkNsaWVu
dC0+ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbigqdGhpcywgV1RGTW92ZShuYXZpZ2F0
aW9uQWN0aW9uKSwgV1RGTW92ZShsaXN0ZW5lciksIHByb2Nlc3MtPnRyYW5zZm9ybUhhbmRsZXNU
b09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKQEAgLTQ3MzksOCArNDc0MSw4IEBA
IFdFQlBBR0VQUk9YWV9MT0FET1BUSU1JWkVSX0FERElUSU9OU18zCiAKICAgICBtX3Nob3VsZFN1
cHByZXNzQXBwTGlua3NJbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gPSBmYWxzZTsKIAot
I2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1XRUJQQUdFUFJPWFlfTE9BRE9QVElNSVpFUl9BRERJ
VElPTlNfNAorI2lmIEhBVkUoQVBQX1NTTykKKyAgICBtX3Nob3VsZFN1cHByZXNzU09BdXRob3Jp
emF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uID0gZmFsc2U7CiAjZW5kaWYKIH0K
IApAQCAtNTAyOSwxMCArNTAzMSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkVXBkYXRlSGlz
dG9yeVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLAogCiB1c2lu
ZyBOZXdQYWdlQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJQYWdl
UHJveHk+JiYpPjsKIHVzaW5nIFVJQ2xpZW50Q2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKFJlZjxB
UEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIE5ld1BhZ2VDYWxsYmFjayYmKT47Ci1zdGF0aWMgdm9p
ZCB0cnlPcHRpbWl6aW5nTG9hZChSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRp
b25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3UGFnZUNh
bGxiYWNrLCBVSUNsaWVudENhbGxiYWNrJiYgdWlDbGllbnRDYWxsYmFjaykKK3N0YXRpYyB2b2lk
IHRyeVNPQXV0aG9yaXphdGlvbihSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRp
b25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3UGFnZUNh
bGxiYWNrLCBVSUNsaWVudENhbGxiYWNrJiYgdWlDbGllbnRDYWxsYmFjaykKIHsKLSNpZiBIQVZF
KExPQURfT1BUSU1JWkVSKQotV0VCUEFHRVBST1hZX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzYK
KyNpZiBIQVZFKEFQUF9TU08pCisgICAgcGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkuc29BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3IoKS50cnlBdXRob3JpemUoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9u
KSwgcGFnZSwgV1RGTW92ZShuZXdQYWdlQ2FsbGJhY2spLCBXVEZNb3ZlKHVpQ2xpZW50Q2FsbGJh
Y2spKTsKICNlbHNlCiAgICAgQVNTRVJUX1VOVVNFRChwYWdlLCBwYWdlLnBhZ2VJRCgpKTsKICAg
ICB1aUNsaWVudENhbGxiYWNrKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIFdURk1vdmUobmV3
UGFnZUNhbGxiYWNrKSk7CkBAIC01MDU2LDggKzUwNTgsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
Y3JlYXRlTmV3UGFnZShjb25zdCBGcmFtZUluZm9EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lSW5mb0Rh
dGEsCiAKICAgICAgICAgbmV3UGFnZS0+bV9zaG91bGRTdXBwcmVzc0FwcExpbmtzSW5OZXh0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uID0gaG9zdHNBcmVFcXVhbChVUkwoeyB9LCBtYWluRnJhbWVV
UkwpLCByZXF1ZXN0LnVybCgpKTsKIAotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1XRUJQQUdF
UFJPWFlfTE9BRE9QVElNSVpFUl9BRERJVElPTlNfNQorI2lmIEhBVkUoQVBQX1NTTykKKyAgICAg
ICAgbmV3UGFnZS0+bV9zaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbiA9IHRydWU7CiAjZW5kaWYKICAgICB9OwogCkBAIC01MDY1LDcgKzUw
NjcsNyBAQCBXRUJQQUdFUFJPWFlfTE9BRE9QVElNSVpFUl9BRERJVElPTlNfNQogICAgIGJvb2wg
c2hvdWxkT3BlbkFwcExpbmtzID0gIWhvc3RzQXJlRXF1YWwob3JpZ2luYXRpbmdGcmFtZUluZm8t
PnJlcXVlc3QoKS51cmwoKSwgcmVxdWVzdC51cmwoKSk7CiAgICAgYXV0byBuYXZpZ2F0aW9uQWN0
aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUoV1RGTW92ZShuYXZpZ2F0aW9uQWN0
aW9uRGF0YSksIG9yaWdpbmF0aW5nRnJhbWVJbmZvLnB0cigpLCBudWxscHRyLCBXVEY6Om51bGxv
cHQsIFdURk1vdmUocmVxdWVzdCksIFVSTCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUo
dXNlckluaXRpYXRlZEFjdGl2aXR5KSk7CiAKLSAgICB0cnlPcHRpbWl6aW5nTG9hZChXVEZNb3Zl
KG5hdmlnYXRpb25BY3Rpb24pLCAqdGhpcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdpbmRvd0ZlYXR1cmVzID0gV1RG
TW92ZSh3aW5kb3dGZWF0dXJlcyldIChSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmln
YXRpb25BY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpIG11dGFibGUgeworICAgIHRyeVNPQXV0aG9yaXphdGlv
bihXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCAqdGhpcywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdpbmRvd0ZlYXR1
cmVzID0gV1RGTW92ZSh3aW5kb3dGZWF0dXJlcyldIChSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9u
PiYmIG5hdmlnYXRpb25BY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYlBh
Z2VQcm94eT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIG11dGFibGUgewogICAgICAgICBtX3Vp
Q2xpZW50LT5jcmVhdGVOZXdQYWdlKCp0aGlzLCBXVEZNb3ZlKHdpbmRvd0ZlYXR1cmVzKSwgV1RG
TW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBmNTRmNjdm
ZTQ4NmVmMTg5OWIxMzI4NzU1Y2RhMDc4OGYxY2RiM2RhLi42ODFhZGQ4NWQ2MGE2Nzk0YTZlZDM4
YzA1YzQzMmRlZTVhZmFkOWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtMTQxLDEwICsxNDEsNiBAQCBPQkpDX0NMQVNTIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5
OwogI2luY2x1ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oPgogI2Vu
ZGlmCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0
aW9ucy9XZWJQYWdlUHJveHlBZGRpdGlvbnMuaD4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKE1FRElB
X1NFU1NJT04pCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBNZWRpYVNlc3Npb25NZXRhZGF0
YTsKQEAgLTE1NDksOCArMTU0NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU9ic2VydmVy
KFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlciYpOwogICAgIHZvaWQgd2ViVmlld0RpZE1v
dmVUb1dpbmRvdygpOwogCi0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKLVdFQlBBR0VQUk9YWV9M
T0FET1BUSU1JWkVSX0FERElUSU9OU18xCisjaWYgSEFWRShBUFBfU1NPKQorICAgIHZvaWQgc2V0
U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bigpIHsgbV9zaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluQWxsTmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6
YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKSB7IG1fc2hvdWxkU3VwcHJlc3NT
T0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gPSB0cnVlOyB9CiAj
ZW5kaWYKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC0yMjg4LDggKzIyODUsOSBAQCBwcml2
YXRlOgogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2RlY2lkZVBvbGljeUZvclJlc3Bv
bnNlUmVxdWVzdDsKICAgICBib29sIG1fc2hvdWxkU3VwcHJlc3NBcHBMaW5rc0luTmV4dE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbiB7IGZhbHNlIH07CiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVS
KQotV0VCUEFHRVBST1hZX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzIKKyNpZiBIQVZFKEFQUF9T
U08pCisgICAgYm9vbCBtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvdWxkU3VwcHJlc3NT
T0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7IGZhbHNlIH07CiAj
ZW5kaWYKIAogICAgIERlcXVlPE5hdGl2ZVdlYk1vdXNlRXZlbnQ+IG1fbW91c2VFdmVudFF1ZXVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAppbmRleCBjMjhhNjQwZjc3NzNkNDBlMjA4OTA5NGRiNjhjYTEzYmE3
NmUzZjUyLi5jMjFkZmI3Mjc1NDMwODkwOGJhZTdiYmJhMzIzMTRlZWFmMWRkNGM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRT
dG9yYWdlLmgiCiAjaW5jbHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNv
b3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNo
ZS5oIgpAQCAtMTAzLDEwICsxMDQsMTEgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFT
dG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIKICAgICAs
IG1fYXV0aGVudGljYXRvck1hbmFnZXIobWFrZVVuaXF1ZVJlZjxBdXRoZW50aWNhdG9yTWFuYWdl
cj4oKSkKICNlbmRpZgogICAgICwgbV9jbGllbnQobWFrZVVuaXF1ZVJlZjxXZWJzaXRlRGF0YVN0
b3JlQ2xpZW50PigpKQotewotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1XRUJTSVRFREFUQVNU
T1JFX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzIKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgLCBt
X3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKG1ha2VVbmlxdWVSZWY8U09BdXRob3JpemF0aW9u
Q29vcmRpbmF0b3I+KCkpCiAjZW5kaWYKKworewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVn
ZXMoYWxsUHJpdmlsZWdlcygpKTsKICAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
OwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpAQCAtMTI0LDEwICsxMjYsMTAgQEAgV2Vic2l0
ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAg
ICAgLCBtX2F1dGhlbnRpY2F0b3JNYW5hZ2VyKG1ha2VVbmlxdWVSZWY8QXV0aGVudGljYXRvck1h
bmFnZXI+KCkpCiAjZW5kaWYKICAgICAsIG1fY2xpZW50KG1ha2VVbmlxdWVSZWY8V2Vic2l0ZURh
dGFTdG9yZUNsaWVudD4oKSkKLXsKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VCU0lURURB
VEFTVE9SRV9MT0FET1BUSU1JWkVSX0FERElUSU9OU18yCisjaWYgSEFWRShBUFBfU1NPKQorICAg
ICwgbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcihtYWtlVW5pcXVlUmVmPFNPQXV0aG9yaXph
dGlvbkNvb3JkaW5hdG9yPigpKQogI2VuZGlmCit7CiAgICAgbWF5YmVSZWdpc3RlcldpdGhTZXNz
aW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4
IDgyMmMzZmM3NjM3ZDdjNWViMDAzYzY5Y2U5NDc0NWJkMzgyNTkzZjIuLjBiMjM1MDE2NTBmZGNj
YTczMTZhYzViNWZiZjQ1NDM1MTE2YjQxODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTU2LDEwICs1Niw2
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJsUHJveHlTZXR0aW5ncy5oPgogI2VuZGlmCiAKLSNp
ZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XZWJz
aXRlRGF0YVN0b3JlQWRkaXRpb25zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEFQSSB7CiBjbGFz
cyBIVFRQQ29va2llU3RvcmU7CiB9CkBAIC03NCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwog
Y2xhc3MgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBTT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvcjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogY2xh
c3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwpAQCAtMjU1LDggKzI1Miw4IEBAIHB1
YmxpYzoKICAgICBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIm
IGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1f
ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKIAot
I2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1XRUJTSVRFREFUQVNUT1JFX0xPQURPUFRJTUlaRVJf
QURESVRJT05TXzEKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgU09BdXRob3JpemF0aW9uQ29vcmRp
bmF0b3ImIHNvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV9zb0F1dGhvcml6
YXRpb25Db29yZGluYXRvci5nZXQoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0zMzYsNiAr
MzMzLDEwIEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+
IG1fY2xpZW50OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0
b3JlOworCisjaWYgSEFWRShBUFBfU1NPKQorICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvcj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKKyNlbmRpZgogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNTg3OGExNDA5NzIzNDIwOTU5NTJkOTUwYzkzM2EwODMwYTBlMzRjOS4uYTk2YjdkN2FhNWFm
NjA4ZGQ2ZTIxZGZjMjYxNDg4ODYwNDkwYTE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU5LDYgKzEwNTksMTQgQEAKIAkJNTdE
Q0VEQzcyMTRGMTgzMDAwMTZCODQ3IC8qIE1vY2tMb2NhbENvbm5lY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFREM1MjE0RjE4MzAwMDE2
Qjg0NyAvKiBNb2NrTG9jYWxDb25uZWN0aW9uLmggKi87IH07CiAJCTU3RENFRENCMjE0RjRFNDIw
MDE2Qjg0NyAvKiBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFREM5MjE0RjRFNDIwMDE2Qjg0NyAvKiBN
b2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCAqLzsgfTsKIAkJNTdFQjJFM0EyMUUxOTgzRTAwQjg5
Q0RGIC8qIFUyZkhpZEF1dGhlbnRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRo
ZW50aWNhdG9yLmggKi87IH07CisJCTU3RkQzMTgwMjJCMzUxNTgwMDhEMEU4QiAvKiBOYXZpZ2F0
aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzgyMkIzNTE0OTAwOEQwRThCIC8qIE5hdmlnYXRpb25T
T0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi87IH07CisJCTU3RkQzMTgxMjJCMzUxNUIwMDhEMEU4
QiAvKiBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTcwMjJCMzUxNDgwMDhEMEU4QiAvKiBQb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLzsgfTsKKwkJNTdGRDMxODIyMkIzNTE1RTAwOEQw
RThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzQyMkIzNTE0OTAwOEQwRThCIC8q
IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovOyB9OworCQk1N0ZEMzE4MzIyQjM1
MTYyMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4
QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovOyB9OworCQk1N0ZEMzE4NDIyQjM1
MTY1MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTczMjJCMzUxNDgwMDhEMEU4
QiAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oICovOyB9OworCQk1N0ZEMzE4NTIyQjM1
MTY5MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxN0MyMkIzNTE0QTAwOEQwRThCIC8q
IFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLzsgfTsKKwkJNTdGRDMxODYyMkIzNTE2QzAwOEQw
RThCIC8qIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxN0QyMkIzNTE0QTAwOEQwRThCIC8q
IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovOyB9OworCQk1N0ZEMzE4NzIyQjM1
MTcwMDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzEyMkIzNTE0ODAwOEQwRThC
IC8qIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaCAqLzsgfTsKIAkJNTg3NzQzQTYyMUMzMEJC
RTAwQUU5MDg0IC8qIEhUVFBTVXBncmFkZUxpc3QuZGIgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4Nzc0M0E0MjFDMzBBRDgwMEFFOTA4NCAvKiBIVFRQ
U1VwZ3JhZGVMaXN0LmRiICovOyB9OwogCQk1OEU5NzdERjIxQzQ5QTAwMDA1RDkyQTYgLyogTmV0
d29ya0hUVFBTVXBncmFkZUNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU4RTk3N0REMjFDNDlBMDAwMDVEOTJBNiAvKiBOZXR3b3JrSFRUUFNV
cGdyYWRlQ2hlY2tlci5oICovOyB9OwogCQk1QzBCMTc3ODFFN0M4ODBFMDBFOTEyM0MgLyogTmV0
d29ya1NvY2tldFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzBCMTc3NDFFN0M4NzlDMDBFOTEyM0MgLyogTmV0
d29ya1NvY2tldFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0zNDk5LDYgKzM1
MDcsMjIgQEAKIAkJNTdEQ0VEQ0QyMTRGNTE2ODAwMTZCODQ3IC8qIE1vY2tBdXRoZW50aWNhdG9y
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2NrQXV0
aGVudGljYXRvck1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0VC
MkUzODIxRTE5ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVMmZIaWRBdXRoZW50aWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3RUIyRTM5MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFUyZkhpZEF1dGhlbnRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1N0ZEMzE3MDIyQjM1MTQ4MDA4RDBFOEIgLyogUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFVwU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZE
MzE3MTIyQjM1MTQ4MDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4QiAv
KiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1N0ZEMzE3MzIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uTlNV
UkxFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU09BdXRob3JpemF0
aW9uTlNVUkxFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzQy
MkIzNTE0OTAwOEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Np
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzUyMkIzNTE0OTAwOEQw
RThCIC8qIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzYyMkIzNTE0OTAwOEQwRThCIC8qIFNP
QXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU3RkQzMTc3MjJCMzUxNDkwMDhEMEU4QiAvKiBTdWJGcmFtZVNPQXV0
aG9yaXphdGlvblNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU3RkQzMTc4MjJCMzUxNDkwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZp
Z2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1N0ZEMzE3OTIyQjM1MTQ5MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTT0F1dGhvcml6
YXRpb25Db29yZGluYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMx
N0EyMkIzNTE0QTAwOEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlZGlyZWN0U09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxN0Iy
MkIzNTE0QTAwOEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF2aWdhdGlvblNPQXV0aG9y
aXphdGlvblNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTdD
MjJCMzUxNEEwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxN0QyMkIzNTE0QTAwOEQwRThCIC8qIFN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTdGRDMxN0UyMkIzNTE0QTAwOEQwRThCIC8qIFdLU09BdXRob3JpemF0aW9uRGVs
ZWdhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1NPQXV0
aG9yaXphdGlvbkRlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZE
MzE3RjIyQjM1MTRBMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvblNlc3Npb24u
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4Nzc0M0E0MjFDMzBBRDgwMEFFOTA4
NCAvKiBIVFRQU1VwZ3JhZGVMaXN0LmRiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IEhUVFBTVXBncmFkZUxpc3QuZGI7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL0hUVFBTVXBncmFkZUxpc3QuZGI7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTU4RTk3N0RDMjFDNDk5RkUwMDVEOTJBNiAvKiBO
ZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU4RTk3N0REMjFDNDlBMDAwMDVEOTJBNiAvKiBOZXR3b3JrSFRUUFNV
cGdyYWRlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3Jr
SFRUUFNVcGdyYWRlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ0
NCw2ICs1NDY4LDcgQEAKIAkJMUFCQzNERjIxODk5RTQxNTAwNEYwNjI2IC8qIENvY29hICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1N0ZEMzE2QjIyQjMz
NjdFMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uICovLAogCQkJCTk5QzgxRDU1MUMyMERGQkUw
MDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50LmggKi8sCiAJCQkJOTlDODFENTYxQzIwREZCRTAw
NUM0QzgyIC8qIEF1dG9tYXRpb25DbGllbnQubW0gKi8sCiAJCQkJOTkwRDI4QjcxQzY1MzlBMDAw
OTg2OTc3IC8qIEF1dG9tYXRpb25TZXNzaW9uQ2xpZW50LmggKi8sCkBAIC03MDA0LDYgKzcwMjks
MjkgQEAKIAkJCXBhdGggPSBNb2NrOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJNTdGRDMxNkIyMkIzMzY3RTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbiAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTdGRDMxNzgyMkIzNTE0OTAw
OEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCisJCQkJNTdG
RDMxN0IyMkIzNTE0QTAwOEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9u
Lm1tICovLAorCQkJCTU3RkQzMTcwMjJCMzUxNDgwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXph
dGlvblNlc3Npb24uaCAqLywKKwkJCQk1N0ZEMzE3NTIyQjM1MTQ5MDA4RDBFOEIgLyogUG9wVXBT
T0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovLAorCQkJCTU3RkQzMTc0MjJCMzUxNDkwMDhEMEU4
QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLywKKwkJCQk1N0ZEMzE3QTIy
QjM1MTRBMDA4RDBFOEIgLyogUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovLAor
CQkJCTU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
ci5oICovLAorCQkJCTU3RkQzMTc5MjJCMzUxNDkwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25D
b29yZGluYXRvci5tbSAqLywKKwkJCQk1N0ZEMzE3MzIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRo
b3JpemF0aW9uTlNVUkxFeHRyYXMuaCAqLywKKwkJCQk1N0ZEMzE3NjIyQjM1MTQ5MDA4RDBFOEIg
LyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMubW0gKi8sCisJCQkJNTdGRDMxN0MyMkIzNTE0
QTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLywKKwkJCQk1N0ZEMzE3RjIy
QjM1MTRBMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLywKKwkJCQk1N0ZE
MzE3RDIyQjM1MTRBMDA4RDBFOEIgLyogU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgg
Ki8sCisJCQkJNTdGRDMxNzcyMkIzNTE0OTAwOEQwRThCIC8qIFN1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbi5tbSAqLywKKwkJCQk1N0ZEMzE3MTIyQjM1MTQ4MDA4RDBFOEIgLyogV0tTT0F1
dGhvcml6YXRpb25EZWxlZ2F0ZS5oICovLAorCQkJCTU3RkQzMTdFMjJCMzUxNEEwMDhEMEU4QiAv
KiBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBTT0F1
dGhvcml6YXRpb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1QzE0MjZG
MTFDMjNGODE3MDBENDExODMgLyogRG93bmxvYWRzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTkzOTgsNiArOTQ0Niw3IEBACiAJCQkJMkQ1MDM2NkIxQkNE
RTE3OTAwRTIwQkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjYzMTcyQ0YxOEI0Njk0OTAwNjVCOUMzIC8qIE5hdGl2ZVdlYlRvdWNoRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRENCODZCMTg5ODMxQjMwMDIyRUU1QSAvKiBOYXZpZ2F0aW9uQWN0
aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTdGRDMxODAyMkIzNTE1ODAwOEQwRThCIC8q
IE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUJDM0RGNjE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlvblN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTZGQkEyQTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCRDI4MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2Fw
ZVBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTE1LDYgKzk1NjQsNyBAQAogCQkJCTFBNEE5
RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRDYyMjc4MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE2RkI3QUYxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuaCBp
biBIZWFkZXJzICovLAorCQkJCTU3RkQzMTgxMjJCMzUxNUIwMDhEMEU4QiAvKiBQb3BVcFNPQXV0
aG9yaXphdGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQTBFRDM1MUY3NDdDQ0Yw
MDMyOTlFQiAvKiBQcmVjb25uZWN0VGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUFCMTQ1RTYy
MjNGOTMxMjAwRTQ4OUQ4IC8qIFByZWZldGNoQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
Q0MxQjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAt
OTUyNiw2ICs5NTc2LDcgQEAKIAkJCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vz
c1Rocm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFFNjg4NzAxRjZFMkJBQjAw
NzAwNkE2IC8qIFF1YXJhbnRpbmVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMThBOUVGMTkw
N0FENkYwMEY3QzkyQiAvKiBRdWlja0xvb2tEb2N1bWVudERhdGEuaCBpbiBIZWFkZXJzICovLAor
CQkJCTU3RkQzMTgyMjJCMzUxNUUwMDhEMEU4QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNl
c3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRERjczMTUxOEU5
NTA2MDAwNEY1QTY2IC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFCMTZBRUExNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtOTU4OCw2ICs5NjM5LDkgQEAKIAkJCQk5OTUy
MjZENjIwN0QxODQ2MDBGNzg0MjAgLyogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyREFGMDZENjE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0
aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFNjk0M0UxOEJEMkE2ODAwNUMx
NUU1IC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTdGRDMxODMyMkIzNTE2MjAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1N0ZEMzE4NDIyQjM1MTY1MDA4RDBFOEIgLyog
U09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQzMTg1
MjJCMzUxNjkwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MjcyQjI4QjE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxNEJERUQzMTZDOThFREQwMEU0RTI1RSAvKiBTdGF0aXN0aWNzUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EzRkVDQTIyMUY3QzA5NzAwRjI2N0NEIC8qIFN0
b3JhZ2VBY2Nlc3NTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTU5OCw2ICs5NjUyLDcgQEAK
IAkJCQkxQUIzMUE5NzE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENkMxODMyN0MxMjAwMDg3REQ3IC8qIFN0cmluZ1Jl
ZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjk2QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8q
IFN0cmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTdGRDMxODYyMkIzNTE2QzAw
OEQwRThCIC8qIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDQ1OTk4NDIyMjgzM0U4NzAwRTYxMzczIC8qIFN5bnRoZXRpY0VkaXRpbmdDb21tYW5k
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1NzEzNUYyMDQwQTlCMjAwODRGOUNGIC8qIFN5
c3RlbVByZXZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTFBMEJENjFBNDhF
NkM2MDA1NEVGNzQgLyogVENDU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTU2LDYgKzEwMjEx
LDcgQEAKIAkJCQkxREIwMTk0MzIxMUNGMDAyMDA5RkIzRTggLyogV0tTaGFyZVNoZWV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTNFNDYyRDFBRDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2Vy
dmljZVBpY2tlckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y1NDlCNDFFMzE3NEI3
MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU3RkQzMTg3MjJCMzUxNzAwMDhEMEU4QiAvKiBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QTc4RkYzMjIyNDE5MTk2MDA5NjQ4M0UgLyogV0tTdG9yYWdl
QWNjZXNzQWxlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NjA2MTI0RkYwMjcwMDY4RjIw
QSAvKiBXS1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc2MUExMjRGRjAzNzAwNjhG
MjBBIC8qIFdLU3RyaW5nQ0YuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KaW5kZXggMzdlYjRhZmFlZjYxMjEy
ZWJmM2MyZTMzOTBmZGM1MWJkODEwYjlmOC4uYmIxNmY4YTE5NTJkMzU3NGIyZmQzY2U5NTJlMWJl
Y2RlMGRkNGU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dl
YlByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2Vi
UHJvY2Vzc0NvY29hLm1tCkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlv
blAKICAgICByZWdpc3RlcldpdGhTdGF0ZUR1bXBlcigpOwogI2VuZGlmCiAKLSNpZiBIQVZFKExP
QURfT1BUSU1JWkVSKQorI2lmIEhBVkUoQVBQX1NTTykKICAgICBbTlNVUkxTZXNzaW9uIF9kaXNh
YmxlQXBwU1NPXTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGUzYWE0ZTkzNzliNzBiNzRiNzI2Y2E5OTMwY2YzNTRhYWVmOWI3
Y2UuLjJkN2JkMjgwOTFkNjQ0ZmNhZDYzNGU0NzQzYzlhMzZmOTJlOGNmNTIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAor
MjAxOS0wNi0xNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgU09BdXRob3JpemF0aW9uIGZyb20gV2ViS2l0QWRkaXRpb25zIHRvIFdlYktpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4ODc0CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS80NzU3MzQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVzIGFsbCBTT0F1dGhvcml6YXRp
b24gdGVzdHMgZnJvbSBXZWJLaXRBZGRpdGlvbnMgdG8gV2ViS2l0LgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9UZXN0V2ViS2l0QVBJLnhjY29uZmlnOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9y
aXphdGlvbi5tbTogQWRkZWQuCisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0
aW9uRGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAoLVtUZXN0U09BdXRob3JpemF0aW9uTmF2aWdh
dGlvbkRlbGVnYXRlIHdlYlZpZXc6ZGlkRmluaXNoTmF2aWdhdGlvbjpdKToKKyAgICAgICAgKC1b
VGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6Y3JlYXRlV2ViVmlld1dp
dGhDb25maWd1cmF0aW9uOmZvck5hdmlnYXRpb25BY3Rpb246d2luZG93RmVhdHVyZXM6XSk6Cisg
ICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciB2aWV3RGlkQXBwZWFy
XSk6CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciB2aWV3RGlk
RGlzYXBwZWFyXSk6CisgICAgICAgIChvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTCk6CisgICAgICAgIChvdmVycmlkZVNldERlbGVnYXRlKToKKyAgICAgICAgKG92ZXJyaWRl
QmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCk6CisgICAgICAgIChvdmVycmlkZUNhbmNlbEF1dGhv
cml6YXRpb24pOgorICAgICAgICAob3ZlcnJpZGVBZGRPYnNlcnZlckZvck5hbWUpOgorICAgICAg
ICAob3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKToKKyAgICAgICAgKHJlc2V0U3Rh
dGUpOgorICAgICAgICAoY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyk6CisgICAgICAg
IChnZW5lcmF0ZUh0bWwpOgorICAgICAgICAoY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOS0wNi0xNCAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgaW1wb3J0LXczYy10ZXN0cyBzaG91bGQg
cmVzcGVjdCBXRUJLSVRfT1VUUFVURElSCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L0NvbmZpZ3VyYXRpb25zL1Rlc3RXZWJLaXRBUEkueGNjb25maWcgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0NvbmZpZ3VyYXRpb25zL1Rlc3RXZWJLaXRBUEkueGNjb25maWcKaW5kZXggYzZkZmIzMzNh
NWY4NTNhOWQ1ZTg5OWM3OTU0NjU0MGVkNDA4NDMyZi4uODkxYTZmMzFjY2E3Y2YwNThjZjU5Y2I0
NWU1ZjYwYzY3NGVkZjVmNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1
cmF0aW9ucy9UZXN0V2ViS2l0QVBJLnhjY29uZmlnCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Q29uZmlndXJhdGlvbnMvVGVzdFdlYktpdEFQSS54Y2NvbmZpZwpAQCAtMjgsNyArMjgsMTQgQEAg
R0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CiAKIFVORVhQT1JURURfU1lNQk9MX0xE
RkxBR1MgPSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pON3Rlc3Rpbmc0VGVzdDE2VGVh
ckRvd25UZXN0Q2FzZUV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk43dGVzdGluZzRU
ZXN0MTNTZXRVcFRlc3RDYXNlRXYKIAotT1RIRVJfTERGTEFHUyA9ICQoaW5oZXJpdGVkKSAkKFVO
RVhQT1JURURfU1lNQk9MX0xERkxBR1MpIC1sZ3Rlc3QgLWZvcmNlX2xvYWQgJChCVUlMVF9QUk9E
VUNUU19ESVIpL2xpYlRlc3RXZWJLaXRBUEkuYSAtZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlIC1m
cmFtZXdvcmsgV2ViS2l0IC1sV2ViQ29yZVRlc3RTdXBwb3J0ICQoT1RIRVJfTERGTEFHU19QTEFU
Rk9STSk7CitXS19BVVRIS0lUX0xERkxBR1MgPSAkKFdLX0FVVEhLSVRfTERGTEFHU18kKFdLX1BM
QVRGT1JNX05BTUUpKTsKK1dLX0FVVEhLSVRfTERGTEFHU19pcGhvbmVvcyA9ICQoV0tfQVVUSEtJ
VF9MREZMQUdTJChXS19JT1NfMTMpKTsKK1dLX0FVVEhLSVRfTERGTEFHU19pcGhvbmVzaW11bGF0
b3IgPSAkKFdLX0FVVEhLSVRfTERGTEFHUyQoV0tfSU9TXzEzKSk7CitXS19BVVRIS0lUX0xERkxB
R1NfSU9TX1NJTkNFXzEzID0gLWZyYW1ld29yayBBdXRoS2l0OworV0tfQVVUSEtJVF9MREZMQUdT
X21hY29zeCA9ICQoV0tfQVVUSEtJVF9MREZMQUdTJChXS19NQUNPU18xMDE1KSk7CitXS19BVVRI
S0lUX0xERkxBR1NfTUFDT1NfU0lOQ0VfMTAxNSA9IC1mcmFtZXdvcmsgQXV0aEtpdDsKKworT1RI
RVJfTERGTEFHUyA9ICQoaW5oZXJpdGVkKSAkKFVORVhQT1JURURfU1lNQk9MX0xERkxBR1MpIC1s
Z3Rlc3QgLWZvcmNlX2xvYWQgJChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYlRlc3RXZWJLaXRBUEku
YSAtZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlIC1mcmFtZXdvcmsgV2ViS2l0IC1sV2ViQ29yZVRl
c3RTdXBwb3J0ICQoV0tfQVVUSEtJVF9MREZMQUdTKSAkKE9USEVSX0xERkxBR1NfUExBVEZPUk0p
OwogT1RIRVJfTERGTEFHU19QTEFURk9STVtzZGs9bWFjb3N4Kl0gPSAtZnJhbWV3b3JrIENvY29h
IC1mcmFtZXdvcmsgQ2FyYm9uOwogCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlIGJ1aWx0
IG9uIGlPUy4gSW5zdGVhZCB3ZSBzaG91bGQgY3JlYXRlIGFuZCB1c2UgYSBUZXN0V2ViS2l0QVBJ
IGFwcGxpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNjA2OWJkODg5NTNjYzM1
MTBiMDg3ZTFhMGUyYTJjN2RmYTQwZTU2Li5jNWMwNjdjMjUzNzIwMDUwMDEzNDU2NDMwMjQ2MzZl
YjAyYzBmYTc2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJ
CTU3NTk5RTJBMUYwNzFBQTAwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNr
d2FyZENvbXBhdGliaWxpdHlSZWFkLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTlFMjUxRjA3MTkyQzAwQTNGQjhDIC8qIEluZGV4
ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVJlYWQuaHRtbCAqLzsgfTsK
IAkJNTc1OTlFMkIxRjA3MUFBMDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJh
Y2t3YXJkQ29tcGF0aWJpbGl0eVdyaXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTlFMjMxRjA3MTkyQzAwQTNGQjhDIC8qIElu
ZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVdyaXRlLmh0bWwgKi87
IH07CiAJCTU3NjlDNTBCMUQ5QjAwMDIwMDA4NDdGQiAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3Jh
cC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NjlD
NTBBMUQ5QjAwMDEwMDA4NDdGQiAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbSAqLzsgfTsK
LQkJNTc3NEFBNjgyMUZCQkY3ODAwQUYyQTFCIC8qIFRlc3RMb2FkT3B0aW1pemVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3NEFBNjcyMUZCQkY3
ODAwQUYyQTFCIC8qIFRlc3RMb2FkT3B0aW1pemVyLm1tICovOyB9OworCQk1Nzc0QUE2ODIxRkJC
Rjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NzRBQTY3MjFGQkJGNzgwMEFGMkExQiAvKiBU
ZXN0U09BdXRob3JpemF0aW9uLm1tICovOyB9OwogCQk1Nzc4RDA1NjIyMTEwQTI2MDA4OTlFM0Ig
LyogTG9hZFdlYkFyY2hpdmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Nzc4RDA1NTIyMTEwQTI2MDA4OTlFM0IgLyogTG9hZFdlYkFyY2hpdmUubW0g
Ki87IH07CiAJCTU3OENCRDY3MjA0RkIyQzgwMDgzQjlGMiAvKiBMb2NhbEF1dGhlbnRpY2F0aW9u
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3OENCRDY2MjA0RkIyQzcwMDgzQjlGMiAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTc5MDFGQjExQ0FGMTQyRDAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJM
UmVxdWVzdC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3OTAxRkIwMUNBRjE0MUMwMEVENjRGOSAvKiBMb2FkSW52YWxpZFVSTFJlcXVl
c3QuaHRtbCAqLzsgfTsKQEAgLTE3NDMsNyArMTc0Myw3IEBACiAJCTU3NTk5RTI1MUYwNzE5MkMw
MEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlS
ZWFkLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBh
dGliaWxpdHlSZWFkLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTk5RTI2
MUYwNzE5MkMwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBh
dGliaWxpdHkuc3FsaXRlMy1zaG0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3
YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXNobSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU3NjlDNTBBMUQ5QjAwMDEwMDA4NDdGQiAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlcmlhbGl6ZWRDcnlw
dG9LZXlXcmFwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Nzc0QUE2NzIxRkJC
Rjc4MDBBRjJBMUIgLyogVGVzdExvYWRPcHRpbWl6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBUZXN0TG9hZE9wdGltaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc3
NEFBNjcyMUZCQkY3ODAwQUYyQTFCIC8qIFRlc3RTT0F1dGhvcml6YXRpb24ubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBUZXN0U09BdXRob3JpemF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Nzc4RDA1NTIyMTEwQTI2MDA4OTlFM0IgLyogTG9hZFdlYkFyY2hpdmUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2FkV2ViQXJjaGl2ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTc4Q0JENjYyMDRGQjJDNzAwODNCOUYyIC8qIExvY2FsQXV0aGVudGlj
YXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBMb2NhbEF1dGhlbnRpY2F0aW9uLmZy
YW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTG9jYWxBdXRoZW50aWNh
dGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQk1NzkwMUZBQzFDQUYx
MkMyMDBFRDY0RjkgLyogTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjczNSw3ICsyNzM1LDcgQEAKIAkJCQk1MTVCRTE3MDFE
NDI4QkQxMDBERDdDNjggLyogU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSAqLywKIAkJCQkxQzczNEI1
MjIwNzg4QzQ4MDBGNDMwRUEgLyogU3lzdGVtQ29sb3JzLm1tICovLAogCQkJCTJENzAwNTk1MjFF
REEwQzYwMDM0NjNDQiAvKiBUYWJPdXRPZldlYlZpZXcubW0gKi8sCi0JCQkJNTc3NEFBNjcyMUZC
QkY3ODAwQUYyQTFCIC8qIFRlc3RMb2FkT3B0aW1pemVyLm1tICovLAorCQkJCTU3NzRBQTY3MjFG
QkJGNzgwMEFGMkExQiAvKiBUZXN0U09BdXRob3JpemF0aW9uLm1tICovLAogCQkJCUY0Q0Q3NEM3
MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5oICovLAogCQkJCUY0Q0Q3
NEM4MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5tbSAqLywKIAkJCQlD
MjJGQTMyQTIyOEY4NzA4MDA5RDc5ODggLyogVGV4dFdpZHRoLm1tICovLApAQCAtNDQ3MiwxMCAr
NDQ3MiwxMCBAQAogCQkJCUY0RjVCQjUyMjE2NjdCQUEwMDJEMDZCOSAvKiBUZXN0Rm9udE9wdGlv
bnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDVFMTU3NjIxMTJDRTYyMDAzMDdFODIgLyogVGVz
dElucHV0RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDVEMzg5MTIxNUE3QjRCMDAy
QTI5NzkgLyogVGVzdEluc3BlY3RvckJhci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTU3NzRBQTY4
MjFGQkJGNzgwMEFGMkExQiAvKiBUZXN0TG9hZE9wdGltaXplci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTJEMUMwNEE3MUQ3NjI5OEIwMDBBNjgxNiAvKiBUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0RkM1OTAxQjhBRTM2RjAwRDEwN0VCIC8qIFRlc3RQcm90
b2NvbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUFFMUE0MTFBMzQwMDQ0N0M0QyAvKiBU
ZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTc3NEFBNjgyMUZCQkY3ODAw
QUYyQTFCIC8qIFRlc3RTT0F1dGhvcml6YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNENE
NzRDOTIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQkyRUZGMDZENDFEOEFFREJCMDAwNEJCMzAgLyogVGVzdFdLV2ViVmlldy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUY0NTE3QjY3MjA1NEM0OTUwMEMyNjcyMSAvKiBUZXN0V0tXZWJW
aWV3Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdExvYWRPcHRpbWl6ZXIubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZjI5YzU5NzhlYzQzOWEwYjI2NzM5YmU2N2U0ZmY0
Y2E2MzBhYzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLQotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi0jaW1wb3J0IDxXZWJLaXRBZGRp
dGlvbnMvVGVzdExvYWRPcHRpbWl6ZXJBZGRpdGlvbnMubW0+Ci0jZW5kaWYKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlv
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9y
aXphdGlvbi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzk0N2E1ZjE3YTYyMjg2NzkxZWM5NzA5MTM4MTc1ZDA1
YzYzMzBkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tCkBAIC0wLDAgKzEsMTg1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdC5oIgorCisjaWYgSEFWRShB
UFBfU1NPKQorCisjaW1wb3J0ICJDbGFzc01ldGhvZFN3aXp6bGVyLmgiCisjaW1wb3J0ICJJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2lt
cG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVn
YXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvblByaXZhdGUuaD4KKyNp
bXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2Nv
YS9BdXRoS2l0U1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKyNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2ltcG9ydCA8
d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3N0YXRpYyBib29s
IG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGF1dGhvcml6YXRpb25DYW5jZWxsZWQgPSBm
YWxzZTsKK3N0YXRpYyBib29sIHVpU2hvd2VkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBuZXdXaW5k
b3dDcmVhdGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBoYXZlSHR0cEJvZHkgPSBmYWxzZTsKK3N0
YXRpYyBTdHJpbmcgZmluYWxVUkw7CitzdGF0aWMgU09BdXRob3JpemF0aW9uKiBnQXV0aG9yaXph
dGlvbjsKK3N0YXRpYyBpZDxTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4gZ0RlbGVnYXRlOworI2lm
IFBMQVRGT1JNKE1BQykKK3N0YXRpYyBCbG9ja1B0cjx2b2lkKE5TTm90aWZpY2F0aW9uICopPiBn
Tm90aWZpY2F0aW9uQ2FsbGJhY2s7CisjZW5kaWYKK3N0YXRpYyBSZXRhaW5QdHI8V0tXZWJWaWV3
PiBnTmV3V2luZG93OworCitzdGF0aWMgY29uc3QgY2hhciogb3BlbmVyVGVtcGxhdGUgPQorIjxo
dG1sPiIKKyI8YnV0dG9uIG9uY2xpY2s9J2NsaWNrTWUoKScgc3R5bGU9J3dpZHRoOjQwMHB4O2hl
aWdodDo0MDBweCc+d2luZG93Lm9wZW48L2J1dHRvbj4iCisiPHNjcmlwdD4iCisiZnVuY3Rpb24g
Y2xpY2tNZSgpIgorInsiCisiICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywg
cmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsiCisiICAgIG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKCcl
cycpOyIKKyIgICAgJXMiCisiICAgIGlmICghbmV3V2luZG93KSIKKyIgICAgICAgIHJldHVybjsi
CisiICAgIGNvbnN0IHBvbGxUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsi
CisiICAgICAgICBpZiAobmV3V2luZG93LmNsb3NlZCkgeyIKKyIgICAgICAgICAgICB3aW5kb3cu
Y2xlYXJJbnRlcnZhbChwb2xsVGltZXIpOyIKKyIgICAgICAgICAgICB3aW5kb3cud2Via2l0Lm1l
c3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnV2luZG93Q2xvc2VkLicpOyIK
KyIgICAgICAgIH0iCisiICAgIH0sIDIwMCk7IgorIn0iCisiZnVuY3Rpb24gcmVjZWl2ZU1lc3Nh
Z2UoZXZlbnQpIgorInsiCisiICAgIGlmIChldmVudC5vcmlnaW4gPT0gJ2h0dHA6Ly93d3cuZXhh
bXBsZS5jb20nKSB7IgorIiAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVz
dEhhbmRsZXIucG9zdE1lc3NhZ2UoZXZlbnQuZGF0YSk7IgorIiAgICAgICAgJXMiCisiICAgIH0i
CisifSIKKyI8L3NjcmlwdD4iCisiPC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBuZXdX
aW5kb3dSZXNwb25zZVRlbXBsYXRlID0KKyI8aHRtbD4iCisiPHNjcmlwdD4iCisid2luZG93Lm9w
ZW5lci5wb3N0TWVzc2FnZSgnSGVsbG8uJywgJyonKTsiCisiJXMiCisiPC9zY3JpcHQ+IgorIjwv
aHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogcGFyZW50VGVtcGxhdGUgPQorIjxodG1sPiIK
KyI8aWZyYW1lIHNyYz0nJXMnPjwvaWZyYW1lPiIKKyI8c2NyaXB0PiIKKyJmdW5jdGlvbiByZWNl
aXZlTWVzc2FnZShldmVudCkiCisieyIKKyIgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxl
cnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoZXZlbnQub3JpZ2luKTsiCisiICAgIHdpbmRvdy53
ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKGV2ZW50LmRhdGEp
OyIKKyJ9IgorIndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVjZWl2ZU1lc3Nh
Z2UsIGZhbHNlKTsiCisiPC9zY3JpcHQ+IgorIjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hh
ciogaWZyYW1lVGVtcGxhdGUgPQorIjxodG1sPiIKKyI8c2NyaXB0PiIKKyJwYXJlbnQucG9zdE1l
c3NhZ2UoJ0hlbGxvLicsICcqJyk7IgorIjwvc2NyaXB0PiIKKyI8L2h0bWw+IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIHNhbWxSZXNwb25zZSA9CisiPGh0bWw+IgorIjxzY3JpcHQ+IgorIndpbmRv
dy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdTQU1MJyk7
IgorIjwvc2NyaXB0PiIKKyI8L2h0bWw+IjsKKworQGludGVyZmFjZSBUZXN0U09BdXRob3JpemF0
aW9uTmF2aWdhdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBX
S1VJRGVsZWdhdGU+CitAcHJvcGVydHkgYm9vbCBpc0RlZmF1bHRQb2xpY3k7CistIChpbnN0YW5j
ZXR5cGUpaW5pdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RTT0F1dGhvcml6YXRpb25O
YXZpZ2F0aW9uRGVsZWdhdGUKKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoc2Vs
ZiA9IFtzdXBlciBpbml0XSkKKyAgICAgICAgc2VsZi5pc0RlZmF1bHRQb2xpY3kgPSB0cnVlOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGlkRmluaXNoTmF2aWdhdGlvbjooV0tOYXZpZ2F0aW9uICopbmF2aWdhdGlvbgoreworICAg
IEVYUEVDVF9GQUxTRShuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBuYXZpZ2F0aW9uQ29tcGxl
dGVkID0gdHJ1ZTsKKyAgICBmaW5hbFVSTCA9IG5hdmlnYXRpb24uX3JlcXVlc3QuVVJMLmFic29s
dXRlU3RyaW5nOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdh
dGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBv
bGljeSkpZGVjaXNpb25IYW5kbGVyCit7CisgICAgaWYgKHNlbGYuaXNEZWZhdWx0UG9saWN5KSB7
CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVjaXNpb25IYW5kbGVyKF9XS05hdmlnYXRp
b25BY3Rpb25Qb2xpY3lBbGxvd1dpdGhvdXRUcnlpbmdBcHBMaW5rKTsKK30KKworLSAoV0tXZWJW
aWV3ICopd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjcmVhdGVXZWJWaWV3V2l0aENvbmZp
Z3VyYXRpb246KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIGZvck5hdmln
YXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gd2luZG93
RmVhdHVyZXM6KFdLV2luZG93RmVhdHVyZXMgKil3aW5kb3dGZWF0dXJlcworeworICAgIEVYUEVD
VF9GQUxTRShuZXdXaW5kb3dDcmVhdGVkKTsKKyAgICBuZXdXaW5kb3dDcmVhdGVkID0gdHJ1ZTsK
KyAgICBnTmV3V2luZG93ID0gW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dOworICAgIFtnTmV3V2luZG93IHNldE5h
dmlnYXRpb25EZWxlZ2F0ZTpzZWxmXTsKKyAgICByZXR1cm4gZ05ld1dpbmRvdy5nZXQoKTsKK30K
KworQGVuZAorCisjaWYgUExBVEZPUk0oTUFDKQorQGludGVyZmFjZSBUZXN0U09BdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXIgOiBOU1ZpZXdDb250cm9sbGVyCisjZWxpZiBQTEFURk9STShJT1Mp
CitAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciA6IFVJVmlld0Nv
bnRyb2xsZXIKKyNlbmRpZgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFNPQXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyCisKKy0gKHZvaWQpdmlld0RpZEFwcGVhcgoreworICAgIEVYUEVD
VF9GQUxTRSh1aVNob3dlZCk7CisgICAgdWlTaG93ZWQgPSB0cnVlOworfQorCistICh2b2lkKXZp
ZXdEaWREaXNhcHBlYXIKK3sKKyAgICBFWFBFQ1RfVFJVRSh1aVNob3dlZCk7CisgICAgdWlTaG93
ZWQgPSBmYWxzZTsKK30KKworQGVuZAorCitzdGF0aWMgYm9vbCBvdmVycmlkZUNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTChpZCwgU0VMLCBOU1VSTCAqdXJsLCBOU0ludGVnZXIpCit7Cisg
ICAgaWYgKCFbdXJsLmxhc3RQYXRoQ29tcG9uZW50IGlzRXF1YWw6QCJzaW1wbGUuaHRtbCJdICYm
ICFbdXJsLmhvc3QgaXNFcXVhbDpAInd3dy5leGFtcGxlLmNvbSJdICYmICFbdXJsLmxhc3RQYXRo
Q29tcG9uZW50IGlzRXF1YWw6QCJHZXRTZXNzaW9uQ29va2llLmh0bWwiXSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBvdmVycmlkZVNl
dERlbGVnYXRlKGlkIHNlbGYsIFNFTCwgaWQ8U09BdXRob3JpemF0aW9uRGVsZWdhdGU+IGRlbGVn
YXRlKQoreworICAgIGdBdXRob3JpemF0aW9uID0gc2VsZjsKKyAgICBnRGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKK30KKworc3RhdGljIHZvaWQgb3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
KGlkLCBTRUwsIE5TVVJMICp1cmwsIE5TRGljdGlvbmFyeSAqaGVhZGVycywgTlNEYXRhICpib2R5
KQoreworICAgIEVYUEVDVF9UUlVFKGhlYWRlcnMgIT0gbmlsKTsKKyAgICBFWFBFQ1RfVFJVRSgo
Ym9keSA9PSBuaWwpIF4gaGF2ZUh0dHBCb2R5KTsKKyAgICBFWFBFQ1RfRkFMU0UoYXV0aG9yaXph
dGlvblBlcmZvcm1lZCk7CisgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IHRydWU7Cit9CisK
K3N0YXRpYyB2b2lkIG92ZXJyaWRlQ2FuY2VsQXV0aG9yaXphdGlvbihpZCwgU0VMKQoreworICAg
IEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uQ2FuY2VsbGVkKTsKKyAgICBhdXRob3JpemF0aW9u
Q2FuY2VsbGVkID0gdHJ1ZTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK3VzaW5nIE5vdGlmaWNh
dGlvbkNhbGxiYWNrID0gdm9pZCAoXikoTlNOb3RpZmljYXRpb24gKm5vdGUpOworc3RhdGljIGlk
IG92ZXJyaWRlQWRkT2JzZXJ2ZXJGb3JOYW1lKGlkLCBTRUwsIE5TTm90aWZpY2F0aW9uTmFtZSBu
YW1lLCBpZCwgTlNPcGVyYXRpb25RdWV1ZSAqLCBOb3RpZmljYXRpb25DYWxsYmFjayBibG9jaykK
K3sKKyAgICBpZiAoW25hbWUgaXNFcXVhbDpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbl0p
CisgICAgICAgIGdOb3RpZmljYXRpb25DYWxsYmFjayA9IG1ha2VCbG9ja1B0cihibG9jayk7Cisg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdOworfQorI2VuZGlmCisKK3N0
YXRpYyBib29sIG92ZXJyaWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbihpZCwgU0VMLCBOU1VS
TCAqKQoreworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCByZXNldFN0YXRlKCkK
K3sKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgYXV0aG9yaXphdGlvblBl
cmZvcm1lZCA9IGZhbHNlOworICAgIGF1dGhvcml6YXRpb25DYW5jZWxsZWQgPSBmYWxzZTsKKyAg
ICB1aVNob3dlZCA9IGZhbHNlOworICAgIG5ld1dpbmRvd0NyZWF0ZWQgPSBmYWxzZTsKKyAgICBo
YXZlSHR0cEJvZHkgPSBmYWxzZTsKKyAgICBmaW5hbFVSTCA9IGVtcHR5U3RyaW5nKCk7CisgICAg
Z0F1dGhvcml6YXRpb24gPSBudWxscHRyOworICAgIGdEZWxlZ2F0ZSA9IG51bGxwdHI7CisjaWYg
UExBVEZPUk0oTUFDKQorICAgIGdOb3RpZmljYXRpb25DYWxsYmFjayA9IG51bGxwdHI7CisjZW5k
aWYKKyAgICBnTmV3V2luZG93ID0gbnVsbHB0cjsKK30KKworc3RhdGljIHZvaWQgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyhUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3LCBUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlICpkZWxlZ2F0ZSkKK3sKKyAgICBbd2ViVmlldyBz
ZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGVdOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdh
dGU6ZGVsZWdhdGVdOworfQorCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlSHRtbChjb25zdCBjaGFy
KiB0ZW1wbGF0ZUh0bWwsIGNvbnN0IFN0cmluZyYgc3Vic3RpdHV0ZSwgY29uc3QgU3RyaW5nJiBv
cHRpb25hbFN1YnN0aXR1dGUxID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBvcHRpb25h
bFN1YnN0aXR1dGUyID0gZW1wdHlTdHJpbmcoKSkKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBz
dHJlYW07CisgICAgc3RyZWFtLnByaW50Zih0ZW1wbGF0ZUh0bWwsIHN1YnN0aXR1dGUudXRmOCgp
LmRhdGEoKSwgb3B0aW9uYWxTdWJzdGl0dXRlMS51dGY4KCkuZGF0YSgpLCBvcHRpb25hbFN1YnN0
aXR1dGUyLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTsKK30K
KworLy8gRklYTUU8cmRhcjovL3Byb2JsZW0vNDg5MDkzMzY+OiBSZXBsYWNlIHRoZSBiZWxvdyB3
aXRoIEFwcFNTTyBjb25zdGFudHMuCitzdGF0aWMgdm9pZCBjaGVja0F1dGhvcml6YXRpb25PcHRp
b25zKGJvb2wgdXNlckFjdGlvbkluaXRpYXRlZCwgU3RyaW5nIGluaXRpYXRvck9yaWdpbiwgaW50
IGluaXRpYXRpbmdBY3Rpb24pCit7CisgICAgRVhQRUNUX1RSVUUoZ0F1dGhvcml6YXRpb24pOwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIHNlbGVjdG9yIG9uY2UgdGhlIGlPUyBib3RzIGhhcyBi
ZWVuIHVwZGF0ZWQgdG8gYSByZWNlbnQgU0RLLgorICAgIGF1dG8gc2VsZWN0b3IgPSBOU1NlbGVj
dG9yRnJvbVN0cmluZyhAImF1dGhvcml6YXRpb25PcHRpb25zIik7CisgICAgaWYgKFtnQXV0aG9y
aXphdGlvbiByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7CisgICAgICAgIEVYUEVDVF9F
USgoKE5TTnVtYmVyICopW2dBdXRob3JpemF0aW9uIHBlcmZvcm1TZWxlY3RvcjpzZWxlY3Rvcl1b
U09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRlZF0pLmJvb2xWYWx1ZSwgdXNl
ckFjdGlvbkluaXRpYXRlZCk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShbZ0F1dGhvcml6YXRp
b24gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXVtAImluaXRpYXRvck9yaWdpbiJdLCBpbml0aWF0
b3JPcmlnaW4pOworICAgICAgICBFWFBFQ1RfRVEoKChOU051bWJlciAqKVtnQXV0aG9yaXphdGlv
biBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3JdW0AiaW5pdGlhdGluZ0FjdGlvbiJdKS5pbnRWYWx1
ZSwgaW5pdGlhdGluZ0FjdGlvbik7CisgICAgfQorfQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIE5vSW50ZXJjZXB0aW9ucykKK3sK
KyAgICByZXNldFN0YXRlKCk7CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpA
Imh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9u
Q29tcGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRl
U3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIElu
dGVyY2VwdGlvbkVycm9yKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnBy
ZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3Jp
emF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09B
dXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RV
UkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisgICAg
RVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsK
K30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uRG9Ob3RIYW5k
bGUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0
RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVz
dFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1
bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9u
cyhmYWxzZSwgIiIsIDApOworCisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkTm90SGFu
ZGxlOmdBdXRob3JpemF0aW9uXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworCisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZp
bmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9u
Q2FuY2VsKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3
aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJm
b3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3Rh
bmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3Mo
KSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9u
V2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+
IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxl
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGls
OjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9w
dGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbkRpZENh
bmNlbDpnQXV0aG9yaXphdGlvbl07CisgICAgLy8gRklYTUU6IEZpbmQgYSBkZWxlZ2F0ZSBtZXRo
b2QgdGhhdCBjYW4gZGV0ZWN0IGxvYWQgY2FuY2Vscy4KKyAgICBVdGlsOjpzbGVlcCgwLjUpOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgd2ViVmlldy5nZXQoKS5fY29tbWl0dGVkVVJMLmFic29s
dXRlU3RyaW5nKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0
aW9uQ29tcGxldGVXaXRob3V0RGF0YSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NN
ZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhV
UkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0
aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnBy
ZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAg
UmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdl
dCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVj
a0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBbZ0RlbGVnYXRlIGF1
dGhvcml6YXRpb25EaWRDb21wbGV0ZTpnQXV0aG9yaXphdGlvbl07CisgICAgVXRpbDo6cnVuKCZu
YXZpZ2F0aW9uQ29tcGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgp
LmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVk
aXJlY3QsIEludGVyY2VwdGlvblVuZXhwZWN0ZWRDb21wbGV0aW9uKQoreworICAgIHJlc2V0U3Rh
dGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9y
aXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6
cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRl
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5z
dGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRw
Qm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25X
aXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tU
ZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAg
Y29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5n
ZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJm
b3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKwor
ICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdp
dGhIVFRQQXV0aG9yaXphdGlvbkhlYWRlcnM6YWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10g
aW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisg
ICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJM
KTsKK30KKworLy8geyBEZWZhdWx0IGRlbGVnYXRlIG1ldGhvZCwgTm8gQXBwIExpbmtzIH0KK1RF
U1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQxKQoreworICAg
IHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlv
bldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNh
blBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNl
dERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7
CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6
YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVh
ZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhv
cml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIi
LCAwKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNw
b25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVz
dFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJG
aWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsK
KyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVX
aXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVk
KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOwor
ICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30K
KworLy8geyBEZWZhdWx0IGRlbGVnYXRlIG1ldGhvZCwgV2l0aCBBcHAgTGlua3MgfQorVEVTVChT
T0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZDIpCit7CisgICAgcmVz
ZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVs
ZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJz
Omh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICAvLyBGb3JjZSBBcHAg
TGlua3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRoYXQgaGFzIGEgZGlmZmVyZW50IGhvc3QgdGhhbiB0
aGUgY3VycmVudCBvbmUgKGVtcHR5IGhvc3QpIGFuZCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5OjpTaG91bGRBbGxvdy4KKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwczov
L3d3dy5leGFtcGxlLmNvbSIpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBfbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMXSBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzOllFU107CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgLy8gSGVyZSB3ZSBm
b3JjZSBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24gdG8gZ28gdG8gdGhlIHdpdGggdXNl
ciBnZXN0dXJlcyByb3V0ZS4KKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAibG9jYXRpb24gPSAnJUAnIiwgKGlkKXRlc3RVUkwuc3Ry
aW5nKCldIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBjaGVja0F1dGhv
cml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAg
Y2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAibnVsbCIsIDApOworI2VuZGlmCisKKyAg
ICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9w
dE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVz
Q29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9jYXRp
b24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBh
dXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpy
ZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0
KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisK
Ky8vIHsgQ3VzdG9tIGRlbGVnYXRlIG1ldGhvZCwgV2l0aCBBcHAgTGlua3MgfQorVEVTVChTT0F1
dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZDMpCit7CisgICAgcmVzZXRT
dGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdh
dGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0
dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICAvLyBGb3JjZSBBcHAgTGlu
a3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRoYXQgaGFzIGEgZGlmZmVyZW50IGhvc3QgdGhhbiB0aGUg
Y3VycmVudCBvbmUgKGVtcHR5IGhvc3QpIGFuZCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5
OjpTaG91bGRBbGxvdy4KKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwczovL3d3
dy5leGFtcGxlLmNvbSIpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBfbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMXSBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzOllFU107CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgLy8gSGVyZSB3ZSBmb3Jj
ZSBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24gdG8gZ28gdG8gdGhlIHdpdGggdXNlciBn
ZXN0dXJlcyByb3V0ZS4KKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAibG9jYXRpb24gPSAnJUAnIiwgKGlkKXRlc3RVUkwuc3RyaW5n
KCldIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1dGhv
cml6YXRpb25QZXJmb3JtZWQpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBjaGVja0F1dGhvcml6
YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgY2hl
Y2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAibnVsbCIsIDApOworI2VuZGlmCisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5T
KFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29k
ZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9jYXRpb24i
IDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRo
b3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNw
b25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCld
OworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKKy8v
IHsgX1dLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93V2l0aG91dFRyeWluZ0FwcExpbmssIE5v
IEFwcCBMaW5rcyB9CitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25T
dWNjZWVkNCkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBz
d2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJM
PiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBs
ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIC8v
IEEgc2VwYXJhdGUgZGVsZWdhdGUgdGhhdCBpbXBsZW1lbnRzIGRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24uCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3Jp
emF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09B
dXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAg
W2RlbGVnYXRlIHNldElzRGVmYXVsdFBvbGljeTpmYWxzZV07CisKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXph
dGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJl
Y3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIg
d2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBh
bGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lv
bjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwg
YWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhv
cml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBC
b2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVu
KCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbmF2aWdhdGlv
bkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7
CisjZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVT
dHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50
ZXJjZXB0aW9uU3VjY2VlZFdpdGhPdGhlckh0dHBTdGF0dXNDb2RlKQoreworICAgIHJlc2V0U3Rh
dGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9y
aXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6
cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRl
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5z
dGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRw
Qm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25X
aXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tU
ZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAg
Y29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5n
ZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJm
b3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKwor
ICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFk
b3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQo
KSBzdGF0dXNDb2RlOjQwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmls
XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBs
ZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBs
ZXRlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcs
IGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0
aW9uU3VjY2VlZFdpdGhDb29raWUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJl
dGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25O
YXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6
YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQo
KV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tB
dXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAgUmV0YWluUHRyPE5TVVJM
PiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhU
VFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIlNldC1Db29raWUiIDogQCJz
ZXNzaW9uaWQ9MzhhZmVzN2E4OyIsIEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRl
U3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9u
IGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdh
dGlvbkNvbXBsZXRlZCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0
ZWQgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlm
CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBm
aW5hbFVSTCk7CisKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImRvY3VtZW50LmNvb2tpZSIgY29tcGxldGlvbkhhbmRs
ZXI6XihOU1N0cmluZyAqcmVzdWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKCJzZXNzaW9uaWQ9MzhhZmVzN2E4IiwgW3Jlc3VsdCBVVEY4U3RyaW5nXSk7CisgICAgICAg
IG5hdmlnYXRpb25Db21wbGV0ZWQgPSB0cnVlOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmbmF2
aWdhdGlvbkNvbXBsZXRlZCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIElu
dGVyY2VwdGlvblN1Y2NlZWRXaXRoQ29va2llcykKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAg
Q2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29k
ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9y
aXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0
VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAg
ICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBSZXRhaW5Q
dHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNI
VFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29k
ZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiU2V0LUNvb2tp
ZSIgOiBAInNlc3Npb25pZD0zOGFmZXM3YTgsIHF3ZXJ0eT0yMTlmZndlZjl3MGYsIGlkPWEzZldh
OyIsIEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAg
W2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhU
VFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBV
dGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlmCisgICAgRVhQRUNUX1dLX1NU
UkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7CisKKyAgICBu
YXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OiBAImRvY3VtZW50LmNvb2tpZSIgY29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqcmVz
dWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJpZD1hM2ZXYTsgcXdl
cnR5PTIxOWZmd2VmOXcwZjsgc2Vzc2lvbmlkPTM4YWZlczdhOCIsIFtyZXN1bHQgVVRGOFN0cmlu
Z10pOworICAgICAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBV
dGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworfQorCisvLyBUaGUgcmVkaXJlY3RlZCBV
UkwgaGFzIGEgZGlmZmVyZW50IGRvbWFpbiB0aGFuIHRoZSB0ZXN0IFVSTC4KK1RFU1QoU09BdXRo
b3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoUmVkaXJlY3Rpb25BbmRD
b29raWUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZv
cm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
U2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25X
aXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisK
KyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIp
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkxdXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBIZXJlIHdlIGZvcmNlIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbiB0byBnbyB0byB0
aGUgd2l0aCB1c2VyIGdlc3R1cmVzIHJvdXRlLgorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJsb2NhdGlvbiA9ICclQCciLCAoaWQp
dGVzdFVSTC5zdHJpbmcoKV0gY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0
aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKyNlbGlmIFBMQVRGT1JN
KElPUykKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJudWxsIiwgMCk7Cisj
ZW5kaWYKKworICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNw
b25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVz
dFVSTCBzdGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6
QHsgQCJTZXQtQ29va2llIiA6IEAic2Vzc2lvbmlkPTM4YWZlczdhODsiLCBAIkxvY2F0aW9uIiA6
IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9y
aXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9u
c2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsK
KyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAgIEVYUEVDVF9XS19TVFJF
UShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworCisgICAgbmF2
aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlw
dDogQCJkb2N1bWVudC5jb29raWUiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKnJlc3Vs
dCwgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgW3Jlc3VsdCBVVEY4
U3RyaW5nXSk7CisgICAgICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSB0cnVlOworICAgIH1dOwor
ICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7Cit9CisKK1RFU1QoU09BdXRob3Jp
emF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoRGlmZmVyZW50T3JpZ2luKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVn
YXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpo
dHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwg
PSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0
ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
KworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3Lmdl
dCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFs
c2UsICIiLCAwKTsKKworICAgIGF1dG8gcmVkaXJlY3RVUkwgPSBVUkwoVVJMKCksICJodHRwczov
L3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQ
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnJlZGlyZWN0VVJMIHN0YXR1c0NvZGU6MzAy
IEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IHJl
ZGlyZWN0VVJMLnN0cmluZygpIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1
dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0
dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6
cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5n
ZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlv
blJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aFdhaXRpbmdTZXNzaW9uKQoreworICAg
IHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlv
bldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNh
blBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNl
dERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7
CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6
YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVh
ZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhv
cml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIC8vIFRo
ZSBzZXNzaW9uIHdpbGwgYmUgd2FpdGluZyBzaW5jZSB0aGUgd2ViIHZpZXcgaXMgaXMgbm90IGlu
dCB0aGUgd2luZG93LgorICAgIFt3ZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5n
ZXQoKV1dOworICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOworCisgICAgLy8gU2hvdWxkIGFjdGl2YXRlIHRoZSBzZXNzaW9uLgor
ICAgIFt3ZWJWaWV3IGFkZFRvVGVzdFdpbmRvd107CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0
aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwg
MCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBz
dWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9u
c2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RV
UkwuZ2V0KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmll
bGRzOkB7IEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7Cisg
ICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0
aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFs
bG9jXSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAg
ICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlmCisgICAgRVhQRUNUX1dL
X1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisK
K1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoQWN0
aXZlU2Vzc2lvbkRpZE1vdmVXaW5kb3cpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNz
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRo
VVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihi
ZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAg
IFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9y
UmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRp
b25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhv
cml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5n
ZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hl
Y2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAgLy8gU2hvdWxkIGJl
IGEgbm8gb3AuCisgICAgW3dlYlZpZXcgYWRkVG9UZXN0V2luZG93XTsKKworICAgIFJldGFpblB0
cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hU
VFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2Rl
OjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIg
OiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhv
cml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3Bv
bnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07
CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmbmF2aWdh
dGlvbkNvbXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwu
Z2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRp
b25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFR3aWNlKQoreworICAgIHJlc2V0U3RhdGUo
KTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVz
cG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIy
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9k
eTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29u
ZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBhdXRob3Jp
emF0aW9uUGVyZm9ybWVkID0gZmFsc2U7CisgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgICAgICBVdGls
OjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgICAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICAgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9
IGZhbHNlOworICAgICAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgICAgICBh
dXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0
aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEi
IGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmlu
Z10gfV0pOworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24g
ZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgICAgIFV0aWw6OnJ1bigmbmF2
aWdhdGlvbkNvbXBsZXRlZCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBuYXZpZ2F0aW9u
Q29tcGxldGVkID0gZmFsc2U7CisgICAgICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRl
ZCk7CisjZW5kaWYKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFi
c29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7CisgICAgfQorfQorCitURVNUKFNPQXV0aG9yaXphdGlv
blJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkU3VwcHJlc3NBY3RpdmVTZXNzaW9uKQorewor
ICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXph
dGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRl
KSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRw
SGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1
dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjQoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuY2VsQXV0aG9y
aXphdGlvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhbmNlbEF1dGhvcml6YXRp
b24pKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1l
ZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAg
Ly8gU3VwcHJlc3MgdGhlIGxhc3QgYWN0aXZlIHNlc3Npb24uCisgICAgYXV0aG9yaXphdGlvblBl
cmZvcm1lZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXph
dGlvbkNhbmNlbGxlZCk7CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsK
KyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBSZXRh
aW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtb
TlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVz
Q29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9jYXRp
b24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBh
dXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpy
ZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0
KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJm5h
dmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlmCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0
VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3Jp
emF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRTdXBwcmVzc1dhaXRpbmdTZXNzaW9u
KQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERl
bGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVC
ZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RV
UkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRo
RXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKKyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKwor
ICAgIC8vIFRoZSBzZXNzaW9uIHdpbGwgYmUgd2FpdGluZyBzaW5jZSB0aGUgd2ViIHZpZXcgaXMg
aXMgbm90IGludCB0aGUgd2luZG93LgorICAgIFt3ZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXdd
OworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAgRVhQRUNUX0ZBTFNF
KGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworCisgICAgLy8gU3VwcHJlc3MgdGhlIGxhc3Qgd2Fp
dGluZyBzZXNzaW9uLgorICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAg
RVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworCisgICAgLy8gQWN0aXZhdGUg
dGhlIGxhc3Qgc2Vzc2lvbi4KKyAgICBbd2ViVmlldyBhZGRUb1Rlc3RXaW5kb3ddOworICAgIFV0
aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9u
T3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVS
TCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRo
RXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9j
XSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAi
SFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNv
bHV0ZVN0cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXph
dGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5h
dmlnYXRpb25Db21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZpZ2F0aW9uQ29t
cGxldGVkID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNl
bmRpZgorICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmlu
ZywgZmluYWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNl
cHRpb25TdWNjZWVkU0FNTCkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RT
d2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0
b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsK
KyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0
aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWlu
UHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgLy8gQWRkIGEg
aHR0cCBib2R5IHRvIHRoZSByZXF1ZXN0IHRvIG1pbWljIGEgU0FNTCByZXF1ZXN0LgorICAgIGF1
dG8gcmVxdWVzdCA9IGFkb3B0TlMoW05TTXV0YWJsZVVSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
dGVzdFVSTC5nZXQoKV0pOworICAgIFtyZXF1ZXN0IHNldEhUVFBCb2R5OmFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgaGF2ZUh0dHBCb2R5ID0gdHJ1ZTsKKworICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3QuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmYXV0
aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxz
ZSwgIiIsIDApOworCisgICAgLy8gUGFzcyBhIEhUVFAgMjAwIHJlc3BvbnNlIHdpdGggYSBodG1s
IHRvIG1pbWljIGEgU0FNTCByZXNwb25zZS4KKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhb
W05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1
c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAg
ICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRo
SFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6c2FtbFJlc3BvbnNlIGxlbmd0aDpzdHJsZW4oc2FtbFJlc3BvbnNl
KV0pLmdldCgpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIlNBTUwiXTsKK30KKwor
VEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgQXV0aG9yaXphdGlvbk9wdGlvbnMpCit7Cisg
ICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6
Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0
aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
Q2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6
emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
c2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUp
KTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9y
aXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBI
ZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0
aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2
aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0
aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmll
dyBsb2FkSFRNTFN0cmluZzpAIiIgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJMKCksICJodHRwOi8v
d3d3LndlYmtpdC5vcmciKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsK
KyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAibG9jYXRpb24gPSAnaHR0cDovL3d3
dy5leGFtcGxlLmNvbSciIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgVXRpbDo6cnVuKCZh
dXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKHRy
dWUsICJodHRwOi8vd3d3LndlYmtpdC5vcmciLCAwKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRp
b25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uRGlkTm90SGFuZGxlVHdpY2UpCit7CisgICAgcmVzZXRT
dGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdh
dGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0
dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBl
cmZvcm1lZCk7CisKKyAgICAvLyBUZXN0IHBhc3NlcyBpZiBubyBjcmFzaGVzLgorICAgIFtnRGVs
ZWdhdGUgYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTpnQXV0aG9yaXphdGlvbl07CisgICAgW2dE
ZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkTm90SGFuZGxlOmdBdXRob3JpemF0aW9uXTsKK30KKwor
VEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uQ29tcGxldGVUd2ljZSkK
K3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEo
UEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxl
Z2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6
aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJM
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5n
ZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZh
dXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAgIC8vIFRlc3QgcGFzc2VzIGlmIG5vIGNyYXNo
ZXMuCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNl
ID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxk
czpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAg
IFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhI
VFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdF0pLmdldCgpXTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6
YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5
OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07Cit9CisKKy8vIEZJWE1FKDE3
NTIwNCk6IEVuYWJsZSB0aGUgaU9TIHRlc3RzIG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KKyNpZiBQ
TEFURk9STShNQUMpCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25T
dWNjZWVkV2l0aFVJKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihj
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8
TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworCisgICAgYXV0byB2aWV3Q29u
dHJvbGxlciA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBhZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TWmVyb1JlY3RdKTsKKyAgICBbdmlld0NvbnRyb2xsZXIgc2V0Vmlldzp2aWV3
LmdldCgpXTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBw
cmVzZW50Vmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIuZ2V0KCkgd2l0aENvbXBsZXRpb246
XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNz
KTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJnVpU2hvd2VkKTsKKworICAgIFJldGFpblB0cjxO
U1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMw
MiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBb
cmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6
YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNl
LmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07Cisg
ICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
cmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKKyAgICBFWFBFQ1Rf
RkFMU0UodWlTaG93ZWQpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRl
cmNlcHRpb25DYW5jZWxXaXRoVUkpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJl
dGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25O
YXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6
YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQo
KV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRv
IHZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJv
bGxlciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gdmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdF0pOworICAgIFt2aWV3Q29udHJvbGxlciBzZXRW
aWV3OnZpZXcuZ2V0KCldOworCisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3Jp
emF0aW9uIHByZXNlbnRWaWV3Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlci5nZXQoKSB3aXRoQ29t
cGxldGlvbjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVF
KHN1Y2Nlc3MpOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmdWlTaG93ZWQpOworCisgICAgW2dE
ZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ2FuY2VsOmdBdXRob3JpemF0aW9uXTsKKyAgICAvLyBG
SVhNRTogRmluZCBhIGRlbGVnYXRlIG1ldGhvZCB0aGF0IGNhbiBkZXRlY3QgbG9hZCBjYW5jZWxz
LgorICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCB3ZWJWaWV3
LmdldCgpLl9jb21taXR0ZWRVUkwuYWJzb2x1dGVTdHJpbmcpOworICAgIEVYUEVDVF9GQUxTRSh1
aVNob3dlZCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlv
bkVycm9yV2l0aFVJKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihj
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8
TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworCisgICAgYXV0byB2aWV3Q29u
dHJvbGxlciA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBhZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TWmVyb1JlY3RdKTsKKyAgICBbdmlld0NvbnRyb2xsZXIgc2V0Vmlldzp2aWV3
LmdldCgpXTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBw
cmVzZW50Vmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIuZ2V0KCkgd2l0aENvbXBsZXRpb246
XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNz
KTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJnVpU2hvd2VkKTsKKworICAgIFtnRGVsZWdhdGUg
YXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhFcnJvcjphZG9wdE5T
KFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6
MCB1c2VySW5mbzpuaWxdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywg
ZmluYWxVUkwpOworICAgIEVYUEVDVF9GQUxTRSh1aVNob3dlZCk7Cit9CisKK1RFU1QoU09BdXRo
b3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRTdXBwcmVzc0FjdGl2ZVNlc3Np
b25XaXRoVUkpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIg
c3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBl
cmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5z
dGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRp
b25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyNChQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihjYW5jZWxBdXRob3JpemF0aW9uKSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2Fu
Y2VsQXV0aG9yaXphdGlvbikpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwg
ZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3Jp
emF0aW9uUGVyZm9ybWVkKTsKKworICAgIGF1dG8gdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byB2aWV3ID0gYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0
XSk7CisgICAgW3ZpZXdDb250cm9sbGVyIHNldFZpZXc6dmlldy5nZXQoKV07CisKKyAgICBbZ0Rl
bGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVy
OnZpZXdDb250cm9sbGVyLmdldCgpIHdpdGhDb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzLCBOU0Vy
cm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgfV07CisgICAgVXRp
bDo6cnVuKCZ1aVNob3dlZCk7CisKKyAgICAvLyBTdXBwcmVzcyB0aGUgbGFzdCBhY3RpdmUgc2Vz
c2lvbi4KKyAgICBhdXRob3JpemF0aW9uUGVyZm9ybWVkID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07
CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uQ2FuY2VsbGVkKTsKKyAgICBVdGlsOjpydW4o
JmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIEVYUEVDVF9GQUxTRSh1aVNob3dlZCk7CisK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBh
ZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0
KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7
IEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dE
ZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBS
ZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVS
TCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIFNob3dVSVR3aWNlKQorewor
ICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXph
dGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRl
KSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRw
SGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1
dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5z
aW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgp
LCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhv
cml6YXRpb25QZXJmb3JtZWQpOworCisgICAgYXV0byB2aWV3Q29udHJvbGxlciA9IGFkb3B0TlMo
W1tUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHZpZXcgPSBhZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1Jl
Y3RdKTsKKyAgICBbdmlld0NvbnRyb2xsZXIgc2V0Vmlldzp2aWV3LmdldCgpXTsKKworICAgIFtn
RGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xs
ZXI6dmlld0NvbnRyb2xsZXIuZ2V0KCkgd2l0aENvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MsIE5T
RXJyb3IgKikgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICB9XTsKKyAgICBV
dGlsOjpydW4oJnVpU2hvd2VkKTsKKworICAgIHVpU2hvd2VkID0gZmFsc2U7CisgICAgW2dEZWxl
Z2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIHByZXNlbnRWaWV3Q29udHJvbGxlcjp2
aWV3Q29udHJvbGxlci5nZXQoKSB3aXRoQ29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcywgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHN1Y2Nlc3MpOworICAgICAgICBFWFBF
Q1RfRVEoZXJyb3IuY29kZSwga1NPRXJyb3JBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uRmFpbGVk
KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGVycm9yLmRvbWFpbiwgImNvbS5hcHBsZS5BcHBT
U08uQXV0aG9yaXphdGlvbkVycm9yIik7CisgICAgICAgIHVpU2hvd2VkID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBVdGlsOjpydW4oJnVpU2hvd2VkKTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
TUFDKQorVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgTlNOb3RpZmljYXRpb25DZW50ZXIp
Cit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIx
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRo
b2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVs
ZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
Omh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVS
TCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhF
eHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigm
YXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRvIHZpZXdDb250cm9sbGVyID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwor
ICAgIGF1dG8gdmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNa
ZXJvUmVjdF0pOworICAgIHsKKyAgICAgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjQoW05TTm90aWZpY2F0aW9uQ2VudGVyIGNsYXNzXSwgQHNlbGVjdG9yKGFkZE9ic2VydmVyRm9y
TmFtZTpvYmplY3Q6cXVldWU6dXNpbmdCbG9jazopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVBZGRPYnNlcnZlckZvck5hbWUpKTsKKyAgICAgICAgW3ZpZXdDb250cm9sbGVyIHNldFZp
ZXc6dmlldy5nZXQoKV07CisgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9y
aXphdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIuZ2V0KCkgd2l0aENv
bXBsZXRpb246XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikgeworICAgICAgICAgICAgRVhQRUNU
X1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIH1dOworICAgICAgICBVdGlsOjpydW4oJnVpU2hvd2Vk
KTsKKyAgICB9CisKKyAgICBnTm90aWZpY2F0aW9uQ2FsbGJhY2sobnVsbHB0cik7CisgICAgRVhQ
RUNUX0ZBTFNFKHVpU2hvd2VkKTsKK30KKyNlbmRpZgorCitURVNUKFNPQXV0aG9yaXphdGlvblBv
cFVwLCBOb0ludGVyY2VwdGlvbnMpCit7CisgICAgcmVzZXRTdGF0ZSgpOworCisgICAgUmV0YWlu
UHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVu
ZXJUZW1wbGF0ZSwgdGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZyk7CisKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAg
IGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUu
Z2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDp0
ZXN0VVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisg
ICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBb
d2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZD
bGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZh
U2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAg
IFV0aWw6OnJ1bigmbmV3V2luZG93Q3JlYXRlZCk7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9u
Q29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0
cmluZywgZmluYWxVUkwpOworfQorCisvLyBGSVhNRSgxNzI2MTQpOiBFbmFibGUgdGhlIGZvbGxv
d2luZyB0ZXN0IGZvciBpT1Mgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmIFBMQVRGT1JNKE1B
QykKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIE5vSW50ZXJjZXB0aW9uc1N1YkZyYW1lKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVn
YXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpo
dHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwg
PSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byBpZnJhbWVUZXN0SHRtbCA9
IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmlu
Zyk7CisgICAgYXV0byB0ZXN0SHRtbCA9IG1ha2VTdHJpbmcoIjxpZnJhbWUgc3R5bGU9J3dpZHRo
OjQwMHB4O2hlaWdodDo0MDBweCcgc3JjZG9jPVwiIiwgaWZyYW1lVGVzdEh0bWwsICJcIiAvPiIp
OworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRl
c3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9u
Q29tcGxldGVkKTsKKworICAgIC8vIFRoZSBuZXcgd2luZG93IHdpbGwgbm90IG5hdmlnYXRlIHRv
IHRoZSB0ZXN0VVJMIGFzIHRoZSBpZnJhbWUgaGFzIHVuaXF1ZSBvcmlnaW4uCisgICAgW3dlYlZp
ZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tz
OjFdOworICAgIFV0aWw6OnJ1bigmbmV3V2luZG93Q3JlYXRlZCk7CisgICAgRVhQRUNUX0ZBTFNF
KGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworfQorI2VuZGlmCisKK1RFU1QoU09BdXRob3JpemF0
aW9uUG9wVXAsIE5vSW50ZXJjZXB0aW9uc1dpdGhvdXRVc2VyR2VzdHVyZSkKK3sKKyAgICByZXNl
dFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRo
VVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJm
b3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3
aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxl
Z2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6
aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0
aW9uV2l0aFVSTCkpOworCisgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgb2YgamF2YVNjcmlwdENh
bk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSBpcyBOTyBvbiBpT1MsIGFuZCBZRVMgb24gbWFjT1Mu
CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVuY2VzLmph
dmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkgPSBZRVM7CisKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDQwMCwgNDAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3
IF9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6IEAid2luZG93Lm9wZW4oJ2h0
dHA6Ly93d3cuZXhhbXBsZS5jb20nKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICBVdGls
OjpydW4oJm5ld1dpbmRvd0NyZWF0ZWQpOworICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9u
UGVyZm9ybWVkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9u
RXJyb3IpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZv
cm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
U2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25X
aXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4g
YmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUy
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RIdG1s
ID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29sdXRlU3Ry
aW5nKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJW
aWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
Zzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdh
dGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENs
aWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2Vs
aWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlj
a01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1
ZSwgImZpbGU6Ly8iLCAxKTsKKworICAgIGF1dGhvcml6YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsK
KyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3Jp
emF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEVycm9yOmFkb3B0TlMoW1tOU0Vy
cm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29kZTowIHVzZXJJ
bmZvOm5pbF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5ld1dpbmRvd0NyZWF0ZWQpOworICAg
IFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHRl
c3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
YXV0aG9yaXphdGlvblBlcmZvcm1lZCk7IC8vIERvbid0IGludGVyY2VwdCB0aGUgZmlyc3QgbmF2
aWdhdGlvbiBpbiB0aGUgbmV3IHdpbmRvdy4KK30KKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BV
cCwgSW50ZXJjZXB0aW9uQ2FuY2VsKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07Cisg
ICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5n
ZXQoKS5hYnNvbHV0ZVN0cmluZyk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAw
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBV
dGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJP
ZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisg
ICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6
YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICAvLyBUaGUgc2VjcmV0IFdL
V2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmlnaHQgdGhlIHdheS4KKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ2FuY2VsOmdB
dXRob3JpemF0aW9uXTsKKyAgICB9CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJXaW5k
b3dDbG9zZWQuIl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEludGVyY2VwdGlv
blN1Y2NlZWRDbG9zZUJ5SXRzZWxmKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAi
aHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0
bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVS
TC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgy
MDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dl
YlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6
bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cisg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAg
YXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFk
ZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byByZXNvbnNlSHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0
bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIndpbmRvdy5jbG9zZSgpOyIpLnV0ZjgoKTsg
Ly8gVGhlIHBvcCB1cCBjbG9zZXMgaXRzZWxmLgorICAgIC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3
IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdodCB0aGUgd2F5LgorICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlk
Q29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBs
ZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgIH0KKyAgICBb
d2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JN
ZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVw
LCBJbnRlcmNlcHRpb25TdWNjZWVkQ2xvc2VCeVBhcmVudCkKK3sKKyAgICByZXNldFN0YXRlKCk7
CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3Bv
bnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNl
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdFVSTCA9
IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1s
ID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpLCAiIiwgImV2
ZW50LnNvdXJjZS5jbG9zZSgpOyIpOyAvLyBUaGUgcGFyZW50IGNsb3NlcyB0aGUgcG9wIHVwLgor
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RI
dG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29t
cGxldGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQ
b2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFU
Rk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIg
Y29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXph
dGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmls
ZTovLyIsIDEpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNw
b25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lv
bjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byByZXNvbnNlSHRtbENT
dHJpbmcgPSBnZW5lcmF0ZUh0bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIpLnV0Zjgo
KTsKKyAgICAvLyBUaGUgc2VjcmV0IFdLV2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmln
aHQgdGhlIHdheS4KKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxlZ2F0ZSBh
dXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpy
ZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOnJlc29uc2VIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0cmluZy5s
ZW5ndGgoKV0pLmdldCgpXTsKKyAgICB9CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJI
ZWxsby4iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4iXTsK
K30KKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9uU3VjY2VlZENsb3Nl
QnlXZWJLaXQpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIg
c3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBl
cmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5z
dGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRp
b25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VS
TD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1w
bGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4
YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1w
bGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwg
NDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dl
YlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAg
ICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1i
ZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0
ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlm
CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhv
cml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICBhdXRvIHJlc3BvbnNl
ID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJM
IHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxd
KTsKKyAgICBhdXRvIHJlc29uc2VIdG1sQ1N0cmluZyA9IGdlbmVyYXRlSHRtbChuZXdXaW5kb3dS
ZXNwb25zZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgIC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3
IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdodCB0aGUgd2F5LgorICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlk
Q29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBs
ZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgIH0KKyAgICBb
d2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JN
ZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVw
LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aE90aGVySHR0cFN0YXR1c0NvZGUpCit7CisgICAgcmVz
ZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVs
ZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJz
Omh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBSZXRh
aW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdl
YktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9w
ZW5lclRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nKTsKKworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0
ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJM
OmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtl
UG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25I
YW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3Jt
ZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImZpbGU6Ly8iLCAxKTsK
KworICAgIC8vIFdpbGwgZmFsbGJhY2sgdG8gd2ViIHBhdGguCisgICAgbmF2aWdhdGlvbkNvbXBs
ZXRlZCA9IGZhbHNlOworICAgIGF1dGhvcml6YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsKKyAgICBh
dXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0
aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6NDAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEi
IGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIHJlc29uc2VIdG1sQ1N0cmluZyA9IGdlbmVy
YXRlSHRtbChuZXdXaW5kb3dSZXNwb25zZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgIFtnRGVs
ZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVz
cG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpyZXNvbnNlSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNvbnNlSHRtbENT
dHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuZXdXaW5kb3dDcmVhdGVk
KTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAgIEVYUEVDVF9XS19T
VFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7CisgICAgRVhQRUNU
X0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworfQorCisvLyBTZXR0aW5nIGNvb2tpZSBp
cyBlbnN1cmVkIGJ5IG90aGVyIHRlc3RzLiBIZXJlIGlzIHRvIGNvdmVyIGlmIHRoZSB3aG9sZSBh
dXRoZW50aWNhdGlvbiBoYW5kc2hha2UgY2FuIGJlIGNvbXBsZXRlZC4KK1RFU1QoU09BdXRob3Jp
emF0aW9uUG9wVXAsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoQ29va2llKQoreworICAgIHJlc2V0
U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0
aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhV
Ukw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZv
cm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVn
YXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAg
SW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpo
dHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRp
b25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0
bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0
ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8g
dGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkp
OworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRl
c3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9u
Q29tcGxldGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tz
QXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQ
TEFURk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUo
KSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9y
aXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAi
ZmlsZTovLyIsIDEpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxS
ZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVy
c2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJTZXQtQ29va2llIiA6IEAic2Vzc2lv
bmlkPTM4YWZlczdhODsifV0pOworICAgIGF1dG8gcmVzb25zZUh0bWxDU3RyaW5nID0gZ2VuZXJh
dGVIdG1sKG5ld1dpbmRvd1Jlc3BvbnNlVGVtcGxhdGUsICIiKS51dGY4KCk7CisgICAgLy8gVGhl
IHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8gYmUgZGVzdHJveWVkIHJpZ2h0IHRoZSB3YXkuCisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpn
QXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkg
aHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpyZXNvbnNlSHRt
bENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNvbnNlSHRtbENTdHJpbmcubGVuZ3RoKCldKS5nZXQo
KV07CisgICAgfQorICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07CisgICAg
W3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJXaW5kb3dDbG9zZWQuIl07Cit9CisKK1RFU1QoU09B
dXRob3JpemF0aW9uUG9wVXAsIEludGVyY2VwdGlvblN1Y2NlZWRUd2ljZSkKK3sKKyAgICByZXNl
dFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRo
VVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJm
b3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3
aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxl
Z2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6
aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0
aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8g
dGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRv
IHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygp
KTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3
LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0
ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlv
bkNvbXBsZXRlZCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAg
ICBhdXRob3JpemF0aW9uUGVyZm9ybWVkID0gZmFsc2U7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
ICAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVt
YmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgICAgIFt3ZWJWaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Cisj
ZW5kaWYKKyAgICAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICAg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAg
ICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGlu
aXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToyMDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIg
aGVhZGVyRmllbGRzOm5pbF0pOworICAgICAgICBhdXRvIHJlc29uc2VIdG1sQ1N0cmluZyA9IGdl
bmVyYXRlSHRtbChuZXdXaW5kb3dSZXNwb25zZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgICAg
ICAvLyBUaGUgc2VjcmV0IFdLV2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmlnaHQgdGhl
IHdheS4KKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBbZ0RlbGVnYXRl
IGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNl
OnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5n
Lmxlbmd0aCgpXSkuZ2V0KCldOworICAgICAgICB9CisgICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JN
ZXNzYWdlOkAiSGVsbG8uIl07CisgICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiV2lu
ZG93Q2xvc2VkLiJdOworICAgIH0KK30KKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgSW50
ZXJjZXB0aW9uU3VjY2VlZFN1cHByZXNzQWN0aXZlU2Vzc2lvbikKK3sKKyAgICByZXNldFN0YXRl
KCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6
YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJl
c3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3Rh
bmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3Mo
KSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJv
ZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0
aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXI0KFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhbmNlbEF1dGhvcml6YXRpb24pLCByZWlu
dGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5jZWxBdXRob3JpemF0aW9uKSk7CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAi
aHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0
bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVS
TC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgy
MDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dl
YlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6
bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cisg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAg
Ly8gU3VwcHJlc3MgdGhlIGxhc3QgYWN0aXZlIHNlc3Npb24uCisgICAgYXV0byBuZXdXZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCA0MDAsIDQwMCkgY29uZmlndXJhdGlvbjp3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRp
b25dKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KG5ld1dlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsK
KyAgICBbbmV3V2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwu
Z2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBhdXRo
b3JpemF0aW9uUGVyZm9ybWVkID0gZmFsc2U7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFtuZXdX
ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNs
aWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbbmV3V2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisg
ICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uQ2FuY2VsbGVkKTsKKyAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1
ZSwgImZpbGU6Ly8iLCAxKTsKKworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAibmV3V2luZG93IiBjb21wbGV0aW9uSGFu
ZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlc3Vs
dCA9PSBhZG9wdE5TKFtOU051bGwgbnVsbF0pLmdldCgpKTsKKyAgICAgICAgbmF2aWdhdGlvbkNv
bXBsZXRlZCA9IHRydWU7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToyMDAgSFRUUFZlcnNpb246QCJI
VFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIGF1dG8gcmVzb25zZUh0bWxDU3RyaW5n
ID0gZ2VuZXJhdGVIdG1sKG5ld1dpbmRvd1Jlc3BvbnNlVGVtcGxhdGUsICIiKS51dGY4KCk7Cisg
ICAgLy8gVGhlIHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8gYmUgZGVzdHJveWVkIHJpZ2h0IHRo
ZSB3YXkuCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9y
aXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9u
c2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpy
ZXNvbnNlSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNvbnNlSHRtbENTdHJpbmcubGVuZ3Ro
KCldKS5nZXQoKV07CisgICAgfQorICAgIFtuZXdXZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVs
bG8uIl07CisgICAgW25ld1dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJXaW5kb3dDbG9zZWQuIl07
Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEludGVyY2VwdGlvblN1Y2NlZWROZXdX
aW5kb3dOYXZpZ2F0aW9uKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
ICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5Q
dHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDov
L3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3Bl
bmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCksIG1ha2VTdHJpbmcoIm5ld1dpbmRvdy5sb2Nh
dGlvbiA9ICciLCBiYXNlVVJMLmdldCgpLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcsICInOyIp
KTsgLy8gU3RhcnRzIGEgbmV3IG5hdmlnYXRpb24gb24gdGhlIG5ldyB3aW5kb3cuCisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFz
ZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5T
TWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElP
UykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVy
Zm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwg
MSk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRU
UC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIHJlc29uc2VIdG1sQ1N0cmluZyA9
IGdlbmVyYXRlSHRtbChuZXdXaW5kb3dSZXNwb25zZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAg
IC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdodCB0aGUg
d2F5LgorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6
YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNl
LmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVz
b25zZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5nLmxlbmd0aCgp
XSkuZ2V0KCldOworICAgIH0KKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJd
OworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOworfQorCitU
RVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBBdXRob3JpemF0aW9uT3B0aW9ucykKK3sKKyAgICBy
ZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25X
aXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5Q
ZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXRE
ZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOwor
ICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRl
cnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworCisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDov
L3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3Bl
bmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKwor
ICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6KE5TVVJMICopVVJM
KFVSTCgpLCAiaHR0cDovL3d3dy53ZWJraXQub3JnIildOworICAgIFV0aWw6OnJ1bigmbmF2aWdh
dGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENs
aWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2Vs
aWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlj
a01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1
ZSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIDEpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlv
blN1YkZyYW1lLCBOb0ludGVyY2VwdGlvbnMpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIFJl
dGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiR2V0U2Vzc2lvbkNvb2tpZSIg
d2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwg
dGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZyk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9y
aXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisg
ICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgp
XTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIiJdOworfQorCitURVNUKFNPQXV0aG9y
aXphdGlvblN1YkZyYW1lLCBOb0ludGVyY2VwdGlvbnNOb25BcHBsZUZpcnN0UGFydHlNYWluRnJh
bWUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0
RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5l
cmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5j
b20iKS5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJMKCksICJodHRwOi8v
d3d3LndlYmtpdC5vcmciKV07CisgICAgLy8gVHJ5IHRvIHdhaXQgdW50aWwgdGhlIGlmcmFtZSBs
b2FkIGlzIGZpbmlzaGVkLgorICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAgLy8gTWFrZSBzdXJl
IHdlIGRvbid0IGludGVyY2VwdCB0aGUgaWZyYW1lLgorICAgIEVYUEVDVF9GQUxTRShhdXRob3Jp
emF0aW9uUGVyZm9ybWVkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50
ZXJjZXB0aW9uRXJyb3IpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dp
enpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnBy
ZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7Cisg
ICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6
bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhv
cml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBDbGFzc01ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBjbGFzc10sIEBz
ZWxlY3Rvcihpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZUlzVVJMRnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIFJldGFpblB0cjxO
U1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiR2V0U2Vzc2lvbkNvb2tpZSIgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07Cisg
ICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5n
ZXQoKS5hYnNvbHV0ZVN0cmluZyk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBb
d2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIm51bGwiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVz
c2FnZTpAIlNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0Il07CisgICAgY2hlY2tBdXRob3JpemF0aW9u
T3B0aW9ucyhmYWxzZSwgImZpbGU6Ly8iLCAyKTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXph
dGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhFcnJvcjphZG9wdE5TKFtbTlNFcnJv
ciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6MCB1c2VySW5m
bzpuaWxdKS5nZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJudWxsIl07Cisg
ICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJTT0F1dGhvcml6YXRpb25EaWRDYW5jZWwiXTsK
KyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIiJdOworICAgIC8vIFRyeXMgdG8gd2FpdCB1
bnRpbCB0aGUgaWZyYW1lIGxvYWQgaXMgZmluaXNoZWQuCisgICAgVXRpbDo6c2xlZXAoMC41KTsK
KyAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgbG9hZCB0aGUgcmVxdWVzdCBvZiB0aGUgaWZyYW1l
IHRvIHRoZSBtYWluIGZyYW1lLgorICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgZmluYWxVUkwpOwor
fQorCitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25TdWNjZXNzKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVn
YXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpo
dHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxl
cjQoW0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIgY2xhc3NdLCBAc2VsZWN0b3IoaXNVUkxGcm9t
QXBwbGVPd25lZERvbWFpbjopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVJc1VSTEZy
b21BcHBsZU93bmVkRG9tYWluKSk7CisKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJo
dHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRt
bChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNP
QXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZp
Z3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkp
OworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpuaWxdOwor
ICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSJdOwor
ICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09BdXRob3JpemF0aW9uRGlkU3RhcnQiXTsK
KyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAibnVsbCIsIDIpOworCisgICAg
YXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFk
ZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byBpZnJhbWVIdG1sQ1N0cmluZyA9IGdlbmVyYXRlSHRt
bChpZnJhbWVUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRp
b246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdl
dCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6aWZyYW1l
SHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDppZnJhbWVIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdl
dCgpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAImh0dHA6Ly93d3cuZXhhbXBsZS5j
b20iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJdOworfQorCitURVNU
KFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aE90aGVySHR0
cFN0YXR1c0NvZGUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNh
blBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAg
SW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6
YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBDbGFzc01ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBjbGFzc10sIEBzZWxl
Y3Rvcihpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZUlzVVJMRnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIFJldGFpblB0cjxOU1VS
TD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1w
bGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiR2V0U2Vzc2lvbkNvb2tpZSIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAg
YXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5nZXQo
KS5hYnNvbHV0ZVN0cmluZyk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcg
bG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBbd2Vi
VmlldyB3YWl0Rm9yTWVzc2FnZTpAIm51bGwiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2Fn
ZTpAIlNPQXV0aG9yaXphdGlvbkRpZFN0YXJ0Il07CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0
aW9ucyhmYWxzZSwgImZpbGU6Ly8iLCAyKTsKKworICAgIC8vIFdpbGwgZmFsbGJhY2sgdG8gd2Vi
IHBhdGguCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBh
bGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjQwMCBIVFRQVmVyc2lv
bjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byBpZnJhbWVIdG1sQ1N0
cmluZyA9IGdlbmVyYXRlSHRtbChpZnJhbWVUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICBbZ0Rl
bGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJl
c3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6aWZyYW1lSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDppZnJhbWVIdG1sQ1N0
cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIm51
bGwiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIlNPQXV0aG9yaXphdGlvbkRpZENh
bmNlbCJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiIl07CisgICAgLy8gVHJ5cyB0
byB3YWl0IHVudGlsIHRoZSBpZnJhbWUgbG9hZCBpcyBmaW5pc2hlZC4KKyAgICBVdGlsOjpzbGVl
cCgwLjUpOworICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBsb2FkIHRoZSByZXF1ZXN0IG9mIHRo
ZSBpZnJhbWUgdG8gdGhlIG1haW4gZnJhbWUuCisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBmaW5h
bFVSTCk7Cit9CisKKy8vIFNldHRpbmcgY29va2llIGlzIGVuc3VyZWQgYnkgb3RoZXIgdGVzdHMu
IEhlcmUgaXMgdG8gY292ZXIgaWYgdGhlIHdob2xlIGF1dGhlbnRpY2F0aW9uIGhhbmRzaGFrZSBj
YW4gYmUgY29tcGxldGVkLgorVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0
aW9uU3VjY2VlZFdpdGhDb29raWUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBDbGFz
c01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBjbGFz
c10sIEBzZWxlY3Rvcihpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZUlzVVJMRnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIGF1dG8g
dGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRv
IHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygp
KTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3
LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0
ZXN0SHRtbCBiYXNlVVJMOm5pbF07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJodHRw
Oi8vd3d3LmV4YW1wbGUuY29tIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJTT0F1
dGhvcml6YXRpb25EaWRTdGFydCJdOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFs
c2UsICJudWxsIiwgMik7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVS
TFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBW
ZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIlNldC1Db29raWUiIDogQCJzZXNz
aW9uaWQ9MzhhZmVzN2E4OyJ9XSk7CisgICAgYXV0byBpZnJhbWVIdG1sQ1N0cmluZyA9IGdlbmVy
YXRlSHRtbChpZnJhbWVUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhv
cml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3Bv
bnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6
aWZyYW1lSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDppZnJhbWVIdG1sQ1N0cmluZy5sZW5ndGgo
KV0pLmdldCgpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAImh0dHA6Ly93d3cuZXhh
bXBsZS5jb20iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJdOworfQor
CitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25TdWNjZXNzVHdpY2Up
Cit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIx
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRo
b2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVs
ZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
Omh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6
bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBjbGFzc10sIEBzZWxlY3Rvcihpc1VSTEZy
b21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUlzVVJM
RnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwg
Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVI
dG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpKTsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29u
ZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBhdXRob3Jp
emF0aW9uUGVyZm9ybWVkID0gZmFsc2U7CisgICAgICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBm
YWxzZTsKKworICAgICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJM
Om5pbF07CisgICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiaHR0cDovL3d3dy5leGFt
cGxlLmNvbSJdOworICAgICAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIlNPQXV0aG9yaXph
dGlvbkRpZFN0YXJ0Il07CisgICAgICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2Us
ICJudWxsIiwgMik7CisKKyAgICAgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQ
VmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgICAgIGF1dG8gaWZy
YW1lSHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0bWwoaWZyYW1lVGVtcGxhdGUsICIiKS51dGY4KCk7
CisgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21w
bGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczppZnJhbWVIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3Ro
OmlmcmFtZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgICAgICBbd2ViVmlldyB3
YWl0Rm9yTWVzc2FnZTpAImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iXTsKKyAgICAgICAgW3dlYlZp
ZXcgd2FpdEZvck1lc3NhZ2U6QCJIZWxsby4iXTsKKyAgICB9Cit9CisKK1RFU1QoU09BdXRob3Jp
emF0aW9uU3ViRnJhbWUsIEF1dGhvcml6YXRpb25PcHRpb25zKQoreworICAgIHJlc2V0U3RhdGUo
KTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVz
cG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIy
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9k
eTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMKSk7CisKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1w
bGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0
ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJMKCksICJo
dHRwOi8vd3d3LmFwcGxlLmNvbSIpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAImh0
dHA6Ly93d3cuZXhhbXBsZS5jb20iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIlNP
QXV0aG9yaXphdGlvbkRpZFN0YXJ0Il07CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhm
YWxzZSwgImh0dHA6Ly93d3cuYXBwbGUuY29tIiwgMik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372164</attachid>
            <date>2019-06-14 19:05:09 -0700</date>
            <delta_ts>2019-06-17 11:52:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198874-20190614190508.patch</filename>
            <type>text/plain</type>
            <size>236129</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVkZjJjZWZkNGM1NzQ3Nzc3OTQxNDI3
M2NhY2NiZTk0ZjkyOWE2MjEuLmE1ZjIyOWU2YTE2N2Q3MzZjOTQ3MDgyNzI1MzQ3NjY1YWYxYmVm
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDYtMTQgIEppZXdlbiBUYW4gIDxqaWV3ZW5f
dGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNPQXV0aG9yaXphdGlvbiBmcm9tIFdlYktp
dEFkZGl0aW9ucyB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc1NzM0MzE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKyAgICAgICAgQWRkcyBhIGZlYXR1cmUgZmxhZyB0byBkZXRlY3QgQXBwU1NPIGZy
YW1ld29yay4KKwogMjAxOS0wNi0xMiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFNob3cgdGhlIHdlYiBwYWdlIFVSTCB3aGVuIHNoYXJpbmcgYW4gQVIgbW9k
ZWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGVlMDU2NzgyMzYxNTdkY2YxZGFkNTA3ZTY3MzQwZWFi
NDNkNjQ0YTAuLjEyYmM5YmQ0MzNlMmZlNGU4M2E2N2RlM2FjN2U0ZWU5MjJkNTgyNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTA2LTE0ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTT0F1dGhvcml6YXRpb24gZnJv
bSBXZWJLaXRBZGRpdGlvbnMgdG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ3NTcz
NDMxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbW92ZXMgQXBwU1NPU29mdExpbmsgZnJvbSBXZWJLaXRBZGRpdGlvbnMgdG8gV2Vi
S2l0LCBhbmQgaW50cm9kdWNlcworICAgICAgICBBdXRoS2l0U1BJLmguCisKKyAgICAgICAgKiBQ
QUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWwvY29jb2EvQXBwU1NP
U29mdExpbmsuaDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UZXN0TG9hZE9wdGltaXplci5tbS4KKyAgICAgICAgKiBwYWwvY29jb2EvQXBwU1NPU29m
dExpbmsubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogcGFsL3NwaS9jZi9DRk5ldHdvcmtT
UEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL2NvY29hL0F1dGhLaXRTUEkuaDogQ29waWVkIGZyb20g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5t
bS4KKwogMjAxOS0wNi0xNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIERpc2FibGUgQXBwU1NPIGZvciB3ZWIgcHJvY2Vzc2VzIGFuZCBwbHVnaW4gcHJvY2Vz
c2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGY4ZTNiMDFjNjZhZjc1ZGVjMTEyMjA5N2JiM2ZkMmI4MTgzZGQ5NGEu
LjUzYzMzMWNlNzE2ZWRkMDcwOTA0YmFkMDA5ZGVjOGQ3NjhlMDM1MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTE0IEBACisyMDE5LTA2LTE0ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSBTT0F1dGhvcml6YXRpb24gZnJvbSBXZWJLaXRBZGRpdGlvbnMg
dG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTg4NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ3NTczNDMxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYmFzaWNhbGx5
IG1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSBleGlzdGluZyBXZWJLaXRBZGRpdGlvbnMgdG8gV2ViS2l0
LgorICAgICAgICBCZXNpZGVzLCBpdCByZXBsYWNlcyBhbGwgdGhlIGxvYWQgb3B0aW1pemVyIG5v
bnNlbnNlcyB3aXRoIFNPQXV0aG9yaXphdGlvbi4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25z
L1dlYktpdC54Y2NvbmZpZzoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpO
ZXR3b3JrU2Vzc2lvbkNvY29hKToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Q
cm9jZXNzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVQbHVnaW5Qcm9jZXNzKToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6OnRyeVNP
QXV0aG9yaXphdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRyeUludGVyY2VwdE5hdmlnYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojp0cnlPcHRp
bWl6aW5nTG9hZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OmNhbGxiYWNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlv
blNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6fk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwp
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6d2Vi
Vmlld0RpZE1vdmVUb1dpbmRvdyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b24ubW06IEFkZGVkLgorICAgICAgICAoLVtXS1NPU2VjcmV0RGVsZWdhdGUgaW5pdFdpdGhTZXNz
aW9uOl0pOgorICAgICAgICAoLVtXS1NPU2VjcmV0RGVsZWdhdGUgd2ViVmlld0RpZENsb3NlOl0p
OgorICAgICAgICAoLVtXS1NPU2VjcmV0RGVsZWdhdGUgd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tTT1NlY3Jl
dERlbGVnYXRlIHdlYlZpZXc6ZGlkRmluaXNoTmF2aWdhdGlvbjpdKToKKyAgICAgICAgKFdlYktp
dDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b24pOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246On5Qb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpQ
b3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJu
YWwpOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBs
ZXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9u
Ojppbml0U2VjcmV0V2ViVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDogQ29waWVkIGZyb20gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5tbS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0U09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1Rv
V2ViUGF0aEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjphYm9ydEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6
UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRv
ci5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW06IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6U09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3IpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6Y2FuQXV0
aG9yaXplIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uQ29vcmRpbmF0
b3I6OnRyeUF1dGhvcml6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNVUkxF
eHRyYXMubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICgrW05TVVJMIF93ZWJfY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6cGFnZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpuYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW06IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpTT0F1dGhvcml6
YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
flNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpyZWxlYXNlTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNP
QXV0aG9yaXphdGlvblNlc3Npb246OmJlY29tZUNvbXBsZXRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlNP
QXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6U09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6Y29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpwcmVzZW50Vmlld0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpkaXNtaXNzVmlld0NvbnRyb2xsZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmg6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OlN1YkZyYW1lU09BdXRo
b3JpemF0aW9uU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6
OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5h
bCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVm
b3JlU3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Np
b246OmxvYWREYXRhVG9GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6cG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudCk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRl
Lmg6IFJlbmFtZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbTogQWRkZWQuCisgICAgICAgICgtW1dL
U09BdXRob3JpemF0aW9uRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpwcmVzZW50Vmlld0NvbnRyb2xs
ZXI6d2l0aENvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLU09BdXRob3JpemF0aW9uRGVsZWdh
dGUgYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ2FuY2VsOl0pOgorICAgICAgICAoLVtXS1NP
QXV0aG9yaXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb25EaWRDb21wbGV0ZTpdKToKKyAgICAg
ICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmRpZENvbXBsZXRl
V2l0aEhUVFBBdXRob3JpemF0aW9uSGVhZGVyczpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpo
dHRwQm9keTpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3Jp
emF0aW9uOmRpZENvbXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtXS1NPQXV0aG9yaXph
dGlvbkRlbGVnYXRlIHNldFNlc3Npb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRyeVNPQXV0aG9yaXphdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlTmV3UGFnZSk6CisgICAgICAg
IChXZWJLaXQ6OnRyeU9wdGltaXppbmdMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hv
dWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhv
cml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2Ev
V2ViUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVQcm9jZXNzKToKKwogMjAxOS0wNi0xNCAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgQXBwU1NPIGZvciB3ZWIgcHJvY2Vzc2Vz
IGFuZCBwbHVnaW4gcHJvY2Vzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBkNTZiMGIyOWNkYTM3MzUyNmI0
MzJlNTQ0Njg0ZTk2MDllMmRlZWU4Li4xZWI3OTk3MGE3NzQwMDI4NmM0NTRiOTNlZDk3ZDdhOWZi
ZmEzMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTE1NzEsMyArMTU3MSw2IEBACiAjZGVmaW5lIEhBVkVf
Q09SRVRFWFRfQVVUT19PUFRJQ0FMX1NJWklORyAxCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8fCBQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNTAwKQor
I2RlZmluZSBIQVZFX0FQUF9TU08gMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
UEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzY1NjM3ODM1NzU3ZjA2ZGE4ZDRl
YzZiNzc3NTg1ZTQyZDRlZWZkOC4uYWI4NWU0OGJmODVlMmNjMWNlZmMxNjFlNWNkZTJkZjRiOGYw
ZDk5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTIwLDYgKzEyMCw5IEBACiAJCTQ0RTFBOEIwMjFGQTU0RUIwMEMzMDQ4RSAv
KiBMb29rdXBTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0RTFBOEFFMjFGQTU0REEwMEMzMDQ4RSAvKiBMb29rdXBTb2Z0TGluay5tbSAq
LzsgfTsKIAkJNTcwQUI4RjEyMEFFMkU4RDAwQjhCRTg3IC8qIFNlY0tleVByb3h5U1BJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzBBQjhGMDIwQUUy
RThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCAqLzsgfTsKIAkJNTcwQUI4RjkyMEFGNkUz
RDAwQjhCRTg3IC8qIE5TWFBDQ29ubmVjdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwQUI4RjgyMEFGNkUzRDAwQjhCRTg3IC8qIE5TWFBD
Q29ubmVjdGlvblNQSS5oICovOyB9OworCQk1NzJBMTA3ODIyQjQ1NkY1MDBGNDEwQzggLyogQXV0
aEtpdFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTcyQTEwNzcyMkI0NTZGNTAwRjQxMEM4IC8qIEF1dGhLaXRTUEkuaCAqLzsgfTsKKwkJNTdGRDMx
OEEyMkIzNTkzRTAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxODkyMkIzNTkzRTAwOEQwRThCIC8q
IEFwcFNTT1NvZnRMaW5rLm1tICovOyB9OworCQk1N0ZEMzE4QjIyQjM1OTg5MDA4RDBFOEIgLyog
QXBwU1NPU29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3RkQzMTg4MjJCMzU5MkYwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oICovOyB9
OwogCQk2M0M3RURDNzIxQUZBRTA0MDA2QTdCOTkgLyogTlNQcm9ncmVzc1NQSS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNFMzY5RjkyMUFGQTgzRjAw
MUMxNEJDIC8qIE5TUHJvZ3Jlc3NTUEkuaCAqLzsgfTsKIAkJN0ExNjU2NDQxRjk3QjJCOTAwQkEz
Q0U0IC8qIE5TS2V5ZWRBcmNoaXZlclNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0ExNjU2NDMxRjk3QjJCODAwQkEzQ0U0IC8qIE5TS2V5ZWRBcmNo
aXZlclNQSS5oICovOyB9OwogCQk3QTM2RDBGOTIyM0FEOUFCMDBCMDUyMkUgLyogQ29tbW9uQ3J5
cHRvU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QTM2RDBGODIyM0FEOUFCMDBCMDUyMkUgLyogQ29tbW9uQ3J5cHRvU1BJLmggKi87IH07CkBAIC0y
ODQsNiArMjg3LDkgQEAKIAkJNDRFMUE4QUUyMUZBNTREQTAwQzMwNDhFIC8qIExvb2t1cFNvZnRM
aW5rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9va3VwU29mdExpbmsubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOEYwMjBBRTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQ
cm94eVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNLZXlQcm94eVNQSS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzBBQjhGODIwQUY2RTNEMDBCOEJFODcgLyogTlNYUENDb25uZWN0
aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5TWFBDQ29ubmVjdGlvblNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1NzJBMTA3NzIyQjQ1NkY1MDBGNDEwQzggLyogQXV0aEtpdFNQ
SS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdXRoS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3RkQzMTg4MjJCMzU5MkYwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBTU09Tb2Z0TGluay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE4OTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29m
dExpbmsubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBTU09T
b2Z0TGluay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNFMzY5RjkyMUFGQTgz
RjAwMUMxNEJDIC8qIE5TUHJvZ3Jlc3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNQcm9ncmVzc1NQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTE2NTY0MzFGOTdCMkI4MDBCQTND
RTQgLyogTlNLZXllZEFyY2hpdmVyU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5TS2V5ZWRBcmNoaXZlclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QTM2RDBGODIyM0FEOUFCMDBCMDUyMkUgLyogQ29tbW9uQ3J5cHRvU1BJLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbkNyeXB0b1NQSS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzkwLDYgKzM5Niw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCTJEMDJFOTNCMjA1NkZBQTcwMEExMzc5NyAvKiBBdWRpb1Rvb2xib3hT
UEkuaCAqLywKKwkJCQk1NzJBMTA3NzIyQjQ1NkY1MDBGNDEwQzggLyogQXV0aEtpdFNQSS5oICov
LAogCQkJCTBDMkRBMTIyMUYzQkVCNDkwMERCQzMxNyAvKiBBVktpdFNQSS5oICovLAogCQkJCTBD
MkRBMTIzMUYzQkVCNDkwMERCQzMxNyAvKiBDRk5TVVJMQ29ubmVjdGlvblNQSS5oICovLAogCQkJ
CTdBMzZEMEY4MjIzQUQ5QUIwMEIwNTIyRSAvKiBDb21tb25DcnlwdG9TUEkuaCAqLywKQEAgLTU3
OSw2ICs1ODYsOCBAQAogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VFQkQgLyogY29jb2EgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU3RkQzMTg4MjJCMzU5
MkYwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oICovLAorCQkJCTU3RkQzMTg5MjJCMzU5M0Uw
MDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5tbSAqLywKIAkJCQkwNzdFODdCMDIyNkE0NjAyMDBB
MkFGRjAgLyogQVZGb3VuZGF0aW9uU29mdExpbmsuaCAqLywKIAkJCQkwNzdFODdBRjIyNkE0NjAy
MDBBMkFGRjAgLyogQVZGb3VuZGF0aW9uU29mdExpbmsubW0gKi8sCiAJCQkJRjQ0MjkxNjYxRkE1
MjcwNTAwMkNDOTNFIC8qIEZpbGVTaXplRm9ybWF0dGVyQ29jb2EubW0gKi8sCkBAIC02NzcsNyAr
Njg2LDkgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTU3RkQzMThCMjJCMzU5ODkwMDhE
MEU4QiAvKiBBcHBTU09Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQwMkU5M0MyMDU2
RkFBNzAwQTEzNzk3IC8qIEF1ZGlvVG9vbGJveFNQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTcy
QTEwNzgyMkI0NTZGNTAwRjQxMEM4IC8qIEF1dGhLaXRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA3N0U4N0IyMjI2QTQ2MDMwMEEyQUZGMCAvKiBBVkZvdW5kYXRpb25Tb2Z0TGluay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEM3Nzg1ODkxRjQ1MTMwRjAwRjRFQkI2IC8qIEFWRm91bmRhdGlvblNQ
SS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEMyREExM0UxRjNCRUI0OTAwREJDMzE3IC8qIEFWS2l0
U1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTg0Myw2ICs4NTQsNyBAQAogCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBlbjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdp
b25zID0gKAorCQkJCWVuLAogCQkJCUVuZ2xpc2gsCiAJCQkJSmFwYW5lc2UsCiAJCQkJRnJlbmNo
LApAQCAtODg0LDYgKzg5Niw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1N0ZEMzE4
QTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkwNzdFODdCMTIyNkE0NjAyMDBBMkFGRjAgLyogQVZGb3VuZGF0aW9uU29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQkwQzVGRkYwRjFGNzhEOURBMDA5RUZGMUEgLyogQ2xvY2tDTS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTBDRjk5Q0E4MUY3Mzg0MzcwMDdFRTc5MyAvKiBDb3JlTWVkaWFT
b2Z0TGluay5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY29j
b2EvQXBwU1NPU29mdExpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTRjNTM3ZmY0ZTJlOWRmMjA3N2QwMmM5
MmE3MzFhMGExYzk3Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVBQX1NTTykKKworI2ltcG9ydCA8QXBwU1NPL0FwcFNT
Ty5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUktf
Rk9SX0hFQURFUihQQUwsIEFwcFNTTyk7CisKK1NPRlRfTElOS19DTEFTU19GT1JfSEVBREVSKFBB
TCwgU09BdXRob3JpemF0aW9uKTsKKworU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoUEFM
LCBBcHBTU08sIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQsIE5TU3Ry
aW5nKik7CisjZGVmaW5lIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQg
UEFMOjpnZXRfQXBwU1NPX1NPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQo
KQorCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihQQUwsIEFwcFNTTywgU09FcnJvckRv
bWFpbiwgTlNFcnJvckRvbWFpbik7CisjZGVmaW5lIFNPRXJyb3JEb21haW4gUEFMOjpnZXRfQXBw
U1NPX1NPRXJyb3JEb21haW4oKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvY29jb2EvQXBwU1NPU29mdExpbmsubW0gYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2NvY29hL0FwcFNTT1NvZnRMaW5rLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmMWNkMjA3NjBlMjY2NTQ0MWQz
MmNhOGM0ZDFkNzA0ZTczZmQwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2NvY29hL0FwcFNTT1NvZnRMaW5rLm1tCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX0ZPUl9TT1VSQ0VfV0lU
SF9FWFBPUlQoUEFMLCBBcHBTU08sIFBBTF9FWFBPUlQpOworCisjaWYgUExBVEZPUk0oTUFDKQor
U09GVF9MSU5LX0NMQVNTX0ZPUl9TT1VSQ0VfT1BUSU9OQUxfV0lUSF9FWFBPUlQoUEFMLCBBcHBT
U08sIFNPQXV0aG9yaXphdGlvbiwgUEFMX0VYUE9SVCk7CisjZWxzZQorU09GVF9MSU5LX0NMQVNT
X0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBBcHBTU08sIFNPQXV0aG9yaXphdGlvbiwgUEFM
X0VYUE9SVCk7CisjZW5kaWYKKworU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0VfV0lUSF9F
WFBPUlQoUEFMLCBBcHBTU08sIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0
ZWQsIE5TU3RyaW5nKiwgUEFMX0VYUE9SVCk7CisKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09V
UkNFX1dJVEhfRVhQT1JUKFBBTCwgQXBwU1NPLCBTT0Vycm9yRG9tYWluLCBOU0Vycm9yRG9tYWlu
LCBQQUxfRVhQT1JUKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2Nm
L0NGTmV0d29ya1NQSS5oCmluZGV4IDE4MmZmOGJlNjUxYThkMjYyY2M2ODY0M2YyZGFkZGQyNjY1
OTRiNzUuLjQ1NTcwODVkODBlMDM3MDRhMzJiYmU4M2JmZWEyNTk3ZjEyYTZhMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oCkBAIC0yMzYsNyArMjM2
LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgTlNVUkxTZXNzaW9uQ29tcGFuaW9uUHJv
eHlQcmVmZXJlbmNlKSB7CiAjaWYgSEFWRShDRk5FVFdPUktfTlNVUkxTRVNTSU9OX1NUUklDVFJV
U1RFVkFMVUFURSkKICsgKHZvaWQpX3N0cmljdFRydXN0RXZhbHVhdGU6KE5TVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgcXVldWU6KGRpc3BhdGNoX3F1ZXVlX3QpcXVldWUg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
KmNoYWxsZW5nZSwgT1NTdGF0dXMgdHJ1c3RSZXN1bHQpKWNiOwogI2VuZGlmCi0jaWYgSEFWRShM
T0FEX09QVElNSVpFUikKKyNpZiBIQVZFKEFQUF9TU08pCiArICh2b2lkKV9kaXNhYmxlQXBwU1NP
OwogI2VuZGlmCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9j
b2NvYS9BdXRoS2l0U1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9BdXRo
S2l0U1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM4MmVjOTM3Yjk1NDYxZTU5YTMxNWY5Mjc1ODdjOWM1Njhh
YTkwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29h
L0F1dGhLaXRTUEkuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisj
aW1wb3J0IDxBdXRoS2l0L0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIuaD4KKworI2Vsc2UKKwor
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBBS0F1dGhvcml6YXRpb25Db250
cm9sbGVyIDogTlNPYmplY3QKKworKyAoQk9PTClpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOihO
U1VSTCAqKXVybDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8v
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNlbmRpZiAvLyBIQVZFKEFQUF9TU08pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZyBiL1Nv
dXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvV2ViS2l0LnhjY29uZmlnCmluZGV4IGQ5ZGRhMmM5
N2VlNjQ0MmFjYzQ0YTI4MjQ4MWE1YzFjYTI4ZmJkNjcuLjQzMGY3ZGYyYjVkYmRkMDM4NGRhNWY5
NzkwNTUzNjVjYjkzOTU1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlv
bnMvV2ViS2l0LnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvV2Vi
S2l0LnhjY29uZmlnCkBAIC0xMjcsNyArMTI3LDE0IEBAIFdLX1VSTF9GT1JNQVRUSU5HX0xERkxB
R1NfWUVTID0gLWZyYW1ld29yayBVUkxGb3JtYXR0aW5nOwogV0tfV0VCSU5TUEVDVE9SVUlfTERG
TEFHUyA9ICQoV0tfV0VCSU5TUEVDVE9SVUlfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsK
IFdLX1dFQklOU1BFQ1RPUlVJX0xERkxBR1NfbWFjb3N4ID0gLXdlYWtfZnJhbWV3b3JrIFdlYklu
c3BlY3RvclVJOwogCi1GUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHUyA9IC1sb2JqYyAtZnJh
bWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVBdWRpbyAtZnJhbWV3b3JrIENvcmVGb3Vu
ZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQgLWZyYW1l
d29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIElPS2l0IC1mcmFt
ZXdvcmsgV2ViS2l0TGVnYWN5IC1sbmV0d29yayAkKFdLX0FDQ0VTU0lCSUxJVFlfTERGTEFHUykg
JChXS19BUFBLSVRfTERGTEFHUykgJChXS19BU1NFUlRJT05fU0VSVklDRVNfTERGTEFHUykgJChX
S19DQVJCT05fTERGTEFHUykgJChXS19DT1JFX1BERl9MREZMQUdTKSAkKFdLX0NPUkVfUFJFRElD
VElPTl9MREZMQUdTKSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19ERVZJQ0VfSURF
TlRJVFlfTERGTEFHUykgJChXS19HUkFQSElDU19TRVJWSUNFU19MREZMQUdTKSAkKFdLX0lPU1VS
RkFDRV9MREZMQUdTKSAkKFdLX0xJQlNBTkRCT1hfTERGTEFHUykgJChXS19MSUJXRUJSVENfTERG
TEFHUykgJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX01PQklMRV9HRVNU
QUxUX0xERkxBR1MpICQoV0tfT1BFTkdMX0xERkxBR1MpICQoV0tfUERGS0lUX0xERkxBR1MpICQo
V0tfU0FGRV9CUk9XU0lOR19MREZMQUdTKSAkKFdLX1NFQ1VSSVRZX0lOVEVSRkFDRV9MREZMQUdT
KSAkKFdLX1VJS0lUX0xERkxBR1MpICQoV0tfVVJMX0ZPUk1BVFRJTkdfTERGTEFHUykgJChXS19X
RUJJTlNQRUNUT1JVSV9MREZMQUdTKTsKK1dLX0FVVEhLSVRfTERGTEFHUyA9ICQoV0tfQVVUSEtJ
VF9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tfQVVUSEtJVF9MREZMQUdTX2lwaG9u
ZW9zID0gJChXS19BVVRIS0lUX0xERkxBR1MkKFdLX0lPU18xMykpOworV0tfQVVUSEtJVF9MREZM
QUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfQVVUSEtJVF9MREZMQUdTJChXS19JT1NfMTMpKTsK
K1dLX0FVVEhLSVRfTERGTEFHU19JT1NfU0lOQ0VfMTMgPSAtZnJhbWV3b3JrIEF1dGhLaXQ7CitX
S19BVVRIS0lUX0xERkxBR1NfbWFjb3N4ID0gJChXS19BVVRIS0lUX0xERkxBR1MkKFdLX01BQ09T
XzEwMTUpKTsKK1dLX0FVVEhLSVRfTERGTEFHU19NQUNPU19TSU5DRV8xMDE1ID0gLWZyYW1ld29y
ayBBdXRoS2l0OworCitGUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHUyA9IC1sb2JqYyAtZnJh
bWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVBdWRpbyAtZnJhbWV3b3JrIENvcmVGb3Vu
ZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQgLWZyYW1l
d29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIElPS2l0IC1mcmFt
ZXdvcmsgV2ViS2l0TGVnYWN5IC1sbmV0d29yayAkKFdLX0FDQ0VTU0lCSUxJVFlfTERGTEFHUykg
JChXS19BUFBLSVRfTERGTEFHUykgJChXS19BU1NFUlRJT05fU0VSVklDRVNfTERGTEFHUykgJChX
S19BVVRIS0lUX0xERkxBR1MpICQoV0tfQ0FSQk9OX0xERkxBR1MpICQoV0tfQ09SRV9QREZfTERG
TEFHUykgJChXS19DT1JFX1BSRURJQ1RJT05fTERGTEFHUykgJChXS19DT1JFX1NFUlZJQ0VTX0xE
RkxBR1MpICQoV0tfREVWSUNFX0lERU5USVRZX0xERkxBR1MpICQoV0tfR1JBUEhJQ1NfU0VSVklD
RVNfTERGTEFHUykgJChXS19JT1NVUkZBQ0VfTERGTEFHUykgJChXS19MSUJTQU5EQk9YX0xERkxB
R1MpICQoV0tfTElCV0VCUlRDX0xERkxBR1MpICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERG
TEFHUykgJChXS19NT0JJTEVfR0VTVEFMVF9MREZMQUdTKSAkKFdLX09QRU5HTF9MREZMQUdTKSAk
KFdLX1BERktJVF9MREZMQUdTKSAkKFdLX1NBRkVfQlJPV1NJTkdfTERGTEFHUykgJChXS19TRUNV
UklUWV9JTlRFUkZBQ0VfTERGTEFHUykgJChXS19VSUtJVF9MREZMQUdTKSAkKFdLX1VSTF9GT1JN
QVRUSU5HX0xERkxBR1MpICQoV0tfV0VCSU5TUEVDVE9SVUlfTERGTEFHUyk7CiAKIC8vIFByZXZl
bnQgQysrIHN0YW5kYXJkIGxpYnJhcnkgYmFzaWNfc3RyaW5nc3RyZWFtLCBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCiBVTkVYUE9SVEVEX1NZTUJPTF9MREZMQUdTID0gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5
bWJvbCAtV2wsX19aVElTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19a
VFNTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFNTdDlleGNlcHRp
b24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aZGxQdlNfIC1XbCwtdW5leHBvcnRlZF9z
eW1ib2wgLVdsLF9fWm53bVB2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWm53bSAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3JlMTJQ
b2xpY3lBY3Rpb25FRUVDMkVPUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNf
XzE4ZnVuY3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRUMxRU9TNF8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCAtV2wsX19aTlN0M19fMThmdW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5
QWN0aW9uRUVFYVNFRG4gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTktTdDNfXzE4ZnVu
Y3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRWNsRVMyXyAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3JlMTJQb2xpY3lBY3Rpb25F
RUU0c3dhcEVSUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rp
b25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRUMxRVJLUzRfIC1XbCwtdW5leHBvcnRlZF9z
eW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVF
RUMyRVJLUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25J
RnZON1dlYkNvcmUxMlBvbGljeUFjdGlvbkVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAt
V2wsX19aTlN0M19fMThmdW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9uRUVFRDJFdiAt
V2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3Jl
MTJQb2xpY3lBY3Rpb25FRUVhU0VSS1M0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pU
Vk5TdDNfXzExN2JhZF9mdW5jdGlvbl9jYWxsRSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxf
X1pUQ05TdDNfXzExOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185
YWxsb2NhdG9ySWNFRUVFMF9OU18xM2Jhc2ljX2lzdHJlYW1JY1MyX0VFIC1XbCwtdW5leHBvcnRl
ZF9zeW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJf
dHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUwX05TXzE0YmFzaWNfaW9zdHJlYW1JY1MyX0VF
IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3Ry
ZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUxNl9OU18xM2Jhc2lj
X29zdHJlYW1JY1MyX0VFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRUTlN0M19fMTE4
YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VF
RUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFZOU3QzX18xMTViYXNpY19zdHJpbmdi
dWZJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRSAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sIC1XbCxfX1pUVk5TdDNfXzExOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFy
X3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVds
LF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5T
XzlhbGxvY2F0b3JJY0VFRUU4X05TXzEzYmFzaWNfb3N0cmVhbUljUzJfRUU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW0KaW5kZXggMjYyNTBkNmU0ZmI3MzVjMzI5MmM0OGFhYTA3YmU3N2UyZDFkN2JiYy4uYmRi
ZjliNDVjYzNmZTVlMDRjZTZhMGUxOGRkODAzOGFmMjFhZDQyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5t
bQpAQCAtOTQyLDggKzk0Miw4IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9u
Q29jb2EoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrCiAKICAgICBOU1VS
TFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclNl
c3Npb25JRChtX3Nlc3Npb25JRCk7CiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotICAgIE5F
VFdPUktTRVNTSU9OQ09DT0FfTE9BRE9QVElNSVpFUl9BRERJVElPTlMKKyNpZiBIQVZFKEFQUF9T
U08pCisgICAgY29uZmlndXJhdGlvbi5fcHJldmVudHNBcHBTU08gPSB0cnVlOwogI2VuZGlmCiAK
ICNpZiBVU0UoQ0ZORVRXT1JLX0FVVE9fQURERURfSFRUUF9IRUFERVJfU1VQUFJFU1NJT04pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMu
bW0KaW5kZXggNzg3YmNiYWU0MTA1NWM1N2I0ZjU5YWFlNmQ1Zjk4MjJkMzE2MDVhNi4uZDYwMDM3
ZmQzZWM2NTZkNzVkNzA2N2QzMmEyZTM0MzcxZmQwZDAwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbQpAQCAtNDA1LDcgKzQw
NSw3IEBAIHZvaWQgUGx1Z2luUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUGx1Z2luUHJvY2Vz
cyhQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0CiAgICAgLy8gRGlzYWJsZSBEYXJrIE1vZGUg
aW4gdGhlIHBsdWdpbiBwcm9jZXNzIHRvIGF2b2lkIHJlbmRlcmluZyBpc3N1ZXMuCiAgICAgW05T
QXBwIHNldEFwcGVhcmFuY2U6W05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJh
bmNlTmFtZUFxdWFdXTsKICNlbmRpZgotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCisjaWYgSEFW
RShBUFBfU1NPKQogICAgIFtOU1VSTFNlc3Npb24gX2Rpc2FibGVBcHBTU09dOwogI2VuZGlmCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNDY2MTdiZTg2MjRjOWI4ZDlhNGFlMjFmMWY5OWQz
NzYyZjRlYWYzOS4uMjdkY2YwOTQzYTcxYTA2NzM2MDA4OTY3MWE3MmI3MDI5ZmZkMmI5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dApAQCAtMzI4LDYgKzMyOCwxNSBAQCBVSVByb2Nlc3MvQXV0b21h
dGlvbi9pb3MvV2ViQXV0b21hdGlvblNlc3Npb25JT1MubW0KIAogVUlQcm9jZXNzL0F1dG9tYXRp
b24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCiAKK1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KK1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCitV
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25D
b29yZGluYXRvci5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6
YXRpb25OU1VSTEV4dHJhcy5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tCitVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tCisKIFVJUHJvY2Vzcy9Db2NvYS9B
dXRvbWF0aW9uQ2xpZW50Lm1tCiBVSVByb2Nlc3MvQ29jb2EvQXV0b21hdGlvblNlc3Npb25DbGll
bnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgKaW5kZXgg
YzE1MjhmOGI1MTUyYWY1ZmE3ODEyN2ZjNTYxODdmYzA3OTJmNzU3Zi4uNGY4MWZkZjFhNDkwZDVj
MGNiZWI1NWU5ZWY5ZWY5NDY2OTUwMzc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCkBAIC02OSw4ICs2OSw5IEBAIHB1YmxpYzoK
IAogICAgIE5hdmlnYXRpb24qIG1haW5GcmFtZU5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X21haW5GcmFtZU5hdmlnYXRpb24uZ2V0KCk7IH0KIAotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIp
Ci1BUElOQVZJR0FUSU9OQUNUSU9OX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzEKKyNpZiBIQVZF
KEFQUF9TU08pCisgICAgYm9vbCBzaG91bGRQZXJmb3JtU09BdXRob3JpemF0aW9uKCkgeyByZXR1
cm4gbV9zaG91bGRQZXJmb3JtU09BdXRob3JpemF0aW9uOyB9CisgICAgdm9pZCB1bnNldFNob3Vs
ZFBlcmZvcm1TT0F1dGhvcml6YXRpb24oKSB7IG1fc2hvdWxkUGVyZm9ybVNPQXV0aG9yaXphdGlv
biA9IGZhbHNlOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTEwMCw4ICsxMDEsOCBAQCBwcml2
YXRlOgogICAgIFdURjo6VVJMIG1fb3JpZ2luYWxVUkw7CiAKICAgICBib29sIG1fc2hvdWxkT3Bl
bkFwcExpbmtzOwotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1BUElOQVZJR0FUSU9OQUNUSU9O
X0xPQURPUFRJTUlaRVJfQURESVRJT05TXzIKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgYm9vbCBt
X3Nob3VsZFBlcmZvcm1TT0F1dGhvcml6YXRpb24geyB0cnVlIH07CiAjZW5kaWYKIAogICAgIFJl
ZlB0cjxVc2VySW5pdGlhdGVkQWN0aW9uPiBtX3VzZXJJbml0aWF0ZWRBY3Rpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KaW5kZXggYTRl
YTZiNzMxYjA0M2UwMzVlZDcxMzNkNTE1OGRkYmJkMWI3YTM0Mi4uMzI1ZmY4MTBiZTJiZjMxMTUx
YTc3N2RmNzRhOTQ5YjAwYThiZmQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiTG9n
Z2luZy5oIgogI2ltcG9ydCAiTmF2aWdhdGlvbkFjdGlvbkRhdGEuaCIKICNpbXBvcnQgIlBhZ2VM
b2FkU3RhdGUuaCIKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW1w
b3J0ICJXS0JhY2tGb3J3YXJkTGlzdEludGVybmFsLmgiCiAjaW1wb3J0ICJXS0JhY2tGb3J3YXJk
TGlzdEl0ZW1JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgpAQCAt
ODEsMTAgKzgyLDYgQEAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGF1bmNoU2VydmljZXNTUEku
aD4KICNlbmRpZgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktp
dEFkZGl0aW9ucy9OYXZpZ2F0aW9uU3RhdGVBZGRpdGlvbnMubW0+Ci0jZW5kaWYKLQogI2lmIFVT
RShRVUlDS19MT09LKQogI2ltcG9ydCAiUXVpY2tMb29rRG9jdW1lbnREYXRhLmgiCiAjZW5kaWYK
QEAgLTQ3NCwxMiArNDcxLDE4IEBAIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViUGFnZVByb3h5CiB9CiAjZW5kaWYK
IAotI2lmICFVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotc3RhdGljIHZvaWQgdHJ5T3B0aW1pemlu
Z0xvYWQoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgRnVuY3Rp
b248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRpYyB2b2lkIHRyeVNPQXV0
aG9yaXphdGlvbihSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24s
IFdlYlBhZ2VQcm94eSYgcGFnZSwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgaWYgKCFuYXZpZ2F0aW9uQWN0aW9uLT5z
aG91bGRQZXJmb3JtU09BdXRob3JpemF0aW9uKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhZ2Uud2Vic2l0ZURhdGFT
dG9yZSgpLnNvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKCkudHJ5QXV0aG9yaXplKFdURk1vdmUo
bmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNl
bHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotfQogI2VuZGlmCit9CiAKIHN0YXRp
YyB2b2lkIHRyeUludGVyY2VwdE5hdmlnYXRpb24oUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4m
JiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIFdURjo6RnVuY3Rpb248dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKQEAgLTQ4OSw3ICs0OTIsNyBAQCBzdGF0
aWMgdm9pZCB0cnlJbnRlcmNlcHROYXZpZ2F0aW9uKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+
JiYgbmF2aWdhdGlvbkFjdGlvbgogICAgICAgICBhdXRvKiBsb2NhbENvbXBsZXRpb25IYW5kbGVy
ID0gbmV3IFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCk+KFtuYXZpZ2F0aW9uQWN0aW9uID0gV1RG
TW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgd2Vha1BhZ2UgPSBtYWtlV2Vha1B0cihwYWdlKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJvb2wgc3VjY2Vz
cykgbXV0YWJsZSB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzICYmIHdlYWtQYWdlKSB7Ci0gICAgICAgICAgICAgICAgdHJ5
T3B0aW1pemluZ0xvYWQoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgKndlYWtQYWdlLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICAgICAgdHJ5U09BdXRob3JpemF0
aW9uKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksICp3ZWFrUGFnZSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwpAQCAtNTA0LDcgKzUwNyw3IEBA
IHN0YXRpYyB2b2lkIHRyeUludGVyY2VwdE5hdmlnYXRpb24oUmVmPEFQSTo6TmF2aWdhdGlvbkFj
dGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uCiAgICAgfQogI2VuZGlmCiAKLSAgICB0cnlPcHRpbWl6
aW5nTG9hZChXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgdHJ5U09BdXRob3JpemF0aW9uKFdURk1vdmUobmF2aWdhdGlvbkFj
dGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHksIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rp
b24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4m
JiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQpAQCAtNjE4LDcgKzYyMSw3IEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKFdlYlBhZ2VQCiAgICAgICAgICAgICBsb2NhbExpc3RlbmVyLT5kb3dubG9h
ZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgX1dLTmF2aWdhdGlvbkFjdGlv
blBvbGljeUFsbG93V2l0aG91dFRyeWluZ0FwcExpbms6Ci0gICAgICAgICAgICB0cnlPcHRpbWl6
aW5nTG9hZChXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCB3ZWJQYWdlUHJveHksIFtsb2NhbExp
c3RlbmVyID0gV1RGTW92ZShsb2NhbExpc3RlbmVyKSwgd2Vic2l0ZVBvbGljaWVzID0gV1RGTW92
ZShhcGlXZWJzaXRlUG9saWNpZXMpXSAoYm9vbCBvcHRpbWl6ZWRMb2FkKSB7CisgICAgICAgICAg
ICB0cnlTT0F1dGhvcml6YXRpb24oV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgd2ViUGFnZVBy
b3h5LCBbbG9jYWxMaXN0ZW5lciA9IFdURk1vdmUobG9jYWxMaXN0ZW5lciksIHdlYnNpdGVQb2xp
Y2llcyA9IFdURk1vdmUoYXBpV2Vic2l0ZVBvbGljaWVzKV0gKGJvb2wgb3B0aW1pemVkTG9hZCkg
ewogICAgICAgICAgICAgICAgIGlmIChvcHRpbWl6ZWRMb2FkKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGxvY2FsTGlzdGVuZXItPmlnbm9yZSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vz
c2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU2ODMzMGExMGY4MzZlNzcwZjBiOTg5MjVjNTBmZDJjMTIwYzBl
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisK
KyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViVmlld0Rp
ZE1vdmVUb1dpbmRvd09ic2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBXaGVuIHRoZSBXZWJWaWV3LCBvd25lciBv
ZiB0aGUgcGFnZSwgaXMgbm90IGluIHRoZSB3aW5kb3csIHRoZSBzZXNzaW9uIHdpbGwgdGhlbiBw
YXVzZQorLy8gYW5kIGxhdGVyIHJlc3VtZSBhZnRlciB0aGUgV2ViVmlldyBiZWluZyBtb3ZlZCBp
bnRvIHRoZSB3aW5kb3cuCisvLyBUaGUgcmVhc29uIHRvIGFwcGx5IHRoZSBhYm92ZSBydWxlIHRv
IHRoZSB3aG9sZSBzZXNzaW9uIGluc3RlYWQgb2YgVUkgc2Vzc2lvbiBvbmx5IGlzIFVJCisvLyBj
YW4gYmUgc2hvd24gb3V0IG9mIHByb2Nlc3MsIGluIHdoaWNoIGNhc2UgV2ViS2l0IHdpbGwgbm90
IGV2ZW4gZ2V0IG5vdGlmaWVkLgorLy8gRlNNOiBJZGxlID0+IGlzSW5XaW5kb3cgPT4gQWN0aXZl
ID0+IENvbXBsZXRlZAorLy8gICAgICBJZGxlID0+ICFpc0luV2luZG93ID0+IFdhaXRpbmcgPT4g
YmVjb21lIGlzSW5XaW5kb3cgPT4gQWN0aXZlID0+IENvbXBsZXRlZAorY2xhc3MgTmF2aWdhdGlv
blNPQXV0aG9yaXphdGlvblNlc3Npb24gOiBwdWJsaWMgV2ViVmlld0RpZE1vdmVUb1dpbmRvd09i
c2VydmVyLCBwdWJsaWMgU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgdXNp
bmcgQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPjsKKworICAgIHVzaW5n
IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlcjo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNp
bmcgV2Vha1ZhbHVlVHlwZSA9IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlcjo6V2Vha1Zh
bHVlVHlwZTsKKworICAgIH5OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbigpOworCisg
ICAgLy8gV2ViVmlld0RpZE1vdmVUb1dpbmRvd09ic2VydmVyCisgICAgdm9pZCB3ZWJWaWV3RGlk
TW92ZVRvV2luZG93KCkgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBOYXZpZ2F0aW9uU09BdXRo
b3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFj
dGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgSW5pdGlhdGluZ0FjdGlvbiwgQ2FsbGJhY2smJik7CisK
KyAgICB2b2lkIGNhbGxiYWNrKGJvb2wgaW50ZXJjZXB0ZWQpIHsgbV9jYWxsYmFjayhpbnRlcmNl
cHRlZCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNob3VsZFN0YXJ0SW50ZXJuYWwoKSBmaW5h
bDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVmb3JlU3RhcnQoKSA9IDA7CisKKyAgICBDYWxsYmFjayBt
X2NhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmln
YXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQyMjZiYmVjZTRmOTVjMTIxODY1OTBhYWVmYzJjZTFkOWQwOTk5OWIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXZpZ2F0aW9u
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246
Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqc29BdXRo
b3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24s
IFdlYlBhZ2VQcm94eSYgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbiBhY3Rpb24sIENhbGxiYWNrJiYg
Y29tcGxldGlvbkhhbmRsZXIpCisgICAgOiBTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9y
aXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgYWN0aW9uKQorICAgICwg
bV9jYWxsYmFjayhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKK3sKK30KKworTmF2aWdhdGlv
blNPQXV0aG9yaXphdGlvblNlc3Npb246On5OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lv
bigpCit7CisgICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgIG1fY2FsbGJhY2sodHJ1ZSk7Cisg
ICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OldhaXRpbmcgJiYgcGFnZSgpKQorICAgICAgICBwYWdl
KCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKK30KKwordm9pZCBOYXZpZ2F0aW9uU09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJbnRlcm5hbCgpCit7CisgICAgYXV0byogcGFnZVB0
ciA9IHBhZ2UoKTsKKyAgICBBU1NFUlQocGFnZVB0cik7CisgICAgYmVmb3JlU3RhcnQoKTsKKyAg
ICBpZiAoIXBhZ2VQdHItPmlzSW5XaW5kb3coKSkgeworICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6
V2FpdGluZyk7CisgICAgICAgIHBhZ2VQdHItPmFkZE9ic2VydmVyKCp0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBzdGFydCgpOworfQorCit2b2lkIE5hdmlnYXRpb25TT0F1dGhv
cml6YXRpb25TZXNzaW9uOjp3ZWJWaWV3RGlkTW92ZVRvV2luZG93KCkKK3sKKyAgICBhdXRvKiBw
YWdlUHRyID0gcGFnZSgpOworICAgIGlmIChzdGF0ZSgpICE9IFN0YXRlOjpXYWl0aW5nIHx8ICFw
YWdlUHRyIHx8ICFwYWdlUHRyLT5pc0luV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBz
dGFydCgpOworICAgIHBhZ2VQdHItPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1MDMwNjAzOGYyMDY2MjBlMDM2MGEw
NWQxOGQ5NGFjZDhhMWZiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShB
UFBfU1NPKQorCisjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCitPQkpDX0NM
QVNTIFdLU09TZWNyZXREZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworCituYW1lc3Bh
Y2UgQVBJIHsKK2NsYXNzIE5hdmlnYXRpb25BY3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBGU006IElkbGUgPT4gQWN0aXZlID0+IENvbXBsZXRlZAorY2xhc3MgUG9wVXBTT0F1
dGhvcml6YXRpb25TZXNzaW9uIGZpbmFsIDogcHVibGljIFNPQXV0aG9yaXphdGlvblNlc3Npb24g
eworcHVibGljOgorICAgIHVzaW5nIE5ld1BhZ2VDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4mJik+OworICAgIHVzaW5nIFVJQ2xpZW50Q2FsbGJh
Y2sgPSBGdW5jdGlvbjx2b2lkKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIE5ld1BhZ2VD
YWxsYmFjayYmKT47CisKKyAgICBzdGF0aWMgUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IGNy
ZWF0ZShTT0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdl
LCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIE5ld1BhZ2VD
YWxsYmFjayYmIG5ld1BhZ2VDYWxsYmFjaywgVUlDbGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2Fs
bGJhY2spCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb24oc29BdXRob3JpemF0aW9uLCBwYWdlLCBXVEZNb3ZlKG5hdmlnYXRpb25B
Y3Rpb24pLCBXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjayksIFdURk1vdmUodWlDbGllbnRDYWxsYmFj
aykpKTsKKyAgICB9CisgICAgflBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbigpOworCisgICAg
dm9pZCBjbG9zZShXS1dlYlZpZXcgKik7CisKK3ByaXZhdGU6CisgICAgUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBXZWJQYWdlUHJveHkmLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmLCBOZXdQYWdlQ2FsbGJhY2smJiwgVUlDbGllbnRDYWxsYmFjayYm
KTsKKworICAgIHZvaWQgc2hvdWxkU3RhcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgZmFs
bEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgYWJvcnRJbnRlcm5hbCgp
IGZpbmFsOworICAgIHZvaWQgY29tcGxldGVJbnRlcm5hbChXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiYsIE5TRGF0YSAqKSBmaW5hbDsKKworICAgIHZvaWQgaW5pdFNlY3JldFdlYlZpZXcoKTsK
KworICAgIE5ld1BhZ2VDYWxsYmFjayBtX25ld1BhZ2VDYWxsYmFjazsKKyAgICBVSUNsaWVudENh
bGxiYWNrIG1fdWlDbGllbnRDYWxsYmFjazsKKworICAgIFJldGFpblB0cjxXS1NPU2VjcmV0RGVs
ZWdhdGU+IG1fc2VjcmV0RGVsZWdhdGU7CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gbV9zZWNy
ZXRXZWJWaWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVw
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmFiMzEwYWZiZjU2NjQ2NjNhNmJlZGM3M2UwZDJhMTJmOTljYzgzYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLVUlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYktpdC9BUElO
YXZpZ2F0aW9uQWN0aW9uLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKworQGludGVyZmFj
ZSBXS1NPU2VjcmV0RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdL
VUlEZWxlZ2F0ZT4geworQHBhY2thZ2UKK1dlYWtQdHI8V2ViS2l0OjpQb3BVcFNPQXV0aG9yaXph
dGlvblNlc3Npb24+IF9zZXNzaW9uOworQk9PTCBfaXNGaXJzdE5hdmlnYXRpb247Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFNlc3Npb246KFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRp
b25TZXNzaW9uICopc2Vzc2lvbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tTT1NlY3Jl
dERlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNlc3Npb246KFdlYktpdDo6UG9w
VXBTT0F1dGhvcml6YXRpb25TZXNzaW9uICopc2Vzc2lvbgoreworICAgIGlmIChzZWxmID0gW3N1
cGVyIGluaXRdKSB7CisgICAgICAgIF9zZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lvbik7Cisg
ICAgICAgIF9pc0ZpcnN0TmF2aWdhdGlvbiA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy8vIFdLVUlEZWxlZ2F0ZQorLSAodm9pZCl3ZWJWaWV3RGlkQ2xvc2U6KFdLV2ViVmll
dyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIV9zZXNzaW9uKQorICAgICAgICByZXR1cm47CisgICAg
X3Nlc3Npb24tPmNsb3NlKHdlYlZpZXcpOworfQorCisvLyBXS05hdmlnYXRpb25EZWxlZ2F0ZQor
LSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNp
b25IYW5kbGVyOih2b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFu
ZGxlcgoreworICAgIC8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzQ4Nzg3ODM5PjogV2Ugc2hvdWxk
IHJlc3RyaWN0IHRoZSBsb2FkIHRvIG9ubHkgc3Vic3RpdHV0ZSBkYXRhLgorICAgIC8vIFVzZSB0
aGUgZm9sbG93aW5nIGhldXJpc3RpYyBhcyBhIHdvcmthcm91bmQgcmlnaHQgbm93LgorICAgIC8v
IElnbm9yZSB0aGUgZmlyc3QgbG9hZCBpbiB0aGUgc2VjcmV0IHdpbmRvdywgd2hpY2ggbmF2aWdh
dGVzIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCisgICAgaWYgKF9pc0ZpcnN0TmF2aWdhdGlv
bikgeworICAgICAgICBfaXNGaXJzdE5hdmlnYXRpb24gPSBOTzsKKyAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgZGVjaXNpb25IYW5kbGVyKF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxv
d1dpdGhvdXRUcnlpbmdBcHBMaW5rKTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24K
K3sKKyAgICBpZiAoIV9zZXNzaW9uKQorICAgICAgICByZXR1cm47CisgICAgX3Nlc3Npb24tPmNs
b3NlKHdlYlZpZXcpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQb3BVcFNP
QXV0aG9yaXphdGlvblNlc3Npb246OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhv
cml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIE5ld1BhZ2VDYWxsYmFjayYmIG5l
d1BhZ2VDYWxsYmFjaywgVUlDbGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2FsbGJhY2spCisgICAg
OiBTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0
aW9uQWN0aW9uKSwgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbjo6UG9wVXApCisgICAgLCBtX25ld1Bh
Z2VDYWxsYmFjayhXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjaykpCisgICAgLCBtX3VpQ2xpZW50Q2Fs
bGJhY2soV1RGTW92ZSh1aUNsaWVudENhbGxiYWNrKSkKK3sKK30KKworUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjp+UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uKCkKK3sKKyAgICBBU1NF
UlQoc3RhdGUoKSAhPSBTdGF0ZTo6V2FpdGluZyk7CisgICAgaWYgKG1fbmV3UGFnZUNhbGxiYWNr
KQorICAgICAgICBtX25ld1BhZ2VDYWxsYmFjayhudWxscHRyKTsKK30KKwordm9pZCBQb3BVcFNP
QXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwoKQoreworICAgIEFTU0VS
VChwYWdlKCkgJiYgcGFnZSgpLT5pc0luV2luZG93KCkpOworICAgIHN0YXJ0KCk7Cit9CisKK3Zv
aWQgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFs
KCkKK3sKKyAgICBtX3VpQ2xpZW50Q2FsbGJhY2socmVsZWFzZU5hdmlnYXRpb25BY3Rpb24oKSwg
V1RGTW92ZShtX25ld1BhZ2VDYWxsYmFjaykpOworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCgpCit7CisgICAgaWYgKCFwYWdlKCkpIHsKKyAgICAg
ICAgbV9uZXdQYWdlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpbml0U2VjcmV0V2ViVmlldygpOworICAgIG1fbmV3UGFnZUNhbGxiYWNrKG1fc2VjcmV0
V2ViVmlldy0+X3BhZ2UuZ2V0KCkpOworICAgIFttX3NlY3JldFdlYlZpZXcgZXZhbHVhdGVKYXZh
U2NyaXB0OiBAIndpbmRvdy5jbG9zZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworfQorCit2
b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkKK3sKKyAgICBpZiAo
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDAgfHwgIXBhZ2UoKSkgeworICAgICAgICBm
YWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpbml0U2VjcmV0V2ViVmlldygpOworICAgIG1fbmV3UGFnZUNhbGxiYWNrKG1fc2VjcmV0V2Vi
Vmlldy0+X3BhZ2UuZ2V0KCkpOworICAgIFttX3NlY3JldFdlYlZpZXcgbG9hZERhdGE6ZGF0YSBN
SU1FVHlwZTpAInRleHQvaHRtbCIgY2hhcmFjdGVyRW5jb2RpbmdOYW1lOkAiVVRGLTgiIGJhc2VV
Ukw6cmVzcG9uc2UudXJsKCldOworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6Y2xvc2UoV0tXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIGlmICghbV9zZWNyZXRXZWJWaWV3
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkgIT0gU3RhdGU6OkNvbXBsZXRlZCB8
fCB3ZWJWaWV3ICE9IG1fc2VjcmV0V2ViVmlldy5nZXQoKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3NlY3JldFdlYlZpZXcg
PSBudWxscHRyOworICAgIFdURkxvZ0Fsd2F5cygiU2VjcmV0V2ViVmlldyBpcyBjbGVhbmVkLiIp
OworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6aW5pdFNlY3JldFdlYlZp
ZXcoKQoreworICAgIEFTU0VSVChwYWdlKCkpOworICAgIGF1dG8gaW5pdGlhdG9yV2ViVmlldyA9
IGZyb21XZWJQYWdlUHJveHkoKnBhZ2UoKSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbaW5pdGlhdG9yV2ViVmlldy5jb25maWd1cmF0aW9uIGNvcHldKTsKKyAgICBbY29uZmln
dXJhdGlvbiBfc2V0UmVsYXRlZFdlYlZpZXc6aW5pdGlhdG9yV2ViVmlld107CisgICAgbV9zZWNy
ZXRXZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RaZXJvIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgbV9zZWNy
ZXREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NPU2VjcmV0RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
U2Vzc2lvbjp0aGlzXSk7CisgICAgW21fc2VjcmV0V2ViVmlldyBzZXRVSURlbGVnYXRlOm1fc2Vj
cmV0RGVsZWdhdGUuZ2V0KCldOworICAgIFttX3NlY3JldFdlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOm1fc2VjcmV0RGVsZWdhdGUuZ2V0KCldOworCisgICAgbV9zZWNyZXRXZWJWaWV3LT5f
cGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbigpOworICAgIFdURkxvZ0Fsd2F5cygiU2VjcmV0V2ViVmlldyBpcyBjcmVhdGVk
LiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1
dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmQ4ODkxMGU2ODBjYzRjYjVhOWQ4YWI1OGM0ZWQyMmUxZjNkMDA2OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVj
dFNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbmNsdWRlICJOYXZpZ2F0aW9u
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uIGZpbmFsIDogcHVibGljIE5hdmlnYXRpb25T
T0F1dGhvcml6YXRpb25TZXNzaW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDYWxsYmFjayA9IENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+OworCisgICAgc3RhdGljIFJlZjxTT0F1dGhvcml6
YXRpb25TZXNzaW9uPiBjcmVhdGUoU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJl
ZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5
JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9y
aXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVkaXJlY3RTT0F1dGhvcml6
YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9u
PiYmLCBXZWJQYWdlUHJveHkmLCBDYWxsYmFjayYmKTsKKworICAgIC8vIFNPQXV0aG9yaXphdGlv
blNlc3Npb24KKyAgICB2b2lkIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKSBmaW5hbDsKKyAg
ICB2b2lkIGFib3J0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGNvbXBsZXRlSW50ZXJuYWwo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBOU0RhdGEgKikgZmluYWw7CisKKyAgICAvLyBO
YXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbgorICAgIHZvaWQgYmVmb3JlU3RhcnQoKSBm
aW5hbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhlZWY3NzQxMmNjZWUwNTViZTkxMjc1ZTQyYTRmNmJhZjM5MTlhODEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVk
aXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlZGlyZWN0U09BdXRob3JpemF0aW9u
U2Vzc2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNl
LmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6UmVkaXJlY3RTT0F1dGhv
cml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJ
OjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFn
ZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICA6IE5hdmlnYXRpb25TT0F1dGhv
cml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9u
KSwgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbjo6UmVkaXJlY3QsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKQoreworfQorCit2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFs
bEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpCit7CisgICAgY2FsbGJhY2soZmFsc2UpOworfQorCit2
b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCgpCit7Cisg
ICAgY2FsbGJhY2sodHJ1ZSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjpjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25z
ZSwgTlNEYXRhICpkYXRhKQoreworICAgIGF1dG8qIHBhZ2VQdHIgPSBwYWdlKCk7CisgICAgaWYg
KChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDMwMiAmJiByZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpICE9IDIwMCkgfHwgIXBhZ2VQdHIpIHsKKyAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJ
bnRlcm5hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhbGxiYWNrKHRydWUpOwor
ICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwMikgeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgYXV0byogbmF2aWdhdGlvbkFjdGlvblB0ciA9IG5hdmlnYXRpb25BY3Rp
b24oKTsKKyAgICAgICAgQVNTRVJUKG5hdmlnYXRpb25BY3Rpb25QdHIpOworICAgICAgICAvLyBN
b2JpbGVTYWZhcmkgaGFzIGEgV0JTVVJMU3Bvb2ZpbmdNaXRpZ2F0b3IsIHdoaWNoIHdpbGwgbm90
IGRpc3BsYXkgdGhlIHByb3Zpc2lvbmFsIFVSTCBmb3IgbmF2aWdhdGlvbnMgd2l0aG91dCB1c2Vy
IGdlc3R1cmVzLgorICAgICAgICAvLyBGb3Igc2xvdyBsb2FkcyB0aGF0IGFyZSBpbml0aWF0ZWQg
ZnJvbSB0aGUgTW9iaWxlU2FmYXJpIEZhdm9yaXRlcyBzY3JlZW4sIHRoZSBhZm9yZW1lbnRpb25l
ZCBiZWhhdmlvciB3aWxsIGNyZWF0ZSBhIHBlcmlvZAorICAgICAgICAvLyBhZnRlciBhdXRoZW50
aWNhdGlvbiBjb21wbGV0aW9uIHdoZXJlIHRoZSBuZXcgcmVxdWVzdCB0byB0aGUgYXBwbGljYXRp
b24gc2l0ZSBsb2FkcyB3aXRoIGEgYmxhbmsgVVJMIGFuZCBibGFuayBwYWdlLiBUbworICAgICAg
ICAvLyB3b3JrYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGxvYWQgYW4gaHRtbCBwYWdlIHRoYXQgZG9l
cyBhIGNsaWVudCBzaWRlIHJlZGlyZWN0aW9uIHRvIHRoZSBhcHBsaWNhdGlvbiBzaXRlIG9uIGJl
aGFsZiBvZiB0aGUKKyAgICAgICAgLy8gcmVxdWVzdCBVUkwsIGluc3RlYWQgb2YgZGlyZWN0bHkg
bG9hZGluZyBhIG5ldyByZXF1ZXN0LiBUaGUgaHRtbCBwYWdlIHNob3VsZCBiZSBzdXBlciBmYXN0
IHRvIGxvYWQgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdAorICAgICAgICAvLyBzaG93IGFuIGVtcHR5
IFVSTCBvciBhIGJsYW5rIHBhZ2UuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIGEgcmVsZXZhbnQgVVJM
IGJhciBhbmQgdXNlZnVsIHBhZ2UgY29udGVudCBkdXJpbmcgdGhlIGxvYWQuCisgICAgICAgIGlm
ICghbmF2aWdhdGlvbkFjdGlvblB0ci0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgeworICAg
ICAgICAgICAgcGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAgICAgIGF1dG8gaHRtbCA9IG1ha2VT
dHJpbmcoIjxzY3JpcHQ+bG9jYXRpb24gPSAnIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygp
LmdldChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLCAiJzwvc2NyaXB0PiIpLnV0
ZjgoKTsKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihodG1sLmRhdGEoKSksIGh0bWwubGVuZ3RoKCkpOwor
ICAgICAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCJfcywgIlVURi04
Il9zLCBuYXZpZ2F0aW9uQWN0aW9uUHRyLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcGFnZVB0ci0+bG9hZFJlcXVlc3Qo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5nZXQo
V2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKSkpOworICAgIH0KKyAgICBpZiAocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDApIHsKKyAgICAgICAgcGFnZVB0ci0+c2V0U2hv
dWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24o
KTsKKyAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoSVBDOjpEYXRhUmVmZXJlbmNlKHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpLCAidGV4dC9odG1s
Il9zLCAiVVRGLTgiX3MsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCgpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGlu
YXRvci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NP
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZkM2NkZTMzNzc5ZDVhZTU4
YjljYzc2Yjk2MWRlODdhN2FhNjlkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRv
ci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhB
VkUoQVBQX1NTTykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIFNP
QXV0aG9yaXphdGlvbjsKK09CSkNfQ0xBU1MgV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZTsKKwor
bmFtZXNwYWNlIEFQSSB7CitjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcik7CitwdWJsaWM6CisgICAgU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3IoKTsKKworICAgIC8vIEZvciBOYXZpZ2F0aW9uIGludGVyY2VwdGlv
bi4KKyAgICB2b2lkIHRyeUF1dGhvcml6ZShSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBX
ZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmKTsKKworICAgIC8vIEZvciBQb3BV
cCBpbnRlcmNlcHRpb24uCisgICAgdXNpbmcgTmV3UGFnZUNhbGxiYWNrID0gQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChSZWZQdHI8V2ViUGFnZVByb3h5PiYmKT47CisgICAgdXNpbmcgVUlDbGllbnRD
YWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgTmV3
UGFnZUNhbGxiYWNrJiYpPjsKKyAgICB2b2lkIHRyeUF1dGhvcml6ZShSZWY8QVBJOjpOYXZpZ2F0
aW9uQWN0aW9uPiYmLCBXZWJQYWdlUHJveHkmLCBOZXdQYWdlQ2FsbGJhY2smJiwgVUlDbGllbnRD
YWxsYmFjayYmKTsKKworcHJpdmF0ZToKKyAgICBpbmxpbmUgYm9vbCBjYW5BdXRob3JpemUoY29u
c3QgVVJMJikgY29uc3Q7CisKKyAgICBSZXRhaW5QdHI8U09BdXRob3JpemF0aW9uPiBtX3NvQXV0
aG9yaXphdGlvbjsKKyAgICBSZXRhaW5QdHI8V0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4gbV9z
b0F1dGhvcml6YXRpb25EZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYjQ0ZGUyNTRmNDBmZDRkOTlmODI3NWUzMjQxZmU3ZGJjMWYzMTE4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvbkNv
b3JkaW5hdG9yLmgiCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgIlBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oIgorI2ltcG9ydCAiUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmgiCisjaW1wb3J0ICJTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKyNpbXBv
cnQgIldLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0F1
dGhLaXRTUEkuaD4KKyNpbXBvcnQgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I6OlNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYmFzZSBz
eXN0ZW0sIHdoaWNoIGRvZXNuJ3QgaGF2ZSBBcHBTU08uZnJhbWV3b3JrLgorICAgIGlmICghUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAg
ICBtX3NvQXV0aG9yaXphdGlvbiA9IGFkb3B0TlMoW1BBTDo6YWxsb2NTT0F1dGhvcml6YXRpb25J
bnN0YW5jZSgpIGluaXRdKTsKKyAgICBtX3NvQXV0aG9yaXphdGlvbkRlbGVnYXRlID0gYWRvcHRO
UyhbW1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBtX3NvQXV0
aG9yaXphdGlvbi5nZXQoKS5kZWxlZ2F0ZSA9IG1fc29BdXRob3JpemF0aW9uRGVsZWdhdGUuZ2V0
KCk7CisgICAgW05TVVJMU2Vzc2lvbiBfZGlzYWJsZUFwcFNTT107Cit9CisKK2Jvb2wgU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3I6OmNhbkF1dGhvcml6ZShjb25zdCBVUkwmIHVybCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zb0F1dGhvcml6YXRpb24gJiYgW1BBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSBjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6dXJsIHJlc3BvbnNlQ29k
ZTowXTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9yaXpl
KFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVBy
b3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGlmICghY2FuQXV0aG9yaXplKG5hdmlnYXRpb25BY3Rpb24tPnJlcXVlc3QoKS51cmwoKSkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uIHNob3VsZCBvbmx5
IGJlIGFsbG93ZWQgZm9yIEFwcGxlIGZpcnN0IHBhcnRpZXMuCisgICAgYm9vbCBzdWJmcmFtZU5h
dmlnYXRpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLT50YXJnZXRGcmFtZSgpICYmICFuYXZpZ2F0aW9u
QWN0aW9uLT50YXJnZXRGcmFtZSgpLT5pc01haW5GcmFtZSgpOworICAgIGlmIChzdWJmcmFtZU5h
dmlnYXRpb24gJiYgKCFwYWdlLm1haW5GcmFtZSgpIHx8ICFbQUtBdXRob3JpemF0aW9uQ29udHJv
bGxlciBpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOnBhZ2UubWFpbkZyYW1lKCktPnVybCgpXSkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBzZXNzaW9uID0gc3ViZnJhbWVOYXZpZ2F0aW9uID8gU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUobV9zb0F1dGhvcml6YXRpb24uZ2V0KCksIFdU
Rk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSA6IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKG1fc29BdXRob3JpemF0
aW9uLmdldCgpLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgW21fc29BdXRob3JpemF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lv
bjpXVEZNb3ZlKHNlc3Npb24pXTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cjo6dHJ5QXV0aG9yaXplKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFj
dGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBOZXdQYWdlQ2FsbGJhY2smJiBuZXdQYWdlQ2FsbGJh
Y2ssIFVJQ2xpZW50Q2FsbGJhY2smJiB1aUNsaWVudENhbGxiYWNrKQoreworICAgIGJvb2wgc3Vi
ZnJhbWVOYXZpZ2F0aW9uID0gbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKSAmJiAhbmF2
aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKS0+aXNNYWluRnJhbWUoKTsKKyAgICBpZiAoc3Vi
ZnJhbWVOYXZpZ2F0aW9uIHx8ICFuYXZpZ2F0aW9uQWN0aW9uLT5pc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpIHx8ICFjYW5BdXRob3JpemUobmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpLnVybCgp
KSkgeworICAgICAgICB1aUNsaWVudENhbGxiYWNrKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiks
IFdURk1vdmUobmV3UGFnZUNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIHNlc3Npb24gPSBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShtX3Nv
QXV0aG9yaXphdGlvbi5nZXQoKSwgcGFnZSwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgV1RG
TW92ZShuZXdQYWdlQ2FsbGJhY2spLCBXVEZNb3ZlKHVpQ2xpZW50Q2FsbGJhY2spKTsKKyAgICBb
bV9zb0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBzZXRTZXNzaW9uOldURk1vdmUoc2Vzc2lvbildOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNV
UkxFeHRyYXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlYjYwOWQ5NWRkZDE3
NjNjMjE5MTlkMDkwMjc1ZDM1YWFlNjE3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNVUkxF
eHRyYXMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBIQVZFKEFQUF9TU08pCisKKy8vIEZJWE1FIHJkYXI6Ly9wcm9ibGVtLzUwMDI4MjQ2IFJlbW92
ZSB0aGUgZm9sbG93aW5nIG9uY2UgdGhlIHJhZGFyIGlzIGZpeGVkLgorQGludGVyZmFjZSBOU1VS
TCAoU09BdXRob3JpemF0aW9uRXh0cmFzKQorCisrIChCT09MKV93ZWJfY2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMOihOU1VSTCAqKXVybDsKKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhv
cml6YXRpb25OU1VSTEV4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NWEwZWRiNjFjYjdmMDZhZGU1N2EyYTc0NmVhZTYwMWIwMDRhYmY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9y
aXphdGlvbk5TVVJMRXh0cmFzLm1tCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmgiCisK
KyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5o
PgorCitAaW1wbGVtZW50YXRpb24gTlNVUkwgKFNPQXV0aG9yaXphdGlvbkV4dHJhcykKKworKyAo
Qk9PTClfd2ViX2NhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDooTlNVUkwgKil1cmwKK3sK
KyAgICByZXR1cm4gW1BBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSBjYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkw6dXJsIHJlc3BvbnNlQ29kZTowXTsKK30KKworQGVuZAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkMWRiMjNkOWZiZDUyZjE0NmYwNDhjZjk4Nzg5MmFmOWE4MmU0OGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbmNsdWRlIDxBcHBTU08vU09CYXNlLmg+
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha09iakNQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitPQkpDX0NMQVNTIFNPQXV0aG9yaXphdGlvbjsK
KworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworfQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCisvLyBBIHNlc3Npb24gd2lsbCBvbmx5IGJl
IGV4ZWN1dGVkIG9uY2UuCitjbGFzcyBTT0F1dGhvcml6YXRpb25TZXNzaW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxT
T0F1dGhvcml6YXRpb25TZXNzaW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBJbml0aWF0
aW5nQWN0aW9uIDogdWludDhfdCB7CisgICAgICAgIFJlZGlyZWN0LAorICAgICAgICBQb3BVcCwK
KyAgICAgICAgU3ViRnJhbWUKKyAgICB9OworCisgICAgdXNpbmcgVUlDYWxsYmFjayA9IHZvaWQg
KF4pKEJPT0wsIE5TRXJyb3IgKik7CisKKyAgICB2aXJ0dWFsIH5TT0F1dGhvcml6YXRpb25TZXNz
aW9uKCk7CisKKyAgICAvLyBQcm9iYWJseSBub3Qgc3RhcnQgaW1tZWRpYXRlbHkuCisgICAgdm9p
ZCBzaG91bGRTdGFydCgpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgb25seSBiZSBj
YWxsZWQgYnkgU09BdXRob3JpemF0aW9uRGVsZWdhdGUgbWV0aG9kcy4KKyAgICB2b2lkIGZhbGxC
YWNrVG9XZWJQYXRoKCk7CisgICAgdm9pZCBhYm9ydCgpOworICAgIC8vIE9ubHkgcmVzcG9uc2Vz
IHRoYXQgbWVldCBhbGwgb2YgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgd2lsbCBiZSBwcm9j
ZXNzZWQ6CisgICAgLy8gMSkgaXQgaGFzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgcmVxdWVzdDsK
KyAgICAvLyAyKSBpdCBoYXMgYSBzdGF0dXMgY29kZSBvZiAzMDIgb3IgMjAwLgorICAgIC8vIE90
aGVyd2lzZSwgaXQgZmFsbHMgYmFjayB0byB0aGUgd2ViIHBhdGguCisgICAgLy8gT25seSB0aGUg
Zm9sbG93aW5nIEhUVFAgaGVhZGVycyB3aWxsIGJlIHByb2Nlc3NlZDoKKyAgICAvLyB7IFNldC1D
b29raWUsIExvY2F0aW9uIH0uCisgICAgdm9pZCBjb21wbGV0ZShOU0hUVFBVUkxSZXNwb25zZSAq
LCBOU0RhdGEgKik7CisgICAgdm9pZCBwcmVzZW50Vmlld0NvbnRyb2xsZXIoU09BdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXIsIFVJQ2FsbGJhY2spOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRlNN
IGRlcGVuZHMgb24gZGVyaXZlZCBjbGFzc2VzLgorICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50
OF90IHsKKyAgICAgICAgSWRsZSwKKyAgICAgICAgQWN0aXZlLAorICAgICAgICBXYWl0aW5nLAor
ICAgICAgICBDb21wbGV0ZWQKKyAgICB9OworCisgICAgU09BdXRob3JpemF0aW9uU2Vzc2lvbihT
T0F1dGhvcml6YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVBy
b3h5JiwgSW5pdGlhdGluZ0FjdGlvbik7CisKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgV2ViUGFn
ZVByb3h5KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CisgICAgU3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0
ZSBzdGF0ZSkgeyBtX3N0YXRlID0gc3RhdGU7IH0KKyAgICBjb25zdCBBUEk6Ok5hdmlnYXRpb25B
Y3Rpb24qIG5hdmlnYXRpb25BY3Rpb24oKSB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb24uZ2V0
KCk7IH0KKyAgICBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiByZWxlYXNlTmF2aWdhdGlvbkFj
dGlvbigpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBzaG91bGRTdGFydEludGVybmFs
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBhYm9ydEludGVybmFsKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgTlNEYXRhICop
ID0gMDsKKworICAgIHZvaWQgYmVjb21lQ29tcGxldGVkKCk7CisgICAgdm9pZCBkaXNtaXNzVmll
d0NvbnRyb2xsZXIoKTsKKworICAgIFN0YXRlIG1fc3RhdGUgIHsgU3RhdGU6OklkbGUgfTsKKyAg
ICBXZWFrT2JqQ1B0cjxTT0F1dGhvcml6YXRpb24gKj4gbV9zb0F1dGhvcml6YXRpb247CisgICAg
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4gbV9uYXZpZ2F0aW9uQWN0aW9uOworICAgIFdl
YWtQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7CisgICAgSW5pdGlhdGluZ0FjdGlvbiBtX2FjdGlv
bjsKKworICAgIFJldGFpblB0cjxTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcj4gbV92aWV3
Q29udHJvbGxlcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPE5TV2luZG93PiBt
X3NoZWV0V2luZG93OworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9zaGVldFdpbmRvd1dpbGxD
bG9zZU9ic2VydmVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgzYmI1YzZjYjZhMDlkNzExNDllNzkyNDQ4Nzg1NDc2YzI4MzczOTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisK
KyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgIkFQSUhUVFBDb29raWVTdG9yZS5oIgorI2lt
cG9ydCAiQVBJTmF2aWdhdGlvbi5oIgorI2ltcG9ydCAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgor
I2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIldLVUlEZWxlZ2F0ZS5oIgorI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJTaXRlRGF0YVN0b3JlLmgiCisjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlP
cmlnaW4uaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgorI2ltcG9ydCA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIHsKKworc3Rh
dGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHRvQ29va2llVmVjdG9yKE5TQXJyYXk8TlNIVFRQ
Q29va2llICo+ICpjb29raWVzKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHJlc3Vs
dDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb29raWVzLmNvdW50KTsKKyAg
ICBmb3IgKGlkIGNvb2tpZSBpbiBjb29raWVzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGNvb2tpZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgaXNTYW1l
T3JpZ2luKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgYXV0byByZXF1ZXN0T3Jp
Z2luID0gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXF1ZXN0LnVybCgpKTsKKyAg
ICByZXR1cm4gcmVxdWVzdE9yaWdpbi0+aXNTYW1lT3JpZ2luQXMoV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShyZXNwb25zZS51cmwoKSkuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZQorCitTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0
aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYm
IG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbiBh
Y3Rpb24pCisgICAgOiBtX3NvQXV0aG9yaXphdGlvbihzb0F1dGhvcml6YXRpb24pCisgICAgLCBt
X25hdmlnYXRpb25BY3Rpb24oV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSkKKyAgICAsIG1fcGFn
ZShtYWtlV2Vha1B0cihwYWdlKSkKKyAgICAsIG1fYWN0aW9uKGFjdGlvbikKK3sKK30KKworU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6flNPQXV0aG9yaXphdGlvblNlc3Npb24oKQoreworICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUgJiYgISFtX3NvQXV0aG9yaXphdGlvbikKKyAgICAg
ICAgW21fc29BdXRob3JpemF0aW9uIGNhbmNlbEF1dGhvcml6YXRpb25dOworICAgIGlmIChtX3N0
YXRlICE9IFN0YXRlOjpJZGxlICYmIG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAg
ICAgYmVjb21lQ29tcGxldGVkKCk7Cit9CisKK1JlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+IFNP
QXV0aG9yaXphdGlvblNlc3Npb246OnJlbGVhc2VOYXZpZ2F0aW9uQWN0aW9uKCkKK3sKKyAgICBy
ZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uLnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxldGVkKCkKK3sKKyAgICBBU1NFUlQobV9z
dGF0ZSA9PSBTdGF0ZTo6QWN0aXZlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmcpOworICAg
IG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOworICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQor
ICAgICAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpzaG91bGRTdGFydCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6
OklkbGUpOworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgc2hvdWxkU3Rh
cnRJbnRlcm5hbCgpOworfQorCit2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXJ0KCkK
K3sKKyAgICBBU1NFUlQoKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6V2FpdGluZykgJiYgbV9wYWdlICYmIG1fbmF2aWdhdGlvbkFjdGlvbik7CisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpBY3RpdmU7CisgICAgaWYgKCFtX3NvQXV0aG9yaXphdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUU8cmRhcjovL3Byb2JsZW0vNDg5MDkzMzY+OiBSZXBsYWNl
IHRoZSBiZWxvdyB3aXRoIEFwcFNTTyBjb25zdGFudHMuCisgICAgYXV0byBpbml0aWF0b3JPcmln
aW4gPSBlbXB0eVN0cmluZygpOworICAgIGlmIChtX25hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZy
YW1lKCkpCisgICAgICAgIGluaXRpYXRvck9yaWdpbiA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+c291
cmNlRnJhbWUoKS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigpLnRvU3RyaW5nKCk7
CisgICAgaWYgKG1fYWN0aW9uID09IEluaXRpYXRpbmdBY3Rpb246OlN1YkZyYW1lICYmIG1fcGFn
ZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIGluaXRpYXRvck9yaWdpbiA9IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUobV9wYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkpLT50b1N0cmluZygp
OworICAgIE5TRGljdGlvbmFyeSAqYXV0aG9yaXphdGlvbk9wdGlvbnMgPSBAeworICAgICAgICBT
T0F1dGhvcml6YXRpb25PcHRpb25Vc2VyQWN0aW9uSW5pdGlhdGVkOiBAKG1fbmF2aWdhdGlvbkFj
dGlvbi0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSksCisgICAgICAgIEAiaW5pdGlhdG9yT3Jp
Z2luIjogKE5TU3RyaW5nICopaW5pdGlhdG9yT3JpZ2luLAorICAgICAgICBAImluaXRpYXRpbmdB
Y3Rpb24iOiBAKHN0YXRpY19jYXN0PE5TSW50ZWdlcj4obV9hY3Rpb24pKQorICAgIH07CisgICAg
W21fc29BdXRob3JpemF0aW9uIHNldEF1dGhvcml6YXRpb25PcHRpb25zOmF1dGhvcml6YXRpb25P
cHRpb25zXTsKKworICAgIGF1dG8gKm5zUmVxdWVzdCA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+cmVx
dWVzdCgpLm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRl
SFRUUEJvZHkpOworICAgIFttX3NvQXV0aG9yaXphdGlvbiBiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOm5zUmVxdWVzdC5VUkwgaHR0cEhlYWRlcnM6bnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVs
ZHMgaHR0cEJvZHk6bnNSZXF1ZXN0LkhUVFBCb2R5XTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aCgpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU3Rh
dGU6OkFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJlY29tZUNvbXBsZXRlZCgpOworICAg
IGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjphYm9ydCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUgfHwgbV9z
dGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisgICAgYmVjb21lQ29t
cGxldGVkKCk7CisgICAgYWJvcnRJbnRlcm5hbCgpOworfQorCit2b2lkIFNPQXV0aG9yaXphdGlv
blNlc3Npb246OmNvbXBsZXRlKE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UsIE5TRGF0
YSAqZGF0YSkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6QWN0aXZlKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKG1fbmF2aWdhdGlvbkFjdGlvbik7CisgICAgYmVjb21lQ29tcGxl
dGVkKCk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSho
dHRwUmVzcG9uc2UpOworICAgIGlmICghaXNTYW1lT3JpZ2luKG1fbmF2aWdhdGlvbkFjdGlvbi0+
cmVxdWVzdCgpLCByZXNwb25zZSkpIHsKKyAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5h
bCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2V0IGNvb2tpZXMuCisgICAg
YXV0byBjb29raWVzID0gdG9Db29raWVWZWN0b3IoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJl
c3BvbnNlSGVhZGVyRmllbGRzOmh0dHBSZXNwb25zZS5hbGxIZWFkZXJGaWVsZHMgZm9yVVJMOnJl
c3BvbnNlLnVybCgpXSk7CisgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNv
bXBsZXRlSW50ZXJuYWwoV1RGTW92ZShyZXNwb25zZSksIGRhdGEpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5jb29raWVTdG9yZSgpLnNldENvb2tpZXMoY29va2llcywgW3dl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXNwb25zZSA9IFdURk1vdmUocmVzcG9uc2Up
LCBkYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGFdKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHdlYWtUaGlzLT5jb21wbGV0ZUludGVybmFsKFdURk1vdmUocmVzcG9uc2UpLCBkYXRh
LmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwcmVz
ZW50Vmlld0NvbnRyb2xsZXIoU09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgdmlld0NvbnRy
b2xsZXIsIFVJQ2FsbGJhY2sgdWlDYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBT
dGF0ZTo6QWN0aXZlKTsKKyAgICAvLyBPbmx5IGV4cGVjdCBhdCBtb3N0IG9uZSBVSSBzZXNzaW9u
IGZvciB0aGUgd2hvbGUgYXV0aG9yaXphdGlvbiBzZXNzaW9uLgorICAgIGlmICghbV9wYWdlIHx8
IG1fdmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgdWlDYWxsYmFjayhOTywgYWRvcHROUyhbW05T
RXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlNPRXJyb3JEb21haW4gY29kZTprU09FcnJvckF1
dGhvcml6YXRpb25QcmVzZW50YXRpb25GYWlsZWQgdXNlckluZm86bmlsXSkuZ2V0KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV92aWV3Q29udHJvbGxlciA9IHZpZXdDb250cm9s
bGVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBBU1NFUlQoIW1fc2hlZXRXaW5kb3cpOworICAg
IG1fc2hlZXRXaW5kb3cgPSBbTlNXaW5kb3cgd2luZG93V2l0aENvbnRlbnRWaWV3Q29udHJvbGxl
cjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKKworICAgIEFTU0VSVCghbV9zaGVldFdpbmRvd1dp
bGxDbG9zZU9ic2VydmVyKTsKKyAgICBtX3NoZWV0V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIgPSBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpO
U1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9zaGVldFdpbmRvdy5nZXQoKSBx
dWV1ZTpuaWwgdXNpbmdCbG9jazpbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIChOU05v
dGlmaWNhdGlvbiAqKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHdlYWtUaGlzLT5kaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKKyAgICB9XTsK
KworICAgIE5TV2luZG93ICpwcmVzZW50aW5nV2luZG93ID0gbV9wYWdlLT5wbGF0Zm9ybVdpbmRv
dygpOworICAgIGlmICghcHJlc2VudGluZ1dpbmRvdykgeworICAgICAgICB1aUNhbGxiYWNrKE5P
LCBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46U09FcnJvckRvbWFpbiBj
b2RlOmtTT0Vycm9yQXV0aG9yaXphdGlvblByZXNlbnRhdGlvbkZhaWxlZCB1c2VySW5mbzpuaWxd
KS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgW3ByZXNlbnRpbmdXaW5kb3cg
YmVnaW5TaGVldDptX3NoZWV0V2luZG93LmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Cisj
ZWxpZiBQTEFURk9STShJT1MpCisgICAgVUlWaWV3Q29udHJvbGxlciAqcHJlc2VudGluZ1ZpZXdD
b250cm9sbGVyID0gbV9wYWdlLT51aUNsaWVudCgpLnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigp
OworICAgIGlmICghcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIHVpQ2FsbGJh
Y2soTk8sIGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpTT0Vycm9yRG9t
YWluIGNvZGU6a1NPRXJyb3JBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uRmFpbGVkIHVzZXJJbmZv
Om5pbF0pLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtwcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyOm1fdmlld0NvbnRyb2xsZXIuZ2V0
KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKKyNlbmRpZgorCisgICAgdWlDYWxsYmFj
ayhZRVMsIG5pbCk7Cit9CisKK3ZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlzbWlzc1Zp
ZXdDb250cm9sbGVyKCkKK3sKKyAgICBBU1NFUlQobV92aWV3Q29udHJvbGxlcik7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIEFTU0VSVChtX3NoZWV0V2luZG93ICYmIG1fc2hlZXRXaW5kb3dXaWxs
Q2xvc2VPYnNlcnZlcik7CisKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOm1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlci5nZXQoKV07
CisgICAgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyID0gbnVsbHB0cjsKKworICAgIFtb
bV9zaGVldFdpbmRvdyBzaGVldFBhcmVudF0gZW5kU2hlZXQ6bV9zaGVldFdpbmRvdy5nZXQoKV07
CisgICAgbV9zaGVldFdpbmRvdyA9IG51bGxwdHI7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAg
W1ttX3ZpZXdDb250cm9sbGVyIHByZXNlbnRpbmdWaWV3Q29udHJvbGxlcl0gZGlzbWlzc1ZpZXdD
b250cm9sbGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKKyNlbmRpZgorCisgICAgbV92
aWV3Q29udHJvbGxlciA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNl
c3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYjZjM2M5OTAyYzAwYjI1NDFiYzFkOTQzNGViMWY3ZTAyODlj
YjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVBQX1NTTykKKwor
I2luY2x1ZGUgIk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisKK25hbWVzcGFj
ZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBOYXZp
Z2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQ2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPjsKKworICAgIHN0YXRpYyBSZWY8U09B
dXRob3JpemF0aW9uU2Vzc2lvbj4gY3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0
aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBh
Z2VQcm94eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihz
b0F1dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN1YkZyYW1lU09B
dXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlv
bkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgQ2FsbGJhY2smJik7CisKKyAgICAvLyBTT0F1dGhv
cml6YXRpb25TZXNzaW9uCisgICAgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkgZmlu
YWw7CisgICAgdm9pZCBhYm9ydEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBjb21wbGV0ZUlu
dGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgTlNEYXRhICopIGZpbmFsOworCisg
ICAgLy8gTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24KKyAgICB2b2lkIGJlZm9yZVN0
YXJ0KCkgZmluYWw7CisKKyAgICB2b2lkIGxvYWREYXRhVG9GcmFtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBVUkwmKTsKKyAgICB2b2lkIHBvc3REaWRDYW5jZWxNZXNzYWdlVG9Q
YXJlbnQoRnVuY3Rpb248dm9pZCgpPiYmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0
aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjOWE4ZWZjMDQ1OTU0ZWQ4OTE1OWFiYWNiMDgyYWUz
NzM5ODJjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0w
LDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKworI2lmIEhBVkUoQVBQX1NTTykKKwor
I2ltcG9ydCAiQVBJRnJhbWVIYW5kbGUuaCIKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb25BY3Rpb24u
aCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgor
I2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IGNoYXIqIHNvQXV0aG9yaXphdGlvblBv
c3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCA9ICI8c2NyaXB0PnBhcmVudC5wb3N0TWVzc2FnZSgn
U09BdXRob3JpemF0aW9uRGlkU3RhcnQnLCAnKicpOzwvc2NyaXB0PiI7Citjb25zdCBjaGFyKiBz
b0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50ID0gInBhcmVudC5wb3N0
TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkQ2FuY2VsJywgJyonKTsiOworCitTdWJGcmFtZVNP
QXV0aG9yaXphdGlvblNlc3Npb246OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1
dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4m
JiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgOiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihzb0F1
dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIEluaXRpYXRpbmdB
Y3Rpb246OlN1YkZyYW1lLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKK3sKK30KKwordm9p
ZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJu
YWwoKQoreworICAgIC8vIEluc3RlYWQgb2YgaXNzdWluZyBhIGxvYWQsIHdlIGV4ZWN1dGUgdGhl
IEphdmFzY3JpcHQgZGlyZWN0bHkuIFRoaXMgcHJvdmlkZXMgdXMgYSBjYWxsYmFjaworICAgIC8v
IHRvIGVuc3VyZSB0aGUgZmluYWwgbG9hZCBpcyBpc3N1ZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMg
cG9zdGVkLgorICAgIHBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQoW3dlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8qIHBhZ2VQdHIgPSB3ZWFrVGhpcy0+cGFnZSgpOworICAgICAg
ICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gd2Vha1RoaXMtPm5hdmlnYXRpb25BY3Rpb24o
KTsKKyAgICAgICAgaWYgKCFwYWdlUHRyIHx8ICFuYXZpZ2F0aW9uQWN0aW9uUHRyKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRp
b25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmcmFt
ZSA9IHBhZ2VQdHItPnByb2Nlc3MoKS53ZWJGcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJh
bWVJRCgpKSkgeworICAgICAgICAgICAgICAgIHBhZ2VQdHItPnNldFNob3VsZFN1cHByZXNzU09B
dXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7CisgICAgICAgICAg
ICAgICAgLy8gSXNzdWUgYSBuZXcgbG9hZCB0byB0aGUgb3JpZ2luYWwgVVJMIGFzIHRoZSBvcmln
aW5hbCBsb2FkIGlzIGFib3J0ZWQgYmVmb3JlIHN0YXJ0LgorICAgICAgICAgICAgICAgIGZyYW1l
LT5sb2FkVVJMKG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3QoKS51cmwoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRl
cm5hbChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkK
K3sKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDApIHsKKyAgICAgICAg
ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGxvYWREYXRhVG9GcmFtZShJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSwgcmVzcG9uc2UudXJsKCkpOwor
fQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQoKQor
eworICAgIC8vIENhbmNlbGxlZCB0aGUgY3VycmVudCBsb2FkIGJlZm9yZSBsb2FkaW5nIHRoZSBk
YXRhIHRvIHBvc3QgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgdG8gdGhlIHBhcmVudCBmcmFtZS4K
KyAgICBjYWxsYmFjayh0cnVlKTsKKyAgICAvLyBDdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLCBzaG91bGQgc3RhcnQgYSBuZXcgbG9hZCBh
ZnRlci4KKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5wYWdlKCkg
fHwgIXdlYWtUaGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIC8vIEluc3RlYWQgb2YgZXhlY3V0aW5nIHRoZSBKYXZhc2NyaXB0IGRpcmVjdGx5LCBp
c3N1aW5nIGEgbG9hZC4gVGhpcyB3aWxsIHNldCB0aGUgb3JpZ2luIHByb3Blcmx5LgorICAgICAg
ICB3ZWFrVGhpcy0+bG9hZERhdGFUb0ZyYW1lKElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb0F1dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdl
VG9QYXJlbnQpLCBzdHJsZW4oc29BdXRob3JpemF0aW9uUG9zdERpZFN0YXJ0TWVzc2FnZVRvUGFy
ZW50KSksIHdlYWtUaGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpsb2FkRGF0
YVRvRnJhbWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBVUkwmIGJhc2VV
UkwpCit7CisgICAgYXV0byogcGFnZVB0ciA9IHBhZ2UoKTsKKyAgICBhdXRvKiBuYXZpZ2F0aW9u
QWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOworICAgIGlmICghcGFnZVB0ciB8fCAhbmF2
aWdhdGlvbkFjdGlvblB0cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHRhcmdl
dEZyYW1lID0gbmF2aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkgeworICAgICAgICBp
ZiAoYXV0byogZnJhbWUgPSBwYWdlUHRyLT5wcm9jZXNzKCkud2ViRnJhbWUodGFyZ2V0RnJhbWUt
PmhhbmRsZSgpLmZyYW1lSUQoKSkpIHsKKyAgICAgICAgICAgIHBhZ2VQdHItPnNldFNob3VsZFN1
cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7Cisg
ICAgICAgICAgICBmcmFtZS0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCIsICJVVEYtOCIsIGJh
c2VVUkwpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6cG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudChGdW5jdGlvbjx2b2lkKCk+
JiYgY2FsbGJhY2spCit7CisgICAgYXV0byogcGFnZVB0ciA9IHBhZ2UoKTsKKyAgICBhdXRvKiBu
YXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOworICAgIGlmICghcGFnZVB0
ciB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1
dG8qIHRhcmdldEZyYW1lID0gbmF2aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkgewor
ICAgICAgICBwYWdlUHRyLT5ydW5KYXZhU2NyaXB0SW5GcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxl
KCkuZnJhbWVJRCgpLCBzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50
LCBmYWxzZSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChBUEk6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSosIGJvb2wsIGNvbnN0IEV4Y2VwdGlvbkRldGFpbHMmLCBTY3JpcHRWYWx1ZUNh
bGxiYWNrOjpFcnJvcikgeworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzFkY2M5N2Mx
NjUyYzZiNTRlNDhiNzM0ZjE3Mjc5MDAyNzJkYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dLU09BdXRob3JpemF0aW9u
RGVsZWdhdGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbXBvcnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgorI2ltcG9ydCA8d3RmL1JlZkNv
dW50ZWQuaD4KKworI2lmIEhBVkUoQVBQX1NTTykKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBTT0F1dGhvcml6YXRpb25TZXNzaW9uOworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAaW50
ZXJmYWNlIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8U09BdXRob3JpemF0
aW9uRGVsZWdhdGU+IHsKK0BwYWNrYWdlCitSZWZQdHI8V2ViS2l0OjpTT0F1dGhvcml6YXRpb25T
ZXNzaW9uPiBfc2Vzc2lvbjsKK30KKworLSAodm9pZClzZXRTZXNzaW9uOihSZWZQdHI8V2ViS2l0
OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uPiYmKXNlc3Npb247CisKK0BlbmQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24v
V0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwNTE0ZjA0OGU3ZTdmMzBhYTQzNDc0ZTgzNmI2MDUzY2M1OWRiYWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tT
T0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5o
IgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJTT0F1dGhvcml6YXRpb25TZXNzaW9u
LmgiCisjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorCitAaW1wbGVtZW50YXRpb24gV0tTT0F1dGhv
cml6YXRpb25EZWxlZ2F0ZQorCistICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlv
biAqKWF1dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOihTT0F1dGhvcml6YXRpb25W
aWV3Q29udHJvbGxlcil2aWV3Q29udHJvbGxlciB3aXRoQ29tcGxldGlvbjoodm9pZCAoXikoQk9P
TCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcikpY29tcGxldGlvbgoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSAmJiBjb21wbGV0aW9uKTsKKyAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjb21wbGV0aW9uKE5PLCBuaWwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIF9zZXNzaW9uLT5wcmVzZW50Vmlld0NvbnRyb2xs
ZXIodmlld0NvbnRyb2xsZXIsIGNvbXBsZXRpb24pOworfQorCistICh2b2lkKWF1dGhvcml6YXRp
b25EaWROb3RIYW5kbGU6KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24KK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIExPR19FUlJPUigiQ291bGQgbm90IGhhbmRs
ZSBBcHBTU08uIik7CisgICAgaWYgKCFfc2Vzc2lvbikgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfc2Vzc2lvbi0+ZmFsbEJhY2tU
b1dlYlBhdGgoKTsKK30KKworLSAodm9pZClhdXRob3JpemF0aW9uRGlkQ2FuY2VsOihTT0F1dGhv
cml6YXRpb24gKilhdXRob3JpemF0aW9uCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIF9zZXNzaW9uLT5hYm9ydCgpOworfQorCistICh2
b2lkKWF1dGhvcml6YXRpb25EaWRDb21wbGV0ZTooU09BdXRob3JpemF0aW9uICopYXV0aG9yaXph
dGlvbgoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTE9HX0VSUk9SKCJD
b21wbGV0ZSBBcHBTU08gd2l0aG91dCBhbnkgZGF0YS4iKTsKKyAgICBpZiAoIV9zZXNzaW9uKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2ViUGF0aCgpOworfQorCistICh2b2lkKWF1dGhvcml6
YXRpb246KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRU
UEF1dGhvcml6YXRpb25IZWFkZXJzOihOU0RpY3Rpb25hcnkgKilodHRwQXV0aG9yaXphdGlvbkhl
YWRlcnMKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIExPR19FUlJPUigi
Q29tcGxldGUgQXBwU1NPIHdpdGggdW5leHBlY3RlZCBjYWxsYmFjay4iKTsKKyAgICBpZiAoIV9z
ZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2ViUGF0aCgpOworfQorCistICh2b2lk
KWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxl
dGVXaXRoSFRUUFJlc3BvbnNlOihOU0hUVFBVUkxSZXNwb25zZSAqKWh0dHBSZXNwb25zZSBodHRw
Qm9keTooTlNEYXRhICopaHR0cEJvZHkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX3Nlc3Npb24tPmNvbXBsZXRlKGh0dHBSZXNwb25z
ZSwgaHR0cEJvZHkpOworfQorCistICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlv
biAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY29tcGxldGUgQXBwU1NPOiAlZCIsIGVycm9yLmNvZGUpOworICAgIGlmICghX3Nlc3Npb24p
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgX3Nlc3Npb24tPmZhbGxCYWNrVG9XZWJQYXRoKCk7Cit9CisKKy0gKHZvaWQpc2V0U2Vz
c2lvbjooUmVmUHRyPFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbj4mJilzZXNzaW9uCit7
CisgICAgX3Nlc3Npb24gPSBXVEZNb3ZlKHNlc3Npb24pOworICAgIGlmIChfc2Vzc2lvbikKKyAg
ICAgICAgX3Nlc3Npb24tPnNob3VsZFN0YXJ0KCk7Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAzMDNlNzRmYjczYWY4YWJm
YWZkYTBhNGIzYjA3MjJhYjNjNzcxMTk5Li5jNDQxMTA4YWMxMTE4NGM0MWU4ZGEwMWQ1ZWU4YzJm
M2Q2NjA1MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAg
LTI0NSw2ICsyNDUsMTAgQEAKICNpbmNsdWRlICJFZGl0YWJsZUltYWdlQ29udHJvbGxlci5oIgog
I2VuZGlmCiAKKyNpZiBIQVZFKEFQUF9TU08pCisjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uQ29v
cmRpbmF0b3IuaCIKKyNlbmRpZgorCiAvLyBUaGlzIGNvbnRyb2xzIHdoYXQgc3RyYXRlZ3kgd2Ug
dXNlIGZvciBtb3VzZSB3aGVlbCBjb2FsZXNjaW5nLgogI2RlZmluZSBNRVJHRV9XSEVFTF9FVkVO
VFMgMQogCkBAIC00NzMwLDggKzQ3MzQsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2NlcwogCiAg
ICAgICAgIGF1dG8gbmF2aWdhdGlvbkFjdGlvbiA9IEFQSTo6TmF2aWdhdGlvbkFjdGlvbjo6Y3Jl
YXRlKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBzb3VyY2VGcmFtZUluZm8uZ2V0KCks
IGRlc3RpbmF0aW9uRnJhbWVJbmZvLnB0cigpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmVxdWVz
dCksIG9yaWdpbmFsUmVxdWVzdC51cmwoKSwgc2hvdWxkT3BlbkFwcExpbmtzLCBXVEZNb3ZlKHVz
ZXJJbml0aWF0ZWRBY3Rpdml0eSksIG1haW5GcmFtZU5hdmlnYXRpb24pOwogCi0jaWYgSEFWRShM
T0FEX09QVElNSVpFUikKLVdFQlBBR0VQUk9YWV9MT0FET1BUSU1JWkVSX0FERElUSU9OU18zCisj
aWYgSEFWRShBUFBfU1NPKQorICAgICAgICBpZiAobV9zaG91bGRTdXBwcmVzc1NPQXV0aG9yaXph
dGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB8fCBtX3Nob3VsZFN1cHByZXNzU09B
dXRob3JpemF0aW9uSW5BbGxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24pCisgICAgICAgICAgICBu
YXZpZ2F0aW9uQWN0aW9uLT51bnNldFNob3VsZFBlcmZvcm1TT0F1dGhvcml6YXRpb24oKTsKICNl
bmRpZgogCiAgICAgICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbigqdGhpcywgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgV1RGTW92ZShsaXN0
ZW5lciksIHByb2Nlc3MtPnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0
KCkpLmdldCgpKTsKQEAgLTQ3MzksOCArNDc0NCw4IEBAIFdFQlBBR0VQUk9YWV9MT0FET1BUSU1J
WkVSX0FERElUSU9OU18zCiAKICAgICBtX3Nob3VsZFN1cHByZXNzQXBwTGlua3NJbk5leHROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24gPSBmYWxzZTsKIAotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIp
Ci1XRUJQQUdFUFJPWFlfTE9BRE9QVElNSVpFUl9BRERJVElPTlNfNAorI2lmIEhBVkUoQVBQX1NT
TykKKyAgICBtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uID0gZmFsc2U7CiAjZW5kaWYKIH0KIApAQCAtNTAyOSwxMCArNTAzNCwxMCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKGNvbnN0IFN0cmluZyYg
dGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLAogCiB1c2luZyBOZXdQYWdlQ2FsbGJhY2sgPSBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJQYWdlUHJveHk+JiYpPjsKIHVzaW5nIFVJQ2xp
ZW50Q2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYs
IE5ld1BhZ2VDYWxsYmFjayYmKT47Ci1zdGF0aWMgdm9pZCB0cnlPcHRpbWl6aW5nTG9hZChSZWY8
QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYg
cGFnZSwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3UGFnZUNhbGxiYWNrLCBVSUNsaWVudENhbGxiYWNr
JiYgdWlDbGllbnRDYWxsYmFjaykKK3N0YXRpYyB2b2lkIHRyeVNPQXV0aG9yaXphdGlvbihSZWY8
QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYg
cGFnZSwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3UGFnZUNhbGxiYWNrLCBVSUNsaWVudENhbGxiYWNr
JiYgdWlDbGllbnRDYWxsYmFjaykKIHsKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VCUEFH
RVBST1hZX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzYKKyNpZiBIQVZFKEFQUF9TU08pCisgICAg
cGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkuc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IoKS50cnlB
dXRob3JpemUoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShuZXdQYWdl
Q2FsbGJhY2spLCBXVEZNb3ZlKHVpQ2xpZW50Q2FsbGJhY2spKTsKICNlbHNlCiAgICAgQVNTRVJU
X1VOVVNFRChwYWdlLCBwYWdlLnBhZ2VJRCgpKTsKICAgICB1aUNsaWVudENhbGxiYWNrKFdURk1v
dmUobmF2aWdhdGlvbkFjdGlvbiksIFdURk1vdmUobmV3UGFnZUNhbGxiYWNrKSk7CkBAIC01MDU2
LDggKzUwNjEsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y3JlYXRlTmV3UGFnZShjb25zdCBGcmFt
ZUluZm9EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEsCiAKICAgICAgICAgbmV3UGFnZS0+
bV9zaG91bGRTdXBwcmVzc0FwcExpbmtzSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uID0g
aG9zdHNBcmVFcXVhbChVUkwoeyB9LCBtYWluRnJhbWVVUkwpLCByZXF1ZXN0LnVybCgpKTsKIAot
I2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1XRUJQQUdFUFJPWFlfTE9BRE9QVElNSVpFUl9BRERJ
VElPTlNfNQorI2lmIEhBVkUoQVBQX1NTTykKKyAgICAgICAgbmV3UGFnZS0+bV9zaG91bGRTdXBw
cmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiA9IHRydWU7
CiAjZW5kaWYKICAgICB9OwogCkBAIC01MDY1LDcgKzUwNzAsNyBAQCBXRUJQQUdFUFJPWFlfTE9B
RE9QVElNSVpFUl9BRERJVElPTlNfNQogICAgIGJvb2wgc2hvdWxkT3BlbkFwcExpbmtzID0gIWhv
c3RzQXJlRXF1YWwob3JpZ2luYXRpbmdGcmFtZUluZm8tPnJlcXVlc3QoKS51cmwoKSwgcmVxdWVz
dC51cmwoKSk7CiAgICAgYXV0byBuYXZpZ2F0aW9uQWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0
aW9uOjpjcmVhdGUoV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uRGF0YSksIG9yaWdpbmF0aW5nRnJh
bWVJbmZvLnB0cigpLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmVxdWVzdCksIFVS
TCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5KSk7
CiAKLSAgICB0cnlPcHRpbWl6aW5nTG9hZChXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCAqdGhp
cywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHdpbmRvd0ZlYXR1cmVzID0gV1RGTW92ZSh3aW5kb3dGZWF0dXJlcyldIChS
ZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
IG11dGFibGUgeworICAgIHRyeVNPQXV0aG9yaXphdGlvbihXVEZNb3ZlKG5hdmlnYXRpb25BY3Rp
b24pLCAqdGhpcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIHdpbmRvd0ZlYXR1cmVzID0gV1RGTW92ZSh3aW5kb3dGZWF0
dXJlcyldIChSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpIG11dGFibGUgewogICAgICAgICBtX3VpQ2xpZW50LT5jcmVhdGVOZXdQYWdlKCp0
aGlzLCBXVEZNb3ZlKHdpbmRvd0ZlYXR1cmVzKSwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBmNTRmNjdmZTQ4NmVmMTg5OWIxMzI4NzU1Y2RhMDc4
OGYxY2RiM2RhLi42ODFhZGQ4NWQ2MGE2Nzk0YTZlZDM4YzA1YzQzMmRlZTVhZmFkOWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTQxLDEwICsxNDEsNiBAQCBP
QkpDX0NMQVNTIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogI2luY2x1ZGUgPFdlYkNvcmUvV2Vi
TWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XZWJQYWdlUHJveHlBZGRpdGlv
bnMuaD4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBNZWRpYVNlc3Npb25NZXRhZGF0YTsKQEAgLTE1NDksOCArMTU0NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dP
YnNlcnZlciYpOwogICAgIHZvaWQgd2ViVmlld0RpZE1vdmVUb1dpbmRvdygpOwogCi0jaWYgSEFW
RShMT0FEX09QVElNSVpFUikKLVdFQlBBR0VQUk9YWV9MT0FET1BUSU1JWkVSX0FERElUSU9OU18x
CisjaWYgSEFWRShBUFBfU1NPKQorICAgIHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6
YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigpIHsgbV9zaG91bGRTdXBwcmVzc1NP
QXV0aG9yaXphdGlvbkluQWxsTmF2aWdhdGlvblBvbGljeURlY2lzaW9uID0gdHJ1ZTsgfQorICAg
IHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb24oKSB7IG1fc2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24gPSB0cnVlOyB9CiAjZW5kaWYKIAogICAgIExvZ2dlciYgbG9n
Z2VyKCk7CkBAIC0yMjg4LDggKzIyODUsOSBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCBtX2RlY2lkZVBvbGljeUZvclJlc3BvbnNlUmVxdWVzdDsKICAgICBib29sIG1f
c2hvdWxkU3VwcHJlc3NBcHBMaW5rc0luTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7IGZh
bHNlIH07CiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VCUEFHRVBST1hZX0xPQURPUFRJ
TUlaRVJfQURESVRJT05TXzIKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgYm9vbCBtX3Nob3VsZFN1
cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fc2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbiB7IGZhbHNlIH07CiAjZW5kaWYKIAogICAgIERlcXVlPE5hdGl2
ZVdlYk1vdXNlRXZlbnQ+IG1fbW91c2VFdmVudFF1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBj
MjhhNjQwZjc3NzNkNDBlMjA4OTA5NGRiNjhjYTEzYmE3NmUzZjUyLi5lYzY2Mzk4OGQ1NWZmYzJk
OTk3N2ZhOGFhYjQyYWU0OTRjMWU0NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtNjYsNiArNjYs
MTAgQEAKICNpbmNsdWRlICJTZWNLZXlQcm94eVN0b3JlLmgiCiAjZW5kaWYKIAorI2lmIEhBVkUo
QVBQX1NTTykKKyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJl
Y29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtMTAzLDEwICsxMDcsMTAgQEAgV2Vic2l0ZURhdGFTdG9y
ZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYg
Y29uZmlndXIKICAgICAsIG1fYXV0aGVudGljYXRvck1hbmFnZXIobWFrZVVuaXF1ZVJlZjxBdXRo
ZW50aWNhdG9yTWFuYWdlcj4oKSkKICNlbmRpZgogICAgICwgbV9jbGllbnQobWFrZVVuaXF1ZVJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ2xpZW50PigpKQotewotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIp
Ci1XRUJTSVRFREFUQVNUT1JFX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzIKKyNpZiBIQVZFKEFQ
UF9TU08pCisgICAgLCBtX3NvQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKG1ha2VVbmlxdWVSZWY8
U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I+KCkpCiAjZW5kaWYKK3sKICAgICBXVEY6OnNldFBy
b2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7CiAgICAgbWF5YmVSZWdpc3RlcldpdGhT
ZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKQEAgLTEyNCwxMCArMTI4
LDEwIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogICAgICwgbV9hdXRoZW50aWNhdG9yTWFuYWdlcihtYWtlVW5pcXVlUmVmPEF1
dGhlbnRpY2F0b3JNYW5hZ2VyPigpKQogI2VuZGlmCiAgICAgLCBtX2NsaWVudChtYWtlVW5pcXVl
UmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+KCkpCi17Ci0jaWYgSEFWRShMT0FEX09QVElNSVpF
UikKLVdFQlNJVEVEQVRBU1RPUkVfTE9BRE9QVElNSVpFUl9BRERJVElPTlNfMgorI2lmIEhBVkUo
QVBQX1NTTykKKyAgICAsIG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IobWFrZVVuaXF1ZVJl
ZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcj4oKSkKICNlbmRpZgorewogICAgIG1heWJlUmVn
aXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaAppbmRleCA4MjJjM2ZjNzYzN2Q3YzVlYjAwM2M2OWNlOTQ3NDViZDM4MjU5M2YyLi4w
YjIzNTAxNjUwZmRjY2E3MzE2YWM1YjVmYmY0NTQzNTExNmI0MTg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBA
IC01NiwxMCArNTYsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ3VybFByb3h5U2V0dGluZ3MuaD4K
ICNlbmRpZgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbmNsdWRlIDxXZWJLaXRB
ZGRpdGlvbnMvV2Vic2l0ZURhdGFTdG9yZUFkZGl0aW9ucy5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBBUEkgewogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogfQpAQCAtNzQsNiArNzAsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOwogY2xhc3MgU2VjS2V5
UHJveHlTdG9yZTsKIGNsYXNzIERldmljZUlkSGFzaFNhbHRTdG9yYWdlOworY2xhc3MgU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9j
ZXNzUG9vbDsKIGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKQEAgLTI1NSw4
ICsyNTIsOCBAQCBwdWJsaWM6CiAgICAgV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nl
c3NDb250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIo
KSB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsg
fQogI2VuZGlmCiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VCU0lURURBVEFTVE9SRV9M
T0FET1BUSU1JWkVSX0FERElUSU9OU18xCisjaWYgSEFWRShBUFBfU1NPKQorICAgIFNPQXV0aG9y
aXphdGlvbkNvb3JkaW5hdG9yJiBzb0F1dGhvcml6YXRpb25Db29yZGluYXRvcigpIHsgcmV0dXJu
IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRl
OgpAQCAtMzM2LDYgKzMzMywxMCBAQCBwcml2YXRlOgogICAgIFVuaXF1ZVJlZjxXZWJzaXRlRGF0
YVN0b3JlQ2xpZW50PiBtX2NsaWVudDsKIAogICAgIFJlZlB0cjxBUEk6OkhUVFBDb29raWVTdG9y
ZT4gbV9jb29raWVTdG9yZTsKKworI2lmIEhBVkUoQVBQX1NTTykKKyAgICBVbmlxdWVSZWY8U09B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3I+IG1fc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I7Cisj
ZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDU4NzhhMTQwOTcyMzQyMDk1OTUyZDk1MGM5MzNhMDgzMGEwZTM0Yzku
LmE5NmI3ZDdhYTVhZjYwOGRkNmUyMWRmYzI2MTQ4ODg2MDQ5MGExOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA1OSw2ICsxMDU5
LDE0IEBACiAJCTU3RENFREM3MjE0RjE4MzAwMDE2Qjg0NyAvKiBNb2NrTG9jYWxDb25uZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRURD
NTIxNEYxODMwMDAxNkI4NDcgLyogTW9ja0xvY2FsQ29ubmVjdGlvbi5oICovOyB9OwogCQk1N0RD
RURDQjIxNEY0RTQyMDAxNkI4NDcgLyogTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRURDOTIxNEY0RTQy
MDAxNkI4NDcgLyogTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggKi87IH07CiAJCTU3RUIyRTNB
MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VCMkUzODIxRTE5ODNFMDBCODlDREYg
LyogVTJmSGlkQXV0aGVudGljYXRvci5oICovOyB9OworCQk1N0ZEMzE4MDIyQjM1MTU4MDA4RDBF
OEIgLyogTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTc4MjJCMzUxNDkwMDhEMEU4QiAv
KiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovOyB9OworCQk1N0ZEMzE4MTIy
QjM1MTVCMDA4RDBFOEIgLyogUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE3MDIyQjM1MTQ4MDA4
RDBFOEIgLyogUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi87IH07CisJCTU3RkQzMTgy
MjJCMzUxNUUwMDhEMEU4QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTc0MjJCMzUx
NDkwMDhEMEU4QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLzsgfTsKKwkJ
NTdGRDMxODMyMkIzNTE2MjAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE3MjIy
QjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCAqLzsgfTsKKwkJ
NTdGRDMxODQyMkIzNTE2NTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE3MzIy
QjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCAqLzsgfTsKKwkJ
NTdGRDMxODUyMkIzNTE2OTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTdDMjJCMzUx
NEEwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi87IH07CisJCTU3RkQzMTg2
MjJCMzUxNkMwMDhEMEU4QiAvKiBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTdEMjJCMzUx
NEEwMDhEMEU4QiAvKiBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLzsgfTsKKwkJ
NTdGRDMxODcyMkIzNTE3MDAwOEQwRThCIC8qIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTcxMjJC
MzUxNDgwMDhEMEU4QiAvKiBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmggKi87IH07CiAJCTU4
Nzc0M0E2MjFDMzBCQkUwMEFFOTA4NCAvKiBIVFRQU1VwZ3JhZGVMaXN0LmRiIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODc3NDNBNDIxQzMwQUQ4MDBB
RTkwODQgLyogSFRUUFNVcGdyYWRlTGlzdC5kYiAqLzsgfTsKIAkJNThFOTc3REYyMUM0OUEwMDAw
NUQ5MkE2IC8qIE5ldHdvcmtIVFRQU1VwZ3JhZGVDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OEU5NzdERDIxQzQ5QTAwMDA1RDkyQTYgLyog
TmV0d29ya0hUVFBTVXBncmFkZUNoZWNrZXIuaCAqLzsgfTsKIAkJNUMwQjE3NzgxRTdDODgwRTAw
RTkxMjNDIC8qIE5ldHdvcmtTb2NrZXRTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMwQjE3NzQxRTdDODc5QzAw
RTkxMjNDIC8qIE5ldHdvcmtTb2NrZXRTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwpA
QCAtMzQ5OSw2ICszNTA3LDIyIEBACiAJCTU3RENFRENEMjE0RjUxNjgwMDE2Qjg0NyAvKiBNb2Nr
QXV0aGVudGljYXRvck1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTdFQjJFMzgyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkhpZEF1dGhlbnRpY2F0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVTJmSGlkQXV0aGVudGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1N0VCMkUzOTIxRTE5ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGlj
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVMmZIaWRBdXRoZW50aWNhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzAyMkIzNTE0ODAwOEQwRThCIC8qIFBv
cFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTdGRDMxNzEyMkIzNTE0ODAwOEQwRThCIC8qIFdLU09BdXRob3JpemF0aW9uRGVs
ZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tTT0F1dGhvcml6YXRp
b25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE3MjIyQjM1
MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzMyMkIzNTE0ODAwOEQwRThCIC8qIFNPQXV0
aG9yaXphdGlvbk5TVVJMRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU3RkQzMTc0MjJCMzUxNDkwMDhEMEU4QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkaXJlY3RTT0F1dGhv
cml6YXRpb25TZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTc1
MjJCMzUxNDkwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQb3BVcFNPQXV0aG9yaXphdGlvblNl
c3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTc2MjJCMzUxNDkw
MDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE3NzIyQjM1MTQ5MDA4RDBFOEIgLyog
U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE3ODIyQjM1MTQ5MDA4RDBFOEIgLyogTmF2
aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzkyMkIzNTE0OTAwOEQwRThCIC8qIFNPQXV0aG9yaXph
dGlvbkNvb3JkaW5hdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3RkQzMTdBMjJCMzUxNEEwMDhEMEU4QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlv
blNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZWRp
cmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU3RkQzMTdCMjJCMzUxNEEwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9u
U2Vzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5hdmln
YXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1N0ZEMzE3QzIyQjM1MTRBMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTT0F1dGhvcml6YXRpb25TZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTdEMjJCMzUxNEEwMDhEMEU4
QiAvKiBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTdFMjJCMzUxNEEwMDhEMEU4QiAvKiBXS1NPQXV0
aG9yaXphdGlvbkRlbGVnYXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTdGRDMxN0YyMkIzNTE0QTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvblNlc3Np
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTT0F1dGhvcml6
YXRpb25TZXNzaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODc3NDNBNDIx
QzMwQUQ4MDBBRTkwODQgLyogSFRUUFNVcGdyYWRlTGlzdC5kYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBIVFRQU1VwZ3JhZGVM
aXN0LmRiOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9IVFRQU1VwZ3JhZGVMaXN0LmRi
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1OEU5NzdEQzIxQzQ5OUZF
MDA1RDkyQTYgLyogTmV0d29ya0hUVFBTVXBncmFkZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0hUVFBTVXBncmFkZUNoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OEU5NzdERDIxQzQ5QTAwMDA1RDkyQTYgLyog
TmV0d29ya0hUVFBTVXBncmFkZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0hUVFBTVXBncmFkZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0NDQsNiArNTQ2OCw3IEBACiAJCTFBQkMzREYyMTg5OUU0MTUwMDRGMDYyNiAv
KiBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NTdGRDMxNkIyMkIzMzY3RTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbiAqLywKIAkJCQk5OUM4
MUQ1NTFDMjBERkJFMDA1QzRDODIgLyogQXV0b21hdGlvbkNsaWVudC5oICovLAogCQkJCTk5Qzgx
RDU2MUMyMERGQkUwMDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50Lm1tICovLAogCQkJCTk5MEQy
OEI3MUM2NTM5QTAwMDk4Njk3NyAvKiBBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5oICovLApAQCAt
NzAwNCw2ICs3MDI5LDI5IEBACiAJCQlwYXRoID0gTW9jazsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTU3RkQzMTZCMjJCMzM2N0UwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRp
b24gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTU3RkQz
MTc4MjJCMzUxNDkwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
ICovLAorCQkJCTU3RkQzMTdCMjJCMzUxNEEwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5tbSAqLywKKwkJCQk1N0ZEMzE3MDIyQjM1MTQ4MDA4RDBFOEIgLyogUG9w
VXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCisJCQkJNTdGRDMxNzUyMkIzNTE0OTAwOEQw
RThCIC8qIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLywKKwkJCQk1N0ZEMzE3NDIy
QjM1MTQ5MDA4RDBFOEIgLyogUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCisJ
CQkJNTdGRDMxN0EyMkIzNTE0QTAwOEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbSAqLywKKwkJCQk1N0ZEMzE3MjIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0
aW9uQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk1N0ZEMzE3OTIyQjM1MTQ5MDA4RDBFOEIgLyogU09B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW0gKi8sCisJCQkJNTdGRDMxNzMyMkIzNTE0ODAwOEQw
RThCIC8qIFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmggKi8sCisJCQkJNTdGRDMxNzYyMkIz
NTE0OTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLm1tICovLAorCQkJCTU3
RkQzMTdDMjJCMzUxNEEwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCisJ
CQkJNTdGRDMxN0YyMkIzNTE0QTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0g
Ki8sCisJCQkJNTdGRDMxN0QyMkIzNTE0QTAwOEQwRThCIC8qIFN1YkZyYW1lU09BdXRob3JpemF0
aW9uU2Vzc2lvbi5oICovLAorCQkJCTU3RkQzMTc3MjJCMzUxNDkwMDhEMEU4QiAvKiBTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gKi8sCisJCQkJNTdGRDMxNzEyMkIzNTE0ODAwOEQw
RThCIC8qIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaCAqLywKKwkJCQk1N0ZEMzE3RTIyQjM1
MTRBMDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5tbSAqLywKKwkJCSk7CisJ
CQlwYXRoID0gU09BdXRob3JpemF0aW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKIAkJNUMxNDI2RjExQzIzRjgxNzAwRDQxMTgzIC8qIERvd25sb2FkcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05Mzk4LDYgKzk0NDYsNyBAQAogCQkJ
CTJENTAzNjZCMUJDREUxNzkwMEUyMEJCMyAvKiBOYXRpdmVXZWJHZXN0dXJlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2MzE3MkNGMThCNDY5NDkwMDY1QjlDMyAvKiBOYXRpdmVXZWJUb3Vj
aEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQURDQjg2QjE4OTgzMUIzMDAyMkVFNUEgLyog
TmF2aWdhdGlvbkFjdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQzMTgwMjJCMzUx
NTgwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFCQzNERjYxODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRpb25TdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RkJBMkExMUU2ODYyNzAwREIxMzcxIC8qIE5ldHNjYXBl
QnJvd3NlckZ1bmNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZGQkQyODExRTY5QkMyMDBEQjEz
NzEgLyogTmV0c2NhcGVQbHVnaW4uaCBpbiBIZWFkZXJzICovLApAQCAtOTUxNSw2ICs5NTY0LDcg
QEAKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Q0Q2MjI3ODE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCN0FGMTFFNjRCNjgwMERCMTM3MSAvKiBQ
bHVnaW5WaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQk1N0ZEMzE4MTIyQjM1MTVCMDA4RDBFOEIg
LyogUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Ew
RUQzNTFGNzQ3Q0NGMDAzMjk5RUIgLyogUHJlY29ubmVjdFRhc2suaCBpbiBIZWFkZXJzICovLAog
CQkJCUFBQjE0NUU2MjIzRjkzMTIwMEU0ODlEOCAvKiBQcmVmZXRjaENhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMUNDMUI5MDEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmggaW4gSGVh
ZGVycyAqLywKQEAgLTk1MjYsNiArOTU3Niw3IEBACiAJCQkJODMwNDhBRTYxQUNBNDVEQzAwODJD
ODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRTY4
ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTE4QTlFRjE5MDdBRDZGMDBGN0M5MkIgLyogUXVpY2tMb29rRG9jdW1lbnREYXRhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1N0ZEMzE4MjIyQjM1MTVFMDA4RDBFOEIgLyogUmVkaXJlY3RTT0F1
dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDQ3QjU2RDE4MTA3MTRF
MDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEREY3MzE1MThFOTUwNjAwMDRGNUE2NiAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjE2QUVBMTY0QjNBODgwMDI5MEQ2MiAvKiBS
ZW1vdGVMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTk1ODgsNiArOTYzOSw5
IEBACiAJCQkJOTk1MjI2RDYyMDdEMTg0NjAwRjc4NDIwIC8qIFNpbXVsYXRlZElucHV0RGlzcGF0
Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJEMUE0NzAwODFDRUIxIC8qIFNt
YXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTY5NDNF
MThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQzMTgzMjJCMzUxNjIwMDhEMEU4QiAvKiBTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTdGRDMxODQyMkIzNTE2
NTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1N0ZEMzE4NTIyQjM1MTY5MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTI3MkIyOEIxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3Rp
Y3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCREVEMzE2Qzk4RUREMDBFNEUyNUUgLyog
U3RhdGlzdGljc1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBM0ZFQ0EyMjFGN0MwOTcw
MEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk1OTgs
NiArOTY1Miw3IEBACiAJCQkJMUFCMzFBOTcxNkJDNjg4MTAwRjZEQkM5IC8qIFN0b3JhZ2VNYW5h
Z2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDZDMTgzMjdDMTIwMDA4N0RE
NyAvKiBTdHJpbmdSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5NkJEODVEMTUwMTlC
QzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQz
MTg2MjJCMzUxNkMwMDhEMEU4QiAvKiBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTQ0NTk5ODQyMjI4MzNFODcwMEU2MTM3MyAvKiBTeW50aGV0aWNF
ZGl0aW5nQ29tbWFuZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNTcxMzVGMjA0MEE5QjIw
MDg0RjlDRiAvKiBTeXN0ZW1QcmV2aWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0UxQTBCRDYxQTQ4RTZDNjAwNTRFRjc0IC8qIFRDQ1NQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDE1Niw2ICsxMDIxMSw3IEBACiAJCQkJMURCMDE5NDMyMTFDRjAwMjAwOUZCM0U4IC8qIFdLU2hh
cmVTaGVldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzRTQ2MkQxQUQ4Mzc1NjAwMTYyMzRBIC8q
IFdLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
NTQ5QjQxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1N0ZEMzE4NzIyQjM1MTcwMDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRp
b25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E3OEZGMzIyMjQxOTE5NjAwOTY0ODNF
IC8qIFdLU3RvcmFnZUFjY2Vzc0FsZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYwNjEy
NEZGMDI3MDA2OEYyMEEgLyogV0tTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NjFB
MTI0RkYwMzcwMDY4RjIwQSAvKiBXS1N0cmluZ0NGLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4IDM3
ZWI0YWZhZWY2MTIxMmViZjNjMmUzMzkwZmRjNTFiZDgxMGI5ZjguLmJiMTZmOGExOTUyZDM1NzRi
MmZkM2NlOTUyZTFiZWNkZTBkZDRlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgV2Vi
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNz
SW5pdGlhbGl6YXRpb25QCiAgICAgcmVnaXN0ZXJXaXRoU3RhdGVEdW1wZXIoKTsKICNlbmRpZgog
Ci0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKKyNpZiBIQVZFKEFQUF9TU08pCiAgICAgW05TVVJM
U2Vzc2lvbiBfZGlzYWJsZUFwcFNTT107CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlM2FhNGU5Mzc5YjcwYjc0YjcyNmNhOTkz
MGNmMzU0YWFlZjliN2NlLi4yZDdiZDI4MDkxZDY0NGZjYWQ2MzRlNDc0M2M5YTM2ZjkyZThjZjUy
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMTktMDYtMTQgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIFNPQXV0aG9yaXphdGlvbiBmcm9tIFdlYktpdEFkZGl0aW9ucyB0
byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5ODg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc1NzM0MzE+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBhbGwg
U09BdXRob3JpemF0aW9uIHRlc3RzIGZyb20gV2ViS2l0QWRkaXRpb25zIHRvIFdlYktpdC4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ29uZmlndXJhdGlvbnMvVGVzdFdlYktpdEFQSS54Y2Nv
bmZpZzoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Rlc3RTT0F1dGhvcml6YXRpb24ubW06IEFkZGVkLgorICAgICAgICAoLVtUZXN0U09BdXRob3Jp
emF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGluaXRdKToKKyAgICAgICAgKC1bVGVzdFNPQXV0aG9y
aXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRpZEZpbmlzaE5hdmlnYXRpb246XSk6
CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmll
dzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OmNy
ZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjpmb3JOYXZpZ2F0aW9uQWN0aW9uOndpbmRvd0Zl
YXR1cmVzOl0pOgorICAgICAgICAoLVtUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIg
dmlld0RpZEFwcGVhcl0pOgorICAgICAgICAoLVtUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRy
b2xsZXIgdmlld0RpZERpc2FwcGVhcl0pOgorICAgICAgICAob3ZlcnJpZGVDYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkwpOgorICAgICAgICAob3ZlcnJpZGVTZXREZWxlZ2F0ZSk6CisgICAg
ICAgIChvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpOgorICAgICAgICAob3ZlcnJp
ZGVDYW5jZWxBdXRob3JpemF0aW9uKToKKyAgICAgICAgKG92ZXJyaWRlQWRkT2JzZXJ2ZXJGb3JO
YW1lKToKKyAgICAgICAgKG92ZXJyaWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbik6CisgICAg
ICAgIChyZXNldFN0YXRlKToKKyAgICAgICAgKGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcpOgorICAgICAgICAoZ2VuZXJhdGVIdG1sKToKKyAgICAgICAgKGNoZWNrQXV0aG9yaXphdGlv
bk9wdGlvbnMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDYtMTQg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIGltcG9ydC13M2Mt
dGVzdHMgc2hvdWxkIHJlc3BlY3QgV0VCS0lUX09VVFBVVERJUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9UZXN0V2ViS2l0QVBJLnhjY29uZmlnIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9UZXN0V2ViS2l0QVBJLnhjY29uZmlnCmlu
ZGV4IGM2ZGZiMzMzYTVmODUzYTlkNWU4OTljNzk1NDY1NDBlZDQwODQzMmYuLjg5MWE2ZjMxY2Nh
N2NmMDU4Y2Y1OWNiNDVlNWY2MGM2NzRlZGY1ZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvQ29uZmlndXJhdGlvbnMvVGVzdFdlYktpdEFQSS54Y2NvbmZpZworKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL1Rlc3RXZWJLaXRBUEkueGNjb25maWcKQEAgLTI4
LDcgKzI4LDE0IEBAIEdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOwogCiBVTkVYUE9S
VEVEX1NZTUJPTF9MREZMQUdTID0gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTjd0ZXN0
aW5nNFRlc3QxNlRlYXJEb3duVGVzdENhc2VFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxf
X1pON3Rlc3Rpbmc0VGVzdDEzU2V0VXBUZXN0Q2FzZUV2CiAKLU9USEVSX0xERkxBR1MgPSAkKGlu
aGVyaXRlZCkgJChVTkVYUE9SVEVEX1NZTUJPTF9MREZMQUdTKSAtbGd0ZXN0IC1mb3JjZV9sb2Fk
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9saWJUZXN0V2ViS2l0QVBJLmEgLWZyYW1ld29yayBKYXZh
U2NyaXB0Q29yZSAtZnJhbWV3b3JrIFdlYktpdCAtbFdlYkNvcmVUZXN0U3VwcG9ydCAkKE9USEVS
X0xERkxBR1NfUExBVEZPUk0pOworV0tfQVVUSEtJVF9MREZMQUdTID0gJChXS19BVVRIS0lUX0xE
RkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19BVVRIS0lUX0xERkxBR1NfaXBob25lb3Mg
PSAkKFdLX0FVVEhLSVRfTERGTEFHUyQoV0tfSU9TXzEzKSk7CitXS19BVVRIS0lUX0xERkxBR1Nf
aXBob25lc2ltdWxhdG9yID0gJChXS19BVVRIS0lUX0xERkxBR1MkKFdLX0lPU18xMykpOworV0tf
QVVUSEtJVF9MREZMQUdTX0lPU19TSU5DRV8xMyA9IC1mcmFtZXdvcmsgQXV0aEtpdDsKK1dLX0FV
VEhLSVRfTERGTEFHU19tYWNvc3ggPSAkKFdLX0FVVEhLSVRfTERGTEFHUyQoV0tfTUFDT1NfMTAx
NSkpOworV0tfQVVUSEtJVF9MREZMQUdTX01BQ09TX1NJTkNFXzEwMTUgPSAtZnJhbWV3b3JrIEF1
dGhLaXQ7CisKK09USEVSX0xERkxBR1MgPSAkKGluaGVyaXRlZCkgJChVTkVYUE9SVEVEX1NZTUJP
TF9MREZMQUdTKSAtbGd0ZXN0IC1mb3JjZV9sb2FkICQoQlVJTFRfUFJPRFVDVFNfRElSKS9saWJU
ZXN0V2ViS2l0QVBJLmEgLWZyYW1ld29yayBKYXZhU2NyaXB0Q29yZSAtZnJhbWV3b3JrIFdlYktp
dCAtbFdlYkNvcmVUZXN0U3VwcG9ydCAkKFdLX0FVVEhLSVRfTERGTEFHUykgJChPVEhFUl9MREZM
QUdTX1BMQVRGT1JNKTsKIE9USEVSX0xERkxBR1NfUExBVEZPUk1bc2RrPW1hY29zeCpdID0gLWZy
YW1ld29yayBDb2NvYSAtZnJhbWV3b3JrIENhcmJvbjsKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG5vdCBiZSBidWlsdCBvbiBpT1MuIEluc3RlYWQgd2Ugc2hvdWxkIGNyZWF0ZSBhbmQgdXNlIGEg
VGVzdFdlYktpdEFQSSBhcHBsaWNhdGlvbi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjYw
NjliZDg4OTUzY2MzNTEwYjA4N2UxYTBlMmEyYzdkZmE0MGU1Ni4uYzVjMDY3YzI1MzcyMDA1MDAx
MzQ1NjQzMDI0NjM2ZWIwMmMwZmE3NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI5Nyw3
ICsyOTcsNyBAQAogCQk1NzU5OUUyQTFGMDcxQUEwMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0
dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5UmVhZC5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NTk5RTI1MUYwNzE5MkMwMEEz
RkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlSZWFk
Lmh0bWwgKi87IH07CiAJCTU3NTk5RTJCMUYwNzFBQTAwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1
Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlXcml0ZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NTk5RTIzMUYwNzE5MkMw
MEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlX
cml0ZS5odG1sICovOyB9OwogCQk1NzY5QzUwQjFEOUIwMDAyMDAwODQ3RkIgLyogU2VyaWFsaXpl
ZENyeXB0b0tleVdyYXAubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzY5QzUwQTFEOUIwMDAxMDAwODQ3RkIgLyogU2VyaWFsaXplZENyeXB0b0tleVdy
YXAubW0gKi87IH07Ci0JCTU3NzRBQTY4MjFGQkJGNzgwMEFGMkExQiAvKiBUZXN0TG9hZE9wdGlt
aXplci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
NzRBQTY3MjFGQkJGNzgwMEFGMkExQiAvKiBUZXN0TG9hZE9wdGltaXplci5tbSAqLzsgfTsKKwkJ
NTc3NEFBNjgyMUZCQkY3ODAwQUYyQTFCIC8qIFRlc3RTT0F1dGhvcml6YXRpb24ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Nzc0QUE2NzIxRkJCRjc4
MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLzsgfTsKIAkJNTc3OEQwNTYyMjEx
MEEyNjAwODk5RTNCIC8qIExvYWRXZWJBcmNoaXZlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3OEQwNTUyMjExMEEyNjAwODk5RTNCIC8qIExvYWRX
ZWJBcmNoaXZlLm1tICovOyB9OwogCQk1NzhDQkQ2NzIwNEZCMkM4MDA4M0I5RjIgLyogTG9jYWxB
dXRoZW50aWNhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzhDQkQ2NjIwNEZCMkM3MDA4M0I5RjIgLyogTG9jYWxBdXRoZW50
aWNhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTU3OTAxRkIxMUNBRjE0MkQwMEVENjRGOSAvKiBM
b2FkSW52YWxpZFVSTFJlcXVlc3QuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwMUZCMDFDQUYxNDFDMDBFRDY0RjkgLyogTG9hZElu
dmFsaWRVUkxSZXF1ZXN0Lmh0bWwgKi87IH07CkBAIC0xNzQzLDcgKzE3NDMsNyBAQAogCQk1NzU5
OUUyNTFGMDcxOTJDMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRD
b21wYXRpYmlsaXR5UmVhZC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSW5kZXhlZERCU3RydWN0dXJlZENsb25l
QmFja3dhcmRDb21wYXRpYmlsaXR5UmVhZC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzU5OUUyNjFGMDcxOTJDMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25l
QmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtc2htICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJJbmRleGVkREJTdHJ1Y3R1
cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy1zaG0iOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzY5QzUwQTFEOUIwMDAxMDAwODQ3RkIgLyogU2VyaWFsaXplZENy
eXB0b0tleVdyYXAubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTc3NEFBNjcyMUZCQkY3ODAwQUYyQTFCIC8qIFRlc3RMb2FkT3B0aW1pemVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gVGVzdExvYWRPcHRpbWl6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU3NzRBQTY3MjFGQkJGNzgwMEFGMkExQiAvKiBUZXN0U09BdXRob3JpemF0aW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdFNPQXV0aG9yaXphdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc3OEQwNTUyMjExMEEyNjAwODk5RTNCIC8qIExvYWRX
ZWJBcmNoaXZlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9hZFdlYkFyY2hpdmUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OENCRDY2MjA0RkIyQzcwMDgzQjlGMiAvKiBM
b2NhbEF1dGhlbnRpY2F0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gTG9jYWxBdXRo
ZW50aWNhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0xv
Y2FsQXV0aGVudGljYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJ
NTc5MDFGQUMxQ0FGMTJDMjAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvYWRJbnZhbGlkVVJMUmVxdWVz
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MzUsNyArMjczNSw3IEBACiAJ
CQkJNTE1QkUxNzAxRDQyOEJEMTAwREQ3QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gKi8s
CiAJCQkJMUM3MzRCNTIyMDc4OEM0ODAwRjQzMEVBIC8qIFN5c3RlbUNvbG9ycy5tbSAqLywKIAkJ
CQkyRDcwMDU5NTIxRURBMEM2MDAzNDYzQ0IgLyogVGFiT3V0T2ZXZWJWaWV3Lm1tICovLAotCQkJ
CTU3NzRBQTY3MjFGQkJGNzgwMEFGMkExQiAvKiBUZXN0TG9hZE9wdGltaXplci5tbSAqLywKKwkJ
CQk1Nzc0QUE2NzIxRkJCRjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLywK
IAkJCQlGNENENzRDNzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAq
LywKIAkJCQlGNENENzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIu
bW0gKi8sCiAJCQkJQzIyRkEzMkEyMjhGODcwODAwOUQ3OTg4IC8qIFRleHRXaWR0aC5tbSAqLywK
QEAgLTQ0NzIsMTAgKzQ0NzIsMTAgQEAKIAkJCQlGNEY1QkI1MjIxNjY3QkFBMDAyRDA2QjkgLyog
VGVzdEZvbnRPcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ1RTE1NzYyMTEyQ0U2MjAw
MzA3RTgyIC8qIFRlc3RJbnB1dERlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ1RDM4
OTEyMTVBN0I0QjAwMkEyOTc5IC8qIFRlc3RJbnNwZWN0b3JCYXIubW0gaW4gU291cmNlcyAqLywK
LQkJCQk1Nzc0QUE2ODIxRkJCRjc4MDBBRjJBMUIgLyogVGVzdExvYWRPcHRpbWl6ZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyRDFDMDRBNzFENzYyOThCMDAwQTY4MTYgLyogVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTkwMUI4QUUzNkYwMEQxMDdF
QiAvKiBUZXN0UHJvdG9jb2wubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VBRTFBNDExQTM0
MDA0NDdDNEMgLyogVGVzdHNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTU3NzRB
QTY4MjFGQkJGNzgwMEFGMkExQiAvKiBUZXN0U09BdXRob3JpemF0aW9uLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjRDRDc0QzkyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVGRjA2RDQxRDhBRURCQjAwMDRCQjMwIC8qIFRlc3RX
S1dlYlZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDUxN0I2NzIwNTRDNDk1MDBDMjY3MjEg
LyogVGVzdFdLV2ViVmlld0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdExvYWRPcHRpbWl6ZXIu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1p
emVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmYyOWM1OTc4ZWM0MzlhMGIy
NjczOWJlNjdlNGZmNGNhNjMwYWM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdExv
YWRPcHRpbWl6ZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotI2ltcG9y
dCA8V2ViS2l0QWRkaXRpb25zL1Rlc3RMb2FkT3B0aW1pemVyQWRkaXRpb25zLm1tPgotI2VuZGlm
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RT
T0F1dGhvcml6YXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Rlc3RTT0F1dGhvcml6YXRpb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM5NDdhNWYxN2E2MjI4Njc5MWVj
OTcwOTEzODE3NWQwNWM2MzMwZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbQpAQCAtMCwwICsxLDE4
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3QuaCIK
KworI2lmIEhBVkUoQVBQX1NTTykKKworI2ltcG9ydCAiQ2xhc3NNZXRob2RTd2l6emxlci5oIgor
I2ltcG9ydCAiSW5zdGFuY2VNZXRob2RTd2l6emxlci5oIgorI2ltcG9ydCAiUGxhdGZvcm1VdGls
aXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25Q
cml2YXRlLmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaD4KKyNpbXBvcnQg
PHBhbC9zcGkvY29jb2EvQXV0aEtpdFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+Cisj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0u
aD4KKyNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CitzdGF0aWMgYm9vbCBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBh
dXRob3JpemF0aW9uUGVyZm9ybWVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBhdXRob3JpemF0aW9u
Q2FuY2VsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCB1aVNob3dlZCA9IGZhbHNlOworc3RhdGlj
IGJvb2wgbmV3V2luZG93Q3JlYXRlZCA9IGZhbHNlOworc3RhdGljIGJvb2wgaGF2ZUh0dHBCb2R5
ID0gZmFsc2U7CitzdGF0aWMgU3RyaW5nIGZpbmFsVVJMOworc3RhdGljIFNPQXV0aG9yaXphdGlv
biogZ0F1dGhvcml6YXRpb247CitzdGF0aWMgaWQ8U09BdXRob3JpemF0aW9uRGVsZWdhdGU+IGdE
ZWxlZ2F0ZTsKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgQmxvY2tQdHI8dm9pZChOU05vdGlm
aWNhdGlvbiAqKT4gZ05vdGlmaWNhdGlvbkNhbGxiYWNrOworI2VuZGlmCitzdGF0aWMgUmV0YWlu
UHRyPFdLV2ViVmlldz4gZ05ld1dpbmRvdzsKKworc3RhdGljIGNvbnN0IGNoYXIqIG9wZW5lclRl
bXBsYXRlID0KKyI8aHRtbD4iCisiPGJ1dHRvbiBvbmNsaWNrPSdjbGlja01lKCknIHN0eWxlPSd3
aWR0aDo0MDBweDtoZWlnaHQ6NDAwcHgnPndpbmRvdy5vcGVuPC9idXR0b24+IgorIjxzY3JpcHQ+
IgorImZ1bmN0aW9uIGNsaWNrTWUoKSIKKyJ7IgorIiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cignbWVzc2FnZScsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7IgorIiAgICBuZXdXaW5kb3cgPSB3
aW5kb3cub3BlbignJXMnKTsiCisiICAgICVzIgorIiAgICBpZiAoIW5ld1dpbmRvdykiCisiICAg
ICAgICByZXR1cm47IgorIiAgICBjb25zdCBwb2xsVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKSB7IgorIiAgICAgICAgaWYgKG5ld1dpbmRvdy5jbG9zZWQpIHsiCisiICAgICAg
ICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwocG9sbFRpbWVyKTsiCisiICAgICAgICAgICAgd2lu
ZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ1dpbmRv
d0Nsb3NlZC4nKTsiCisiICAgICAgICB9IgorIiAgICB9LCAyMDApOyIKKyJ9IgorImZ1bmN0aW9u
IHJlY2VpdmVNZXNzYWdlKGV2ZW50KSIKKyJ7IgorIiAgICBpZiAoZXZlbnQub3JpZ2luID09ICdo
dHRwOi8vd3d3LmV4YW1wbGUuY29tJykgeyIKKyIgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2Fn
ZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKGV2ZW50LmRhdGEpOyIKKyIgICAgICAg
ICVzIgorIiAgICB9IgorIn0iCisiPC9zY3JpcHQ+IgorIjwvaHRtbD4iOworCitzdGF0aWMgY29u
c3QgY2hhciogbmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSA9CisiPGh0bWw+IgorIjxzY3JpcHQ+
IgorIndpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2UoJ0hlbGxvLicsICcqJyk7IgorIiVzIgorIjwv
c2NyaXB0PiIKKyI8L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIHBhcmVudFRlbXBsYXRl
ID0KKyI8aHRtbD4iCisiPGlmcmFtZSBzcmM9JyVzJz48L2lmcmFtZT4iCisiPHNjcmlwdD4iCisi
ZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpIgorInsiCisiICAgIHdpbmRvdy53ZWJraXQu
bWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKGV2ZW50Lm9yaWdpbik7Igor
IiAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2Fn
ZShldmVudC5kYXRhKTsiCisifSIKKyJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScs
IHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7IgorIjwvc2NyaXB0PiIKKyI8L2h0bWw+IjsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGlmcmFtZVRlbXBsYXRlID0KKyI8aHRtbD4iCisiPHNjcmlwdD4iCisi
cGFyZW50LnBvc3RNZXNzYWdlKCdIZWxsby4nLCAnKicpOyIKKyI8L3NjcmlwdD4iCisiPC9odG1s
PiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBzYW1sUmVzcG9uc2UgPQorIjxodG1sPiIKKyI8c2Ny
aXB0PiIKKyJ3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVz
c2FnZSgnU0FNTCcpOyIKKyI8L3NjcmlwdD4iCisiPC9odG1sPiI7CisKK0BpbnRlcmZhY2UgVGVz
dFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRp
b25EZWxlZ2F0ZSwgV0tVSURlbGVnYXRlPgorQHByb3BlcnR5IGJvb2wgaXNEZWZhdWx0UG9saWN5
OworLSAoaW5zdGFuY2V0eXBlKWluaXQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0U09B
dXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7
CisgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pCisgICAgICAgIHNlbGYuaXNEZWZhdWx0UG9s
aWN5ID0gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmln
YXRpb24KK3sKKyAgICBFWFBFQ1RfRkFMU0UobmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgbmF2
aWdhdGlvbkNvbXBsZXRlZCA9IHRydWU7CisgICAgZmluYWxVUkwgPSBuYXZpZ2F0aW9uLl9yZXF1
ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZzsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFj
dGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05hdmln
YXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIGlmIChzZWxmLmlzRGVm
YXVsdFBvbGljeSkgeworICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9u
UG9saWN5QWxsb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlY2lzaW9uSGFuZGxl
cihfV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3dXaXRob3V0VHJ5aW5nQXBwTGluayk7Cit9
CisKKy0gKFdLV2ViVmlldyAqKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY3JlYXRlV2Vi
Vmlld1dpdGhDb25maWd1cmF0aW9uOihXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJh
dGlvbiBmb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9u
QWN0aW9uIHdpbmRvd0ZlYXR1cmVzOihXS1dpbmRvd0ZlYXR1cmVzICopd2luZG93RmVhdHVyZXMK
K3sKKyAgICBFWFBFQ1RfRkFMU0UobmV3V2luZG93Q3JlYXRlZCk7CisgICAgbmV3V2luZG93Q3Jl
YXRlZCA9IHRydWU7CisgICAgZ05ld1dpbmRvdyA9IFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXTsKKyAgICBbZ05l
d1dpbmRvdyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6c2VsZl07CisgICAgcmV0dXJuIGdOZXdXaW5k
b3cuZ2V0KCk7Cit9CisKK0BlbmQKKworI2lmIFBMQVRGT1JNKE1BQykKK0BpbnRlcmZhY2UgVGVz
dFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIDogTlNWaWV3Q29udHJvbGxlcgorI2VsaWYg
UExBVEZPUk0oSU9TKQorQGludGVyZmFjZSBUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xs
ZXIgOiBVSVZpZXdDb250cm9sbGVyCisjZW5kaWYKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcgorCistICh2b2lkKXZpZXdEaWRBcHBlYXIK
K3sKKyAgICBFWFBFQ1RfRkFMU0UodWlTaG93ZWQpOworICAgIHVpU2hvd2VkID0gdHJ1ZTsKK30K
KworLSAodm9pZCl2aWV3RGlkRGlzYXBwZWFyCit7CisgICAgRVhQRUNUX1RSVUUodWlTaG93ZWQp
OworICAgIHVpU2hvd2VkID0gZmFsc2U7Cit9CisKK0BlbmQKKworc3RhdGljIGJvb2wgb3ZlcnJp
ZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwoaWQsIFNFTCwgTlNVUkwgKnVybCwgTlNJ
bnRlZ2VyKQoreworICAgIGlmICghW3VybC5sYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsOkAic2lt
cGxlLmh0bWwiXSAmJiAhW3VybC5ob3N0IGlzRXF1YWw6QCJ3d3cuZXhhbXBsZS5jb20iXSAmJiAh
W3VybC5sYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsOkAiR2V0U2Vzc2lvbkNvb2tpZS5odG1sIl0p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgb3ZlcnJpZGVTZXREZWxlZ2F0ZShpZCBzZWxmLCBTRUwsIGlkPFNPQXV0aG9yaXphdGlvbkRl
bGVnYXRlPiBkZWxlZ2F0ZSkKK3sKKyAgICBnQXV0aG9yaXphdGlvbiA9IHNlbGY7CisgICAgZ0Rl
bGVnYXRlID0gZGVsZWdhdGU7Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJyaWRlQmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTChpZCwgU0VMLCBOU1VSTCAqdXJsLCBOU0RpY3Rpb25hcnkgKmhlYWRlcnMs
IE5TRGF0YSAqYm9keSkKK3sKKyAgICBFWFBFQ1RfVFJVRShoZWFkZXJzICE9IG5pbCk7CisgICAg
RVhQRUNUX1RSVUUoKGJvZHkgPT0gbmlsKSBeIGhhdmVIdHRwQm9keSk7CisgICAgRVhQRUNUX0ZB
TFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGF1dGhvcml6YXRpb25QZXJmb3JtZWQg
PSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBvdmVycmlkZUNhbmNlbEF1dGhvcml6YXRpb24oaWQs
IFNFTCkKK3sKKyAgICBFWFBFQ1RfRkFMU0UoYXV0aG9yaXphdGlvbkNhbmNlbGxlZCk7CisgICAg
YXV0aG9yaXphdGlvbkNhbmNlbGxlZCA9IHRydWU7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit1
c2luZyBOb3RpZmljYXRpb25DYWxsYmFjayA9IHZvaWQgKF4pKE5TTm90aWZpY2F0aW9uICpub3Rl
KTsKK3N0YXRpYyBpZCBvdmVycmlkZUFkZE9ic2VydmVyRm9yTmFtZShpZCwgU0VMLCBOU05vdGlm
aWNhdGlvbk5hbWUgbmFtZSwgaWQsIE5TT3BlcmF0aW9uUXVldWUgKiwgTm90aWZpY2F0aW9uQ2Fs
bGJhY2sgYmxvY2spCit7CisgICAgaWYgKFtuYW1lIGlzRXF1YWw6TlNXaW5kb3dXaWxsQ2xvc2VO
b3RpZmljYXRpb25dKQorICAgICAgICBnTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBtYWtlQmxvY2tQ
dHIoYmxvY2spOworICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXTsKK30K
KyNlbmRpZgorCitzdGF0aWMgYm9vbCBvdmVycmlkZUlzVVJMRnJvbUFwcGxlT3duZWREb21haW4o
aWQsIFNFTCwgTlNVUkwgKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg
cmVzZXRTdGF0ZSgpCit7CisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIGF1
dGhvcml6YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsKKyAgICBhdXRob3JpemF0aW9uQ2FuY2VsbGVk
ID0gZmFsc2U7CisgICAgdWlTaG93ZWQgPSBmYWxzZTsKKyAgICBuZXdXaW5kb3dDcmVhdGVkID0g
ZmFsc2U7CisgICAgaGF2ZUh0dHBCb2R5ID0gZmFsc2U7CisgICAgZmluYWxVUkwgPSBlbXB0eVN0
cmluZygpOworICAgIGdBdXRob3JpemF0aW9uID0gbnVsbHB0cjsKKyAgICBnRGVsZWdhdGUgPSBu
dWxscHRyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBnTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBu
dWxscHRyOworI2VuZGlmCisgICAgZ05ld1dpbmRvdyA9IG51bGxwdHI7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcoVGVzdFdLV2ViVmlldyAqd2ViVmll
dywgVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSAqZGVsZWdhdGUpCit7Cisg
ICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlXTsKKyAgICBbd2ViVmll
dyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlXTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUh0
bWwoY29uc3QgY2hhciogdGVtcGxhdGVIdG1sLCBjb25zdCBTdHJpbmcmIHN1YnN0aXR1dGUsIGNv
bnN0IFN0cmluZyYgb3B0aW9uYWxTdWJzdGl0dXRlMSA9IGVtcHR5U3RyaW5nKCksIGNvbnN0IFN0
cmluZyYgb3B0aW9uYWxTdWJzdGl0dXRlMiA9IGVtcHR5U3RyaW5nKCkpCit7CisgICAgU3RyaW5n
UHJpbnRTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbS5wcmludGYodGVtcGxhdGVIdG1sLCBzdWJz
dGl0dXRlLnV0ZjgoKS5kYXRhKCksIG9wdGlvbmFsU3Vic3RpdHV0ZTEudXRmOCgpLmRhdGEoKSwg
b3B0aW9uYWxTdWJzdGl0dXRlMi51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gc3RyZWFtLnRv
U3RyaW5nKCk7Cit9CisKKy8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzQ4OTA5MzM2PjogUmVwbGFj
ZSB0aGUgYmVsb3cgd2l0aCBBcHBTU08gY29uc3RhbnRzLgorc3RhdGljIHZvaWQgY2hlY2tBdXRo
b3JpemF0aW9uT3B0aW9ucyhib29sIHVzZXJBY3Rpb25Jbml0aWF0ZWQsIFN0cmluZyBpbml0aWF0
b3JPcmlnaW4sIGludCBpbml0aWF0aW5nQWN0aW9uKQoreworICAgIEVYUEVDVF9UUlVFKGdBdXRo
b3JpemF0aW9uKTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBzZWxlY3RvciBvbmNlIHRoZSBp
T1MgYm90cyBoYXMgYmVlbiB1cGRhdGVkIHRvIGEgcmVjZW50IFNESy4KKyAgICBhdXRvIHNlbGVj
dG9yID0gTlNTZWxlY3RvckZyb21TdHJpbmcoQCJhdXRob3JpemF0aW9uT3B0aW9ucyIpOworICAg
IGlmIChbZ0F1dGhvcml6YXRpb24gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgeworICAg
ICAgICBFWFBFQ1RfRVEoKChOU051bWJlciAqKVtnQXV0aG9yaXphdGlvbiBwZXJmb3JtU2VsZWN0
b3I6c2VsZWN0b3JdW1NPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0ZWRdKS5i
b29sVmFsdWUsIHVzZXJBY3Rpb25Jbml0aWF0ZWQpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
W2dBdXRob3JpemF0aW9uIHBlcmZvcm1TZWxlY3RvcjpzZWxlY3Rvcl1bQCJpbml0aWF0b3JPcmln
aW4iXSwgaW5pdGlhdG9yT3JpZ2luKTsKKyAgICAgICAgRVhQRUNUX0VRKCgoTlNOdW1iZXIgKilb
Z0F1dGhvcml6YXRpb24gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXVtAImluaXRpYXRpbmdBY3Rp
b24iXSkuaW50VmFsdWUsIGluaXRpYXRpbmdBY3Rpb24pOworICAgIH0KK30KKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBOb0ludGVy
Y2VwdGlvbnMpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVz
dFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1
bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5n
ZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlv
blJlZGlyZWN0LCBJbnRlcmNlcHRpb25FcnJvcikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAg
Q2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2Rl
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9u
V2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAg
IGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUu
Z2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5n
LCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2Vw
dGlvbkRvTm90SGFuZGxlKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
ICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5Q
dHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9u
V2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsK
KyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9y
aXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXph
dGlvbkRpZE5vdEhhbmRsZTpnQXV0aG9yaXphdGlvbl07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0
aW9uQ29tcGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29s
dXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3Qs
IEludGVyY2VwdGlvbkNhbmNlbCkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRo
b2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWlu
dGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwp
KTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9y
aXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIg
c3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2lu
QXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0
YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZp
ZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgp
XV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1
dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhv
cml6YXRpb25EaWRDYW5jZWw6Z0F1dGhvcml6YXRpb25dOworICAgIC8vIEZJWE1FOiBGaW5kIGEg
ZGVsZWdhdGUgbWV0aG9kIHRoYXQgY2FuIGRldGVjdCBsb2FkIGNhbmNlbHMuCisgICAgVXRpbDo6
c2xlZXAoMC41KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIHdlYlZpZXcuZ2V0KCkuX2NvbW1p
dHRlZFVSTC5hYnNvbHV0ZVN0cmluZyk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJl
Y3QsIEludGVyY2VwdGlvbkNvbXBsZXRlV2l0aG91dERhdGEpCit7CisgICAgcmVzZXRTdGF0ZSgp
OworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNw
b25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIo
UEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5j
ZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhV
UkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1l
ZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAg
W2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ29tcGxldGU6Z0F1dGhvcml6YXRpb25dOworICAg
IFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
dGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCitURVNUKFNPQXV0
aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25VbmV4cGVjdGVkQ29tcGxldGlvbikKK3sK
KyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0
ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0
cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQo
KSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRo
b3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNl
LCAiIiwgMCk7CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24g
ZGlkQ29tcGxldGVXaXRoSFRUUEF1dGhvcml6YXRpb25IZWFkZXJzOmFkb3B0TlMoW1tOU0RpY3Rp
b25hcnkgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29t
cGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRlU3Ry
aW5nLCBmaW5hbFVSTCk7Cit9CisKKy8vIHsgRGVmYXVsdCBkZWxlZ2F0ZSBtZXRob2QsIE5vIEFw
cCBMaW5rcyB9CitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNj
ZWVkMSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6
emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5j
ZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVT
ZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6
Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0
ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIg
d2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2Vi
Vmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6
cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRp
b25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRl
bnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwor
ICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGlu
aXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQ
LzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRl
U3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9u
IGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdh
dGlvbkNvbXBsZXRlZCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0
ZWQgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlm
CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBm
aW5hbFVSTCk7Cit9CisKKy8vIHsgRGVmYXVsdCBkZWxlZ2F0ZSBtZXRob2QsIFdpdGggQXBwIExp
bmtzIH0KK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQy
KQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERl
bGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVC
ZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAg
Ly8gRm9yY2UgQXBwIExpbmtzIHdpdGggYSByZXF1ZXN0LlVSTCB0aGF0IGhhcyBhIGRpZmZlcmVu
dCBob3N0IHRoYW4gdGhlIGN1cnJlbnQgb25lIChlbXB0eSBob3N0KSBhbmQgU2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cuCisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVS
TCgpLCAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
W3dlYlZpZXcgX2xvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVS
TF0gc2hvdWxkT3BlbkV4dGVybmFsVVJMczpZRVNdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAg
IC8vIEhlcmUgd2UgZm9yY2UgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uIHRvIGdvIHRv
IHRoZSB3aXRoIHVzZXIgZ2VzdHVyZXMgcm91dGUuCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZh
U2NyaXB0OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uID0gJyVAJyIsIChp
ZCl0ZXN0VVJMLnN0cmluZygpXSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworI2VsaWYgUExBVEZP
Uk0oSU9TKQorICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgIm51bGwiLCAwKTsK
KyNlbmRpZgorCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJl
c3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0
ZXN0VVJMIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxk
czpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAg
IFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhI
VFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwor
ICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmlu
YWxVUkwpOworfQorCisvLyB7IEN1c3RvbSBkZWxlZ2F0ZSBtZXRob2QsIFdpdGggQXBwIExpbmtz
IH0KK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQzKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVn
YXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpo
dHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgLy8g
Rm9yY2UgQXBwIExpbmtzIHdpdGggYSByZXF1ZXN0LlVSTCB0aGF0IGhhcyBhIGRpZmZlcmVudCBo
b3N0IHRoYW4gdGhlIGN1cnJlbnQgb25lIChlbXB0eSBob3N0KSBhbmQgU2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cuCisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgp
LCAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dl
YlZpZXcgX2xvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTF0g
c2hvdWxkT3BlbkV4dGVybmFsVVJMczpZRVNdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IEhlcmUgd2UgZm9yY2UgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uIHRvIGdvIHRvIHRo
ZSB3aXRoIHVzZXIgZ2VzdHVyZXMgcm91dGUuCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uID0gJyVAJyIsIChpZCl0
ZXN0VVJMLnN0cmluZygpXSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRp
bDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
Y2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworI2VsaWYgUExBVEZPUk0o
SU9TKQorICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgIm51bGwiLCAwKTsKKyNl
bmRpZgorCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3Bv
bnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0
VVJMIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpA
eyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAgIFtn
RGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQ
UmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAg
IEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxV
UkwpOworfQorCisvLyB7IF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvd1dpdGhvdXRUcnlp
bmdBcHBMaW5rLCBObyBBcHAgTGlua3MgfQorVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwg
SW50ZXJjZXB0aW9uU3VjY2VlZDQpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJl
dGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICAvLyBBIHNlcGFyYXRlIGRlbGVnYXRlIHRoYXQgaW1wbGVtZW50cyBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLgorICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAg
IGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUu
Z2V0KCkpOworICAgIFtkZWxlZ2F0ZSBzZXRJc0RlZmF1bHRQb2xpY3k6ZmFsc2VdOworCisgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBj
aGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBSZXRhaW5QdHI8
TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQ
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZToz
MDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9jYXRpb24iIDog
W3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3Jp
emF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25z
ZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOwor
ICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRp
b25Db21wbGV0ZWQpOworI2VuZGlmCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdl
dCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9u
UmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoT3RoZXJIdHRwU3RhdHVzQ29kZSkKK3sK
KyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0
ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0
cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQo
KSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRo
b3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNl
LCAiIiwgMCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8g
cmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJM
OnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZTo0MDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVh
ZGVyRmllbGRzOm5pbF0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXph
dGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5h
dmlnYXRpb25Db21wbGV0ZWQpOworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFi
c29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJl
Y3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoQ29va2llKQoreworICAgIHJlc2V0U3RhdGUoKTsK
KyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9u
c2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09B
dXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmln
dXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7
CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQp
OworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFJl
dGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMo
W1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0
dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJTZXQt
Q29va2llIiA6IEAic2Vzc2lvbmlkPTM4YWZlczdhODsiLCBAIkxvY2F0aW9uIiA6IFtyZWRpcmVj
dFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpn
QXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkg
aHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGls
OjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZp
Z2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKyNlbmRpZgorICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNv
bHV0ZVN0cmluZywgZmluYWxVUkwpOworCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNl
OworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJkb2N1bWVudC5jb29raWUiIGNv
bXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKnJlc3VsdCwgTlNFcnJvciAqKSB7CisgICAgICAg
IEVYUEVDVF9XS19TVFJFUSgic2Vzc2lvbmlkPTM4YWZlczdhOCIsIFtyZXN1bHQgVVRGOFN0cmlu
Z10pOworICAgICAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBV
dGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlv
blJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aENvb2tpZXMpCit7CisgICAgcmVzZXRT
dGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdh
dGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0
dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBl
cmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOwor
CisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0g
YWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdl
dCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpA
eyBAIlNldC1Db29raWUiIDogQCJzZXNzaW9uaWQ9MzhhZmVzN2E4LCBxd2VydHk9MjE5ZmZ3ZWY5
dzBmLCBpZD1hM2ZXYTsiLCBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmlu
Z10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRD
b21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25D
b21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0g
ZmFsc2U7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNlbmRpZgorICAg
IEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxV
UkwpOworCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdDogQCJkb2N1bWVudC5jb29raWUiIGNvbXBsZXRpb25IYW5kbGVyOl4o
TlNTdHJpbmcgKnJlc3VsdCwgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgi
aWQ9YTNmV2E7IHF3ZXJ0eT0yMTlmZndlZjl3MGY7IHNlc3Npb25pZD0zOGFmZXM3YTgiLCBbcmVz
dWx0IFVURjhTdHJpbmddKTsKKyAgICAgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IHRydWU7Cisg
ICAgfV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKK30KKworLy8gVGhl
IHJlZGlyZWN0ZWQgVVJMIGhhcyBhIGRpZmZlcmVudCBkb21haW4gdGhhbiB0aGUgdGVzdCBVUkwu
CitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aFJl
ZGlyZWN0aW9uQW5kQ29va2llKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwor
ICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdh
dGUuZ2V0KCkpOworCisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cHM6Ly93d3cu
ZXhhbXBsZS5jb20iKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMXV07CisjZWxpZiBQTEFURk9S
TShJT1MpCisgICAgLy8gSGVyZSB3ZSBmb3JjZSBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Np
b24gdG8gZ28gdG8gdGhlIHdpdGggdXNlciBnZXN0dXJlcyByb3V0ZS4KKyAgICBbd2ViVmlldyBl
dmFsdWF0ZUphdmFTY3JpcHQ6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAibG9jYXRpb24g
PSAnJUAnIiwgKGlkKXRlc3RVUkwuc3RyaW5nKCldIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07Cisj
ZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7Cisj
ZWxpZiBQTEFURk9STShJT1MpCisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAi
bnVsbCIsIDApOworI2VuZGlmCisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRl
bnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwor
ICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGlu
aXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIg
aGVhZGVyRmllbGRzOkB7IEAiU2V0LUNvb2tpZSIgOiBAInNlc3Npb25pZD0zOGFmZXM3YTg7Iiwg
QCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0Rl
bGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJl
c3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJM
KTsKKworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFs
dWF0ZUphdmFTY3JpcHQ6IEAiZG9jdW1lbnQuY29va2llIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5T
U3RyaW5nICpyZXN1bHQsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIiIs
IFtyZXN1bHQgVVRGOFN0cmluZ10pOworICAgICAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworfQorCitU
RVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aERpZmZl
cmVudE9yaWdpbikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxl
ciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIz
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5T
VVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNp
bXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBhdXRvIHJlZGlyZWN0VVJMID0gVVJMKFVS
TCgpLCAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRv
cHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDpyZWRpcmVjdFVSTCBz
dGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJM
b2NhdGlvbiIgOiByZWRpcmVjdFVSTC5zdHJpbmcoKSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRo
b3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNw
b25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCld
OworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChT
T0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhXYWl0aW5nU2Vz
c2lvbikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6
emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5j
ZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVT
ZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6
Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0
ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIg
d2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07
CisKKyAgICAvLyBUaGUgc2Vzc2lvbiB3aWxsIGJlIHdhaXRpbmcgc2luY2UgdGhlIHdlYiB2aWV3
IGlzIGlzIG5vdCBpbnQgdGhlIHdpbmRvdy4KKyAgICBbd2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpzbGVlcCgwLjUpOworICAgIEVYUEVDVF9G
QUxTRShhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAgIC8vIFNob3VsZCBhY3RpdmF0ZSB0
aGUgc2Vzc2lvbi4KKyAgICBbd2ViVmlldyBhZGRUb1Rlc3RXaW5kb3ddOworICAgIFV0aWw6OnJ1
bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9u
cyhmYWxzZSwgIiIsIDApOworCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5z
aW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAg
ICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0
V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8x
LjEiIGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0
cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBk
aWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRp
b25Db21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVk
ID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNlbmRpZgor
ICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmlu
YWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25T
dWNjZWVkV2l0aEFjdGl2ZVNlc3Npb25EaWRNb3ZlV2luZG93KQoreworICAgIHJlc2V0U3RhdGUo
KTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVz
cG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIy
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9k
eTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29u
ZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3Jt
ZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAg
IC8vIFNob3VsZCBiZSBhIG5vIG9wLgorICAgIFt3ZWJWaWV3IGFkZFRvVGVzdFdpbmRvd107CisK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBh
ZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0
KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7
IEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dE
ZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBS
ZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBVdGls
OjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlmCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1Qo
U09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRUd2ljZSkKK3sKKyAg
ICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVD
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihz
ZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhl
YWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwg
ZGVsZWdhdGUuZ2V0KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAg
ICAgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOworICAgICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsK
KyAgICAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICAgICAgY2hl
Y2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAgICAgIG5hdmlnYXRp
b25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVS
TCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRo
RXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKKyAgICAgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBh
bGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lv
bjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwg
YWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdB
dXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBo
dHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgICAgICBV
dGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgICAgICBVdGlsOjpydW4oJm5hdmln
YXRpb25Db21wbGV0ZWQpOworI2VuZGlmCisgICAgICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVj
dFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworICAgIH0KK30KKworVEVTVChT
T0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFN1cHByZXNzQWN0aXZl
U2Vzc2lvbikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBz
d2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgc3dpenpsZXI0KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KGNhbmNlbEF1dGhvcml6YXRpb24pLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5j
ZWxBdXRob3JpemF0aW9uKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIi
LCAwKTsKKworICAgIC8vIFN1cHByZXNzIHRoZSBsYXN0IGFjdGl2ZSBzZXNzaW9uLgorICAgIGF1
dGhvcml6YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpy
dW4oJmF1dGhvcml6YXRpb25DYW5jZWxsZWQpOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDAp
OworCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNl
ID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxk
czpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAg
IFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhI
VFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAg
VXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNlbmRpZgorICAgIEVYUEVDVF9XS19T
VFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCitU
RVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkU3VwcHJlc3NX
YWl0aW5nU2Vzc2lvbikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6
emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
Y2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9y
aXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRy
PE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
InNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxl
Z2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICAvLyBUaGUgc2Vzc2lvbiB3aWxsIGJlIHdhaXRpbmcgc2luY2UgdGhl
IHdlYiB2aWV3IGlzIGlzIG5vdCBpbnQgdGhlIHdpbmRvdy4KKyAgICBbd2ViVmlldyByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpzbGVlcCgwLjUpOworICAg
IEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAgIC8vIFN1cHByZXNz
IHRoZSBsYXN0IHdhaXRpbmcgc2Vzc2lvbi4KKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpzbGVl
cCgwLjUpOworICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAg
IC8vIEFjdGl2YXRlIHRoZSBsYXN0IHNlc3Npb24uCisgICAgW3dlYlZpZXcgYWRkVG9UZXN0V2lu
ZG93XTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNr
QXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFJldGFpblB0cjxOU1VS
TD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxS
ZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBI
VFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVk
aXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRp
b246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdl
dCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAg
VXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
bmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNv
bXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCku
YWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRp
cmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFNBTUwpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAg
IENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xh
c3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNv
ZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsK
KworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKwor
ICAgIC8vIEFkZCBhIGh0dHAgYm9keSB0byB0aGUgcmVxdWVzdCB0byBtaW1pYyBhIFNBTUwgcmVx
dWVzdC4KKyAgICBhdXRvIHJlcXVlc3QgPSBhZG9wdE5TKFtOU011dGFibGVVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldKTsKKyAgICBbcmVxdWVzdCBzZXRIVFRQQm9keTph
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgIGhhdmVIdHRwQm9keSA9
IHRydWU7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0LmdldCgpXTsKKyAgICBV
dGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlv
bk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIC8vIFBhc3MgYSBIVFRQIDIwMCByZXNwb25z
ZSB3aXRoIGEgaHRtbCB0byBtaW1pYyBhIFNBTUwgcmVzcG9uc2UuCisgICAgYXV0byByZXNwb25z
ZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVS
TC5nZXQoKSBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVs
ZHM6bmlsXSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRp
ZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5T
KFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnNhbWxSZXNwb25zZSBsZW5ndGg6c3RybGVu
KHNhbWxSZXNwb25zZSldKS5nZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJT
QU1MIl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEF1dGhvcml6YXRpb25P
cHRpb25zKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3
aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJm
b3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3Rh
bmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3Mo
KSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9u
V2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0
aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3Vy
ZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOwor
CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6QCIiIGJhc2VVUkw6KE5TVVJMICopVVJMKFVS
TCgpLCAiaHR0cDovL3d3dy53ZWJraXQub3JnIildOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlv
bkNvbXBsZXRlZCk7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImxvY2F0aW9u
ID0gJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAg
IFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0
aW9uT3B0aW9ucyh0cnVlLCAiaHR0cDovL3d3dy53ZWJraXQub3JnIiwgMCk7Cit9CisKK1RFU1Qo
U09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkRpZE5vdEhhbmRsZVR3aWNlKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVn
YXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpo
dHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwg
PSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0
ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
KworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3Lmdl
dCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOworCisgICAgLy8gVGVzdCBwYXNzZXMgaWYgbm8gY3Jhc2hl
cy4KKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb25EaWROb3RIYW5kbGU6Z0F1dGhvcml6YXRp
b25dOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTpnQXV0aG9yaXph
dGlvbl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkNv
bXBsZXRlVHdpY2UpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNh
blBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAg
SW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6
YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxO
U1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJ
LnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAg
IFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICAvLyBUZXN0IHBhc3Nl
cyBpZiBubyBjcmFzaGVzLgorICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAg
YXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4x
IiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJp
bmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlk
Q29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0
aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5n
ZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworfQor
CisvLyBGSVhNRSgxNzUyMDQpOiBFbmFibGUgdGhlIGlPUyB0ZXN0cyBvbmNlIHRoZSBidWcgaXMg
Zml4ZWQuCisjaWYgUExBVEZPUk0oTUFDKQorVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwg
SW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhVSSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xh
c3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldp
dGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisg
ICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAg
IGF1dG8gdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvblZpZXdD
b250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB2aWV3ID0gYWRvcHROUyhbW05TVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0XSk7CisgICAgW3ZpZXdDb250cm9sbGVy
IHNldFZpZXc6dmlldy5nZXQoKV07CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1
dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyLmdldCgpIHdp
dGhDb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNU
X1RSVUUoc3VjY2Vzcyk7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZ1aVNob3dlZCk7CisKKyAg
ICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9w
dE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkg
c3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAi
TG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxl
Z2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNw
b25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7
CisgICAgRVhQRUNUX0ZBTFNFKHVpU2hvd2VkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25S
ZWRpcmVjdCwgSW50ZXJjZXB0aW9uQ2FuY2VsV2l0aFVJKQoreworICAgIHJlc2V0U3RhdGUoKTsK
KyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9u
c2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09B
dXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmln
dXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7
CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQp
OworCisgICAgYXV0byB2aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBhZG9wdE5T
KFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdKTsKKyAgICBbdmlld0Nv
bnRyb2xsZXIgc2V0Vmlldzp2aWV3LmdldCgpXTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXph
dGlvbjpnQXV0aG9yaXphdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIu
Z2V0KCkgd2l0aENvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikgeworICAgICAg
ICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJnVpU2hvd2Vk
KTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbkRpZENhbmNlbDpnQXV0aG9yaXphdGlv
bl07CisgICAgLy8gRklYTUU6IEZpbmQgYSBkZWxlZ2F0ZSBtZXRob2QgdGhhdCBjYW4gZGV0ZWN0
IGxvYWQgY2FuY2Vscy4KKyAgICBVdGlsOjpzbGVlcCgwLjUpOworICAgIEVYUEVDVF9XS19TVFJF
USgiIiwgd2ViVmlldy5nZXQoKS5fY29tbWl0dGVkVVJMLmFic29sdXRlU3RyaW5nKTsKKyAgICBF
WFBFQ1RfRkFMU0UodWlTaG93ZWQpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0
LCBJbnRlcmNlcHRpb25FcnJvcldpdGhVSSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xh
c3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldp
dGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9y
KGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisg
ICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAg
IGF1dG8gdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvblZpZXdD
b250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB2aWV3ID0gYWRvcHROUyhbW05TVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0XSk7CisgICAgW3ZpZXdDb250cm9sbGVy
IHNldFZpZXc6dmlldy5nZXQoKV07CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1
dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyLmdldCgpIHdp
dGhDb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNU
X1RSVUUoc3VjY2Vzcyk7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZ1aVNob3dlZCk7CisKKyAg
ICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRo
RXJyb3I6YWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOk5TQ29jb2FFcnJv
ckRvbWFpbiBjb2RlOjAgdXNlckluZm86bmlsXSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2
aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJz
b2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKKyAgICBFWFBFQ1RfRkFMU0UodWlTaG93ZWQpOworfQor
CitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkU3VwcHJl
c3NBY3RpdmVTZXNzaW9uV2l0aFVJKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5z
dGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjQoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3IoY2FuY2VsQXV0aG9yaXphdGlvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZUNhbmNlbEF1dGhvcml6YXRpb24pKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4g
dGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUi
IHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdl
YlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6
OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRvIHZpZXdDb250cm9sbGVy
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBhbGxvY10gaW5p
dF0pOworICAgIGF1dG8gdmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNaZXJvUmVjdF0pOworICAgIFt2aWV3Q29udHJvbGxlciBzZXRWaWV3OnZpZXcuZ2V0KCld
OworCisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIHByZXNlbnRW
aWV3Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlci5nZXQoKSB3aXRoQ29tcGxldGlvbjpeKEJPT0wg
c3VjY2VzcywgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAg
IH1dOworICAgIFV0aWw6OnJ1bigmdWlTaG93ZWQpOworCisgICAgLy8gU3VwcHJlc3MgdGhlIGxh
c3QgYWN0aXZlIHNlc3Npb24uCisgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVz
dFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvbkNhbmNlbGxlZCk7Cisg
ICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
dWlTaG93ZWQpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRv
IHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVS
TDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhl
YWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10g
fV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21w
bGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21w
bGV0ZWQpOworICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0
cmluZywgZmluYWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBTaG93
VUlUd2ljZSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBz
d2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJM
PiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBs
ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRp
bDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAgIGF1dG8gdmlld0NvbnRyb2xs
ZXIgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB2aWV3ID0gYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU1plcm9SZWN0XSk7CisgICAgW3ZpZXdDb250cm9sbGVyIHNldFZpZXc6dmlldy5nZXQo
KV07CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gcHJlc2Vu
dFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyLmdldCgpIHdpdGhDb21wbGV0aW9uOl4oQk9P
TCBzdWNjZXNzLCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7Cisg
ICAgfV07CisgICAgVXRpbDo6cnVuKCZ1aVNob3dlZCk7CisKKyAgICB1aVNob3dlZCA9IGZhbHNl
OworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBwcmVzZW50Vmll
d0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIuZ2V0KCkgd2l0aENvbXBsZXRpb246XihCT09MIHN1
Y2Nlc3MsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsK
KyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIGtTT0Vycm9yQXV0aG9yaXphdGlvblByZXNl
bnRhdGlvbkZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sICJj
b20uYXBwbGUuQXBwU1NPLkF1dGhvcml6YXRpb25FcnJvciIpOworICAgICAgICB1aVNob3dlZCA9
IHRydWU7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZ1aVNob3dlZCk7Cit9CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKE1BQykKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIE5TTm90aWZp
Y2F0aW9uQ2VudGVyKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihj
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8
TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworCisgICAgYXV0byB2aWV3Q29u
dHJvbGxlciA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBhZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TWmVyb1JlY3RdKTsKKyAgICB7CisgICAgICAgIEluc3RhbmNlTWV0aG9kU3dp
enpsZXIgc3dpenpsZXI0KFtOU05vdGlmaWNhdGlvbkNlbnRlciBjbGFzc10sIEBzZWxlY3Rvcihh
ZGRPYnNlcnZlckZvck5hbWU6b2JqZWN0OnF1ZXVlOnVzaW5nQmxvY2s6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlQWRkT2JzZXJ2ZXJGb3JOYW1lKSk7CisgICAgICAgIFt2aWV3Q29u
dHJvbGxlciBzZXRWaWV3OnZpZXcuZ2V0KCldOworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6
YXRpb246Z0F1dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVy
LmdldCgpIHdpdGhDb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yICopIHsKKyAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICB9XTsKKyAgICAgICAgVXRpbDo6
cnVuKCZ1aVNob3dlZCk7CisgICAgfQorCisgICAgZ05vdGlmaWNhdGlvbkNhbGxiYWNrKG51bGxw
dHIpOworICAgIEVYUEVDVF9GQUxTRSh1aVNob3dlZCk7Cit9CisjZW5kaWYKKworVEVTVChTT0F1
dGhvcml6YXRpb25Qb3BVcCwgTm9JbnRlcmNlcHRpb25zKQoreworICAgIHJlc2V0U3RhdGUoKTsK
KworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5l
cmF0ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOwor
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RI
dG1sIGJhc2VVUkw6dGVzdFVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29t
cGxldGVkKTsKKworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAy
MDApIG51bWJlck9mQ2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3
IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07
CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJm5ld1dpbmRvd0NyZWF0ZWQpOworICAgIFV0aWw6OnJ1
bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0
KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworLy8gRklYTUUoMTcyNjE0KTogRW5h
YmxlIHRoZSBmb2xsb3dpbmcgdGVzdCBmb3IgaU9TIG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KKyNp
ZiBQTEFURk9STShNQUMpCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBOb0ludGVyY2VwdGlv
bnNTdWJGcmFtZSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxl
ciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIz
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5T
VVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNp
bXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJ
LnJlc291cmNlcyJdOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gaWZy
YW1lVGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuZ2V0KCku
YWJzb2x1dGVTdHJpbmcpOworICAgIGF1dG8gdGVzdEh0bWwgPSBtYWtlU3RyaW5nKCI8aWZyYW1l
IHN0eWxlPSd3aWR0aDo0MDBweDtoZWlnaHQ6NDAwcHgnIHNyY2RvYz1cIiIsIGlmcmFtZVRlc3RI
dG1sLCAiXCIgLz4iKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
SFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1
bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICAvLyBUaGUgbmV3IHdpbmRvdyB3aWxsIG5v
dCBuYXZpZ2F0ZSB0byB0aGUgdGVzdFVSTCBhcyB0aGUgaWZyYW1lIGhhcyB1bmlxdWUgb3JpZ2lu
LgorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBu
dW1iZXJPZkNsaWNrczoxXTsKKyAgICBVdGlsOjpydW4oJm5ld1dpbmRvd0NyZWF0ZWQpOworICAg
IEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKK30KKyNlbmRpZgorCitURVNU
KFNPQXV0aG9yaXphdGlvblBvcFVwLCBOb0ludGVyY2VwdGlvbnNXaXRob3V0VXNlckdlc3R1cmUp
Cit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIx
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRo
b2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVs
ZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
Omh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlIG9m
IGphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkgaXMgTk8gb24gaU9TLCBhbmQg
WUVTIG9uIG1hY09TLgorICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5nZXQoKS5w
cmVmZXJlbmNlcy5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5ID0gWUVTOwor
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCkgY29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisK
KyAgICBbd2ViVmlldyBfZXZhbHVhdGVKYXZhU2NyaXB0V2l0aG91dFVzZXJHZXN0dXJlOiBAIndp
bmRvdy5vcGVuKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykiIGNvbXBsZXRpb25IYW5kbGVyOm5p
bF07CisgICAgVXRpbDo6cnVuKCZuZXdXaW5kb3dDcmVhdGVkKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
YXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAs
IEludGVyY2VwdGlvbkVycm9yKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRh
aW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAg
YXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5nZXQo
KS5hYnNvbHV0ZVN0cmluZyk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0p
OworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcg
bG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGls
OjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3
ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNs
aWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFT
Y3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICBhdXRob3JpemF0aW9uUGVyZm9y
bWVkID0gZmFsc2U7CisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFtnRGVs
ZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhFcnJvcjph
ZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWlu
IGNvZGU6MCB1c2VySW5mbzpuaWxdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuZXdXaW5kb3dD
cmVhdGVkKTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAgIEVYUEVD
VF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7CisgICAg
RVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOyAvLyBEb24ndCBpbnRlcmNlcHQg
dGhlIGZpcnN0IG5hdmlnYXRpb24gaW4gdGhlIG5ldyB3aW5kb3cuCit9CisKK1RFU1QoU09BdXRo
b3JpemF0aW9uUG9wVXAsIEludGVyY2VwdGlvbkNhbmNlbCkKK3sKKyAgICByZXNldFN0YXRlKCk7
CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3Bv
bnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNl
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIFJldGFpblB0cjxOU1VS
TD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1w
bGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVtcGxh
dGUsIHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5n
ZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAs
IDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dlYlZp
ZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmls
XTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAg
Y2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAgLy8g
VGhlIHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8gYmUgZGVzdHJveWVkIHJpZ2h0IHRoZSB3YXku
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlv
bkRpZENhbmNlbDpnQXV0aG9yaXphdGlvbl07CisgICAgfQorICAgIFt3ZWJWaWV3IHdhaXRGb3JN
ZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVw
LCBJbnRlcmNlcHRpb25TdWNjZWVkQ2xvc2VCeUl0c2VsZikKK3sKKyAgICByZXNldFN0YXRlKCk7
CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3Bv
bnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNl
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdFVSTCA9
IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1s
ID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpKTsKKworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBi
YXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRl
ZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6
TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0o
SU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBs
ZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImZpbGU6Ly8i
LCAxKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToyMDAgSFRUUFZlcnNpb246QCJI
VFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIGF1dG8gcmVzb25zZUh0bWxDU3RyaW5n
ID0gZ2VuZXJhdGVIdG1sKG5ld1dpbmRvd1Jlc3BvbnNlVGVtcGxhdGUsICJ3aW5kb3cuY2xvc2Uo
KTsiKS51dGY4KCk7IC8vIFRoZSBwb3AgdXAgY2xvc2VzIGl0c2VsZi4KKyAgICAvLyBUaGUgc2Vj
cmV0IFdLV2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmlnaHQgdGhlIHdheS4KKyAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRo
b3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRw
Qm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnJlc29uc2VIdG1sQ1N0
cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsK
KyAgICB9CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJIZWxsby4iXTsKKyAgICBbd2Vi
VmlldyB3YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4iXTsKK30KKworVEVTVChTT0F1dGhv
cml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9uU3VjY2VlZENsb3NlQnlQYXJlbnQpCit7CisgICAg
cmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0
U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9u
V2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0
RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsK
KyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFk
ZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBh
dXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAg
YXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5zdHJp
bmcoKSwgIiIsICJldmVudC5zb3VyY2UuY2xvc2UoKTsiKTsgLy8gVGhlIHBhcmVudCBjbG9zZXMg
dGhlIHBvcCB1cC4KKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigm
bmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcg
c2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFd
OworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDog
QCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpy
dW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlv
bnModHJ1ZSwgImZpbGU6Ly8iLCAxKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtb
TlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToy
MDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIGF1dG8g
cmVzb25zZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKG5ld1dpbmRvd1Jlc3BvbnNlVGVtcGxh
dGUsICIiKS51dGY4KCk7CisgICAgLy8gVGhlIHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8gYmUg
ZGVzdHJveWVkIHJpZ2h0IHRoZSB3YXkuCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhI
VFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczpyZXNvbnNlSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNvbnNl
SHRtbENTdHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgfQorICAgIFt3ZWJWaWV3IHdhaXRG
b3JNZXNzYWdlOkAiSGVsbG8uIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJXaW5k
b3dDbG9zZWQuIl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEludGVyY2VwdGlv
blN1Y2NlZWRDbG9zZUJ5V2ViS2l0KQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAi
aHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0
bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVS
TC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgy
MDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dl
YlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6
bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cisg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAg
YXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFk
ZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byByZXNvbnNlSHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0
bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICAvLyBUaGUgc2Vj
cmV0IFdLV2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmlnaHQgdGhlIHdheS4KKyAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRo
b3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRw
Qm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnJlc29uc2VIdG1sQ1N0
cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsK
KyAgICB9CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJIZWxsby4iXTsKKyAgICBbd2Vi
VmlldyB3YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4iXTsKK30KKworVEVTVChTT0F1dGhv
cml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhPdGhlckh0dHBTdGF0dXNDb2Rl
KQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0
aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERl
bGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVC
ZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VV
UkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0
aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il07CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0SHRtbCA9IGdl
bmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZyk7
CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5n
ZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVz
dEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25D
b21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NB
dFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBM
QVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgp
IiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVuKCZhdXRob3Jp
emF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJm
aWxlOi8vIiwgMSk7CisKKyAgICAvLyBXaWxsIGZhbGxiYWNrIHRvIHdlYiBwYXRoLgorICAgIG5h
dmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBhdXRob3JpemF0aW9uUGVyZm9ybWVkID0g
ZmFsc2U7CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBh
bGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjQwMCBIVFRQVmVyc2lv
bjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byByZXNvbnNlSHRtbENT
dHJpbmcgPSBnZW5lcmF0ZUh0bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIpLnV0Zjgo
KTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxl
dGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6
cmVzb25zZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmV3
V2luZG93Q3JlYXRlZCk7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwp
OworICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKK30KKworLy8gU2V0
dGluZyBjb29raWUgaXMgZW5zdXJlZCBieSBvdGhlciB0ZXN0cy4gSGVyZSBpcyB0byBjb3ZlciBp
ZiB0aGUgd2hvbGUgYXV0aGVudGljYXRpb24gaGFuZHNoYWtlIGNhbiBiZSBjb21wbGV0ZWQuCitU
RVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aENvb2tpZSkK
K3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEo
UEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxl
Z2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6
aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJM
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhF
eHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20i
KTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0
VVJMLnN0cmluZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
SFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1
bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZp
ZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tz
OjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlw
dDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGls
OjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9w
dGlvbnModHJ1ZSwgImZpbGU6Ly8iLCAxKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5T
KFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29k
ZToyMDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiU2V0LUNvb2tp
ZSIgOiBAInNlc3Npb25pZD0zOGFmZXM3YTg7In1dKTsKKyAgICBhdXRvIHJlc29uc2VIdG1sQ1N0
cmluZyA9IGdlbmVyYXRlSHRtbChuZXdXaW5kb3dSZXNwb25zZVRlbXBsYXRlLCAiIikudXRmOCgp
OworICAgIC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdo
dCB0aGUgd2F5LgorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbZ0RlbGVnYXRlIGF1
dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJl
c3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0
ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5nLmxl
bmd0aCgpXSkuZ2V0KCldOworICAgIH0KKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhl
bGxvLiJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOwor
fQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRpb25TdWNjZWVkVHdpY2Up
Cit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIx
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRo
b2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2Vs
ZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVs
ZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
Omh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJl
Z2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVS
TCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRo
RXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29t
Iik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVz
dFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpy
dW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBp
KyspIHsKKyAgICAgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICAgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQo
MjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFu
ZGxlcjpuaWxdOworI2VuZGlmCisgICAgICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZv
cm1lZCk7CisgICAgICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImZpbGU6Ly8i
LCAxKTsKKworICAgICAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3Bv
bnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9u
OkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICAgICAgYXV0byByZXNvbnNlSHRt
bENTdHJpbmcgPSBnZW5lcmF0ZUh0bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIpLnV0
ZjgoKTsKKyAgICAgICAgLy8gVGhlIHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8gYmUgZGVzdHJv
eWVkIHJpZ2h0IHRoZSB3YXkuCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAg
ICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0
aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFs
bG9jXSBpbml0V2l0aEJ5dGVzOnJlc29uc2VIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29u
c2VIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICAgICAgfQorICAgICAgICBbd2Vi
VmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJdOworICAgICAgICBbd2ViVmlldyB3YWl0Rm9y
TWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4iXTsKKyAgICB9Cit9CisKK1RFU1QoU09BdXRob3JpemF0
aW9uUG9wVXAsIEludGVyY2VwdGlvblN1Y2NlZWRTdXBwcmVzc0FjdGl2ZVNlc3Npb24pCit7Cisg
ICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6
Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0
aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
Q2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6
emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
c2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUp
KTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9y
aXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBI
ZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0
aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
NChQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5jZWxBdXRob3Jp
emF0aW9uKSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuY2VsQXV0aG9yaXphdGlv
bikpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdFVSTCA9
IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1s
ID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpKTsKKworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBi
YXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRl
ZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6
TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0o
SU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBs
ZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImZpbGU6Ly8i
LCAxKTsKKworICAgIC8vIFN1cHByZXNzIHRoZSBsYXN0IGFjdGl2ZSBzZXNzaW9uLgorICAgIGF1
dG8gbmV3V2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246d2ViVmlldy5nZXQo
KS5jb25maWd1cmF0aW9uXSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyhu
ZXdXZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBuYXZpZ2F0aW9uQ29tcGxl
dGVkID0gZmFsc2U7CisgICAgW25ld1dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFz
ZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworCisgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBbbmV3V2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIw
MCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW25ld1dlYlZp
ZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmls
XTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvbkNhbmNlbGxlZCk7CisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVk
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAIm5ld1dpbmRvdyIg
Y29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBF
Q1RfVFJVRShyZXN1bHQgPT0gYWRvcHROUyhbTlNOdWxsIG51bGxdKS5nZXQoKSk7CisgICAgICAg
IG5hdmlnYXRpb25Db21wbGV0ZWQgPSB0cnVlOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmbmF2
aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRU
UFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhU
VFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIHJlc29u
c2VIdG1sQ1N0cmluZyA9IGdlbmVyYXRlSHRtbChuZXdXaW5kb3dSZXNwb25zZVRlbXBsYXRlLCAi
IikudXRmOCgpOworICAgIC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3IG5lZWRzIHRvIGJlIGRlc3Ry
b3llZCByaWdodCB0aGUgd2F5LgorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbZ0Rl
bGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJl
c3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6cmVzb25zZUh0bWxD
U3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAgIH0KKyAgICBbbmV3V2ViVmlldyB3YWl0Rm9y
TWVzc2FnZTpAIkhlbGxvLiJdOworICAgIFtuZXdXZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiV2lu
ZG93Q2xvc2VkLiJdOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRp
b25TdWNjZWVkTmV3V2luZG93TmF2aWdhdGlvbikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAg
Q2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFz
cygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29k
ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
CisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChV
UkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2Vu
ZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpLCBtYWtlU3RyaW5nKCJu
ZXdXaW5kb3cubG9jYXRpb24gPSAnIiwgYmFzZVVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZy5VVEY4
U3RyaW5nLCAiJzsiKSk7IC8vIFN0YXJ0cyBhIG5ldyBuYXZpZ2F0aW9uIG9uIHRoZSBuZXcgd2lu
ZG93LgorCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5n
OnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0
aW9uQ29tcGxldGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xp
Y2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxp
ZiBQTEFURk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNr
TWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0
aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVl
LCAiZmlsZTovLyIsIDEpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQ
VmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byByZXNvbnNl
SHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIp
LnV0ZjgoKTsKKyAgICAvLyBUaGUgc2VjcmV0IFdLV2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95
ZWQgcmlnaHQgdGhlIHdheS4KKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxl
Z2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNw
b25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOnJlc29uc2VIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0
cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICB9CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3Nh
Z2U6QCJIZWxsby4iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3Nl
ZC4iXTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgQXV0aG9yaXphdGlvbk9wdGlv
bnMpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0
RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChV
UkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2Vu
ZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpKTsKKworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0
ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJM
OihOU1VSTCAqKVVSTChVUkwoKSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIpXTsKKyAgICBVdGls
OjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3
ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNs
aWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFT
Y3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKHRydWUsICJodHRwOi8vd3d3LndlYmtpdC5vcmciLCAxKTsKK30KKworVEVTVChT
T0F1dGhvcml6YXRpb25TdWJGcmFtZSwgTm9JbnRlcmNlcHRpb25zKQoreworICAgIHJlc2V0U3Rh
dGUoKTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgUmV0YWluUHRyPE5TVVJM
PiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkdldFNl
c3Npb25Db29raWUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwocGFy
ZW50VGVtcGxhdGUsIHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOworCisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6
YmFzZVVSTC5nZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCIiXTsKK30KKwor
VEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgTm9JbnRlcmNlcHRpb25zTm9uQXBwbGVGaXJz
dFBhcnR5TWFpbkZyYW1lKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
ICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0
PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHRl
c3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCBVUkwoVVJMKCksICJodHRwOi8v
d3d3LmV4YW1wbGUuY29tIikuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1
dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAg
IFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6KE5TVVJMICopVVJMKFVS
TCgpLCAiaHR0cDovL3d3dy53ZWJraXQub3JnIildOworICAgIC8vIFRyeSB0byB3YWl0IHVudGls
IHRoZSBpZnJhbWUgbG9hZCBpcyBmaW5pc2hlZC4KKyAgICBVdGlsOjpzbGVlcCgwLjUpOworICAg
IC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbnRlcmNlcHQgdGhlIGlmcmFtZS4KKyAgICBFWFBFQ1Rf
RkFMU0UoYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9u
U3ViRnJhbWUsIEludGVyY2VwdGlvbkVycm9yKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBD
bGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2Rl
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9u
V2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0
U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RT
d2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0
b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWlu
dGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7Cisg
ICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjQoW0FLQXV0aG9yaXphdGlvbkNvbnRyb2xs
ZXIgY2xhc3NdLCBAc2VsZWN0b3IoaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKSk7CisKKyAg
ICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJM
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkdldFNlc3Npb25Db29r
aWUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxh
dGUsIHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5n
ZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJudWxsIl07CisgICAgW3dlYlZp
ZXcgd2FpdEZvck1lc3NhZ2U6QCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCJdOworICAgIGNoZWNr
QXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICJmaWxlOi8vIiwgMik7CisKKyAgICBbZ0RlbGVn
YXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoRXJyb3I6YWRv
cHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRvbWFpbiBj
b2RlOjAgdXNlckluZm86bmlsXSkuZ2V0KCldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdl
OkAibnVsbCJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09BdXRob3JpemF0aW9u
RGlkQ2FuY2VsIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCIiXTsKKyAgICAvLyBU
cnlzIHRvIHdhaXQgdW50aWwgdGhlIGlmcmFtZSBsb2FkIGlzIGZpbmlzaGVkLgorICAgIFV0aWw6
OnNsZWVwKDAuNSk7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGxvYWQgdGhlIHJlcXVlc3Qg
b2YgdGhlIGlmcmFtZSB0byB0aGUgbWFpbiBmcmFtZS4KKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIs
IGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0
aW9uU3VjY2VzcykKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxl
ciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIz
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dp
enpsZXIgc3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVj
dG9yKGlzVVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgYXV0byB0ZXN0VVJMID0g
VVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwg
PSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJh
c2VVUkw6bmlsXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAImh0dHA6Ly93d3cuZXhh
bXBsZS5jb20iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIlNPQXV0aG9yaXphdGlv
bkRpZFN0YXJ0Il07CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIm51bGwi
LCAyKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToyMDAgSFRUUFZlcnNpb246QCJI
VFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIGF1dG8gaWZyYW1lSHRtbENTdHJpbmcg
PSBnZW5lcmF0ZUh0bWwoaWZyYW1lVGVtcGxhdGUsICIiKS51dGY4KCk7CisgICAgW2dEZWxlZ2F0
ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25z
ZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0
aEJ5dGVzOmlmcmFtZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6aWZyYW1lSHRtbENTdHJpbmcu
bGVuZ3RoKCldKS5nZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJodHRwOi8v
d3d3LmV4YW1wbGUuY29tIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJIZWxsby4i
XTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0aW9uU3VjY2Vl
ZFdpdGhPdGhlckh0dHBTdGF0dXNDb2RlKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFz
c01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6
emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
YmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAg
Q2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjQoW0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIg
Y2xhc3NdLCBAc2VsZWN0b3IoaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKSk7CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkdldFNlc3Npb25Db29raWUi
IHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUs
IHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKwor
ICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQo
KV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJudWxsIl07CisgICAgW3dlYlZpZXcg
d2FpdEZvck1lc3NhZ2U6QCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCJdOworICAgIGNoZWNrQXV0
aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICJmaWxlOi8vIiwgMik7CisKKyAgICAvLyBXaWxsIGZh
bGxiYWNrIHRvIHdlYiBwYXRoLgorICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQ
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZTo0
MDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIGF1dG8g
aWZyYW1lSHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0bWwoaWZyYW1lVGVtcGxhdGUsICIiKS51dGY4
KCk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBs
ZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmlmcmFtZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6
aWZyYW1lSHRtbENTdHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZv
ck1lc3NhZ2U6QCJudWxsIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJTT0F1dGhv
cml6YXRpb25EaWRDYW5jZWwiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIiJdOwor
ICAgIC8vIFRyeXMgdG8gd2FpdCB1bnRpbCB0aGUgaWZyYW1lIGxvYWQgaXMgZmluaXNoZWQuCisg
ICAgVXRpbDo6c2xlZXAoMC41KTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgbG9hZCB0aGUg
cmVxdWVzdCBvZiB0aGUgaWZyYW1lIHRvIHRoZSBtYWluIGZyYW1lLgorICAgIEVYUEVDVF9XS19T
VFJFUSgiIiwgZmluYWxVUkwpOworfQorCisvLyBTZXR0aW5nIGNvb2tpZSBpcyBlbnN1cmVkIGJ5
IG90aGVyIHRlc3RzLiBIZXJlIGlzIHRvIGNvdmVyIGlmIHRoZSB3aG9sZSBhdXRoZW50aWNhdGlv
biBoYW5kc2hha2UgY2FuIGJlIGNvbXBsZXRlZC4KK1RFU1QoU09BdXRob3JpemF0aW9uU3ViRnJh
bWUsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoQ29va2llKQoreworICAgIHJlc2V0U3RhdGUoKTsK
KyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9u
c2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjQoW0FLQXV0aG9yaXphdGlvbkNv
bnRyb2xsZXIgY2xhc3NdLCBAc2VsZWN0b3IoaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKSk7
CisKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29t
Iik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVz
dFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpuaWxdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JN
ZXNzYWdlOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JN
ZXNzYWdlOkAiU09BdXRob3JpemF0aW9uRGlkU3RhcnQiXTsKKyAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKGZhbHNlLCAibnVsbCIsIDIpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0
TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXND
b2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJTZXQtQ29v
a2llIiA6IEAic2Vzc2lvbmlkPTM4YWZlczdhODsifV0pOworICAgIGF1dG8gaWZyYW1lSHRtbENT
dHJpbmcgPSBnZW5lcmF0ZUh0bWwoaWZyYW1lVGVtcGxhdGUsICIiKS51dGY4KCk7CisgICAgW2dE
ZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBS
ZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0V2l0aEJ5dGVzOmlmcmFtZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6aWZyYW1lSHRtbENT
dHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJo
dHRwOi8vd3d3LmV4YW1wbGUuY29tIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJI
ZWxsby4iXTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgSW50ZXJjZXB0aW9u
U3VjY2Vzc1R3aWNlKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihj
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgQ2xhc3NNZXRob2RT
d2l6emxlciBzd2l6emxlcjQoW0FLQXV0aG9yaXphdGlvbkNvbnRyb2xsZXIgY2xhc3NdLCBAc2Vs
ZWN0b3IoaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKSk7CisKKyAgICBhdXRvIHRlc3RVUkwg
PSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRt
bCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwg
ZGVsZWdhdGUuZ2V0KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAg
ICAgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOworICAgICAgICBuYXZpZ2F0aW9u
Q29tcGxldGVkID0gZmFsc2U7CisKKyAgICAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVz
dEh0bWwgYmFzZVVSTDpuaWxdOworICAgICAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAImh0
dHA6Ly93d3cuZXhhbXBsZS5jb20iXTsKKyAgICAgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6
QCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCJdOworICAgICAgICBjaGVja0F1dGhvcml6YXRpb25P
cHRpb25zKGZhbHNlLCAibnVsbCIsIDIpOworCisgICAgICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9w
dE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVz
Q29kZToyMDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAg
ICAgICBhdXRvIGlmcmFtZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKGlmcmFtZVRlbXBsYXRl
LCAiIikudXRmOCgpOworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6
YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5
OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6aWZyYW1lSHRtbENTdHJpbmcu
ZGF0YSgpIGxlbmd0aDppZnJhbWVIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICAg
ICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIl07Cisg
ICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07CisgICAgfQorfQorCitU
RVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBBdXRob3JpemF0aW9uT3B0aW9ucykKK3sKKyAg
ICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVD
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihz
ZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhl
YWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0
cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwo
cGFyZW50VGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6KE5TVVJMICop
VVJMKFVSTCgpLCAiaHR0cDovL3d3dy5hcHBsZS5jb20iKV07CisgICAgW3dlYlZpZXcgd2FpdEZv
ck1lc3NhZ2U6QCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIl07CisgICAgW3dlYlZpZXcgd2FpdEZv
ck1lc3NhZ2U6QCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCJdOworICAgIGNoZWNrQXV0aG9yaXph
dGlvbk9wdGlvbnMoZmFsc2UsICJodHRwOi8vd3d3LmFwcGxlLmNvbSIsIDIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="387933"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372265</attachid>
            <date>2019-06-17 12:57:26 -0700</date>
            <delta_ts>2019-06-17 13:40:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-198874-20190617125725.patch</filename>
            <type>text/plain</type>
            <size>236790</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVkZjJjZWZkNGM1NzQ3Nzc3OTQxNDI3
M2NhY2NiZTk0ZjkyOWE2MjEuLjc2NWI1ODZkNjZiNmQ5ZTBmN2E3ZTc2ZTJiYmI5MDZhYWE2OWE2
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDYtMTQgIEppZXdlbiBUYW4gIDxqaWV3ZW5f
dGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNPQXV0aG9yaXphdGlvbiBmcm9tIFdlYktp
dEFkZGl0aW9ucyB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc1NzM0MzE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorICAgICAgICBBZGRzIGEgZmVhdHVyZSBmbGFnIHRvIGRldGVjdCBBcHBTU08gZnJh
bWV3b3JrLgorCiAyMDE5LTA2LTEyICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+
CiAKICAgICAgICAgU2hvdyB0aGUgd2ViIHBhZ2UgVVJMIHdoZW4gc2hhcmluZyBhbiBBUiBtb2Rl
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggZWUwNTY3ODIzNjE1N2RjZjFkYWQ1MDdlNjczNDBlYWI0
M2Q2NDRhMC4uMzNlZTk0ODMxNjQ1MDJhOWExMDRmMDFmNzBjMzgzOTNkY2QwYjM4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMDYtMTQgIEppZXdlbiBUYW4gIDxq
aWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFNPQXV0aG9yaXphdGlvbiBmcm9t
IFdlYktpdEFkZGl0aW9ucyB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODg3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc1NzM0
MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1vdmVzIEFwcFNTT1NvZnRMaW5rIGZyb20gV2ViS2l0QWRkaXRpb25zIHRvIFdlYktp
dCwgYW5kIGludHJvZHVjZXMKKyAgICAgICAgQXV0aEtpdFNQSS5oLgorCisgICAgICAgICogUEFM
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFsL2NvY29hL0FwcFNTT1Nv
ZnRMaW5rLmg6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogcGFsL2NvY29hL0FwcFNTT1NvZnRM
aW5rLm1tOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Rlc3RMb2FkT3B0aW1pemVyLm1tLgorICAgICAgICAqIHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJ
Lmg6CisgICAgICAgICogcGFsL3NwaS9jb2NvYS9BdXRoS2l0U1BJLmg6IENvcGllZCBmcm9tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdExvYWRPcHRpbWl6ZXIubW0u
CisKIDIwMTktMDYtMTQgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBEaXNhYmxlIEFwcFNTTyBmb3Igd2ViIHByb2Nlc3NlcyBhbmQgcGx1Z2luIHByb2Nlc3Nl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBmOGUzYjAxYzY2YWY3NWRlYzExMjIwOTdiYjNmZDJiODE4M2RkOTRhLi43
MDk2ZGJkM2M4NjBhMmMwZjAwN2NiMjIzNDhkNDc4MzI3ZWEzM2RmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExNCBAQAorMjAxOS0wNi0xNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgU09BdXRob3JpemF0aW9uIGZyb20gV2ViS2l0QWRkaXRpb25zIHRv
IFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4ODc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzU3MzQzMT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBCcmVudCBGdWxnaGFtLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYmFzaWNhbGx5IG1v
dmVzIGV2ZXJ5dGhpbmcgZnJvbSBleGlzdGluZyBXZWJLaXRBZGRpdGlvbnMgdG8gV2ViS2l0Lgor
ICAgICAgICBJdCBhbHNvIHJlcGxhY2VzIHRoZSBMb2FkT3B0aW1pemVyIG5vbnNlbnNlIHdpdGgg
dGhlIGFjdHVhbCBTT0F1dGhvcml6YXRpb24gQVBJLgorCisgICAgICAgICogQ29uZmlndXJhdGlv
bnMvV2ViS2l0LnhjY29uZmlnOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6
Ok5ldHdvcmtTZXNzaW9uQ29jb2EpOgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL1BsdWdp
blByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVBsdWdpblByb2Nlc3MpOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6dHJ5
U09BdXRob3JpemF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6dHJ5SW50ZXJjZXB0TmF2aWdhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnRyeU9w
dGltaXppbmdMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRo
b3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y2FsbGJhY2sp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNP
QXV0aG9yaXphdGlvblNlc3Npb24ubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpOYXZpZ2F0aW9uU09BdXRob3JpemF0
aW9uU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjp+TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2Vi
S2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjp3
ZWJWaWV3RGlkTW92ZVRvV2luZG93KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRo
b3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbTogQWRkZWQuCisgICAgICAgICgtW1dLU09TZWNyZXREZWxlZ2F0ZSBpbml0V2l0aFNl
c3Npb246XSk6CisgICAgICAgICgtW1dLU09TZWNyZXREZWxlZ2F0ZSB3ZWJWaWV3RGlkQ2xvc2U6
XSk6CisgICAgICAgICgtW1dLU09TZWNyZXREZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1NPU2Vj
cmV0RGVsZWdhdGUgd2ViVmlldzpkaWRGaW5pc2hOYXZpZ2F0aW9uOl0pOgorICAgICAgICAoV2Vi
S2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OlBvcFVwU09BdXRob3JpemF0aW9uU2Vz
c2lvbik6CisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6flBv
cFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6
OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCk6
CisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29t
cGxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmluaXRTZWNyZXRXZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRo
b3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOiBDb3BpZWQgZnJvbSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1t
LgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24pOgor
ICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNr
VG9XZWJQYXRoSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdFNPQXV0aG9yaXph
dGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0
OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yLmg6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjpTT0F1dGhvcml6YXRpb25Db29yZGlu
YXRvcik6CisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjpjYW5B
dXRob3JpemUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGlu
YXRvcjo6dHJ5QXV0aG9yaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1NPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmg6IENvcGllZCBmcm9tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25OU1VS
TEV4dHJhcy5tbTogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UZXN0TG9hZE9wdGltaXplci5tbS4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9jYW5QZXJm
b3JtQXV0aG9yaXphdGlvbldpdGhVUkw6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwYWdlIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlNPQXV0aG9yaXphdGlvblNlc3Npb246Om5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb246OlNPQXV0aG9y
aXphdGlvblNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9u
Ojp+U09BdXRob3JpemF0aW9uU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9yaXph
dGlvblNlc3Npb246OnJlbGVhc2VOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxldGVkKToKKyAgICAgICAgKFdlYktp
dDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnQpOgorICAgICAgICAoV2ViS2l0
OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlNPQXV0
aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoKToKKyAgICAgICAgKFdlYktpdDo6
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnQpOgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9yaXph
dGlvblNlc3Npb246OnByZXNlbnRWaWV3Q29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlNP
QXV0aG9yaXphdGlvblNlc3Npb246OmRpc21pc3NWaWV3Q29udHJvbGxlcik6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNl
c3Npb24uaDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXN0TG9hZE9wdGltaXplci5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRo
b3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKToKKyAgICAgICAgKFdlYktp
dDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKToKKyAgICAg
ICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVy
bmFsKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpi
ZWZvcmVTdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6bG9hZERhdGFUb0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpwb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dLU09BdXRob3JpemF0aW9uRGVsZWdh
dGUuaDogUmVuYW1lZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGVzdExvYWRPcHRpbWl6ZXIubW0uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tOiBBZGRlZC4KKyAgICAgICAgKC1b
V0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOnByZXNlbnRWaWV3Q29udHJv
bGxlcjp3aXRoQ29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxl
Z2F0ZSBhdXRob3JpemF0aW9uRGlkTm90SGFuZGxlOl0pOgorICAgICAgICAoLVtXS1NPQXV0aG9y
aXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb25EaWRDYW5jZWw6XSk6CisgICAgICAgICgtW1dL
U09BdXRob3JpemF0aW9uRGVsZWdhdGUgYXV0aG9yaXphdGlvbkRpZENvbXBsZXRlOl0pOgorICAg
ICAgICAoLVtXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb246ZGlkQ29tcGxl
dGVXaXRoSFRUUEF1dGhvcml6YXRpb25IZWFkZXJzOl0pOgorICAgICAgICAoLVtXS1NPQXV0aG9y
aXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNl
Omh0dHBCb2R5Ol0pOgorICAgICAgICAoLVtXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGF1dGhv
cml6YXRpb246ZGlkQ29tcGxldGVXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dLU09BdXRob3Jp
emF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6dHJ5U09BdXRob3JpemF0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGVOZXdQYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6dHJ5T3B0aW1pemluZ0xvYWQpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRT
aG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluQWxsTmF2aWdhdGlvblBvbGljeURlY2lzaW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRTaG91bGRTdXBwcmVzc1NPQXV0
aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpzb0F1dGhvcml6YXRpb25Db29yZGluYXRvcik6CisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRm
b3JtSW5pdGlhbGl6ZVByb2Nlc3MpOgorCiAyMDE5LTA2LTE0ICBKaWV3ZW4gVGFuICA8amlld2Vu
X3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBBcHBTU08gZm9yIHdlYiBwcm9jZXNz
ZXMgYW5kIHBsdWdpbiBwcm9jZXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IGQ1NmIwYjI5Y2RhMzczNTI2
YjQzMmU1NDQ2ODRlOTYwOWUyZGVlZTguLjFlYjc5OTcwYTc3NDAwMjg2YzQ1NGI5M2VkOTdkN2E5
ZmJmYTMyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTU3MSwzICsxNTcxLDYgQEAKICNkZWZpbmUgSEFW
RV9DT1JFVEVYVF9BVVRPX09QVElDQUxfU0laSU5HIDEKICNlbmRpZgogCisjaWYgKFBMQVRGT1JN
KElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTMwMDAwIHx8IFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDAp
CisjZGVmaW5lIEhBVkVfQVBQX1NTTyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNjU2Mzc4MzU3NTdmMDZkYThk
NGVjNmI3Nzc1ODVlNDJkNGVlZmQ4Li5hYjg1ZTQ4YmY4NWUyY2MxY2VmYzE2MWU1Y2RlMmRmNGI4
ZjBkOTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMjAsNiArMTIwLDkgQEAKIAkJNDRFMUE4QjAyMUZBNTRFQjAwQzMwNDhF
IC8qIExvb2t1cFNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDRFMUE4QUUyMUZBNTREQTAwQzMwNDhFIC8qIExvb2t1cFNvZnRMaW5rLm1t
ICovOyB9OwogCQk1NzBBQjhGMTIwQUUyRThEMDBCOEJFODcgLyogU2VjS2V5UHJveHlTUEkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MEFCOEYwMjBB
RTJFOEQwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVNQSS5oICovOyB9OwogCQk1NzBBQjhGOTIwQUY2
RTNEMDBCOEJFODcgLyogTlNYUENDb25uZWN0aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzBBQjhGODIwQUY2RTNEMDBCOEJFODcgLyogTlNY
UENDb25uZWN0aW9uU1BJLmggKi87IH07CisJCTU3MkExMDc4MjJCNDU2RjUwMEY0MTBDOCAvKiBB
dXRoS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzJBMTA3NzIyQjQ1NkY1MDBGNDEwQzggLyogQXV0aEtpdFNQSS5oICovOyB9OworCQk1N0ZE
MzE4QTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29mdExpbmsubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE4OTIyQjM1OTNFMDA4RDBFOEIg
LyogQXBwU1NPU29mdExpbmsubW0gKi87IH07CisJCTU3RkQzMThCMjJCMzU5ODkwMDhEMEU4QiAv
KiBBcHBTU09Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTdGRDMxODgyMkIzNTkyRjAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLmggKi87
IH07CiAJCTYzQzdFREM3MjFBRkFFMDQwMDZBN0I5OSAvKiBOU1Byb2dyZXNzU1BJLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2M0UzNjlGOTIxQUZBODNG
MDAxQzE0QkMgLyogTlNQcm9ncmVzc1NQSS5oICovOyB9OwogCQk3QTE2NTY0NDFGOTdCMkI5MDBC
QTNDRTQgLyogTlNLZXllZEFyY2hpdmVyU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QTE2NTY0MzFGOTdCMkI4MDBCQTNDRTQgLyogTlNLZXllZEFy
Y2hpdmVyU1BJLmggKi87IH07CiAJCTdBMzZEMEY5MjIzQUQ5QUIwMEIwNTIyRSAvKiBDb21tb25D
cnlwdG9TUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBMzZEMEY4MjIzQUQ5QUIwMEIwNTIyRSAvKiBDb21tb25DcnlwdG9TUEkuaCAqLzsgfTsKQEAg
LTI4NCw2ICsyODcsOSBAQAogCQk0NEUxQThBRTIxRkE1NERBMDBDMzA0OEUgLyogTG9va3VwU29m
dExpbmsubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb29rdXBTb2Z0TGluay5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI4RjAyMEFFMkU4RDAwQjhCRTg3IC8qIFNlY0tl
eVByb3h5U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0tleVByb3h5U1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOEY4MjBBRjZFM0QwMEI4QkU4NyAvKiBOU1hQQ0Nvbm5l
Y3Rpb25TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNYUENDb25uZWN0aW9uU1BJLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MkExMDc3MjJCNDU2RjUwMEY0MTBDOCAvKiBBdXRoS2l0
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dGhLaXRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTdGRDMxODgyMkIzNTkyRjAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcFNTT1NvZnRMaW5rLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTg5MjJCMzU5M0UwMDhEMEU4QiAvKiBBcHBTU09T
b2Z0TGluay5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFwcFNT
T1NvZnRMaW5rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2M0UzNjlGOTIxQUZB
ODNGMDAxQzE0QkMgLyogTlNQcm9ncmVzc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1Byb2dyZXNz
U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBMTY1NjQzMUY5N0IyQjgwMEJB
M0NFNCAvKiBOU0tleWVkQXJjaGl2ZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTlNLZXllZEFyY2hpdmVyU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdBMzZEMEY4MjIzQUQ5QUIwMEIwNTIyRSAvKiBDb21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uQ3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zOTAsNiArMzk2LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJMkQwMkU5M0IyMDU2RkFBNzAwQTEzNzk3IC8qIEF1ZGlvVG9vbGJv
eFNQSS5oICovLAorCQkJCTU3MkExMDc3MjJCNDU2RjUwMEY0MTBDOCAvKiBBdXRoS2l0U1BJLmgg
Ki8sCiAJCQkJMEMyREExMjIxRjNCRUI0OTAwREJDMzE3IC8qIEFWS2l0U1BJLmggKi8sCiAJCQkJ
MEMyREExMjMxRjNCRUI0OTAwREJDMzE3IC8qIENGTlNVUkxDb25uZWN0aW9uU1BJLmggKi8sCiAJ
CQkJN0EzNkQwRjgyMjNBRDlBQjAwQjA1MjJFIC8qIENvbW1vbkNyeXB0b1NQSS5oICovLApAQCAt
NTc5LDYgKzU4Niw4IEBACiAJCTFDNDg3NkRFMUY4RDgzMTMwMENDRUVCRCAvKiBjb2NvYSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTdGRDMxODgyMkIz
NTkyRjAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLmggKi8sCisJCQkJNTdGRDMxODkyMkIzNTkz
RTAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLm1tICovLAogCQkJCTA3N0U4N0IwMjI2QTQ2MDIw
MEEyQUZGMCAvKiBBVkZvdW5kYXRpb25Tb2Z0TGluay5oICovLAogCQkJCTA3N0U4N0FGMjI2QTQ2
MDIwMEEyQUZGMCAvKiBBVkZvdW5kYXRpb25Tb2Z0TGluay5tbSAqLywKIAkJCQlGNDQyOTE2NjFG
QTUyNzA1MDAyQ0M5M0UgLyogRmlsZVNpemVGb3JtYXR0ZXJDb2NvYS5tbSAqLywKQEAgLTY3Nyw3
ICs2ODYsOSBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNTdGRDMxOEIyMkIzNTk4OTAw
OEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDAyRTkzQzIw
NTZGQUE3MDBBMTM3OTcgLyogQXVkaW9Ub29sYm94U1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NzJBMTA3ODIyQjQ1NkY1MDBGNDEwQzggLyogQXV0aEtpdFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDc3RTg3QjIyMjZBNDYwMzAwQTJBRkYwIC8qIEFWRm91bmRhdGlvblNvZnRMaW5rLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQzc3ODU4OTFGNDUxMzBGMDBGNEVCQjYgLyogQVZGb3VuZGF0aW9u
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzJEQTEzRTFGM0JFQjQ5MDBEQkMzMTcgLyogQVZL
aXRTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtODQzLDYgKzg1NCw3IEBACiAJCQlkZXZlbG9wbWVu
dFJlZ2lvbiA9IGVuOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJl
Z2lvbnMgPSAoCisJCQkJZW4sCiAJCQkJRW5nbGlzaCwKIAkJCQlKYXBhbmVzZSwKIAkJCQlGcmVu
Y2gsCkBAIC04ODQsNiArODk2LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTU3RkQz
MThBMjJCMzU5M0UwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3N0U4N0IxMjI2QTQ2MDIwMEEyQUZGMCAvKiBBVkZvdW5kYXRpb25Tb2Z0TGluay5tbSBp
biBTb3VyY2VzICovLAogCQkJCTBDNUZGRjBGMUY3OEQ5REEwMDlFRkYxQSAvKiBDbG9ja0NNLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMENGOTlDQTgxRjczODQzNzAwN0VFNzkzIC8qIENvcmVNZWRp
YVNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9j
b2NvYS9BcHBTU09Tb2Z0TGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxNGM1MzdmZjRlMmU5ZGYyMDc3ZDAy
YzkyYTczMWEwYTFjOTdjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2NvY29hL0FwcFNTT1NvZnRMaW5rLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0IDxBcHBTU08vQXBw
U1NPLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX0ZSQU1FV09S
S19GT1JfSEVBREVSKFBBTCwgQXBwU1NPKTsKKworU09GVF9MSU5LX0NMQVNTX0ZPUl9IRUFERVIo
UEFMLCBTT0F1dGhvcml6YXRpb24pOworCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihQ
QUwsIEFwcFNTTywgU09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRlZCwgTlNT
dHJpbmcqKTsKKyNkZWZpbmUgU09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRl
ZCBQQUw6OmdldF9BcHBTU09fU09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRl
ZCgpCisKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFBBTCwgQXBwU1NPLCBTT0Vycm9y
RG9tYWluLCBOU0Vycm9yRG9tYWluKTsKKyNkZWZpbmUgU09FcnJvckRvbWFpbiBQQUw6OmdldF9B
cHBTU09fU09FcnJvckRvbWFpbigpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5tbSBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY29jb2EvQXBwU1NPU29mdExpbmsubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYxY2QyMDc2MGUyNjY1NDQx
ZDMyY2E4YzRkMWQ3MDRlNzNmZDBlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvY29jb2EvQXBwU1NPU29mdExpbmsubW0KQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEhBVkUoQVBQX1NTTykKKworI2ltcG9y
dCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUktfRk9SX1NPVVJDRV9X
SVRIX0VYUE9SVChQQUwsIEFwcFNTTywgUEFMX0VYUE9SVCk7CisKKyNpZiBQTEFURk9STShNQUMp
CitTT0ZUX0xJTktfQ0xBU1NfRk9SX1NPVVJDRV9PUFRJT05BTF9XSVRIX0VYUE9SVChQQUwsIEFw
cFNTTywgU09BdXRob3JpemF0aW9uLCBQQUxfRVhQT1JUKTsKKyNlbHNlCitTT0ZUX0xJTktfQ0xB
U1NfRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIEFwcFNTTywgU09BdXRob3JpemF0aW9uLCBQ
QUxfRVhQT1JUKTsKKyNlbmRpZgorCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRV9XSVRI
X0VYUE9SVChQQUwsIEFwcFNTTywgU09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRp
YXRlZCwgTlNTdHJpbmcqLCBQQUxfRVhQT1JUKTsKKworU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9T
T1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBBcHBTU08sIFNPRXJyb3JEb21haW4sIE5TRXJyb3JEb21h
aW4sIFBBTF9FWFBPUlQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
Y2YvQ0ZOZXR3b3JrU1BJLmgKaW5kZXggMTgyZmY4YmU2NTFhOGQyNjJjYzY4NjQzZjJkYWRkZDI2
NjU5NGI3NS4uNDU1NzA4NWQ4MGUwMzcwNGEzMmJiZTgzYmZlYTI1OTdmMTJhNmExNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmgKQEAgLTIzNiw3ICsy
MzYsNyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBOU1VSTFNlc3Npb25Db21wYW5pb25Q
cm94eVByZWZlcmVuY2UpIHsKICNpZiBIQVZFKENGTkVUV09SS19OU1VSTFNFU1NJT05fU1RSSUNU
UlVTVEVWQUxVQVRFKQogKyAodm9pZClfc3RyaWN0VHJ1c3RFdmFsdWF0ZTooTlNVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZSBxdWV1ZTooZGlzcGF0Y2hfcXVldWVfdClxdWV1
ZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSAqY2hhbGxlbmdlLCBPU1N0YXR1cyB0cnVzdFJlc3VsdCkpY2I7CiAjZW5kaWYKLSNpZiBIQVZF
KExPQURfT1BUSU1JWkVSKQorI2lmIEhBVkUoQVBQX1NTTykKICsgKHZvaWQpX2Rpc2FibGVBcHBT
U087CiAjZW5kaWYKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3Bp
L2NvY29hL0F1dGhLaXRTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL0F1
dGhLaXRTUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzgyZWM5MzdiOTU0NjFlNTlhMzE1ZjkyNzU4N2M5YzU2
OGFhOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY29j
b2EvQXV0aEtpdFNQSS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEhBVkUoQVBQX1NTTykKKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisK
KyNpbXBvcnQgPEF1dGhLaXQvQUtBdXRob3JpemF0aW9uQ29udHJvbGxlci5oPgorCisjZWxzZQor
CitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNlIEFLQXV0aG9yaXphdGlvbkNv
bnRyb2xsZXIgOiBOU09iamVjdAorCisrIChCT09MKWlzVVJMRnJvbUFwcGxlT3duZWREb21haW46
KE5TVVJMICopdXJsOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYg
Ly8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2VuZGlmIC8vIEhBVkUoQVBQX1NTTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvV2ViS2l0LnhjY29uZmlnIGIv
U291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKaW5kZXggZDlkZGEy
Yzk3ZWU2NDQyYWNjNDRhMjgyNDgxYTVjMWNhMjhmYmQ2Ny4uNDMwZjdkZjJiNWRiZGQwMzg0ZGE1
Zjk3OTA1NTM2NWNiOTM5NTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0
aW9ucy9XZWJLaXQueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9X
ZWJLaXQueGNjb25maWcKQEAgLTEyNyw3ICsxMjcsMTQgQEAgV0tfVVJMX0ZPUk1BVFRJTkdfTERG
TEFHU19ZRVMgPSAtZnJhbWV3b3JrIFVSTEZvcm1hdHRpbmc7CiBXS19XRUJJTlNQRUNUT1JVSV9M
REZMQUdTID0gJChXS19XRUJJTlNQRUNUT1JVSV9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkp
OwogV0tfV0VCSU5TUEVDVE9SVUlfTERGTEFHU19tYWNvc3ggPSAtd2Vha19mcmFtZXdvcmsgV2Vi
SW5zcGVjdG9yVUk7CiAKLUZSQU1FV09SS19BTkRfTElCUkFSWV9MREZMQUdTID0gLWxvYmpjIC1m
cmFtZXdvcmsgQ0ZOZXR3b3JrIC1mcmFtZXdvcmsgQ29yZUF1ZGlvIC1mcmFtZXdvcmsgQ29yZUZv
dW5kYXRpb24gLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBDb3JlVGV4dCAtZnJh
bWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgSU9LaXQgLWZy
YW1ld29yayBXZWJLaXRMZWdhY3kgLWxuZXR3b3JrICQoV0tfQUNDRVNTSUJJTElUWV9MREZMQUdT
KSAkKFdLX0FQUEtJVF9MREZMQUdTKSAkKFdLX0FTU0VSVElPTl9TRVJWSUNFU19MREZMQUdTKSAk
KFdLX0NBUkJPTl9MREZMQUdTKSAkKFdLX0NPUkVfUERGX0xERkxBR1MpICQoV0tfQ09SRV9QUkVE
SUNUSU9OX0xERkxBR1MpICQoV0tfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX0RFVklDRV9J
REVOVElUWV9MREZMQUdTKSAkKFdLX0dSQVBISUNTX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfSU9T
VVJGQUNFX0xERkxBR1MpICQoV0tfTElCU0FOREJPWF9MREZMQUdTKSAkKFdLX0xJQldFQlJUQ19M
REZMQUdTKSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfTU9CSUxFX0dF
U1RBTFRfTERGTEFHUykgJChXS19PUEVOR0xfTERGTEFHUykgJChXS19QREZLSVRfTERGTEFHUykg
JChXS19TQUZFX0JST1dTSU5HX0xERkxBR1MpICQoV0tfU0VDVVJJVFlfSU5URVJGQUNFX0xERkxB
R1MpICQoV0tfVUlLSVRfTERGTEFHUykgJChXS19VUkxfRk9STUFUVElOR19MREZMQUdTKSAkKFdL
X1dFQklOU1BFQ1RPUlVJX0xERkxBR1MpOworV0tfQVVUSEtJVF9MREZMQUdTID0gJChXS19BVVRI
S0lUX0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19BVVRIS0lUX0xERkxBR1NfaXBo
b25lb3MgPSAkKFdLX0FVVEhLSVRfTERGTEFHUyQoV0tfSU9TXzEzKSk7CitXS19BVVRIS0lUX0xE
RkxBR1NfaXBob25lc2ltdWxhdG9yID0gJChXS19BVVRIS0lUX0xERkxBR1MkKFdLX0lPU18xMykp
OworV0tfQVVUSEtJVF9MREZMQUdTX0lPU19TSU5DRV8xMyA9IC1mcmFtZXdvcmsgQXV0aEtpdDsK
K1dLX0FVVEhLSVRfTERGTEFHU19tYWNvc3ggPSAkKFdLX0FVVEhLSVRfTERGTEFHUyQoV0tfTUFD
T1NfMTAxNSkpOworV0tfQVVUSEtJVF9MREZMQUdTX01BQ09TX1NJTkNFXzEwMTUgPSAtZnJhbWV3
b3JrIEF1dGhLaXQ7CisKK0ZSQU1FV09SS19BTkRfTElCUkFSWV9MREZMQUdTID0gLWxvYmpjIC1m
cmFtZXdvcmsgQ0ZOZXR3b3JrIC1mcmFtZXdvcmsgQ29yZUF1ZGlvIC1mcmFtZXdvcmsgQ29yZUZv
dW5kYXRpb24gLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBDb3JlVGV4dCAtZnJh
bWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgSU9LaXQgLWZy
YW1ld29yayBXZWJLaXRMZWdhY3kgLWxuZXR3b3JrICQoV0tfQUNDRVNTSUJJTElUWV9MREZMQUdT
KSAkKFdLX0FQUEtJVF9MREZMQUdTKSAkKFdLX0FTU0VSVElPTl9TRVJWSUNFU19MREZMQUdTKSAk
KFdLX0FVVEhLSVRfTERGTEFHUykgJChXS19DQVJCT05fTERGTEFHUykgJChXS19DT1JFX1BERl9M
REZMQUdTKSAkKFdLX0NPUkVfUFJFRElDVElPTl9MREZMQUdTKSAkKFdLX0NPUkVfU0VSVklDRVNf
TERGTEFHUykgJChXS19ERVZJQ0VfSURFTlRJVFlfTERGTEFHUykgJChXS19HUkFQSElDU19TRVJW
SUNFU19MREZMQUdTKSAkKFdLX0lPU1VSRkFDRV9MREZMQUdTKSAkKFdLX0xJQlNBTkRCT1hfTERG
TEFHUykgJChXS19MSUJXRUJSVENfTERGTEFHUykgJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19M
REZMQUdTKSAkKFdLX01PQklMRV9HRVNUQUxUX0xERkxBR1MpICQoV0tfT1BFTkdMX0xERkxBR1Mp
ICQoV0tfUERGS0lUX0xERkxBR1MpICQoV0tfU0FGRV9CUk9XU0lOR19MREZMQUdTKSAkKFdLX1NF
Q1VSSVRZX0lOVEVSRkFDRV9MREZMQUdTKSAkKFdLX1VJS0lUX0xERkxBR1MpICQoV0tfVVJMX0ZP
Uk1BVFRJTkdfTERGTEFHUykgJChXS19XRUJJTlNQRUNUT1JVSV9MREZMQUdTKTsKIAogLy8gUHJl
dmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBiYXNpY19zdHJpbmdzdHJlYW0sIG9wZXJhdG9yIG5l
dywgZGVsZXRlIGFuZCB0aGVpciByZWxhdGVkIGV4Y2VwdGlvbiB0eXBlcyBmcm9tIGJlaW5nIGV4
cG9ydGVkIGFzIHdlYWsgc3ltYm9scy4KIFVORVhQT1JURURfU1lNQk9MX0xERkxBR1MgPSAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUSVN0OWJhZF9hbGxvYyAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sIC1XbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxf
X1pUU1N0OWJhZF9hbGxvYyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUU1N0OWV4Y2Vw
dGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVk
X3N5bWJvbCAtV2wsX19abndtUHYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19abndtIC1X
bCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZON1dlYkNvcmUx
MlBvbGljeUFjdGlvbkVFRUMyRU9TNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTlN0
M19fMThmdW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9uRUVFQzFFT1M0XyAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3JlMTJQb2xp
Y3lBY3Rpb25FRUVhU0VEbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pOS1N0M19fMThm
dW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9uRUVFY2xFUzJfIC1XbCwtdW5leHBvcnRl
ZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZON1dlYkNvcmUxMlBvbGljeUFjdGlv
bkVFRTRzd2FwRVJTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTlN0M19fMThmdW5j
dGlvbklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9uRUVFQzFFUktTNF8gLVdsLC11bmV4cG9ydGVk
X3N5bWJvbCAtV2wsX19aTlN0M19fMThmdW5jdGlvbklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9u
RUVFQzJFUktTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTlN0M19fMThmdW5jdGlv
bklGdk43V2ViQ29yZTEyUG9saWN5QWN0aW9uRUVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9s
IC1XbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2TjdXZWJDb3JlMTJQb2xpY3lBY3Rpb25FRUVEMkV2
IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZON1dlYkNv
cmUxMlBvbGljeUFjdGlvbkVFRWFTRVJLUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9f
WlRWTlN0M19fMTE3YmFkX2Z1bmN0aW9uX2NhbGxFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVds
LF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5T
XzlhbGxvY2F0b3JJY0VFRUUwX05TXzEzYmFzaWNfaXN0cmVhbUljUzJfRUUgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCAtV2wsX19aVENOU3QzX18xMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hh
cl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRTBfTlNfMTRiYXNpY19pb3N0cmVhbUljUzJf
RUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVENOU3QzX18xMThiYXNpY19zdHJpbmdz
dHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRTE2X05TXzEzYmFz
aWNfb3N0cmVhbUljUzJfRUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFROU3QzX18x
MThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvcklj
RUVFRSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUVk5TdDNfXzExNWJhc2ljX3N0cmlu
Z2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFIC1XbCwtdW5leHBv
cnRlZF9zeW1ib2wgLVdsLF9fWlRWTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNo
YXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAt
V2wsX19aVENOU3QzX18xMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VF
TlNfOWFsbG9jYXRvckljRUVFRThfTlNfMTNiYXNpY19vc3RyZWFtSWNTMl9FRTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5tbQppbmRleCAyNjI1MGQ2ZTRmYjczNWMzMjkyYzQ4YWFhMDdiZTc3ZTJkMWQ3YmJjLi5i
ZGJmOWI0NWNjM2ZlNWUwNGNlNmEwZTE4ZGQ4MDM4YWYyMWFkNDI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
Lm1tCkBAIC05NDIsOCArOTQyLDggQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Np
b25Db2NvYShOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIE5ldHdvcmsKIAogICAgIE5T
VVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRm9y
U2Vzc2lvbklEKG1fc2Vzc2lvbklEKTsKIAotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi0gICAg
TkVUV09SS1NFU1NJT05DT0NPQV9MT0FET1BUSU1JWkVSX0FERElUSU9OUworI2lmIEhBVkUoQVBQ
X1NTTykKKyAgICBjb25maWd1cmF0aW9uLl9wcmV2ZW50c0FwcFNTTyA9IHRydWU7CiAjZW5kaWYK
IAogI2lmIFVTRShDRk5FVFdPUktfQVVUT19BRERFRF9IVFRQX0hFQURFUl9TVVBQUkVTU0lPTikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vz
c01hYy5tbSBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01h
Yy5tbQppbmRleCA3ODdiY2JhZTQxMDU1YzU3YjRmNTlhYWU2ZDVmOTgyMmQzMTYwNWE2Li5kNjAw
MzdmZDNlYzY1NmQ3NWQ3MDY3ZDMyYTJlMzQzNzFmZDBkMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tCkBAIC00MDUsNyAr
NDA1LDcgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQbHVnaW5Qcm9j
ZXNzKFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXQKICAgICAvLyBEaXNhYmxlIERhcmsgTW9k
ZSBpbiB0aGUgcGx1Z2luIHByb2Nlc3MgdG8gYXZvaWQgcmVuZGVyaW5nIGlzc3Vlcy4KICAgICBb
TlNBcHAgc2V0QXBwZWFyYW5jZTpbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVh
cmFuY2VOYW1lQXF1YV1dOwogI2VuZGlmCi0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKKyNpZiBI
QVZFKEFQUF9TU08pCiAgICAgW05TVVJMU2Vzc2lvbiBfZGlzYWJsZUFwcFNTT107CiAjZW5kaWYK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA0NjYxN2JlODYyNGM5YjhkOWE0YWUyMWYxZjk5
ZDM3NjJmNGVhZjM5Li4yN2RjZjA5NDNhNzFhMDY3MzYwMDg5NjcxYTcyYjcwMjlmZmQyYjkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zMjgsNiArMzI4LDE1IEBAIFVJUHJvY2Vzcy9BdXRv
bWF0aW9uL2lvcy9XZWJBdXRvbWF0aW9uU2Vzc2lvbklPUy5tbQogCiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KIAorVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorVUlQcm9j
ZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0K
K1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tCitVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlv
bkNvb3JkaW5hdG9yLm1tCitVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9y
aXphdGlvbk5TVVJMRXh0cmFzLm1tCitVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NP
QXV0aG9yaXphdGlvblNlc3Npb24ubW0KK1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24v
U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCitVSVByb2Nlc3MvQ29jb2EvU09BdXRo
b3JpemF0aW9uL1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUubW0KKwogVUlQcm9jZXNzL0NvY29h
L0F1dG9tYXRpb25DbGllbnQubW0KIFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uU2Vzc2lvbkNs
aWVudC5tbQogVUlQcm9jZXNzL0NvY29hL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAppbmRl
eCBjMTUyOGY4YjUxNTJhZjVmYTc4MTI3ZmM1NjE4N2ZjMDc5MmY3NTdmLi40ZjgxZmRmMWE0OTBk
NWMwY2JlYjU1ZTllZjllZjk0NjY5NTAzNzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgKQEAgLTY5LDggKzY5LDkgQEAgcHVibGlj
OgogCiAgICAgTmF2aWdhdGlvbiogbWFpbkZyYW1lTmF2aWdhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFpbkZyYW1lTmF2aWdhdGlvbi5nZXQoKTsgfQogCi0jaWYgSEFWRShMT0FEX09QVElNSVpF
UikKLUFQSU5BVklHQVRJT05BQ1RJT05fTE9BRE9QVElNSVpFUl9BRERJVElPTlNfMQorI2lmIEhB
VkUoQVBQX1NTTykKKyAgICBib29sIHNob3VsZFBlcmZvcm1TT0F1dGhvcml6YXRpb24oKSB7IHJl
dHVybiBtX3Nob3VsZFBlcmZvcm1TT0F1dGhvcml6YXRpb247IH0KKyAgICB2b2lkIHVuc2V0U2hv
dWxkUGVyZm9ybVNPQXV0aG9yaXphdGlvbigpIHsgbV9zaG91bGRQZXJmb3JtU09BdXRob3JpemF0
aW9uID0gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTAwLDggKzEwMSw4IEBAIHBy
aXZhdGU6CiAgICAgV1RGOjpVUkwgbV9vcmlnaW5hbFVSTDsKIAogICAgIGJvb2wgbV9zaG91bGRP
cGVuQXBwTGlua3M7Ci0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKLUFQSU5BVklHQVRJT05BQ1RJ
T05fTE9BRE9QVElNSVpFUl9BRERJVElPTlNfMgorI2lmIEhBVkUoQVBQX1NTTykKKyAgICBib29s
IG1fc2hvdWxkUGVyZm9ybVNPQXV0aG9yaXphdGlvbiB7IHRydWUgfTsKICNlbmRpZgogCiAgICAg
UmVmUHRyPFVzZXJJbml0aWF0ZWRBY3Rpb24+IG1fdXNlckluaXRpYXRlZEFjdGlvbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQppbmRleCBh
NGVhNmI3MzFiMDQzZTAzNWVkNzEzM2Q1MTU4ZGRiYmQxYjdhMzQyLi4zMjVmZjgxMGJlMmJmMzEx
NTFhNzc3ZGY3NGE5NDliMDBhOGJmZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0ICJM
b2dnaW5nLmgiCiAjaW1wb3J0ICJOYXZpZ2F0aW9uQWN0aW9uRGF0YS5oIgogI2ltcG9ydCAiUGFn
ZUxvYWRTdGF0ZS5oIgorI2ltcG9ydCAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNp
bXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQmFja0Zvcndh
cmRMaXN0SXRlbUludGVybmFsLmgiCiAjaW1wb3J0ICJXS0ZyYW1lSW5mb0ludGVybmFsLmgiCkBA
IC04MSwxMCArODIsNiBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9MYXVuY2hTZXJ2aWNlc1NQ
SS5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2Vi
S2l0QWRkaXRpb25zL05hdmlnYXRpb25TdGF0ZUFkZGl0aW9ucy5tbT4KLSNlbmRpZgotCiAjaWYg
VVNFKFFVSUNLX0xPT0spCiAjaW1wb3J0ICJRdWlja0xvb2tEb2N1bWVudERhdGEuaCIKICNlbmRp
ZgpAQCAtNDc0LDEyICs0NzEsMTggQEAgYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OndpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJQYWdlUHJveHkKIH0KICNlbmRp
ZgogCi0jaWYgIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCi1zdGF0aWMgdm9pZCB0cnlPcHRpbWl6
aW5nTG9hZChSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBXZWJQYWdlUHJveHkmLCBGdW5j
dGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorc3RhdGljIHZvaWQgdHJ5U09B
dXRob3JpemF0aW9uKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlv
biwgV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogeworI2lmIEhBVkUoQVBQX1NTTykKKyAgICBpZiAoIW5hdmlnYXRpb25BY3Rpb24t
PnNob3VsZFBlcmZvcm1TT0F1dGhvcml6YXRpb24oKSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGFnZS53ZWJzaXRlRGF0
YVN0b3JlKCkuc29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IoKS50cnlBdXRob3JpemUoV1RGTW92
ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
I2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci19CiAjZW5kaWYKK30KIAogc3Rh
dGljIHZvaWQgdHJ5SW50ZXJjZXB0TmF2aWdhdGlvbihSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9u
PiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgV1RGOjpGdW5jdGlvbjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewpAQCAtNDg5LDcgKzQ5Miw3IEBAIHN0
YXRpYyB2b2lkIHRyeUludGVyY2VwdE5hdmlnYXRpb24oUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlv
bj4mJiBuYXZpZ2F0aW9uQWN0aW9uCiAgICAgICAgIGF1dG8qIGxvY2FsQ29tcGxldGlvbkhhbmRs
ZXIgPSBuZXcgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sKT4oW25hdmlnYXRpb25BY3Rpb24gPSBX
VEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCB3ZWFrUGFnZSA9IG1ha2VXZWFrUHRyKHBhZ2UpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNj
ZXNzKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgd2Vha1BhZ2UpIHsKLSAgICAgICAgICAgICAgICB0
cnlPcHRpbWl6aW5nTG9hZChXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCAqd2Vha1BhZ2UsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICB0cnlTT0F1dGhvcml6
YXRpb24oV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgKndlYWtQYWdlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2Vzcyk7CkBAIC01MDQsNyArNTA3LDcg
QEAgc3RhdGljIHZvaWQgdHJ5SW50ZXJjZXB0TmF2aWdhdGlvbihSZWY8QVBJOjpOYXZpZ2F0aW9u
QWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24KICAgICB9CiAjZW5kaWYKIAotICAgIHRyeU9wdGlt
aXppbmdMb2FkKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICB0cnlTT0F1dGhvcml6YXRpb24oV1RGTW92ZShuYXZpZ2F0aW9u
QWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSwgUmVmPEFQSTo6TmF2aWdhdGlvbkFj
dGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5
PiYmIGxpc3RlbmVyLCBBUEk6Ok9iamVjdCogdXNlckluZm8pCkBAIC02MTgsNyArNjIxLDcgQEAg
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oV2ViUGFnZVAKICAgICAgICAgICAgIGxvY2FsTGlzdGVuZXItPmRvd25s
b2FkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBfV0tOYXZpZ2F0aW9uQWN0
aW9uUG9saWN5QWxsb3dXaXRob3V0VHJ5aW5nQXBwTGluazoKLSAgICAgICAgICAgIHRyeU9wdGlt
aXppbmdMb2FkKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHdlYlBhZ2VQcm94eSwgW2xvY2Fs
TGlzdGVuZXIgPSBXVEZNb3ZlKGxvY2FsTGlzdGVuZXIpLCB3ZWJzaXRlUG9saWNpZXMgPSBXVEZN
b3ZlKGFwaVdlYnNpdGVQb2xpY2llcyldIChib29sIG9wdGltaXplZExvYWQpIHsKKyAgICAgICAg
ICAgIHRyeVNPQXV0aG9yaXphdGlvbihXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCB3ZWJQYWdl
UHJveHksIFtsb2NhbExpc3RlbmVyID0gV1RGTW92ZShsb2NhbExpc3RlbmVyKSwgd2Vic2l0ZVBv
bGljaWVzID0gV1RGTW92ZShhcGlXZWJzaXRlUG9saWNpZXMpXSAoYm9vbCBvcHRpbWl6ZWRMb2Fk
KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9wdGltaXplZExvYWQpIHsKICAgICAgICAgICAgICAg
ICAgICAgbG9jYWxMaXN0ZW5lci0+aWdub3JlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25T
ZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEwMmYwNTg1MTljZjE5NzUzZWIyMjNlMjQzYWE0NGQxOTcw
YmMxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCkBAIC0wLDAg
KzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVBQX1NTTykK
KworI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKyNpbmNsdWRlICJXZWJWaWV3
RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFdoZW4gdGhlIFdlYlZpZXcsIG93bmVy
IG9mIHRoZSBwYWdlLCBpcyBub3QgaW4gdGhlIHdpbmRvdywgdGhlIHNlc3Npb24gd2lsbCB0aGVu
IHBhdXNlCisvLyBhbmQgbGF0ZXIgcmVzdW1lIGFmdGVyIHRoZSBXZWJWaWV3IGJlaW5nIG1vdmVk
IGludG8gdGhlIHdpbmRvdy4KKy8vIFRoZSByZWFzb24gdG8gYXBwbHkgdGhlIGFib3ZlIHJ1bGUg
dG8gdGhlIHdob2xlIHNlc3Npb24gaW5zdGVhZCBvZiBVSSBzZXNzaW9uIG9ubHkgaXMgVUkKKy8v
IGNhbiBiZSBzaG93biBvdXQgb2YgcHJvY2VzcywgaW4gd2hpY2ggY2FzZSBXZWJLaXQgd2lsbCBu
b3QgZXZlbiBnZXQgbm90aWZpZWQuCisvLyBGU006IElkbGUgPT4gaXNJbldpbmRvdyA9PiBBY3Rp
dmUgPT4gQ29tcGxldGVkCisvLyAgICAgIElkbGUgPT4gIWlzSW5XaW5kb3cgPT4gV2FpdGluZyA9
PiBiZWNvbWUgaXNJbldpbmRvdyA9PiBBY3RpdmUgPT4gQ29tcGxldGVkCitjbGFzcyBOYXZpZ2F0
aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbiA6IHB1YmxpYyBTT0F1dGhvcml6YXRpb25TZXNzaW9u
LCBwcml2YXRlIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlciB7CitwdWJsaWM6CisgICAg
dXNpbmcgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNpbmcg
V2Vha1ZhbHVlVHlwZSA9IFNPQXV0aG9yaXphdGlvblNlc3Npb246OldlYWtWYWx1ZVR5cGU7CisK
KyAgICB+TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24oKTsKKworcHJvdGVjdGVkOgor
ICAgIHVzaW5nIENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT47CisKKyAg
ICBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRpb24gKiwgUmVm
PEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgSW5pdGlhdGluZ0FjdGlv
biwgQ2FsbGJhY2smJik7CisKKyAgICB2b2lkIGludm9rZUNhbGxiYWNrKGJvb2wgaW50ZXJjZXB0
ZWQpIHsgbV9jYWxsYmFjayhpbnRlcmNlcHRlZCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBTT0F1
dGhvcml6YXRpb25TZXNzaW9uCisgICAgdm9pZCBzaG91bGRTdGFydEludGVybmFsKCkgZmluYWw7
CisKKyAgICAvLyBXZWJWaWV3RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIKKyAgICB2b2lkIHdlYlZp
ZXdEaWRNb3ZlVG9XaW5kb3coKSBmaW5hbDsKKworICAgIHZpcnR1YWwgdm9pZCBiZWZvcmVTdGFy
dCgpID0gMDsKKworICAgIENhbGxiYWNrIG1fY2FsbGJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlv
blNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIyNmJiZWNlNGY5NWMxMjE4
NjU5MGFhZWZjMmNlMWQ5ZDA5OTk5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9u
U2Vzc2lvbi5tbQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCisKKyNp
ZiBIQVZFKEFQUF9TU08pCisKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitOYXZpZ2F0
aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Np
b24oU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJlZjxBUEk6Ok5hdmlnYXRpb25B
Y3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBJbml0aWF0aW5n
QWN0aW9uIGFjdGlvbiwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICA6IFNPQXV0
aG9yaXphdGlvblNlc3Npb24oc29BdXRob3JpemF0aW9uLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rp
b24pLCBwYWdlLCBhY3Rpb24pCisgICAgLCBtX2NhbGxiYWNrKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKQoreworfQorCitOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6fk5hdmln
YXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKCkKK3sKKyAgICBpZiAobV9jYWxsYmFjaykKKyAg
ICAgICAgbV9jYWxsYmFjayh0cnVlKTsKKyAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6V2FpdGlu
ZyAmJiBwYWdlKCkpCisgICAgICAgIHBhZ2UoKS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworfQor
Cit2b2lkIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzaG91bGRTdGFydEludGVy
bmFsKCkKK3sKKyAgICBhdXRvKiBwYWdlUHRyID0gcGFnZSgpOworICAgIEFTU0VSVChwYWdlUHRy
KTsKKyAgICBiZWZvcmVTdGFydCgpOworICAgIGlmICghcGFnZVB0ci0+aXNJbldpbmRvdygpKSB7
CisgICAgICAgIHNldFN0YXRlKFN0YXRlOjpXYWl0aW5nKTsKKyAgICAgICAgcGFnZVB0ci0+YWRk
T2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN0YXJ0KCk7Cit9
CisKK3ZvaWQgTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OndlYlZpZXdEaWRNb3Zl
VG9XaW5kb3coKQoreworICAgIGF1dG8qIHBhZ2VQdHIgPSBwYWdlKCk7CisgICAgaWYgKHN0YXRl
KCkgIT0gU3RhdGU6OldhaXRpbmcgfHwgIXBhZ2VQdHIgfHwgIXBhZ2VQdHItPmlzSW5XaW5kb3co
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0YXJ0KCk7CisgICAgcGFnZVB0ci0+cmVtb3ZlT2Jz
ZXJ2ZXIoKnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9w
VXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGQ0YmI3MmZlODU2YzkxODNkZWVmMTExNWFiMTM1ZjgzZjliZWI3OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisKKyNpbmNsdWRlICJTT0F1dGhvcml6
YXRpb25TZXNzaW9uLmgiCisKK09CSkNfQ0xBU1MgV0tTT1NlY3JldERlbGVnYXRlOworT0JKQ19D
TEFTUyBXS1dlYlZpZXc7CisKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgTmF2aWdhdGlvbkFjdGlv
bjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEZTTTogSWRsZSA9PiBBY3RpdmUgPT4g
Q29tcGxldGVkCitjbGFzcyBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24gZmluYWwgOiBwdWJs
aWMgU09BdXRob3JpemF0aW9uU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgTmV3UGFnZUNh
bGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViUGFnZVByb3h5PiYmKT47
CisgICAgdXNpbmcgVUlDbGllbnRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoUmVmPEFQSTo6TmF2
aWdhdGlvbkFjdGlvbj4mJiwgTmV3UGFnZUNhbGxiYWNrJiYpPjsKKworICAgIHN0YXRpYyBSZWY8
U09BdXRob3JpemF0aW9uU2Vzc2lvbj4gY3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3Jp
emF0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYg
bmF2aWdhdGlvbkFjdGlvbiwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3UGFnZUNhbGxiYWNrLCBVSUNs
aWVudENhbGxiYWNrJiYgdWlDbGllbnRDYWxsYmFjayk7CisgICAgflBvcFVwU09BdXRob3JpemF0
aW9uU2Vzc2lvbigpOworCisgICAgdm9pZCBjbG9zZShXS1dlYlZpZXcgKik7CisKK3ByaXZhdGU6
CisgICAgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBXZWJQ
YWdlUHJveHkmLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBOZXdQYWdlQ2FsbGJhY2sm
JiwgVUlDbGllbnRDYWxsYmFjayYmKTsKKworICAgIHZvaWQgc2hvdWxkU3RhcnRJbnRlcm5hbCgp
IGZpbmFsOworICAgIHZvaWQgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpIGZpbmFsOworICAg
IHZvaWQgYWJvcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgY29tcGxldGVJbnRlcm5hbChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIE5TRGF0YSAqKSBmaW5hbDsKKworICAgIHZvaWQg
aW5pdFNlY3JldFdlYlZpZXcoKTsKKworICAgIE5ld1BhZ2VDYWxsYmFjayBtX25ld1BhZ2VDYWxs
YmFjazsKKyAgICBVSUNsaWVudENhbGxiYWNrIG1fdWlDbGllbnRDYWxsYmFjazsKKworICAgIFJl
dGFpblB0cjxXS1NPU2VjcmV0RGVsZWdhdGU+IG1fc2VjcmV0RGVsZWdhdGU7CisgICAgUmV0YWlu
UHRyPFdLV2ViVmlldz4gbV9zZWNyZXRXZWJWaWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlv
blNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYzZWUzOTlmMWNjODAzZGI3OTFiYTVmOTZiMjY3YmJj
YWEzNzIwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTAsMCAr
MSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBvcFVw
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0
ICJXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLVUlEZWxlZ2F0ZS5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKKyNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4K
KyNpbXBvcnQgPFdlYktpdC9BUElOYXZpZ2F0aW9uQWN0aW9uLmg+CisjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KKworQGludGVyZmFjZSBXS1NPU2VjcmV0RGVsZWdhdGUgOiBOU09iamVjdCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlEZWxlZ2F0ZT4geworQHByaXZhdGUKKyAgICBXZWFrUHRy
PFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uPiBfc2Vzc2lvbjsKKyAgICBCT09M
IF9pc0ZpcnN0TmF2aWdhdGlvbjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Vzc2lv
bjooV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24gKilzZXNzaW9uOworCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1NPU2VjcmV0RGVsZWdhdGUKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoU2Vzc2lvbjooV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24gKilz
ZXNzaW9uCit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAgICAgICBfc2Vz
c2lvbiA9IG1ha2VXZWFrUHRyKHNlc3Npb24pOworICAgICAgICBfaXNGaXJzdE5hdmlnYXRpb24g
PSBZRVM7CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCisvLyBXS1VJRGVsZWdhdGUKKy0g
KHZvaWQpd2ViVmlld0RpZENsb3NlOihXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCFf
c2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworICAgIF9zZXNzaW9uLT5jbG9zZSh3ZWJWaWV3KTsK
K30KKworLy8gV0tOYXZpZ2F0aW9uRGVsZWdhdGUKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25B
Y3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICAvLyBGSVhNRTxyZGFy
Oi8vcHJvYmxlbS80ODc4NzgzOT46IFdlIHNob3VsZCByZXN0cmljdCB0aGUgbG9hZCB0byBvbmx5
IHN1YnN0aXR1dGUgZGF0YS4KKyAgICAvLyBVc2UgdGhlIGZvbGxvd2luZyBoZXVyaXN0aWMgYXMg
YSB3b3JrYXJvdW5kIHJpZ2h0IG5vdy4KKyAgICAvLyBJZ25vcmUgdGhlIGZpcnN0IGxvYWQgaW4g
dGhlIHNlY3JldCB3aW5kb3csIHdoaWNoIG5hdmlnYXRlcyB0byB0aGUgYXV0aGVudGljYXRpb24g
VVJMLgorICAgIGlmIChfaXNGaXJzdE5hdmlnYXRpb24pIHsKKyAgICAgICAgX2lzRmlyc3ROYXZp
Z2F0aW9uID0gTk87CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Q
b2xpY3lDYW5jZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlY2lzaW9uSGFuZGxl
cihfV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3dXaXRob3V0VHJ5aW5nQXBwTGluayk7Cit9
CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZpZ2F0
aW9uOihXS05hdmlnYXRpb24gKiluYXZpZ2F0aW9uCit7CisgICAgaWYgKCFfc2Vzc2lvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIF9zZXNzaW9uLT5jbG9zZSh3ZWJWaWV3KTsKK30KKworQGVuZAor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IFBvcFVw
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3Jp
emF0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYg
bmF2aWdhdGlvbkFjdGlvbiwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3UGFnZUNhbGxiYWNrLCBVSUNs
aWVudENhbGxiYWNrJiYgdWlDbGllbnRDYWxsYmFjaykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24oc29BdXRob3JpemF0aW9uLCBwYWdlLCBX
VEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjayksIFdURk1v
dmUodWlDbGllbnRDYWxsYmFjaykpKTsKK30KKworUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24oU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6
YXRpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBu
YXZpZ2F0aW9uQWN0aW9uLCBOZXdQYWdlQ2FsbGJhY2smJiBuZXdQYWdlQ2FsbGJhY2ssIFVJQ2xp
ZW50Q2FsbGJhY2smJiB1aUNsaWVudENhbGxiYWNrKQorICAgIDogU09BdXRob3JpemF0aW9uU2Vz
c2lvbihzb0F1dGhvcml6YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIElu
aXRpYXRpbmdBY3Rpb246OlBvcFVwKQorICAgICwgbV9uZXdQYWdlQ2FsbGJhY2soV1RGTW92ZShu
ZXdQYWdlQ2FsbGJhY2spKQorICAgICwgbV91aUNsaWVudENhbGxiYWNrKFdURk1vdmUodWlDbGll
bnRDYWxsYmFjaykpCit7Cit9CisKK1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6flBvcFVw
U09BdXRob3JpemF0aW9uU2Vzc2lvbigpCit7CisgICAgQVNTRVJUKHN0YXRlKCkgIT0gU3RhdGU6
OldhaXRpbmcpOworICAgIGlmIChtX25ld1BhZ2VDYWxsYmFjaykKKyAgICAgICAgbV9uZXdQYWdl
Q2FsbGJhY2sobnVsbHB0cik7Cit9CisKK3ZvaWQgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjpzaG91bGRTdGFydEludGVybmFsKCkKK3sKKyAgICBBU1NFUlQocGFnZSgpICYmIHBhZ2UoKS0+
aXNJbldpbmRvdygpKTsKKyAgICBzdGFydCgpOworfQorCit2b2lkIFBvcFVwU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpCit7CisgICAgbV91aUNsaWVu
dENhbGxiYWNrKHJlbGVhc2VOYXZpZ2F0aW9uQWN0aW9uKCksIFdURk1vdmUobV9uZXdQYWdlQ2Fs
bGJhY2spKTsKK30KKwordm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50
ZXJuYWwoKQoreworICAgIGlmICghcGFnZSgpKSB7CisgICAgICAgIG1fbmV3UGFnZUNhbGxiYWNr
KG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5pdFNlY3JldFdlYlZp
ZXcoKTsKKyAgICBtX25ld1BhZ2VDYWxsYmFjayhtX3NlY3JldFdlYlZpZXctPl9wYWdlLmdldCgp
KTsKKyAgICBbbV9zZWNyZXRXZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJ3aW5kb3cuY2xv
c2UoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKK30KKwordm9pZCBQb3BVcFNPQXV0aG9yaXph
dGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
IHJlc3BvbnNlLCBOU0RhdGEgKmRhdGEpCit7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXND
b2RlKCkgIT0gMjAwIHx8ICFwYWdlKCkpIHsKKyAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRl
cm5hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW5pdFNlY3JldFdlYlZpZXco
KTsKKyAgICBtX25ld1BhZ2VDYWxsYmFjayhtX3NlY3JldFdlYlZpZXctPl9wYWdlLmdldCgpKTsK
KyAgICBbbV9zZWNyZXRXZWJWaWV3IGxvYWREYXRhOmRhdGEgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwi
IGNoYXJhY3RlckVuY29kaW5nTmFtZTpAIlVURi04IiBiYXNlVVJMOnJlc3BvbnNlLnVybCgpXTsK
K30KKwordm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNsb3NlKFdLV2ViVmlldyAq
d2ViVmlldykKK3sKKyAgICBpZiAoIW1fc2VjcmV0V2ViVmlldykKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChzdGF0ZSgpICE9IFN0YXRlOjpDb21wbGV0ZWQgfHwgd2ViVmlldyAhPSBtX3NlY3Jl
dFdlYlZpZXcuZ2V0KCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9zZWNyZXRXZWJWaWV3ID0gbnVsbHB0cjsKKyAgICBXVEZM
b2dBbHdheXMoIlNlY3JldFdlYlZpZXcgaXMgY2xlYW5lZC4iKTsKK30KKwordm9pZCBQb3BVcFNP
QXV0aG9yaXphdGlvblNlc3Npb246OmluaXRTZWNyZXRXZWJWaWV3KCkKK3sKKyAgICBBU1NFUlQo
cGFnZSgpKTsKKyAgICBhdXRvIGluaXRpYXRvcldlYlZpZXcgPSBmcm9tV2ViUGFnZVByb3h5KCpw
YWdlKCkpOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2luaXRpYXRvcldlYlZp
ZXcuY29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldFJlbGF0ZWRX
ZWJWaWV3OmluaXRpYXRvcldlYlZpZXddOworICAgIG1fc2VjcmV0V2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKworICAgIG1fc2VjcmV0RGVsZWdhdGUgPSBhZG9wdE5T
KFtbV0tTT1NlY3JldERlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNlc3Npb246dGhpc10pOworICAg
IFttX3NlY3JldFdlYlZpZXcgc2V0VUlEZWxlZ2F0ZTptX3NlY3JldERlbGVnYXRlLmdldCgpXTsK
KyAgICBbbV9zZWNyZXRXZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTptX3NlY3JldERlbGVn
YXRlLmdldCgpXTsKKworICAgIG1fc2VjcmV0V2ViVmlldy0+X3BhZ2UtPnNldFNob3VsZFN1cHBy
ZXNzU09BdXRob3JpemF0aW9uSW5BbGxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICBX
VEZMb2dBbHdheXMoIlNlY3JldFdlYlZpZXcgaXMgY3JlYXRlZC4iKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmODQxOTc4ZjRkMmFjZDU3ODNh
ZWI4Y2JhOGRiMzlmMTYxNWE4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
SEFWRShBUFBfU1NPKQorCisjaW5jbHVkZSAiTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Np
b24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlZGlyZWN0U09BdXRob3JpemF0
aW9uU2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lv
biB7CitwdWJsaWM6CisgICAgdXNpbmcgQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPjsKKworICAgIHN0YXRpYyBSZWY8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4gY3JlYXRl
KFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0
aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgQ2FsbGJhY2smJiBj
b21wbGV0aW9uSGFuZGxlcik7CisKK3ByaXZhdGU6CisgICAgUmVkaXJlY3RTT0F1dGhvcml6YXRp
b25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYm
LCBXZWJQYWdlUHJveHkmLCBDYWxsYmFjayYmKTsKKworICAgIC8vIFNPQXV0aG9yaXphdGlvblNl
c3Npb24KKyAgICB2b2lkIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2
b2lkIGFib3J0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGNvbXBsZXRlSW50ZXJuYWwoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBOU0RhdGEgKikgZmluYWw7CisKKyAgICAvLyBOYXZp
Z2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbgorICAgIHZvaWQgYmVmb3JlU3RhcnQoKSBmaW5h
bDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNPQXV0
aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVlOWMwMjliNjgyZjhhNGNiYzVkYTQwYTZhMzc5NWFiMTJmZmM5YzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJl
Y3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgi
CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1JlZjxTT0F1dGhvcml6YXRpb25TZXNzaW9uPiBSZWRpcmVjdFNPQXV0aG9yaXphdGlv
blNlc3Npb246OmNyZWF0ZShTT0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQ
STo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBh
Z2UsIENhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RG
TW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
KTsKK30KKworUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpSZWRpcmVjdFNPQXV0aG9y
aXphdGlvblNlc3Npb24oU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6YXRpb24sIFJlZjxBUEk6
Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdl
LCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIDogTmF2aWdhdGlvblNPQXV0aG9y
aXphdGlvblNlc3Npb24oc29BdXRob3JpemF0aW9uLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24p
LCBwYWdlLCBJbml0aWF0aW5nQWN0aW9uOjpSZWRpcmVjdCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpCit7Cit9CisKK3ZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxs
QmFja1RvV2ViUGF0aEludGVybmFsKCkKK3sKKyAgICBpbnZva2VDYWxsYmFjayhmYWxzZSk7Cit9
CisKK3ZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKCkK
K3sKKyAgICBpbnZva2VDYWxsYmFjayh0cnVlKTsKK30KKwordm9pZCBSZWRpcmVjdFNPQXV0aG9y
aXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYmIHJlc3BvbnNlLCBOU0RhdGEgKmRhdGEpCit7CisgICAgYXV0byogcGFnZVB0ciA9IHBhZ2Uo
KTsKKyAgICBpZiAoKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMzAyICYmIHJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkgIT0gMjAwKSB8fCAhcGFnZVB0cikgeworICAgICAgICBmYWxsQmFj
a1RvV2ViUGF0aEludGVybmFsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW52b2tl
Q2FsbGJhY2sodHJ1ZSk7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzAy
KSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRy
ID0gbmF2aWdhdGlvbkFjdGlvbigpOworICAgICAgICBBU1NFUlQobmF2aWdhdGlvbkFjdGlvblB0
cik7CisgICAgICAgIC8vIE1vYmlsZVNhZmFyaSBoYXMgYSBXQlNVUkxTcG9vZmluZ01pdGlnYXRv
ciwgd2hpY2ggd2lsbCBub3QgZGlzcGxheSB0aGUgcHJvdmlzaW9uYWwgVVJMIGZvciBuYXZpZ2F0
aW9ucyB3aXRob3V0IHVzZXIgZ2VzdHVyZXMuCisgICAgICAgIC8vIEZvciBzbG93IGxvYWRzIHRo
YXQgYXJlIGluaXRpYXRlZCBmcm9tIHRoZSBNb2JpbGVTYWZhcmkgRmF2b3JpdGVzIHNjcmVlbiwg
dGhlIGFmb3JlbWVudGlvbmVkIGJlaGF2aW9yIHdpbGwgY3JlYXRlIGEgcGVyaW9kCisgICAgICAg
IC8vIGFmdGVyIGF1dGhlbnRpY2F0aW9uIGNvbXBsZXRpb24gd2hlcmUgdGhlIG5ldyByZXF1ZXN0
IHRvIHRoZSBhcHBsaWNhdGlvbiBzaXRlIGxvYWRzIHdpdGggYSBibGFuayBVUkwgYW5kIGJsYW5r
IHBhZ2UuIFRvCisgICAgICAgIC8vIHdvcmthcm91bmQgdGhpcyBpc3N1ZSwgd2UgbG9hZCBhbiBo
dG1sIHBhZ2UgdGhhdCBkb2VzIGEgY2xpZW50IHNpZGUgcmVkaXJlY3Rpb24gdG8gdGhlIGFwcGxp
Y2F0aW9uIHNpdGUgb24gYmVoYWxmIG9mIHRoZQorICAgICAgICAvLyByZXF1ZXN0IFVSTCwgaW5z
dGVhZCBvZiBkaXJlY3RseSBsb2FkaW5nIGEgbmV3IHJlcXVlc3QuIFRoZSBodG1sIHBhZ2Ugc2hv
dWxkIGJlIHN1cGVyIGZhc3QgdG8gbG9hZCBhbmQgdGhlcmVmb3JlIHdpbGwgbm90CisgICAgICAg
IC8vIHNob3cgYW4gZW1wdHkgVVJMIG9yIGEgYmxhbmsgcGFnZS4gVGhlc2UgY2hhbmdlcyBlbnN1
cmUgYSByZWxldmFudCBVUkwgYmFyIGFuZCB1c2VmdWwgcGFnZSBjb250ZW50IGR1cmluZyB0aGUg
bG9hZC4KKyAgICAgICAgaWYgKCFuYXZpZ2F0aW9uQWN0aW9uUHRyLT5pc1Byb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpKSB7CisgICAgICAgICAgICBwYWdlUHRyLT5zZXRTaG91bGRTdXBwcmVzc1NPQXV0
aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigpOworICAgICAgICAgICAg
YXV0byBodG1sID0gbWFrZVN0cmluZygiPHNjcmlwdD5sb2NhdGlvbiA9ICciLCByZXNwb25zZS5o
dHRwSGVhZGVyRmllbGRzKCkuZ2V0KFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbiks
ICInPC9zY3JpcHQ+IikudXRmOCgpOworICAgICAgICAgICAgYXV0byBkYXRhID0gSVBDOjpEYXRh
UmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGh0bWwuZGF0YSgpKSwg
aHRtbC5sZW5ndGgoKSk7CisgICAgICAgICAgICBwYWdlUHRyLT5sb2FkRGF0YShkYXRhLCAidGV4
dC9odG1sIl9zLCAiVVRGLTgiX3MsIG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3QoKS51cmwo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBwYWdl
UHRyLT5sb2FkUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkcygpLmdldChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pKSk7Cisg
ICAgfQorICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDIwMCkgeworICAgICAg
ICBwYWdlUHRyLT5zZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbigpOworICAgICAgICBwYWdlUHRyLT5sb2FkRGF0YShJUEM6OkRhdGFS
ZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxl
bmd0aCksICJ0ZXh0L2h0bWwiX3MsICJVVEYtOCJfcywgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkp
OworICAgIH0KK30KKwordm9pZCBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9y
ZVN0YXJ0KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0
aG9yaXphdGlvbkNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
N2Y2N2QzYjkxYzAzNzVmMWNkNTY3NzEzY2Q0NTMyMmE1YThjODg0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9y
aXphdGlvbkNvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKK09CSkNfQ0xBU1MgU09BdXRob3JpemF0aW9uOworT0JKQ19DTEFTUyBXS1NPQXV0aG9yaXph
dGlvbkRlbGVnYXRlOworCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIE5hdmlnYXRpb25BY3Rpb247
Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3MgU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKTsKK3B1Ymxp
YzoKKyAgICBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcigpOworCisgICAgLy8gRm9yIE5hdmln
YXRpb24gaW50ZXJjZXB0aW9uLgorICAgIHZvaWQgdHJ5QXV0aG9yaXplKFJlZjxBUEk6Ok5hdmln
YXRpb25BY3Rpb24+JiYsIFdlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYpOwor
CisgICAgLy8gRm9yIFBvcFVwIGludGVyY2VwdGlvbi4KKyAgICB1c2luZyBOZXdQYWdlQ2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJQYWdlUHJveHk+JiYpPjsKKyAg
ICB1c2luZyBVSUNsaWVudENhbGxiYWNrID0gRnVuY3Rpb248dm9pZChSZWY8QVBJOjpOYXZpZ2F0
aW9uQWN0aW9uPiYmLCBOZXdQYWdlQ2FsbGJhY2smJik+OworICAgIHZvaWQgdHJ5QXV0aG9yaXpl
KFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIFdlYlBhZ2VQcm94eSYsIE5ld1BhZ2VDYWxs
YmFjayYmLCBVSUNsaWVudENhbGxiYWNrJiYpOworCitwcml2YXRlOgorICAgIGJvb2wgY2FuQXV0
aG9yaXplKGNvbnN0IFVSTCYpIGNvbnN0OworCisgICAgUmV0YWluUHRyPFNPQXV0aG9yaXphdGlv
bj4gbV9zb0F1dGhvcml6YXRpb247CisgICAgUmV0YWluUHRyPFdLU09BdXRob3JpemF0aW9uRGVs
ZWdhdGU+IG1fc29BdXRob3JpemF0aW9uRGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uQ29v
cmRpbmF0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGI0NGRlMjU0ZjQwZmQ0ZDk5ZjgyNzVlMzI0MWZlN2Ri
YzFmMzExOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbQpAQCAtMCwwICsx
LDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvci5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJQ
b3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKyNpbXBvcnQgIlJlZGlyZWN0U09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5oIgorI2ltcG9ydCAiU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9u
LmgiCisjaW1wb3J0ICJXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8cGFsL2NvY29hL0FwcFNTT1NvZnRMaW5r
Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9BdXRoS2l0U1BJLmg+CisjaW1wb3J0IDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjpTT0F1dGhvcml6YXRp
b25Db29yZGluYXRvcigpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIEluIHRoZSBjYXNl
IG9mIGJhc2Ugc3lzdGVtLCB3aGljaCBkb2Vzbid0IGhhdmUgQXBwU1NPLmZyYW1ld29yay4KKyAg
ICBpZiAoIVBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCisgICAgbV9zb0F1dGhvcml6YXRpb24gPSBhZG9wdE5TKFtQQUw6OmFsbG9jU09BdXRo
b3JpemF0aW9uSW5zdGFuY2UoKSBpbml0XSk7CisgICAgbV9zb0F1dGhvcml6YXRpb25EZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgbV9zb0F1dGhvcml6YXRpb24uZ2V0KCkuZGVsZWdhdGUgPSBtX3NvQXV0aG9yaXphdGlvbkRl
bGVnYXRlLmdldCgpOworICAgIFtOU1VSTFNlc3Npb24gX2Rpc2FibGVBcHBTU09dOworfQorCiti
b29sIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjpjYW5BdXRob3JpemUoY29uc3QgVVJMJiB1
cmwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc29BdXRob3JpemF0aW9uICYmIFtQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCkgY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnVybCBy
ZXNwb25zZUNvZGU6MF07Cit9CisKK3ZvaWQgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I6OnRy
eUF1dGhvcml6ZShSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24s
IFdlYlBhZ2VQcm94eSYgcGFnZSwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBpZiAoIWNhbkF1dGhvcml6ZShuYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0
KCkudXJsKCkpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbiBz
aG91bGQgb25seSBiZSBhbGxvd2VkIGZvciBBcHBsZSBmaXJzdCBwYXJ0aWVzLgorICAgIGJvb2wg
c3ViZnJhbWVOYXZpZ2F0aW9uID0gbmF2aWdhdGlvbkFjdGlvbi0+dGFyZ2V0RnJhbWUoKSAmJiAh
bmF2aWdhdGlvbkFjdGlvbi0+dGFyZ2V0RnJhbWUoKS0+aXNNYWluRnJhbWUoKTsKKyAgICBpZiAo
c3ViZnJhbWVOYXZpZ2F0aW9uICYmICghcGFnZS5tYWluRnJhbWUoKSB8fCAhW0FLQXV0aG9yaXph
dGlvbkNvbnRyb2xsZXIgaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjpwYWdlLm1haW5GcmFtZSgp
LT51cmwoKV0pKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc2Vzc2lvbiA9IHN1YmZyYW1lTmF2aWdhdGlvbiA/
IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y3JlYXRlKG1fc29BdXRob3JpemF0aW9u
LmdldCgpLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSkgOiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShtX3Nv
QXV0aG9yaXphdGlvbi5nZXQoKSwgV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwgcGFnZSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIFttX3NvQXV0aG9yaXphdGlvbkRlbGVnYXRl
IHNldFNlc3Npb246V1RGTW92ZShzZXNzaW9uKV07Cit9CisKK3ZvaWQgU09BdXRob3JpemF0aW9u
Q29vcmRpbmF0b3I6OnRyeUF1dGhvcml6ZShSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5h
dmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgTmV3UGFnZUNhbGxiYWNrJiYgbmV3
UGFnZUNhbGxiYWNrLCBVSUNsaWVudENhbGxiYWNrJiYgdWlDbGllbnRDYWxsYmFjaykKK3sKKyAg
ICBib29sIHN1YmZyYW1lTmF2aWdhdGlvbiA9IG5hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZyYW1l
KCkgJiYgIW5hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZyYW1lKCktPmlzTWFpbkZyYW1lKCk7Cisg
ICAgaWYgKHN1YmZyYW1lTmF2aWdhdGlvbiB8fCAhbmF2aWdhdGlvbkFjdGlvbi0+aXNQcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSB8fCAhY2FuQXV0aG9yaXplKG5hdmlnYXRpb25BY3Rpb24tPnJlcXVl
c3QoKS51cmwoKSkpIHsKKyAgICAgICAgdWlDbGllbnRDYWxsYmFjayhXVEZNb3ZlKG5hdmlnYXRp
b25BY3Rpb24pLCBXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjaykpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBzZXNzaW9uID0gUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpj
cmVhdGUobV9zb0F1dGhvcml6YXRpb24uZ2V0KCksIHBhZ2UsIFdURk1vdmUobmF2aWdhdGlvbkFj
dGlvbiksIFdURk1vdmUobmV3UGFnZUNhbGxiYWNrKSwgV1RGTW92ZSh1aUNsaWVudENhbGxiYWNr
KSk7CisgICAgW21fc29BdXRob3JpemF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lvbjpXVEZNb3ZlKHNl
c3Npb24pXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9y
aXphdGlvbk5TVVJMRXh0cmFzLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWI2
MDlkOTVkZGQxNzYzYzIxOTE5ZDA5MDI3NWQzNWFhZTYxNzIxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXph
dGlvbk5TVVJMRXh0cmFzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgSEFWRShBUFBfU1NPKQorCisvLyBGSVhNRSByZGFyOi8vcHJvYmxlbS81MDAy
ODI0NiBSZW1vdmUgdGhlIGZvbGxvd2luZyBvbmNlIHRoZSByYWRhciBpcyBmaXhlZC4KK0BpbnRl
cmZhY2UgTlNVUkwgKFNPQXV0aG9yaXphdGlvbkV4dHJhcykKKworKyAoQk9PTClfd2ViX2NhblBl
cmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDooTlNVUkwgKil1cmw7CisKK0BlbmQKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjVhMGVkYjYxY2I3ZjA2YWRlNTdhMmE3NDZlYWU2MDFiMDA0YWJmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9TT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5tbQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTT0F1dGhvcml6YXRpb25OU1VSTEV4
dHJhcy5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0IDxwYWwvY29jb2EvQXBwU1NP
U29mdExpbmsuaD4KKworQGltcGxlbWVudGF0aW9uIE5TVVJMIChTT0F1dGhvcml6YXRpb25FeHRy
YXMpCisKKysgKEJPT0wpX3dlYl9jYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6KE5TVVJM
ICopdXJsCit7CisgICAgcmV0dXJuIFtQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCkgY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnVybCByZXNwb25zZUNvZGU6MF07Cit9CisKK0Bl
bmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xZDFkYjIzZDlmYmQ1MmYxNDZmMDQ4Y2Y5ODc4OTJhZjlhODJlNDhmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW5jbHVkZSA8QXBwU1NP
L1NPQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtP
YmpDUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworT0JKQ19DTEFTUyBTT0F1dGhv
cml6YXRpb247CisKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworLy8gQSBzZXNzaW9uIHdp
bGwgb25seSBiZSBleGVjdXRlZCBvbmNlLgorY2xhc3MgU09BdXRob3JpemF0aW9uU2Vzc2lvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPFNPQXV0aG9yaXphdGlvblNlc3Npb24+LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4geworcHVibGljOgorICAgIGVudW0gY2xh
c3MgSW5pdGlhdGluZ0FjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBSZWRpcmVjdCwKKyAgICAg
ICAgUG9wVXAsCisgICAgICAgIFN1YkZyYW1lCisgICAgfTsKKworICAgIHVzaW5nIFVJQ2FsbGJh
Y2sgPSB2b2lkICheKShCT09MLCBOU0Vycm9yICopOworCisgICAgdmlydHVhbCB+U09BdXRob3Jp
emF0aW9uU2Vzc2lvbigpOworCisgICAgLy8gUHJvYmFibHkgbm90IHN0YXJ0IGltbWVkaWF0ZWx5
LgorICAgIHZvaWQgc2hvdWxkU3RhcnQoKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGJ5IFNPQXV0aG9yaXphdGlvbkRlbGVnYXRlIG1ldGhvZHMuCisgICAg
dm9pZCBmYWxsQmFja1RvV2ViUGF0aCgpOworICAgIHZvaWQgYWJvcnQoKTsKKyAgICAvLyBPbmx5
IHJlc3BvbnNlcyB0aGF0IG1lZXQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzIHdp
bGwgYmUgcHJvY2Vzc2VkOgorICAgIC8vIDEpIGl0IGhhcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhl
IHJlcXVlc3Q7CisgICAgLy8gMikgaXQgaGFzIGEgc3RhdHVzIGNvZGUgb2YgMzAyIG9yIDIwMC4K
KyAgICAvLyBPdGhlcndpc2UsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIHdlYiBwYXRoLgorICAgIC8v
IE9ubHkgdGhlIGZvbGxvd2luZyBIVFRQIGhlYWRlcnMgd2lsbCBiZSBwcm9jZXNzZWQ6CisgICAg
Ly8geyBTZXQtQ29va2llLCBMb2NhdGlvbiB9LgorICAgIHZvaWQgY29tcGxldGUoTlNIVFRQVVJM
UmVzcG9uc2UgKiwgTlNEYXRhICopOworICAgIHZvaWQgcHJlc2VudFZpZXdDb250cm9sbGVyKFNP
QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyLCBVSUNhbGxiYWNrKTsKKworcHJvdGVjdGVkOgor
ICAgIC8vIEZTTSBkZXBlbmRzIG9uIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICBlbnVtIGNsYXNzIFN0
YXRlIDogdWludDhfdCB7CisgICAgICAgIElkbGUsCisgICAgICAgIEFjdGl2ZSwKKyAgICAgICAg
V2FpdGluZywKKyAgICAgICAgQ29tcGxldGVkCisgICAgfTsKKworICAgIFNPQXV0aG9yaXphdGlv
blNlc3Npb24oU09BdXRob3JpemF0aW9uICosIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYs
IFdlYlBhZ2VQcm94eSYsIEluaXRpYXRpbmdBY3Rpb24pOworCisgICAgdm9pZCBzdGFydCgpOwor
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQor
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0
U3RhdGUoU3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9CisgICAgY29uc3QgQVBJOjpO
YXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uQWN0aW9uKCkgeyByZXR1cm4gbV9uYXZpZ2F0aW9u
QWN0aW9uLmdldCgpOyB9CisgICAgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4gcmVsZWFzZU5h
dmlnYXRpb25BY3Rpb24oKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdWxkU3Rh
cnRJbnRlcm5hbCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmFsbEJhY2tUb1dlYlBhdGhJbnRl
cm5hbCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnRJbnRlcm5hbCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcGxldGVJbnRlcm5hbChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYs
IE5TRGF0YSAqKSA9IDA7CisKKyAgICB2b2lkIGJlY29tZUNvbXBsZXRlZCgpOworICAgIHZvaWQg
ZGlzbWlzc1ZpZXdDb250cm9sbGVyKCk7CisKKyAgICBTdGF0ZSBtX3N0YXRlICB7IFN0YXRlOjpJ
ZGxlIH07CisgICAgV2Vha09iakNQdHI8U09BdXRob3JpemF0aW9uICo+IG1fc29BdXRob3JpemF0
aW9uOworICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+IG1fbmF2aWdhdGlvbkFjdGlv
bjsKKyAgICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOworICAgIEluaXRpYXRpbmdBY3Rp
b24gbV9hY3Rpb247CisKKyAgICBSZXRhaW5QdHI8U09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xs
ZXI+IG1fdmlld0NvbnRyb2xsZXI7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFJldGFpblB0cjxO
U1dpbmRvdz4gbV9zaGVldFdpbmRvdzsKKyAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fc2hlZXRX
aW5kb3dXaWxsQ2xvc2VPYnNlcnZlcjsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44M2JiNWM2Y2I2YTA5ZDcxMTQ5ZTc5MjQ0ODc4NTQ3NmMyODM3MzkyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTAsMCArMSwyMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uU2Vz
c2lvbi5oIgorCisjaWYgSEFWRShBUFBfU1NPKQorCisjaW1wb3J0ICJBUElIVFRQQ29va2llU3Rv
cmUuaCIKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb25B
Y3Rpb24uaCIKKyNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCisjaW1wb3J0ICJXS1VJRGVsZWdhdGUu
aCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViU2l0ZURhdGFTdG9yZS5o
IgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaD4K
KyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK25hbWVzcGFj
ZSB7CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiB0b0Nvb2tpZVZlY3RvcihOU0Fy
cmF5PE5TSFRUUENvb2tpZSAqPiAqY29va2llcykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY29va2llcy5j
b3VudCk7CisgICAgZm9yIChpZCBjb29raWUgaW4gY29va2llcykKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb29raWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBi
b29sIGlzU2FtZU9yaWdpbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGF1dG8g
cmVxdWVzdE9yaWdpbiA9IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVxdWVzdC51
cmwoKSk7CisgICAgcmV0dXJuIHJlcXVlc3RPcmlnaW4tPmlzU2FtZU9yaWdpbkFzKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzcG9uc2UudXJsKCkpLmdldCgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UKKworU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U09BdXRob3JpemF0aW9uU2Vz
c2lvbihTT0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlv
bkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIEluaXRpYXRp
bmdBY3Rpb24gYWN0aW9uKQorICAgIDogbV9zb0F1dGhvcml6YXRpb24oc29BdXRob3JpemF0aW9u
KQorICAgICwgbV9uYXZpZ2F0aW9uQWN0aW9uKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbikpCisg
ICAgLCBtX3BhZ2UobWFrZVdlYWtQdHIocGFnZSkpCisgICAgLCBtX2FjdGlvbihhY3Rpb24pCit7
Cit9CisKK1NPQXV0aG9yaXphdGlvblNlc3Npb246On5TT0F1dGhvcml6YXRpb25TZXNzaW9uKCkK
K3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6QWN0aXZlICYmICEhbV9zb0F1dGhvcml6YXRp
b24pCisgICAgICAgIFttX3NvQXV0aG9yaXphdGlvbiBjYW5jZWxBdXRob3JpemF0aW9uXTsKKyAg
ICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SWRsZSAmJiBtX3N0YXRlICE9IFN0YXRlOjpDb21wbGV0
ZWQpCisgICAgICAgIGJlY29tZUNvbXBsZXRlZCgpOworfQorCitSZWY8QVBJOjpOYXZpZ2F0aW9u
QWN0aW9uPiBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpyZWxlYXNlTmF2aWdhdGlvbkFjdGlvbigp
Cit7CisgICAgcmV0dXJuIG1fbmF2aWdhdGlvbkFjdGlvbi5yZWxlYXNlTm9uTnVsbCgpOworfQor
Cit2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlY29tZUNvbXBsZXRlZCgpCit7CisgICAg
QVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkFjdGl2ZSB8fCBtX3N0YXRlID09IFN0YXRlOjpXYWl0
aW5nKTsKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXBsZXRlZDsKKyAgICBpZiAobV92aWV3Q29u
dHJvbGxlcikKKyAgICAgICAgZGlzbWlzc1ZpZXdDb250cm9sbGVyKCk7Cit9CisKK3ZvaWQgU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnQoKQoreworICAgIEFTU0VSVChtX3N0YXRl
ID09IFN0YXRlOjpJZGxlKTsKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IHNob3VsZFN0YXJ0SW50ZXJuYWwoKTsKK30KKwordm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjpzdGFydCgpCit7CisgICAgQVNTRVJUKChtX3N0YXRlID09IFN0YXRlOjpJZGxlIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OldhaXRpbmcpICYmIG1fcGFnZSAmJiBtX25hdmlnYXRpb25BY3Rpb24pOwor
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6QWN0aXZlOworICAgIGlmICghbV9zb0F1dGhvcml6YXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzQ4OTA5MzM2
PjogUmVwbGFjZSB0aGUgYmVsb3cgd2l0aCBBcHBTU08gY29uc3RhbnRzLgorICAgIGF1dG8gaW5p
dGlhdG9yT3JpZ2luID0gZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uQWN0aW9u
LT5zb3VyY2VGcmFtZSgpKQorICAgICAgICBpbml0aWF0b3JPcmlnaW4gPSBtX25hdmlnYXRpb25B
Y3Rpb24tPnNvdXJjZUZyYW1lKCktPnNlY3VyaXR5T3JpZ2luKCkuc2VjdXJpdHlPcmlnaW4oKS50
b1N0cmluZygpOworICAgIGlmIChtX2FjdGlvbiA9PSBJbml0aWF0aW5nQWN0aW9uOjpTdWJGcmFt
ZSAmJiBtX3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBpbml0aWF0b3JPcmlnaW4gPSBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fcGFnZS0+bWFpbkZyYW1lKCktPnVybCgpKS0+
dG9TdHJpbmcoKTsKKyAgICBOU0RpY3Rpb25hcnkgKmF1dGhvcml6YXRpb25PcHRpb25zID0gQHsK
KyAgICAgICAgU09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRlZDogQChtX25h
dmlnYXRpb25BY3Rpb24tPmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpLAorICAgICAgICBAImlu
aXRpYXRvck9yaWdpbiI6IChOU1N0cmluZyAqKWluaXRpYXRvck9yaWdpbiwKKyAgICAgICAgQCJp
bml0aWF0aW5nQWN0aW9uIjogQChzdGF0aWNfY2FzdDxOU0ludGVnZXI+KG1fYWN0aW9uKSkKKyAg
ICB9OworICAgIFttX3NvQXV0aG9yaXphdGlvbiBzZXRBdXRob3JpemF0aW9uT3B0aW9uczphdXRo
b3JpemF0aW9uT3B0aW9uc107CisKKyAgICBhdXRvICpuc1JlcXVlc3QgPSBtX25hdmlnYXRpb25B
Y3Rpb24tPnJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xp
Y3k6OlVwZGF0ZUhUVFBCb2R5KTsKKyAgICBbbV9zb0F1dGhvcml6YXRpb24gYmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTDpuc1JlcXVlc3QuVVJMIGh0dHBIZWFkZXJzOm5zUmVxdWVzdC5hbGxIVFRQ
SGVhZGVyRmllbGRzIGh0dHBCb2R5Om5zUmVxdWVzdC5IVFRQQm9keV07Cit9CisKK3ZvaWQgU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGgoKQoreworICAgIGlmIChtX3N0
YXRlICE9IFN0YXRlOjpBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICBiZWNvbWVDb21wbGV0
ZWQoKTsKKyAgICBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7Cit9CisKK3ZvaWQgU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6YWJvcnQoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpJ
ZGxlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworICAg
IGJlY29tZUNvbXBsZXRlZCgpOworICAgIGFib3J0SW50ZXJuYWwoKTsKK30KKwordm9pZCBTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZShOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3Bv
bnNlLCBOU0RhdGEgKmRhdGEpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkFjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX25hdmlnYXRpb25BY3Rpb24pOworICAgIGJl
Y29tZUNvbXBsZXRlZCgpOworCisgICAgYXV0byByZXNwb25zZSA9IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UoaHR0cFJlc3BvbnNlKTsKKyAgICBpZiAoIWlzU2FtZU9yaWdpbihtX25hdmlnYXRp
b25BY3Rpb24tPnJlcXVlc3QoKSwgcmVzcG9uc2UpKSB7CisgICAgICAgIGZhbGxCYWNrVG9XZWJQ
YXRoSW50ZXJuYWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNldCBjb29r
aWVzLgorICAgIGF1dG8gY29va2llcyA9IHRvQ29va2llVmVjdG9yKFtOU0hUVFBDb29raWUgY29v
a2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpodHRwUmVzcG9uc2UuYWxsSGVhZGVyRmllbGRz
IGZvclVSTDpyZXNwb25zZS51cmwoKV0pOworICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBjb21wbGV0ZUludGVybmFsKFdURk1vdmUocmVzcG9uc2UpLCBkYXRhKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9wYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuY29va2llU3RvcmUoKS5zZXRDb29raWVzKGNv
b2tpZXMsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVzcG9uc2UgPSBXVEZNb3Zl
KHJlc3BvbnNlKSwgZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoRGF0YTpk
YXRhXSldICgpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+Y29tcGxldGVJbnRlcm5hbChXVEZNb3ZlKHJlc3Bv
bnNlKSwgZGF0YS5nZXQoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6cHJlc2VudFZpZXdDb250cm9sbGVyKFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVy
IHZpZXdDb250cm9sbGVyLCBVSUNhbGxiYWNrIHVpQ2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1f
c3RhdGUgPT0gU3RhdGU6OkFjdGl2ZSk7CisgICAgLy8gT25seSBleHBlY3QgYXQgbW9zdCBvbmUg
VUkgc2Vzc2lvbiBmb3IgdGhlIHdob2xlIGF1dGhvcml6YXRpb24gc2Vzc2lvbi4KKyAgICBpZiAo
IW1fcGFnZSB8fCBtX3ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIHVpQ2FsbGJhY2soTk8sIGFk
b3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpTT0Vycm9yRG9tYWluIGNvZGU6
a1NPRXJyb3JBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uRmFpbGVkIHVzZXJJbmZvOm5pbF0pLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdmlld0NvbnRyb2xsZXIgPSB2
aWV3Q29udHJvbGxlcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQVNTRVJUKCFtX3NoZWV0V2lu
ZG93KTsKKyAgICBtX3NoZWV0V2luZG93ID0gW05TV2luZG93IHdpbmRvd1dpdGhDb250ZW50Vmll
d0NvbnRyb2xsZXI6bV92aWV3Q29udHJvbGxlci5nZXQoKV07CisKKyAgICBBU1NFUlQoIW1fc2hl
ZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlcik7CisgICAgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9i
c2VydmVyID0gW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
ckZvck5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gb2JqZWN0Om1fc2hlZXRXaW5k
b3cuZ2V0KCkgcXVldWU6bmlsIHVzaW5nQmxvY2s6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSAoTlNOb3RpZmljYXRpb24gKikgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+ZGlzbWlzc1ZpZXdDb250cm9sbGVyKCk7
CisgICAgfV07CisKKyAgICBOU1dpbmRvdyAqcHJlc2VudGluZ1dpbmRvdyA9IG1fcGFnZS0+cGxh
dGZvcm1XaW5kb3coKTsKKyAgICBpZiAoIXByZXNlbnRpbmdXaW5kb3cpIHsKKyAgICAgICAgdWlD
YWxsYmFjayhOTywgYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOlNPRXJy
b3JEb21haW4gY29kZTprU09FcnJvckF1dGhvcml6YXRpb25QcmVzZW50YXRpb25GYWlsZWQgdXNl
ckluZm86bmlsXSkuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFtwcmVzZW50
aW5nV2luZG93IGJlZ2luU2hlZXQ6bV9zaGVldFdpbmRvdy5nZXQoKSBjb21wbGV0aW9uSGFuZGxl
cjpuaWxdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFVJVmlld0NvbnRyb2xsZXIgKnByZXNl
bnRpbmdWaWV3Q29udHJvbGxlciA9IG1fcGFnZS0+dWlDbGllbnQoKS5wcmVzZW50aW5nVmlld0Nv
bnRyb2xsZXIoKTsKKyAgICBpZiAoIXByZXNlbnRpbmdWaWV3Q29udHJvbGxlcikgeworICAgICAg
ICB1aUNhbGxiYWNrKE5PLCBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46
U09FcnJvckRvbWFpbiBjb2RlOmtTT0Vycm9yQXV0aG9yaXphdGlvblByZXNlbnRhdGlvbkZhaWxl
ZCB1c2VySW5mbzpuaWxdKS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBb
cHJlc2VudGluZ1ZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlcjptX3ZpZXdDb250
cm9sbGVyLmdldCgpIGFuaW1hdGVkOllFUyBjb21wbGV0aW9uOm5pbF07CisjZW5kaWYKKworICAg
IHVpQ2FsbGJhY2soWUVTLCBuaWwpOworfQorCit2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246
OmRpc21pc3NWaWV3Q29udHJvbGxlcigpCit7CisgICAgQVNTRVJUKG1fdmlld0NvbnRyb2xsZXIp
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBBU1NFUlQobV9zaGVldFdpbmRvdyAmJiBtX3NoZWV0
V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIpOworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX3NoZWV0V2luZG93V2lsbENsb3NlT2JzZXJ2
ZXIuZ2V0KCldOworICAgIG1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlciA9IG51bGxwdHI7
CisKKyAgICBbW21fc2hlZXRXaW5kb3cgc2hlZXRQYXJlbnRdIGVuZFNoZWV0Om1fc2hlZXRXaW5k
b3cuZ2V0KCldOworICAgIG1fc2hlZXRXaW5kb3cgPSBudWxscHRyOworI2VsaWYgUExBVEZPUk0o
SU9TKQorICAgIFtbbV92aWV3Q29udHJvbGxlciBwcmVzZW50aW5nVmlld0NvbnRyb2xsZXJdIGRp
c21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOm5pbF07CisjZW5kaWYK
KworICAgIG1fdmlld0NvbnRyb2xsZXIgPSBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgxZjUzYWIzY2Y2ZTczNzgyMGViMTRiOGE2
ZmVmYWJhMmZmOTAyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaApA
QCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQ
UF9TU08pCisKKyNpbmNsdWRlICJOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgor
CituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERhdGFSZWZlcmVuY2U7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24gZmluYWwgOiBw
dWJsaWMgTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24geworcHVibGljOgorICAgIHVz
aW5nIENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT47CisKKyAgICBzdGF0
aWMgUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IGNyZWF0ZShTT0F1dGhvcml6YXRpb24gKnNv
QXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0
aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpOwor
Citwcml2YXRlOgorICAgIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6
YXRpb24gKiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgV2ViUGFnZVByb3h5JiwgQ2Fs
bGJhY2smJik7CisKKyAgICAvLyBTT0F1dGhvcml6YXRpb25TZXNzaW9uCisgICAgdm9pZCBmYWxs
QmFja1RvV2ViUGF0aEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBhYm9ydEludGVybmFsKCkg
ZmluYWw7CisgICAgdm9pZCBjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiwgTlNEYXRhICopIGZpbmFsOworCisgICAgLy8gTmF2aWdhdGlvblNPQXV0aG9yaXphdGlv
blNlc3Npb24KKyAgICB2b2lkIGJlZm9yZVN0YXJ0KCkgZmluYWw7CisKKyAgICB2b2lkIGxvYWRE
YXRhVG9GcmFtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBVUkwmKTsKKyAgICB2
b2lkIHBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQoRnVuY3Rpb248dm9pZCgpPiYmKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlYWJj
NTNhZGViZTA5YjhlYzQ1NzE0YjQwMTk3ZTNkYTgyZDMxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24u
aCIKKworI2lmIEhBVkUoQVBQX1NTTykKKworI2ltcG9ydCAiQVBJRnJhbWVIYW5kbGUuaCIKKyNp
bXBvcnQgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPHd0Zi9SdW5Mb29w
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2Nv
bnN0IGNoYXIqIHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCA9ICI8
c2NyaXB0PnBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkU3RhcnQnLCAnKicp
Ozwvc2NyaXB0PiI7Citjb25zdCBjaGFyKiBzb0F1dGhvcml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVz
c2FnZVRvUGFyZW50ID0gInBhcmVudC5wb3N0TWVzc2FnZSgnU09BdXRob3JpemF0aW9uRGlkQ2Fu
Y2VsJywgJyonKTsiOworCitSZWY8U09BdXRob3JpemF0aW9uU2Vzc2lvbj4gU3ViRnJhbWVTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUoU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6YXRp
b24sIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFn
ZVByb3h5JiBwYWdlLCBDYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbihzb0F1dGhvcml6
YXRpb24sIFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksIHBhZ2UsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKSk7Cit9CisKK1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9u
LCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQ
cm94eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICA6IE5hdmlnYXRp
b25TT0F1dGhvcml6YXRpb25TZXNzaW9uKHNvQXV0aG9yaXphdGlvbiwgV1RGTW92ZShuYXZpZ2F0
aW9uQWN0aW9uKSwgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbjo6U3ViRnJhbWUsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKQoreworfQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpCit7CisgICAgLy8gSW5zdGVhZCBvZiBp
c3N1aW5nIGEgbG9hZCwgd2UgZXhlY3V0ZSB0aGUgSmF2YXNjcmlwdCBkaXJlY3RseS4gVGhpcyBw
cm92aWRlcyB1cyBhIGNhbGxiYWNrCisgICAgLy8gdG8gZW5zdXJlIHRoZSBmaW5hbCBsb2FkIGlz
IGlzc3VlZCBhZnRlciB0aGUgbWVzc2FnZSBpcyBwb3N0ZWQuCisgICAgcG9zdERpZENhbmNlbE1l
c3NhZ2VUb1BhcmVudChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAg
aWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byogcGFnZVB0
ciA9IHdlYWtUaGlzLT5wYWdlKCk7CisgICAgICAgIGF1dG8qIG5hdmlnYXRpb25BY3Rpb25QdHIg
PSB3ZWFrVGhpcy0+bmF2aWdhdGlvbkFjdGlvbigpOworICAgICAgICBpZiAoIXBhZ2VQdHIgfHwg
IW5hdmlnYXRpb25BY3Rpb25QdHIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KGF1dG8qIHRhcmdldEZyYW1lID0gbmF2aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkg
eworICAgICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gcGFnZVB0ci0+cHJvY2VzcygpLndlYkZy
YW1lKHRhcmdldEZyYW1lLT5oYW5kbGUoKS5mcmFtZUlEKCkpKSB7CisgICAgICAgICAgICAgICAg
cGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAgICAgICAgICAvLyBJc3N1ZSBhIG5ldyBsb2FkIHRv
IHRoZSBvcmlnaW5hbCBVUkwgYXMgdGhlIG9yaWdpbmFsIGxvYWQgaXMgYWJvcnRlZCBiZWZvcmUg
c3RhcnQuCisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRVUkwobmF2aWdhdGlvbkFjdGlvblB0
ci0+cmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwor
fQorCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCgp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU3ViRnJhbWVTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiByZXNwb25zZSwgTlNEYXRhICpkYXRhKQoreworICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpICE9IDIwMCkgeworICAgICAgICBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9hZERhdGFUb0ZyYW1lKElQQzo6RGF0YVJl
ZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0
YS5sZW5ndGgpLCByZXNwb25zZS51cmwoKSk7Cit9CisKK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjpiZWZvcmVTdGFydCgpCit7CisgICAgLy8gQ2FuY2VsbGVkIHRoZSBjdXJy
ZW50IGxvYWQgYmVmb3JlIGxvYWRpbmcgdGhlIGRhdGEgdG8gcG9zdCBTT0F1dGhvcml6YXRpb25E
aWRTdGFydCB0byB0aGUgcGFyZW50IGZyYW1lLgorICAgIGludm9rZUNhbGxiYWNrKHRydWUpOwor
ICAgIC8vIEN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24sIHNob3VsZCBzdGFydCBhIG5ldyBsb2FkIGFmdGVyLgorICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAg
aWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPnBhZ2UoKSB8fCAhd2Vha1RoaXMtPm5hdmlnYXRp
b25BY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBl
eGVjdXRpbmcgdGhlIEphdmFzY3JpcHQgZGlyZWN0bHksIGlzc3VpbmcgYSBsb2FkLiBUaGlzIHdp
bGwgc2V0IHRoZSBvcmlnaW4gcHJvcGVybHkuCisgICAgICAgIHdlYWtUaGlzLT5sb2FkRGF0YVRv
RnJhbWUoSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHNvQXV0aG9yaXphdGlvblBvc3REaWRTdGFydE1lc3NhZ2VUb1BhcmVudCksIHN0cmxlbihzb0F1
dGhvcml6YXRpb25Qb3N0RGlkU3RhcnRNZXNzYWdlVG9QYXJlbnQpKSwgd2Vha1RoaXMtPm5hdmln
YXRpb25BY3Rpb24oKS0+cmVxdWVzdCgpLnVybCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBTdWJG
cmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmxvYWREYXRhVG9GcmFtZShjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFVSTCYgYmFzZVVSTCkKK3sKKyAgICBhdXRvKiBwYWdl
UHRyID0gcGFnZSgpOworICAgIGF1dG8qIG5hdmlnYXRpb25BY3Rpb25QdHIgPSBuYXZpZ2F0aW9u
QWN0aW9uKCk7CisgICAgaWYgKCFwYWdlUHRyIHx8ICFuYXZpZ2F0aW9uQWN0aW9uUHRyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZpZ2F0aW9uQWN0
aW9uUHRyLT50YXJnZXRGcmFtZSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2VQ
dHItPnByb2Nlc3MoKS53ZWJGcmFtZSh0YXJnZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSkg
eworICAgICAgICAgICAgcGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25J
bk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2Fk
RGF0YShkYXRhLCAidGV4dC9odG1sIiwgIlVURi04IiwgYmFzZVVSTCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwb3N0RGlkQ2Fu
Y2VsTWVzc2FnZVRvUGFyZW50KEZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBh
dXRvKiBwYWdlUHRyID0gcGFnZSgpOworICAgIGF1dG8qIG5hdmlnYXRpb25BY3Rpb25QdHIgPSBu
YXZpZ2F0aW9uQWN0aW9uKCk7CisgICAgaWYgKCFwYWdlUHRyIHx8ICFuYXZpZ2F0aW9uQWN0aW9u
UHRyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogdGFyZ2V0RnJhbWUgPSBuYXZp
Z2F0aW9uQWN0aW9uUHRyLT50YXJnZXRGcmFtZSgpKSB7CisgICAgICAgIHBhZ2VQdHItPnJ1bkph
dmFTY3JpcHRJbkZyYW1lKHRhcmdldEZyYW1lLT5oYW5kbGUoKS5mcmFtZUlEKCksIHNvQXV0aG9y
aXphdGlvblBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQsIGZhbHNlLCBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0gKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgYm9vbCwgY29u
c3QgRXhjZXB0aW9uRGV0YWlscyYsIFNjcmlwdFZhbHVlQ2FsbGJhY2s6OkVycm9yKSB7CisgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tTT0F1dGhvcml6YXRp
b25EZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzMWRjYzk3YzE2NTJjNmI1NGU0OGI3MzRmMTcyNzkw
MDI3MmRiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8cGFsL2NvY29hL0Fw
cFNTT1NvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgSEFWRShB
UFBfU1NPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFNPQXV0aG9yaXphdGlvblNlc3Np
b247CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisKK0BpbnRlcmZhY2UgV0tTT0F1dGhvcml6YXRp
b25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4geworQHBhY2th
Z2UKK1JlZlB0cjxXZWJLaXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb24+IF9zZXNzaW9uOworfQor
CistICh2b2lkKXNldFNlc3Npb246KFJlZlB0cjxXZWJLaXQ6OlNPQXV0aG9yaXphdGlvblNlc3Np
b24+JiYpc2Vzc2lvbjsKKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVn
YXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dL
U09BdXRob3JpemF0aW9uRGVsZWdhdGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA1MTRmMDQ4ZTdlN2YzMGFh
NDM0NzRlODM2YjYwNTNjYzU5ZGJhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRl
Lm1tCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmgiCisKKyNpZiBIQVZFKEFQUF9TU08p
CisKKyNpbXBvcnQgIlNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKKyNpbXBvcnQgPHd0Zi9SdW5M
b29wLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlCisKKy0g
KHZvaWQpYXV0aG9yaXphdGlvbjooU09BdXRob3JpemF0aW9uICopYXV0aG9yaXphdGlvbiBwcmVz
ZW50Vmlld0NvbnRyb2xsZXI6KFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyKXZpZXdDb250
cm9sbGVyIHdpdGhDb21wbGV0aW9uOih2b2lkICheKShCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKmVy
cm9yKSljb21wbGV0aW9uCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpICYmIGNvbXBs
ZXRpb24pOworICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGNvbXBsZXRpb24oTk8sIG5pbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgX3Nlc3Npb24tPnByZXNlbnRWaWV3Q29udHJvbGxlcih2aWV3Q29udHJvbGxlciwgY29t
cGxldGlvbik7Cit9CisKKy0gKHZvaWQpYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTooU09BdXRo
b3JpemF0aW9uICopYXV0aG9yaXphdGlvbgoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaGFuZGxlIEFwcFNTTy4iKTsKKyAgICBpZiAo
IV9zZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2ViUGF0aCgpOworfQorCistICh2
b2lkKWF1dGhvcml6YXRpb25EaWRDYW5jZWw6KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRp
b24KK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmICghX3Nlc3Npb24p
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgX3Nlc3Npb24tPmFib3J0KCk7Cit9CisKKy0gKHZvaWQpYXV0aG9yaXphdGlvbkRpZENv
bXBsZXRlOihTT0F1dGhvcml6YXRpb24gKilhdXRob3JpemF0aW9uCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBMT0dfRVJST1IoIkNvbXBsZXRlIEFwcFNTTyB3aXRob3V0
IGFueSBkYXRhLiIpOworICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX3Nlc3Npb24tPmZhbGxCYWNr
VG9XZWJQYXRoKCk7Cit9CisKKy0gKHZvaWQpYXV0aG9yaXphdGlvbjooU09BdXRob3JpemF0aW9u
ICopYXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQQXV0aG9yaXphdGlvbkhlYWRlcnM6
KE5TRGljdGlvbmFyeSAqKWh0dHBBdXRob3JpemF0aW9uSGVhZGVycworeworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisgICAgTE9HX0VSUk9SKCJDb21wbGV0ZSBBcHBTU08gd2l0aCB1
bmV4cGVjdGVkIGNhbGxiYWNrLiIpOworICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX3Nlc3Npb24t
PmZhbGxCYWNrVG9XZWJQYXRoKCk7Cit9CisKKy0gKHZvaWQpYXV0aG9yaXphdGlvbjooU09BdXRo
b3JpemF0aW9uICopYXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6KE5T
SFRUUFVSTFJlc3BvbnNlICopaHR0cFJlc3BvbnNlIGh0dHBCb2R5OihOU0RhdGEgKilodHRwQm9k
eQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKCFfc2Vzc2lvbikg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBfc2Vzc2lvbi0+Y29tcGxldGUoaHR0cFJlc3BvbnNlLCBodHRwQm9keSk7Cit9CisKKy0g
KHZvaWQpYXV0aG9yaXphdGlvbjooU09BdXRob3JpemF0aW9uICopYXV0aG9yaXphdGlvbiBkaWRD
b21wbGV0ZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjb21wbGV0ZSBBcHBTU086ICVk
IiwgZXJyb3IuY29kZSk7CisgICAgaWYgKCFfc2Vzc2lvbikgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfc2Vzc2lvbi0+ZmFsbEJh
Y2tUb1dlYlBhdGgoKTsKK30KKworLSAodm9pZClzZXRTZXNzaW9uOihSZWZQdHI8V2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uPiYmKXNlc3Npb24KK3sKKyAgICBfc2Vzc2lvbiA9IFdURk1v
dmUoc2Vzc2lvbik7CisgICAgaWYgKF9zZXNzaW9uKQorICAgICAgICBfc2Vzc2lvbi0+c2hvdWxk
U3RhcnQoKTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCmluZGV4IDMwM2U3NGZiNzNhZjhhYmZhZmRhMGE0YjNiMDcyMmFiM2M3NzEx
OTkuLmM0NDExMDhhYzExMTg0YzQxZThkYTAxZDVlZThjMmYzZDY2MDUxYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMjQ1LDYgKzI0NSwxMCBAQAogI2lu
Y2x1ZGUgIkVkaXRhYmxlSW1hZ2VDb250cm9sbGVyLmgiCiAjZW5kaWYKIAorI2lmIEhBVkUoQVBQ
X1NTTykKKyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgorI2VuZGlmCisK
IC8vIFRoaXMgY29udHJvbHMgd2hhdCBzdHJhdGVneSB3ZSB1c2UgZm9yIG1vdXNlIHdoZWVsIGNv
YWxlc2NpbmcuCiAjZGVmaW5lIE1FUkdFX1dIRUVMX0VWRU5UUyAxCiAKQEAgLTQ3MzAsOCArNDcz
NCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAKICAgICAgICAgYXV0byBuYXZpZ2F0aW9u
QWN0aW9uID0gQVBJOjpOYXZpZ2F0aW9uQWN0aW9uOjpjcmVhdGUoV1RGTW92ZShuYXZpZ2F0aW9u
QWN0aW9uRGF0YSksIHNvdXJjZUZyYW1lSW5mby5nZXQoKSwgZGVzdGluYXRpb25GcmFtZUluZm8u
cHRyKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXF1ZXN0KSwgb3JpZ2luYWxSZXF1ZXN0LnVy
bCgpLCBzaG91bGRPcGVuQXBwTGlua3MsIFdURk1vdmUodXNlckluaXRpYXRlZEFjdGl2aXR5KSwg
bWFpbkZyYW1lTmF2aWdhdGlvbik7CiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VCUEFH
RVBST1hZX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzMKKyNpZiBIQVZFKEFQUF9TU08pCisgICAg
ICAgIGlmIChtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uIHx8IG1fc2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25JbkFsbE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbikKKyAgICAgICAgICAgIG5hdmlnYXRpb25BY3Rpb24tPnVuc2V0
U2hvdWxkUGVyZm9ybVNPQXV0aG9yaXphdGlvbigpOwogI2VuZGlmCiAKICAgICAgICAgbV9uYXZp
Z2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCp0aGlzLCBXVEZN
b3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBXVEZNb3ZlKGxpc3RlbmVyKSwgcHJvY2Vzcy0+dHJhbnNm
b3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwpAQCAtNDczOSw4
ICs0NzQ0LDggQEAgV0VCUEFHRVBST1hZX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzMKIAogICAg
IG1fc2hvdWxkU3VwcHJlc3NBcHBMaW5rc0luTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiA9
IGZhbHNlOwogCi0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKLVdFQlBBR0VQUk9YWV9MT0FET1BU
SU1JWkVSX0FERElUSU9OU180CisjaWYgSEFWRShBUFBfU1NPKQorICAgIG1fc2hvdWxkU3VwcHJl
c3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gPSBmYWxzZTsK
ICNlbmRpZgogfQogCkBAIC01MDI5LDEwICs1MDM0LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRVcGRhdGVIaXN0b3J5VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1
cmwsCiAKIHVzaW5nIE5ld1BhZ2VDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVm
UHRyPFdlYlBhZ2VQcm94eT4mJik+OwogdXNpbmcgVUlDbGllbnRDYWxsYmFjayA9IEZ1bmN0aW9u
PHZvaWQoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgTmV3UGFnZUNhbGxiYWNrJiYpPjsK
LXN0YXRpYyB2b2lkIHRyeU9wdGltaXppbmdMb2FkKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+
JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBOZXdQYWdlQ2FsbGJhY2sm
JiBuZXdQYWdlQ2FsbGJhY2ssIFVJQ2xpZW50Q2FsbGJhY2smJiB1aUNsaWVudENhbGxiYWNrKQor
c3RhdGljIHZvaWQgdHJ5U09BdXRob3JpemF0aW9uKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+
JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBOZXdQYWdlQ2FsbGJhY2sm
JiBuZXdQYWdlQ2FsbGJhY2ssIFVJQ2xpZW50Q2FsbGJhY2smJiB1aUNsaWVudENhbGxiYWNrKQog
ewotI2lmIEhBVkUoTE9BRF9PUFRJTUlaRVIpCi1XRUJQQUdFUFJPWFlfTE9BRE9QVElNSVpFUl9B
RERJVElPTlNfNgorI2lmIEhBVkUoQVBQX1NTTykKKyAgICBwYWdlLndlYnNpdGVEYXRhU3RvcmUo
KS5zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcigpLnRyeUF1dGhvcml6ZShXVEZNb3ZlKG5hdmln
YXRpb25BY3Rpb24pLCBwYWdlLCBXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjayksIFdURk1vdmUodWlD
bGllbnRDYWxsYmFjaykpOwogI2Vsc2UKICAgICBBU1NFUlRfVU5VU0VEKHBhZ2UsIHBhZ2UucGFn
ZUlEKCkpOwogICAgIHVpQ2xpZW50Q2FsbGJhY2soV1RGTW92ZShuYXZpZ2F0aW9uQWN0aW9uKSwg
V1RGTW92ZShuZXdQYWdlQ2FsbGJhY2spKTsKQEAgLTUwNTYsOCArNTA2MSw4IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpjcmVhdGVOZXdQYWdlKGNvbnN0IEZyYW1lSW5mb0RhdGEmIG9yaWdpbmF0aW5n
RnJhbWVJbmZvRGF0YSwKIAogICAgICAgICBuZXdQYWdlLT5tX3Nob3VsZFN1cHByZXNzQXBwTGlu
a3NJbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gPSBob3N0c0FyZUVxdWFsKFVSTCh7IH0s
IG1haW5GcmFtZVVSTCksIHJlcXVlc3QudXJsKCkpOwogCi0jaWYgSEFWRShMT0FEX09QVElNSVpF
UikKLVdFQlBBR0VQUk9YWV9MT0FET1BUSU1JWkVSX0FERElUSU9OU181CisjaWYgSEFWRShBUFBf
U1NPKQorICAgICAgICBuZXdQYWdlLT5tX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5O
ZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uID0gdHJ1ZTsKICNlbmRpZgogICAgIH07CiAKQEAg
LTUwNjUsNyArNTA3MCw3IEBAIFdFQlBBR0VQUk9YWV9MT0FET1BUSU1JWkVSX0FERElUSU9OU181
CiAgICAgYm9vbCBzaG91bGRPcGVuQXBwTGlua3MgPSAhaG9zdHNBcmVFcXVhbChvcmlnaW5hdGlu
Z0ZyYW1lSW5mby0+cmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LnVybCgpKTsKICAgICBhdXRvIG5h
dmlnYXRpb25BY3Rpb24gPSBBUEk6Ok5hdmlnYXRpb25BY3Rpb246OmNyZWF0ZShXVEZNb3ZlKG5h
dmlnYXRpb25BY3Rpb25EYXRhKSwgb3JpZ2luYXRpbmdGcmFtZUluZm8ucHRyKCksIG51bGxwdHIs
IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXF1ZXN0KSwgVVJMKCksIHNob3VsZE9wZW5BcHBMaW5r
cywgV1RGTW92ZSh1c2VySW5pdGlhdGVkQWN0aXZpdHkpKTsKIAotICAgIHRyeU9wdGltaXppbmdM
b2FkKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksICp0aGlzLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgd2luZG93RmVh
dHVyZXMgPSBXVEZNb3ZlKHdpbmRvd0ZlYXR1cmVzKV0gKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rp
b24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2Vi
UGFnZVByb3h5PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgbXV0YWJsZSB7CisgICAgdHJ5U09B
dXRob3JpemF0aW9uKFdURk1vdmUobmF2aWdhdGlvbkFjdGlvbiksICp0aGlzLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
d2luZG93RmVhdHVyZXMgPSBXVEZNb3ZlKHdpbmRvd0ZlYXR1cmVzKV0gKFJlZjxBUEk6Ok5hdmln
YXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWZQdHI8V2ViUGFnZVByb3h5PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgbXV0YWJsZSB7CiAg
ICAgICAgIG1fdWlDbGllbnQtPmNyZWF0ZU5ld1BhZ2UoKnRoaXMsIFdURk1vdmUod2luZG93RmVh
dHVyZXMpLCBXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IGY1NGY2N2ZlNDg2ZWYxODk5YjEzMjg3NTVjZGEwNzg4ZjFjZGIzZGEuLjY4MWFkZDg1ZDYw
YTY3OTRhNmVkMzhjMDVjNDMyZGVlNWFmYWQ5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCkBAIC0xNDEsMTAgKzE0MSw2IEBAIE9CSkNfQ0xBU1MgX1dLUmVtb3RlT2Jq
ZWN0UmVnaXN0cnk7CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xp
ZW50Lmg+CiAjZW5kaWYKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW5jbHVkZSA8
V2ViS2l0QWRkaXRpb25zL1dlYlBhZ2VQcm94eUFkZGl0aW9ucy5oPgotI2VuZGlmCi0KICNpZiBF
TkFCTEUoTUVESUFfU0VTU0lPTikKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1lZGlhU2Vz
c2lvbk1ldGFkYXRhOwpAQCAtMTU0OSw4ICsxNTQ1LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVt
b3ZlT2JzZXJ2ZXIoV2ViVmlld0RpZE1vdmVUb1dpbmRvd09ic2VydmVyJik7CiAgICAgdm9pZCB3
ZWJWaWV3RGlkTW92ZVRvV2luZG93KCk7CiAKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VC
UEFHRVBST1hZX0xPQURPUFRJTUlaRVJfQURESVRJT05TXzEKKyNpZiBIQVZFKEFQUF9TU08pCisg
ICAgdm9pZCBzZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluQWxsTmF2aWdhdGlvblBv
bGljeURlY2lzaW9uKCkgeyBtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5BbGxOYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24gPSB0cnVlOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdXBwcmVz
c1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigpIHsgbV9zaG91
bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiA9
IHRydWU7IH0KICNlbmRpZgogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTIyODgsOCArMjI4
NSw5IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fZGVjaWRlUG9s
aWN5Rm9yUmVzcG9uc2VSZXF1ZXN0OwogICAgIGJvb2wgbV9zaG91bGRTdXBwcmVzc0FwcExpbmtz
SW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uIHsgZmFsc2UgfTsKIAotI2lmIEhBVkUoTE9B
RF9PUFRJTUlaRVIpCi1XRUJQQUdFUFJPWFlfTE9BRE9QVElNSVpFUl9BRERJVElPTlNfMgorI2lm
IEhBVkUoQVBQX1NTTykKKyAgICBib29sIG1fc2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25J
bk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91
bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluQWxsTmF2aWdhdGlvblBvbGljeURlY2lzaW9uIHsg
ZmFsc2UgfTsKICNlbmRpZgogCiAgICAgRGVxdWU8TmF0aXZlV2ViTW91c2VFdmVudD4gbV9tb3Vz
ZUV2ZW50UXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGMyOGE2NDBmNzc3M2Q0MGUyMDg5MDk0
ZGI2OGNhMTNiYTc2ZTNmNTIuLmVjNjYzOTg4ZDU1ZmZjMmQ5OTc3ZmE4YWFiNDJhZTQ5NGMxZTQ3
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC02Niw2ICs2NiwxMCBAQAogI2luY2x1ZGUgIlNlY0tl
eVByb3h5U3RvcmUuaCIKICNlbmRpZgogCisjaWYgSEFWRShBUFBfU1NPKQorI2luY2x1ZGUgIlNP
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBA
IC0xMDMsMTAgKzEwNywxMCBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJl
ZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cgogICAgICwgbV9hdXRo
ZW50aWNhdG9yTWFuYWdlcihtYWtlVW5pcXVlUmVmPEF1dGhlbnRpY2F0b3JNYW5hZ2VyPigpKQog
I2VuZGlmCiAgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQ+KCkpCi17Ci0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKLVdFQlNJVEVEQVRBU1RPUkVfTE9B
RE9QVElNSVpFUl9BRERJVElPTlNfMgorI2lmIEhBVkUoQVBQX1NTTykKKyAgICAsIG1fc29BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3IobWFrZVVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGlu
YXRvcj4oKSkKICNlbmRpZgorewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJp
dmlsZWdlcygpKTsKICAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpOwpAQCAtMTI0LDEwICsxMjgsMTAgQEAgV2Vic2l0ZURhdGFTdG9y
ZTo6V2Vic2l0ZURhdGFTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgLCBtX2F1
dGhlbnRpY2F0b3JNYW5hZ2VyKG1ha2VVbmlxdWVSZWY8QXV0aGVudGljYXRvck1hbmFnZXI+KCkp
CiAjZW5kaWYKICAgICAsIG1fY2xpZW50KG1ha2VVbmlxdWVSZWY8V2Vic2l0ZURhdGFTdG9yZUNs
aWVudD4oKSkKLXsKLSNpZiBIQVZFKExPQURfT1BUSU1JWkVSKQotV0VCU0lURURBVEFTVE9SRV9M
T0FET1BUSU1JWkVSX0FERElUSU9OU18yCisjaWYgSEFWRShBUFBfU1NPKQorICAgICwgbV9zb0F1
dGhvcml6YXRpb25Db29yZGluYXRvcihtYWtlVW5pcXVlUmVmPFNPQXV0aG9yaXphdGlvbkNvb3Jk
aW5hdG9yPigpKQogI2VuZGlmCit7CiAgICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDgyMmMzZmM3
NjM3ZDdjNWViMDAzYzY5Y2U5NDc0NWJkMzgyNTkzZjIuLjBiMjM1MDE2NTBmZGNjYTczMTZhYzVi
NWZiZjQ1NDM1MTE2YjQxODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTU2LDEwICs1Niw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9DdXJsUHJveHlTZXR0aW5ncy5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XZWJzaXRlRGF0YVN0
b3JlQWRkaXRpb25zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBIVFRQQ29v
a2llU3RvcmU7CiB9CkBAIC03NCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
QXV0aGVudGljYXRvck1hbmFnZXI7CiBjbGFzcyBTZWNLZXlQcm94eVN0b3JlOwogY2xhc3MgRGV2
aWNlSWRIYXNoU2FsdFN0b3JhZ2U7CitjbGFzcyBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwpAQCAtMjU1LDggKzI1Miw4IEBAIHB1YmxpYzoKICAg
ICBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fZGV2aWNlT3Jp
ZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOyB9CiAjZW5kaWYKIAotI2lmIEhBVkUo
TE9BRF9PUFRJTUlaRVIpCi1XRUJTSVRFREFUQVNUT1JFX0xPQURPUFRJTUlaRVJfQURESVRJT05T
XzEKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3ImIHNv
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV9zb0F1dGhvcml6YXRpb25Db29y
ZGluYXRvci5nZXQoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0zMzYsNiArMzMzLDEwIEBA
IHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPFdlYnNpdGVEYXRhU3RvcmVDbGllbnQ+IG1fY2xpZW50
OwogCiAgICAgUmVmUHRyPEFQSTo6SFRUUENvb2tpZVN0b3JlPiBtX2Nvb2tpZVN0b3JlOworCisj
aWYgSEFWRShBUFBfU1NPKQorICAgIFVuaXF1ZVJlZjxTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
cj4gbV9zb0F1dGhvcml6YXRpb25Db29yZGluYXRvcjsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTg3OGEx
NDA5NzIzNDIwOTU5NTJkOTUwYzkzM2EwODMwYTBlMzRjOS4uYTk2YjdkN2FhNWFmNjA4ZGQ2ZTIx
ZGZjMjYxNDg4ODYwNDkwYTE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU5LDYgKzEwNTksMTQgQEAKIAkJNTdEQ0VEQzcyMTRG
MTgzMDAwMTZCODQ3IC8qIE1vY2tMb2NhbENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFREM1MjE0RjE4MzAwMDE2Qjg0NyAvKiBN
b2NrTG9jYWxDb25uZWN0aW9uLmggKi87IH07CiAJCTU3RENFRENCMjE0RjRFNDIwMDE2Qjg0NyAv
KiBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFREM5MjE0RjRFNDIwMDE2Qjg0NyAvKiBNb2NrQXV0aGVu
dGljYXRvck1hbmFnZXIuaCAqLzsgfTsKIAkJNTdFQjJFM0EyMUUxOTgzRTAwQjg5Q0RGIC8qIFUy
ZkhpZEF1dGhlbnRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9y
LmggKi87IH07CisJCTU3RkQzMTgwMjJCMzUxNTgwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTdGRDMxNzgyMkIzNTE0OTAwOEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6
YXRpb25TZXNzaW9uLmggKi87IH07CisJCTU3RkQzMTgxMjJCMzUxNUIwMDhEMEU4QiAvKiBQb3BV
cFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3RkQzMTcwMjJCMzUxNDgwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb24uaCAqLzsgfTsKKwkJNTdGRDMxODIyMkIzNTE1RTAwOEQwRThCIC8qIFJl
ZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzQyMkIzNTE0OTAwOEQwRThCIC8qIFJlZGlyZWN0
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovOyB9OworCQk1N0ZEMzE4MzIyQjM1MTYyMDA4RDBF
OEIgLyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1
dGhvcml6YXRpb25Db29yZGluYXRvci5oICovOyB9OworCQk1N0ZEMzE4NDIyQjM1MTY1MDA4RDBF
OEIgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RkQzMTczMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1
dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oICovOyB9OworCQk1N0ZEMzE4NTIyQjM1MTY5MDA4RDBF
OEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxN0MyMkIzNTE0QTAwOEQwRThCIC8qIFNPQXV0aG9y
aXphdGlvblNlc3Npb24uaCAqLzsgfTsKKwkJNTdGRDMxODYyMkIzNTE2QzAwOEQwRThCIC8qIFN1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxN0QyMkIzNTE0QTAwOEQwRThCIC8qIFN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovOyB9OworCQk1N0ZEMzE4NzIyQjM1MTcwMDA4RDBF
OEIgLyogV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzEyMkIzNTE0ODAwOEQwRThCIC8qIFdLU09B
dXRob3JpemF0aW9uRGVsZWdhdGUuaCAqLzsgfTsKIAkJNTg3NzQzQTYyMUMzMEJCRTAwQUU5MDg0
IC8qIEhUVFBTVXBncmFkZUxpc3QuZGIgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU4Nzc0M0E0MjFDMzBBRDgwMEFFOTA4NCAvKiBIVFRQU1VwZ3JhZGVM
aXN0LmRiICovOyB9OwogCQk1OEU5NzdERjIxQzQ5QTAwMDA1RDkyQTYgLyogTmV0d29ya0hUVFBT
VXBncmFkZUNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU4RTk3N0REMjFDNDlBMDAwMDVEOTJBNiAvKiBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hl
Y2tlci5oICovOyB9OwogCQk1QzBCMTc3ODFFN0M4ODBFMDBFOTEyM0MgLyogTmV0d29ya1NvY2tl
dFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzBCMTc3NDFFN0M4NzlDMDBFOTEyM0MgLyogTmV0d29ya1NvY2tl
dFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0zNDk5LDYgKzM1MDcsMjIgQEAK
IAkJNTdEQ0VEQ0QyMTRGNTE2ODAwMTZCODQ3IC8qIE1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2NrQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0VCMkUzODIxRTE5
ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVMmZI
aWRBdXRoZW50aWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3RUIyRTM5
MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFUyZkhpZEF1dGhlbnRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1N0ZEMzE3MDIyQjM1MTQ4MDA4RDBFOEIgLyogUG9wVXBTT0F1dGhvcml6YXRpb25TZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFVwU09BdXRob3JpemF0
aW9uU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE3MTIyQjM1
MTQ4MDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
T0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1N0ZEMzE3MzIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU09BdXRob3JpemF0aW9uTlNVUkxF
eHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzQyMkIzNTE0OTAw
OEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzUyMkIzNTE0OTAwOEQwRThCIC8qIFBv
cFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxNzYyMkIzNTE0OTAwOEQwRThCIC8qIFNPQXV0aG9yaXph
dGlvbk5TVVJMRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3RkQzMTc3MjJCMzUxNDkwMDhEMEU4QiAvKiBTdWJGcmFtZVNPQXV0aG9yaXphdGlv
blNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdWJG
cmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU3RkQzMTc4MjJCMzUxNDkwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9u
U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0aW9uU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZE
MzE3OTIyQjM1MTQ5MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxN0EyMkIzNTE0
QTAwOEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdGRDMxN0IyMkIzNTE0QTAw
OEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNl
c3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RkQzMTdDMjJCMzUxNEEw
MDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTdGRDMxN0QyMkIzNTE0QTAwOEQwRThCIC8qIFN1YkZyYW1lU09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJGcmFt
ZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTdGRDMxN0UyMkIzNTE0QTAwOEQwRThCIC8qIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1NPQXV0aG9yaXphdGlv
bkRlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0ZEMzE3RjIyQjM1
MTRBMDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4Nzc0M0E0MjFDMzBBRDgwMEFFOTA4NCAvKiBIVFRQ
U1VwZ3JhZGVMaXN0LmRiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gZmlsZTsgbmFtZSA9IEhUVFBTVXBncmFkZUxpc3QuZGI7IHBhdGggPSBEZXJpdmVk
U291cmNlcy9XZWJLaXQyL0hUVFBTVXBncmFkZUxpc3QuZGI7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTU4RTk3N0RDMjFDNDk5RkUwMDVEOTJBNiAvKiBOZXR3b3JrSFRU
UFNVcGdyYWRlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU4RTk3N0REMjFDNDlBMDAwMDVEOTJBNiAvKiBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hl
Y2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrSFRUUFNVcGdy
YWRlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ0NCw2ICs1NDY4
LDcgQEAKIAkJMUFCQzNERjIxODk5RTQxNTAwNEYwNjI2IC8qIENvY29hICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1N0ZEMzE2QjIyQjMzNjdFMDA4RDBF
OEIgLyogU09BdXRob3JpemF0aW9uICovLAogCQkJCTk5QzgxRDU1MUMyMERGQkUwMDVDNEM4MiAv
KiBBdXRvbWF0aW9uQ2xpZW50LmggKi8sCiAJCQkJOTlDODFENTYxQzIwREZCRTAwNUM0QzgyIC8q
IEF1dG9tYXRpb25DbGllbnQubW0gKi8sCiAJCQkJOTkwRDI4QjcxQzY1MzlBMDAwOTg2OTc3IC8q
IEF1dG9tYXRpb25TZXNzaW9uQ2xpZW50LmggKi8sCkBAIC03MDA0LDYgKzcwMjksMjkgQEAKIAkJ
CXBhdGggPSBNb2NrOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTdGRDMx
NkIyMkIzMzY3RTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbiAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTdGRDMxNzgyMkIzNTE0OTAwOEQwRThCIC8q
IE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCisJCQkJNTdGRDMxN0IyMkIz
NTE0QTAwOEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovLAor
CQkJCTU3RkQzMTcwMjJCMzUxNDgwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b24uaCAqLywKKwkJCQk1N0ZEMzE3NTIyQjM1MTQ5MDA4RDBFOEIgLyogUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uLm1tICovLAorCQkJCTU3RkQzMTc0MjJCMzUxNDkwMDhEMEU4QiAvKiBSZWRp
cmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLywKKwkJCQk1N0ZEMzE3QTIyQjM1MTRBMDA4
RDBFOEIgLyogUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovLAorCQkJCTU3RkQz
MTcyMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovLAor
CQkJCTU3RkQzMTc5MjJCMzUxNDkwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRv
ci5tbSAqLywKKwkJCQk1N0ZEMzE3MzIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9u
TlNVUkxFeHRyYXMuaCAqLywKKwkJCQk1N0ZEMzE3NjIyQjM1MTQ5MDA4RDBFOEIgLyogU09BdXRo
b3JpemF0aW9uTlNVUkxFeHRyYXMubW0gKi8sCisJCQkJNTdGRDMxN0MyMkIzNTE0QTAwOEQwRThC
IC8qIFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLywKKwkJCQk1N0ZEMzE3RjIyQjM1MTRBMDA4
RDBFOEIgLyogU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSAqLywKKwkJCQk1N0ZEMzE3RDIyQjM1
MTRBMDA4RDBFOEIgLyogU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCisJCQkJ
NTdGRDMxNzcyMkIzNTE0OTAwOEQwRThCIC8qIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lv
bi5tbSAqLywKKwkJCQk1N0ZEMzE3MTIyQjM1MTQ4MDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRp
b25EZWxlZ2F0ZS5oICovLAorCQkJCTU3RkQzMTdFMjJCMzUxNEEwMDhEMEU4QiAvKiBXS1NPQXV0
aG9yaXphdGlvbkRlbGVnYXRlLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBTT0F1dGhvcml6YXRp
b247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1QzE0MjZGMTFDMjNGODE3
MDBENDExODMgLyogRG93bmxvYWRzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKQEAgLTkzOTgsNiArOTQ0Niw3IEBACiAJCQkJMkQ1MDM2NkIxQkNERTE3OTAwRTIw
QkIzIC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYzMTcy
Q0YxOEI0Njk0OTAwNjVCOUMzIC8qIE5hdGl2ZVdlYlRvdWNoRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRENCODZCMTg5ODMxQjMwMDIyRUU1QSAvKiBOYXZpZ2F0aW9uQWN0aW9uRGF0YS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTdGRDMxODAyMkIzNTE1ODAwOEQwRThCIC8qIE5hdmlnYXRp
b25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUJDM0RGNjE4
OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTZGQkEyQTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNkZCRDI4MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC05NTE1LDYgKzk1NjQsNyBAQAogCQkJCTFBNEE5RjMzMTJCODQ0
RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDYyMjc4
MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE2RkI3QUYxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTU3RkQzMTgxMjJCMzUxNUIwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXphdGlv
blNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQTBFRDM1MUY3NDdDQ0YwMDMyOTlFQiAv
KiBQcmVjb25uZWN0VGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUFCMTQ1RTYyMjNGOTMxMjAw
RTQ4OUQ4IC8qIFByZWZldGNoQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQ0MxQjkwMTJE
N0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtOTUyNiw2ICs5
NTc2LDcgQEAKIAkJCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxl
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFFNjg4NzAxRjZFMkJBQjAwNzAwNkE2IC8q
IFF1YXJhbnRpbmVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMThBOUVGMTkwN0FENkYwMEY3
QzkyQiAvKiBRdWlja0xvb2tEb2N1bWVudERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQz
MTgyMjJCMzUxNUUwMDhEMEU4QiAvKiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRERjczMTUxOEU5NTA2MDAwNEY1
QTY2IC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFCMTZBRUExNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQu
aCBpbiBIZWFkZXJzICovLApAQCAtOTU4OCw2ICs5NjM5LDkgQEAKIAkJCQk5OTUyMjZENjIwN0Qx
ODQ2MDBGNzg0MjAgLyogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyREFGMDZENjE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFNjk0M0UxOEJEMkE2ODAwNUMxNUU1IC8qIFNt
YXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTdGRDMxODMyMkIzNTE2MjAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1N0ZEMzE4NDIyQjM1MTY1MDA4RDBFOEIgLyogU09BdXRob3Jp
emF0aW9uTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQzMTg1MjJCMzUxNjkw
MDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MjcyQjI4QjE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNEJERUQzMTZDOThFREQwMEU0RTI1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0EzRkVDQTIyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nl
c3NTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTU5OCw2ICs5NjUyLDcgQEAKIAkJCQkxQUIz
MUE5NzE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFFMDBENkMxODMyN0MxMjAwMDg3REQ3IC8qIFN0cmluZ1JlZmVyZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMjk2QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTdGRDMxODYyMkIzNTE2QzAwOEQwRThCIC8q
IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQ1
OTk4NDIyMjgzM0U4NzAwRTYxMzczIC8qIFN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE1NzEzNUYyMDQwQTlCMjAwODRGOUNGIC8qIFN5c3RlbVByZXZp
ZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTFBMEJENjFBNDhFNkM2MDA1NEVG
NzQgLyogVENDU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTU2LDYgKzEwMjExLDcgQEAKIAkJ
CQkxREIwMTk0MzIxMUNGMDAyMDA5RkIzRTggLyogV0tTaGFyZVNoZWV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTNFNDYyRDFBRDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2VydmljZVBpY2tl
ckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y1NDlCNDFFMzE3NEI3MDAwRTcyMzkg
LyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RkQzMTg3
MjJCMzUxNzAwMDhEMEU4QiAvKiBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QTc4RkYzMjIyNDE5MTk2MDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxl
cnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NjA2MTI0RkYwMjcwMDY4RjIwQSAvKiBXS1N0
cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc2MUExMjRGRjAzNzAwNjhGMjBBIC8qIFdL
U3RyaW5nQ0YuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KaW5kZXggMzdlYjRhZmFlZjYxMjEyZWJmM2MyZTMz
OTBmZGM1MWJkODEwYjlmOC4uYmIxNmY4YTE5NTJkMzU3NGIyZmQzY2U5NTJlMWJlY2RlMGRkNGU1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3ND
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0Nv
Y29hLm1tCkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblAKICAgICBy
ZWdpc3RlcldpdGhTdGF0ZUR1bXBlcigpOwogI2VuZGlmCiAKLSNpZiBIQVZFKExPQURfT1BUSU1J
WkVSKQorI2lmIEhBVkUoQVBQX1NTTykKICAgICBbTlNVUkxTZXNzaW9uIF9kaXNhYmxlQXBwU1NP
XTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGUzYWE0ZTkzNzliNzBiNzRiNzI2Y2E5OTMwY2YzNTRhYWVmOWI3Y2UuLmRjMTQ4
NmU4MTIyODUwMTA1YWU0NzhhMjgwYzY4MmI0Mjk4ZjI3ZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxOS0wNi0x
NCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgU09B
dXRob3JpemF0aW9uIGZyb20gV2ViS2l0QWRkaXRpb25zIHRvIFdlYktpdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4ODc0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80NzU3MzQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFt
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYWxsIFNPQXV0aG9yaXphdGlvbiB0ZXN0cyBm
cm9tIFdlYktpdEFkZGl0aW9ucyB0byBXZWJLaXQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L0NvbmZpZ3VyYXRpb25zL1Rlc3RXZWJLaXRBUEkueGNjb25maWc6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1t
OiBBZGRlZC4KKyAgICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0
ZSBpbml0XSk6CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdh
dGUgd2ViVmlldzpkaWRGaW5pc2hOYXZpZ2F0aW9uOl0pOgorICAgICAgICAoLVtUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzpjcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3Vy
YXRpb246Zm9yTmF2aWdhdGlvbkFjdGlvbjp3aW5kb3dGZWF0dXJlczpdKToKKyAgICAgICAgKC1b
VGVzdFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIHZpZXdEaWRBcHBlYXJdKToKKyAgICAg
ICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIHZpZXdEaWREaXNhcHBlYXJd
KToKKyAgICAgICAgKG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKToKKyAg
ICAgICAgKG92ZXJyaWRlU2V0RGVsZWdhdGUpOgorICAgICAgICAob3ZlcnJpZGVCZWdpbkF1dGhv
cml6YXRpb25XaXRoVVJMKToKKyAgICAgICAgKG92ZXJyaWRlQ2FuY2VsQXV0aG9yaXphdGlvbik6
CisgICAgICAgIChvdmVycmlkZUFkZE9ic2VydmVyRm9yTmFtZSk6CisgICAgICAgIChvdmVycmlk
ZUlzVVJMRnJvbUFwcGxlT3duZWREb21haW4pOgorICAgICAgICAocmVzZXRTdGF0ZSk6CisgICAg
ICAgIChjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KToKKyAgICAgICAgKGdlbmVyYXRl
SHRtbCk6CisgICAgICAgIChjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTA2LTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KIAogICAgICAgICBpbXBvcnQtdzNjLXRlc3RzIHNob3VsZCByZXNwZWN0IFdF
QktJVF9PVVRQVVRESVIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29uZmlndXJh
dGlvbnMvVGVzdFdlYktpdEFQSS54Y2NvbmZpZyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29uZmln
dXJhdGlvbnMvVGVzdFdlYktpdEFQSS54Y2NvbmZpZwppbmRleCBjNmRmYjMzM2E1Zjg1M2E5ZDVl
ODk5Yzc5NTQ2NTQwZWQ0MDg0MzJmLi44OTFhNmYzMWNjYTdjZjA1OGNmNTljYjQ1ZTVmNjBjNjc0
ZWRmNWY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL1Rl
c3RXZWJLaXRBUEkueGNjb25maWcKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0
aW9ucy9UZXN0V2ViS2l0QVBJLnhjY29uZmlnCkBAIC0yOCw3ICsyOCwxNCBAQCBHQ0NfRU5BQkxF
X09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKIAogVU5FWFBPUlRFRF9TWU1CT0xfTERGTEFHUyA9IC1X
bCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWk43dGVzdGluZzRUZXN0MTZUZWFyRG93blRlc3RD
YXNlRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aTjd0ZXN0aW5nNFRlc3QxM1NldFVw
VGVzdENhc2VFdgogCi1PVEhFUl9MREZMQUdTID0gJChpbmhlcml0ZWQpICQoVU5FWFBPUlRFRF9T
WU1CT0xfTERGTEFHUykgLWxndGVzdCAtZm9yY2VfbG9hZCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
bGliVGVzdFdlYktpdEFQSS5hIC1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgLWZyYW1ld29yayBX
ZWJLaXQgLWxXZWJDb3JlVGVzdFN1cHBvcnQgJChPVEhFUl9MREZMQUdTX1BMQVRGT1JNKTsKK1dL
X0FVVEhLSVRfTERGTEFHUyA9ICQoV0tfQVVUSEtJVF9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFN
RSkpOworV0tfQVVUSEtJVF9MREZMQUdTX2lwaG9uZW9zID0gJChXS19BVVRIS0lUX0xERkxBR1Mk
KFdLX0lPU18xMykpOworV0tfQVVUSEtJVF9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tf
QVVUSEtJVF9MREZMQUdTJChXS19JT1NfMTMpKTsKK1dLX0FVVEhLSVRfTERGTEFHU19JT1NfU0lO
Q0VfMTMgPSAtZnJhbWV3b3JrIEF1dGhLaXQ7CitXS19BVVRIS0lUX0xERkxBR1NfbWFjb3N4ID0g
JChXS19BVVRIS0lUX0xERkxBR1MkKFdLX01BQ09TXzEwMTUpKTsKK1dLX0FVVEhLSVRfTERGTEFH
U19NQUNPU19TSU5DRV8xMDE1ID0gLWZyYW1ld29yayBBdXRoS2l0OworCitPVEhFUl9MREZMQUdT
ID0gJChpbmhlcml0ZWQpICQoVU5FWFBPUlRFRF9TWU1CT0xfTERGTEFHUykgLWxndGVzdCAtZm9y
Y2VfbG9hZCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvbGliVGVzdFdlYktpdEFQSS5hIC1mcmFtZXdv
cmsgSmF2YVNjcmlwdENvcmUgLWZyYW1ld29yayBXZWJLaXQgLWxXZWJDb3JlVGVzdFN1cHBvcnQg
JChXS19BVVRIS0lUX0xERkxBR1MpICQoT1RIRVJfTERGTEFHU19QTEFURk9STSk7CiBPVEhFUl9M
REZMQUdTX1BMQVRGT1JNW3Nkaz1tYWNvc3gqXSA9IC1mcmFtZXdvcmsgQ29jb2EgLWZyYW1ld29y
ayBDYXJib247CiAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgYnVpbHQgb24gaU9TLiBJ
bnN0ZWFkIHdlIHNob3VsZCBjcmVhdGUgYW5kIHVzZSBhIFRlc3RXZWJLaXRBUEkgYXBwbGljYXRp
b24uCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY2MDY5YmQ4ODk1M2NjMzUxMGIwODdlMWEw
ZTJhMmM3ZGZhNDBlNTYuLmM1YzA2N2MyNTM3MjAwNTAwMTM0NTY0MzAyNDYzNmViMDJjMGZhNzYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJNTc1OTlFMkEx
RjA3MUFBMDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0
aWJpbGl0eVJlYWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzU5OUUyNTFGMDcxOTJDMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0
dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5UmVhZC5odG1sICovOyB9OwogCQk1NzU5OUUy
QjFGMDcxQUEwMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21w
YXRpYmlsaXR5V3JpdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzU5OUUyMzFGMDcxOTJDMDBBM0ZCOEMgLyogSW5kZXhlZERCU3Ry
dWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5V3JpdGUuaHRtbCAqLzsgfTsKIAkJNTc2
OUM1MEIxRDlCMDAwMjAwMDg0N0ZCIC8qIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc2OUM1MEExRDlCMDAw
MTAwMDg0N0ZCIC8qIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tICovOyB9OwotCQk1Nzc0QUE2
ODIxRkJCRjc4MDBBRjJBMUIgLyogVGVzdExvYWRPcHRpbWl6ZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Nzc0QUE2NzIxRkJCRjc4MDBBRjJBMUIg
LyogVGVzdExvYWRPcHRpbWl6ZXIubW0gKi87IH07CisJCTU3NzRBQTY4MjFGQkJGNzgwMEFGMkEx
QiAvKiBUZXN0U09BdXRob3JpemF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTc3NEFBNjcyMUZCQkY3ODAwQUYyQTFCIC8qIFRlc3RTT0F1dGhv
cml6YXRpb24ubW0gKi87IH07CiAJCTU3NzhEMDU2MjIxMTBBMjYwMDg5OUUzQiAvKiBMb2FkV2Vi
QXJjaGl2ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3NzhEMDU1MjIxMTBBMjYwMDg5OUUzQiAvKiBMb2FkV2ViQXJjaGl2ZS5tbSAqLzsgfTsKIAkJ
NTc4Q0JENjcyMDRGQjJDODAwODNCOUYyIC8qIExvY2FsQXV0aGVudGljYXRpb24uZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc4Q0JE
NjYyMDRGQjJDNzAwODNCOUYyIC8qIExvY2FsQXV0aGVudGljYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1NzkwMUZCMTFDQUYxNDJEMDBFRDY0RjkgLyogTG9hZEludmFsaWRVUkxSZXF1ZXN0Lmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTc5MDFGQjAxQ0FGMTQxQzAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5odG1sICov
OyB9OwpAQCAtMTc0Myw3ICsxNzQzLDcgQEAKIAkJNTc1OTlFMjUxRjA3MTkyQzAwQTNGQjhDIC8q
IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVJlYWQuaHRtbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVJl
YWQuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc1OTlFMjYxRjA3MTkyQzAw
QTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5z
cWxpdGUzLXNobSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IGZpbGU7IHBhdGggPSAiSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRp
YmlsaXR5LnNxbGl0ZTMtc2htIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc2OUM1
MEExRDlCMDAwMTAwMDg0N0ZCIC8qIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VyaWFsaXplZENyeXB0b0tleVdyYXAu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3NzRBQTY3MjFGQkJGNzgwMEFGMkEx
QiAvKiBUZXN0TG9hZE9wdGltaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RMb2Fk
T3B0aW1pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Nzc0QUE2NzIxRkJC
Rjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFRlc3RTT0F1dGhvcml6YXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3NzhEMDU1MjIxMTBBMjYwMDg5OUUzQiAvKiBMb2FkV2ViQXJjaGl2ZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IExvYWRXZWJBcmNoaXZlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzhDQkQ2NjIwNEZCMkM3MDA4M0I5RjIgLyogTG9jYWxBdXRoZW50aWNhdGlvbi5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IExvY2FsQXV0aGVudGljYXRpb24uZnJhbWV3b3JrOyBw
YXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Mb2NhbEF1dGhlbnRpY2F0aW9uLmZyYW1l
d29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CiAJCTU3OTAxRkFDMUNBRjEyQzIwMEVENjRG
OSAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNzM1LDcgKzI3MzUsNyBAQAogCQkJCTUxNUJFMTcwMUQ0MjhCRDEwMERE
N0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tICovLAogCQkJCTFDNzM0QjUyMjA3ODhDNDgw
MEY0MzBFQSAvKiBTeXN0ZW1Db2xvcnMubW0gKi8sCiAJCQkJMkQ3MDA1OTUyMUVEQTBDNjAwMzQ2
M0NCIC8qIFRhYk91dE9mV2ViVmlldy5tbSAqLywKLQkJCQk1Nzc0QUE2NzIxRkJCRjc4MDBBRjJB
MUIgLyogVGVzdExvYWRPcHRpbWl6ZXIubW0gKi8sCisJCQkJNTc3NEFBNjcyMUZCQkY3ODAwQUYy
QTFCIC8qIFRlc3RTT0F1dGhvcml6YXRpb24ubW0gKi8sCiAJCQkJRjRDRDc0QzcyMEZEQjQ5NjAw
REUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLmggKi8sCiAJCQkJRjRDRDc0QzgyMEZEQjQ5
NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tICovLAogCQkJCUMyMkZBMzJBMjI4
Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gKi8sCkBAIC00NDcyLDEwICs0NDcyLDEwIEBA
CiAJCQkJRjRGNUJCNTIyMTY2N0JBQTAwMkQwNkI5IC8qIFRlc3RGb250T3B0aW9ucy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUY0NUUxNTc2MjExMkNFNjIwMDMwN0U4MiAvKiBUZXN0SW5wdXREZWxl
Z2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0NUQzODkxMjE1QTdCNEIwMDJBMjk3OSAvKiBU
ZXN0SW5zcGVjdG9yQmFyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTc3NEFBNjgyMUZCQkY3ODAw
QUYyQTFCIC8qIFRlc3RMb2FkT3B0aW1pemVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxQzA0
QTcxRDc2Mjk4QjAwMEE2ODE2IC8qIFRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBMTRGQzU5MDFCOEFFMzZGMDBEMTA3RUIgLyogVGVzdFByb3RvY29sLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQUUxQTQxMUEzNDAwNDQ3QzRDIC8qIFRlc3RzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Nzc0QUE2ODIxRkJCRjc4MDBBRjJBMUIgLyog
VGVzdFNPQXV0aG9yaXphdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0Q0Q3NEM5MjBGREI0
OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTJFRkYwNkQ0MUQ4QUVEQkIwMDA0QkIzMCAvKiBUZXN0V0tXZWJWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjQ1MTdCNjcyMDU0QzQ5NTAwQzI2NzIxIC8qIFRlc3RXS1dlYlZpZXdDb250cm9s
bGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0TG9hZE9wdGltaXplci5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzZmMjljNTk3OGVjNDM5YTBiMjY3MzliZTY3ZTRmZjRjYTYzMGFjOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RMb2FkT3B0aW1pemVyLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
Ci0jaWYgSEFWRShMT0FEX09QVElNSVpFUikKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9UZXN0
TG9hZE9wdGltaXplckFkZGl0aW9ucy5tbT4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhjOTQ3YTVmMTdhNjIyODY3OTFlYzk3MDkxMzgxNzVkMDVjNjMzMGQKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RTT0F1dGhvcml6YXRpb24ubW0KQEAgLTAsMCArMSwxODUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0LmgiCisKKyNpZiBIQVZFKEFQUF9TU08pCisK
KyNpbXBvcnQgIkNsYXNzTWV0aG9kU3dpenpsZXIuaCIKKyNpbXBvcnQgIkluc3RhbmNlTWV0aG9k
U3dpenpsZXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0
V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8cGFs
L2NvY29hL0FwcFNTT1NvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0F1dGhLaXRT
UEkuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorI2ltcG9ydCA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW1wb3J0IDx3dGYvVVJMLmg+
CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworc3RhdGljIGJvb2wgbmF2aWdhdGlv
bkNvbXBsZXRlZCA9IGZhbHNlOworc3RhdGljIGJvb2wgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9
IGZhbHNlOworc3RhdGljIGJvb2wgYXV0aG9yaXphdGlvbkNhbmNlbGxlZCA9IGZhbHNlOworc3Rh
dGljIGJvb2wgdWlTaG93ZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIG5ld1dpbmRvd0NyZWF0ZWQg
PSBmYWxzZTsKK3N0YXRpYyBib29sIGhhdmVIdHRwQm9keSA9IGZhbHNlOworc3RhdGljIFN0cmlu
ZyBmaW5hbFVSTDsKK3N0YXRpYyBTT0F1dGhvcml6YXRpb24qIGdBdXRob3JpemF0aW9uOworc3Rh
dGljIGlkPFNPQXV0aG9yaXphdGlvbkRlbGVnYXRlPiBnRGVsZWdhdGU7CisjaWYgUExBVEZPUk0o
TUFDKQorc3RhdGljIEJsb2NrUHRyPHZvaWQoTlNOb3RpZmljYXRpb24gKik+IGdOb3RpZmljYXRp
b25DYWxsYmFjazsKKyNlbmRpZgorc3RhdGljIFJldGFpblB0cjxXS1dlYlZpZXc+IGdOZXdXaW5k
b3c7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBvcGVuZXJUZW1wbGF0ZSA9CisiPGh0bWw+IgorIjxi
dXR0b24gb25jbGljaz0nY2xpY2tNZSgpJyBzdHlsZT0nd2lkdGg6NDAwcHg7aGVpZ2h0OjQwMHB4
Jz53aW5kb3cub3BlbjwvYnV0dG9uPiIKKyI8c2NyaXB0PiIKKyJmdW5jdGlvbiBjbGlja01lKCki
CisieyIKKyIgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWNlaXZlTWVz
c2FnZSwgZmFsc2UpOyIKKyIgICAgbmV3V2luZG93ID0gd2luZG93Lm9wZW4oJyVzJyk7IgorIiAg
ICAlcyIKKyIgICAgaWYgKCFuZXdXaW5kb3cpIgorIiAgICAgICAgcmV0dXJuOyIKKyIgICAgY29u
c3QgcG9sbFRpbWVyID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyIKKyIgICAgICAg
IGlmIChuZXdXaW5kb3cuY2xvc2VkKSB7IgorIiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVy
dmFsKHBvbGxUaW1lcik7IgorIiAgICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRs
ZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdXaW5kb3dDbG9zZWQuJyk7IgorIiAgICAgICAg
fSIKKyIgICAgfSwgMjAwKTsiCisifSIKKyJmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCki
CisieyIKKyIgICAgaWYgKGV2ZW50Lm9yaWdpbiA9PSAnaHR0cDovL3d3dy5leGFtcGxlLmNvbScp
IHsiCisiICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5w
b3N0TWVzc2FnZShldmVudC5kYXRhKTsiCisiICAgICAgICAlcyIKKyIgICAgfSIKKyJ9IgorIjwv
c2NyaXB0PiIKKyI8L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIG5ld1dpbmRvd1Jlc3Bv
bnNlVGVtcGxhdGUgPQorIjxodG1sPiIKKyI8c2NyaXB0PiIKKyJ3aW5kb3cub3BlbmVyLnBvc3RN
ZXNzYWdlKCdIZWxsby4nLCAnKicpOyIKKyIlcyIKKyI8L3NjcmlwdD4iCisiPC9odG1sPiI7CisK
K3N0YXRpYyBjb25zdCBjaGFyKiBwYXJlbnRUZW1wbGF0ZSA9CisiPGh0bWw+IgorIjxpZnJhbWUg
c3JjPSclcyc+PC9pZnJhbWU+IgorIjxzY3JpcHQ+IgorImZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdl
KGV2ZW50KSIKKyJ7IgorIiAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFu
ZGxlci5wb3N0TWVzc2FnZShldmVudC5vcmlnaW4pOyIKKyIgICAgd2luZG93LndlYmtpdC5tZXNz
YWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoZXZlbnQuZGF0YSk7IgorIn0iCisi
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWNlaXZlTWVzc2FnZSwgZmFsc2Up
OyIKKyI8L3NjcmlwdD4iCisiPC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBpZnJhbWVU
ZW1wbGF0ZSA9CisiPGh0bWw+IgorIjxzY3JpcHQ+IgorInBhcmVudC5wb3N0TWVzc2FnZSgnSGVs
bG8uJywgJyonKTsiCisiPC9zY3JpcHQ+IgorIjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hh
ciogc2FtbFJlc3BvbnNlID0KKyI8aHRtbD4iCisiPHNjcmlwdD4iCisid2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ1NBTUwnKTsiCisiPC9zY3Jp
cHQ+IgorIjwvaHRtbD4iOworCitAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0
aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlEZWxlZ2F0
ZT4KK0Bwcm9wZXJ0eSBib29sIGlzRGVmYXVsdFBvbGljeTsKKy0gKGluc3RhbmNldHlwZSlpbml0
OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25E
ZWxlZ2F0ZQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmIChzZWxmID0gW3N1cGVy
IGluaXRdKQorICAgICAgICBzZWxmLmlzRGVmYXVsdFBvbGljeSA9IHRydWU7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5p
c2hOYXZpZ2F0aW9uOihXS05hdmlnYXRpb24gKiluYXZpZ2F0aW9uCit7CisgICAgRVhQRUNUX0ZB
TFNFKG5hdmlnYXRpb25Db21wbGV0ZWQpOworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSB0cnVl
OworICAgIGZpbmFsVVJMID0gbmF2aWdhdGlvbi5fcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmc7
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9u
IGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSlkZWNp
c2lvbkhhbmRsZXIKK3sKKyAgICBpZiAoc2VsZi5pc0RlZmF1bHRQb2xpY3kpIHsKKyAgICAgICAg
ZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBkZWNpc2lvbkhhbmRsZXIoX1dLTmF2aWdhdGlvbkFjdGlvblBv
bGljeUFsbG93V2l0aG91dFRyeWluZ0FwcExpbmspOworfQorCistIChXS1dlYlZpZXcgKil3ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjoo
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gZm9yTmF2aWdhdGlvbkFjdGlv
bjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiB3aW5kb3dGZWF0dXJlczoo
V0tXaW5kb3dGZWF0dXJlcyAqKXdpbmRvd0ZlYXR1cmVzCit7CisgICAgRVhQRUNUX0ZBTFNFKG5l
d1dpbmRvd0NyZWF0ZWQpOworICAgIG5ld1dpbmRvd0NyZWF0ZWQgPSB0cnVlOworICAgIGdOZXdX
aW5kb3cgPSBbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbl07CisgICAgW2dOZXdXaW5kb3cgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOnNlbGZdOworICAgIHJldHVybiBnTmV3V2luZG93LmdldCgpOworfQorCitAZW5kCisK
KyNpZiBQTEFURk9STShNQUMpCitAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlciA6IE5TVmlld0NvbnRyb2xsZXIKKyNlbGlmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZh
Y2UgVGVzdFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgor
I2VuZGlmCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0U09BdXRob3JpemF0aW9uVmlld0Nv
bnRyb2xsZXIKKworLSAodm9pZCl2aWV3RGlkQXBwZWFyCit7CisgICAgRVhQRUNUX0ZBTFNFKHVp
U2hvd2VkKTsKKyAgICB1aVNob3dlZCA9IHRydWU7Cit9CisKKy0gKHZvaWQpdmlld0RpZERpc2Fw
cGVhcgoreworICAgIEVYUEVDVF9UUlVFKHVpU2hvd2VkKTsKKyAgICB1aVNob3dlZCA9IGZhbHNl
OworfQorCitAZW5kCisKK3N0YXRpYyBib29sIG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMKGlkLCBTRUwsIE5TVVJMICp1cmwsIE5TSW50ZWdlcikKK3sKKyAgICBpZiAoIVt1
cmwubGFzdFBhdGhDb21wb25lbnQgaXNFcXVhbDpAInNpbXBsZS5odG1sIl0gJiYgIVt1cmwuaG9z
dCBpc0VxdWFsOkAid3d3LmV4YW1wbGUuY29tIl0gJiYgIVt1cmwubGFzdFBhdGhDb21wb25lbnQg
aXNFcXVhbDpAIkdldFNlc3Npb25Db29raWUuaHRtbCJdKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJyaWRlU2V0RGVsZWdhdGUo
aWQgc2VsZiwgU0VMLCBpZDxTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZT4gZGVsZWdhdGUpCit7Cisg
ICAgZ0F1dGhvcml6YXRpb24gPSBzZWxmOworICAgIGdEZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQor
CitzdGF0aWMgdm9pZCBvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwoaWQsIFNFTCwg
TlNVUkwgKnVybCwgTlNEaWN0aW9uYXJ5ICpoZWFkZXJzLCBOU0RhdGEgKmJvZHkpCit7CisgICAg
RVhQRUNUX1RSVUUoaGVhZGVycyAhPSBuaWwpOworICAgIEVYUEVDVF9UUlVFKChib2R5ID09IG5p
bCkgXiBoYXZlSHR0cEJvZHkpOworICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVyZm9y
bWVkKTsKKyAgICBhdXRob3JpemF0aW9uUGVyZm9ybWVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgb3ZlcnJpZGVDYW5jZWxBdXRob3JpemF0aW9uKGlkLCBTRUwpCit7CisgICAgRVhQRUNUX0ZB
TFNFKGF1dGhvcml6YXRpb25DYW5jZWxsZWQpOworICAgIGF1dGhvcml6YXRpb25DYW5jZWxsZWQg
PSB0cnVlOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordXNpbmcgTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgPSB2b2lkICheKShOU05vdGlmaWNhdGlvbiAqbm90ZSk7CitzdGF0aWMgaWQgb3ZlcnJpZGVB
ZGRPYnNlcnZlckZvck5hbWUoaWQsIFNFTCwgTlNOb3RpZmljYXRpb25OYW1lIG5hbWUsIGlkLCBO
U09wZXJhdGlvblF1ZXVlICosIE5vdGlmaWNhdGlvbkNhbGxiYWNrIGJsb2NrKQoreworICAgIGlm
IChbbmFtZSBpc0VxdWFsOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uXSkKKyAgICAgICAg
Z05vdGlmaWNhdGlvbkNhbGxiYWNrID0gbWFrZUJsb2NrUHRyKGJsb2NrKTsKKyAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wg
b3ZlcnJpZGVJc1VSTEZyb21BcHBsZU93bmVkRG9tYWluKGlkLCBTRUwsIE5TVVJMICopCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0U3RhdGUoKQoreworICAgIG5h
dmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBhdXRob3JpemF0aW9uUGVyZm9ybWVkID0g
ZmFsc2U7CisgICAgYXV0aG9yaXphdGlvbkNhbmNlbGxlZCA9IGZhbHNlOworICAgIHVpU2hvd2Vk
ID0gZmFsc2U7CisgICAgbmV3V2luZG93Q3JlYXRlZCA9IGZhbHNlOworICAgIGhhdmVIdHRwQm9k
eSA9IGZhbHNlOworICAgIGZpbmFsVVJMID0gZW1wdHlTdHJpbmcoKTsKKyAgICBnQXV0aG9yaXph
dGlvbiA9IG51bGxwdHI7CisgICAgZ0RlbGVnYXRlID0gbnVsbHB0cjsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgZ05vdGlmaWNhdGlvbkNhbGxiYWNrID0gbnVsbHB0cjsKKyNlbmRpZgorICAgIGdO
ZXdXaW5kb3cgPSBudWxscHRyOworfQorCitzdGF0aWMgdm9pZCBjb25maWd1cmVTT0F1dGhvcml6
YXRpb25XZWJWaWV3KFRlc3RXS1dlYlZpZXcgKndlYlZpZXcsIFRlc3RTT0F1dGhvcml6YXRpb25O
YXZpZ2F0aW9uRGVsZWdhdGUgKmRlbGVnYXRlKQoreworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZV07CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0
ZV07Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIdG1sKGNvbnN0IGNoYXIqIHRlbXBsYXRl
SHRtbCwgY29uc3QgU3RyaW5nJiBzdWJzdGl0dXRlLCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsU3Vi
c3RpdHV0ZTEgPSBlbXB0eVN0cmluZygpLCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsU3Vic3RpdHV0
ZTIgPSBlbXB0eVN0cmluZygpKQoreworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmVhbTsKKyAg
ICBzdHJlYW0ucHJpbnRmKHRlbXBsYXRlSHRtbCwgc3Vic3RpdHV0ZS51dGY4KCkuZGF0YSgpLCBv
cHRpb25hbFN1YnN0aXR1dGUxLnV0ZjgoKS5kYXRhKCksIG9wdGlvbmFsU3Vic3RpdHV0ZTIudXRm
OCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHN0cmVhbS50b1N0cmluZygpOworfQorCisvLyBGSVhN
RTxyZGFyOi8vcHJvYmxlbS80ODkwOTMzNj46IFJlcGxhY2UgdGhlIGJlbG93IHdpdGggQXBwU1NP
IGNvbnN0YW50cy4KK3N0YXRpYyB2b2lkIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoYm9vbCB1
c2VyQWN0aW9uSW5pdGlhdGVkLCBTdHJpbmcgaW5pdGlhdG9yT3JpZ2luLCBpbnQgaW5pdGlhdGlu
Z0FjdGlvbikKK3sKKyAgICBFWFBFQ1RfVFJVRShnQXV0aG9yaXphdGlvbik7CisgICAgLy8gRklY
TUU6IFJlbW92ZSB0aGUgc2VsZWN0b3Igb25jZSB0aGUgaU9TIGJvdHMgaGFzIGJlZW4gdXBkYXRl
ZCB0byBhIHJlY2VudCBTREsuCisgICAgYXV0byBzZWxlY3RvciA9IE5TU2VsZWN0b3JGcm9tU3Ry
aW5nKEAiYXV0aG9yaXphdGlvbk9wdGlvbnMiKTsKKyAgICBpZiAoW2dBdXRob3JpemF0aW9uIHJl
c3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKKyAgICAgICAgRVhQRUNUX0VRKCgoTlNOdW1i
ZXIgKilbZ0F1dGhvcml6YXRpb24gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXVtTT0F1dGhvcml6
YXRpb25PcHRpb25Vc2VyQWN0aW9uSW5pdGlhdGVkXSkuYm9vbFZhbHVlLCB1c2VyQWN0aW9uSW5p
dGlhdGVkKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFtnQXV0aG9yaXphdGlvbiBwZXJmb3Jt
U2VsZWN0b3I6c2VsZWN0b3JdW0AiaW5pdGlhdG9yT3JpZ2luIl0sIGluaXRpYXRvck9yaWdpbik7
CisgICAgICAgIEVYUEVDVF9FUSgoKE5TTnVtYmVyICopW2dBdXRob3JpemF0aW9uIHBlcmZvcm1T
ZWxlY3RvcjpzZWxlY3Rvcl1bQCJpbml0aWF0aW5nQWN0aW9uIl0pLmludFZhbHVlLCBpbml0aWF0
aW5nQWN0aW9uKTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVT
VChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgTm9JbnRlcmNlcHRpb25zKQoreworICAgIHJlc2V0
U3RhdGUoKTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29u
ZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworCisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZp
bmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9u
RXJyb3IpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFp
blB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3
IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1d
OworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCitURVNU
KFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25Eb05vdEhhbmRsZSkKK3sKKyAg
ICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVD
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihz
ZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhl
YWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwg
ZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3Jp
emF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAi
IiwgMCk7CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb25EaWROb3RIYW5kbGU6Z0F1dGhv
cml6YXRpb25dOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBF
WFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOwor
fQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25DYW5jZWwpCit7
CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RT
d2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0
b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdh
dGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0
aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0
dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2lu
QXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRl
bnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwor
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0
aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxz
ZSwgIiIsIDApOworCisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ2FuY2VsOmdBdXRo
b3JpemF0aW9uXTsKKyAgICAvLyBGSVhNRTogRmluZCBhIGRlbGVnYXRlIG1ldGhvZCB0aGF0IGNh
biBkZXRlY3QgbG9hZCBjYW5jZWxzLgorICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKCIiLCB3ZWJWaWV3LmdldCgpLl9jb21taXR0ZWRVUkwuYWJzb2x1dGVTdHJpbmcp
OworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25Db21wbGV0
ZVdpdGhvdXREYXRhKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihj
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAg
IEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihv
dmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8
TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXph
dGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlv
bkRpZENvbXBsZXRlOmdBdXRob3JpemF0aW9uXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25D
b21wbGV0ZWQpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVT
dHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50
ZXJjZXB0aW9uVW5leHBlY3RlZENvbXBsZXRpb24pCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAg
IENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xh
c3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNv
ZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsK
KworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVz
dFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cisg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAgW2dEZWxl
Z2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBBdXRo
b3JpemF0aW9uSGVhZGVyczphZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSkuZ2V0
KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCisv
LyB7IERlZmF1bHQgZGVsZWdhdGUgbWV0aG9kLCBObyBBcHAgTGlua3MgfQorVEVTVChTT0F1dGhv
cml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZDEpCit7CisgICAgcmVzZXRTdGF0
ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpy
ZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1
dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBC
b2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBz
dWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rl
c3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZv
cm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisg
ICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRv
cHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgp
IHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBA
IkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAgIFtnRGVs
ZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVz
cG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgVXRpbDo6
cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNlbmRpZgorICAgIEVYUEVDVF9XS19TVFJFUShy
ZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCisvLyB7IERl
ZmF1bHQgZGVsZWdhdGUgbWV0aG9kLCBXaXRoIEFwcCBMaW5rcyB9CitURVNUKFNPQXV0aG9yaXph
dGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkMikKK3sKKyAgICByZXNldFN0YXRlKCk7
CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3Bv
bnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNl
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIC8vIEZvcmNlIEFwcCBMaW5rcyB3aXRo
IGEgcmVxdWVzdC5VUkwgdGhhdCBoYXMgYSBkaWZmZXJlbnQgaG9zdCB0aGFuIHRoZSBjdXJyZW50
IG9uZSAoZW1wdHkgaG9zdCkgYW5kIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3Vs
ZEFsbG93LgorICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1w
bGUuY29tIik7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IF9sb2FkUmVxdWVzdDpb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkxdIHNob3VsZE9wZW5FeHRlcm5hbFVS
THM6WUVTXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICAvLyBIZXJlIHdlIGZvcmNlIFJlZGly
ZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbiB0byBnbyB0byB0aGUgd2l0aCB1c2VyIGdlc3R1cmVz
IHJvdXRlLgorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJsb2NhdGlvbiA9ICclQCciLCAoaWQpdGVzdFVSTC5zdHJpbmcoKV0gY29t
cGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGNoZWNrQXV0aG9yaXphdGlvbk9w
dGlvbnMoZmFsc2UsICIiLCAwKTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBjaGVja0F1dGhv
cml6YXRpb25PcHRpb25zKHRydWUsICJudWxsIiwgMCk7CisjZW5kaWYKKworICAgIFJldGFpblB0
cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hU
VFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjMwMiBI
VFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVk
aXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRp
b246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdl
dCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAg
VXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVk
aXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworLy8geyBDdXN0
b20gZGVsZWdhdGUgbWV0aG9kLCBXaXRoIEFwcCBMaW5rcyB9CitURVNUKFNPQXV0aG9yaXphdGlv
blJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkMykKK3sKKyAgICByZXNldFN0YXRlKCk7Cisg
ICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNl
Q29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWlu
dGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkp
OworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIC8vIEZvcmNlIEFwcCBMaW5rcyB3aXRoIGEg
cmVxdWVzdC5VUkwgdGhhdCBoYXMgYSBkaWZmZXJlbnQgaG9zdCB0aGFuIHRoZSBjdXJyZW50IG9u
ZSAoZW1wdHkgaG9zdCkgYW5kIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFs
bG93LgorICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1wbGUu
Y29tIik7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IF9sb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkxdIHNob3VsZE9wZW5FeHRlcm5hbFVSTHM6
WUVTXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICAvLyBIZXJlIHdlIGZvcmNlIFJlZGlyZWN0
U09BdXRob3JpemF0aW9uU2Vzc2lvbiB0byBnbyB0byB0aGUgd2l0aCB1c2VyIGdlc3R1cmVzIHJv
dXRlLgorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJsb2NhdGlvbiA9ICclQCciLCAoaWQpdGVzdFVSTC5zdHJpbmcoKV0gY29tcGxl
dGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBl
cmZvcm1lZCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlv
bnMoZmFsc2UsICIiLCAwKTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBjaGVja0F1dGhvcml6
YXRpb25PcHRpb25zKHRydWUsICJudWxsIiwgMCk7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxO
U1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjMwMiBIVFRQ
VmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVkaXJl
Y3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246
Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgp
IGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRp
bDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJl
Y3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworLy8geyBfV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5QWxsb3dXaXRob3V0VHJ5aW5nQXBwTGluaywgTm8gQXBwIExpbmtz
IH0KK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQ0KQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9k
U3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVn
YXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpo
dHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdp
bkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwg
PSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0
ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
KworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgLy8gQSBzZXBhcmF0
ZSBkZWxlZ2F0ZSB0aGF0IGltcGxlbWVudHMgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bi4KKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBbZGVsZWdhdGUg
c2V0SXNEZWZhdWx0UG9saWN5OmZhbHNlXTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1
bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9u
cyhmYWxzZSwgIiIsIDApOworCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5z
aW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAg
ICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0
V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8x
LjEiIGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVSTCBhYnNvbHV0ZVN0
cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBk
aWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRp
b25Db21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVk
ID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNlbmRpZgor
ICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmlu
YWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25T
dWNjZWVkV2l0aE90aGVySHR0cFN0YXR1c0NvZGUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAg
IENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xh
c3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNv
ZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsK
KworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVz
dFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cisg
ICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworCisgICAgUmV0YWlu
UHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05T
SFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0Nv
ZGU6NDAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBb
Z0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRU
UFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwp
OworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVk
V2l0aENvb2tpZSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxl
ciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIz
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5T
VVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNp
bXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRp
b25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0
VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxs
b2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246
QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiU2V0LUNvb2tpZSIgOiBAInNlc3Npb25pZD0z
OGFmZXM3YTg7IiwgQCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1d
KTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxl
dGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNl
OworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBF
Q1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsK
KworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0
ZUphdmFTY3JpcHQ6IEAiZG9jdW1lbnQuY29va2llIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TU3Ry
aW5nICpyZXN1bHQsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoInNlc3Np
b25pZD0zOGFmZXM3YTgiLCBbcmVzdWx0IFVURjhTdHJpbmddKTsKKyAgICAgICAgbmF2aWdhdGlv
bkNvbXBsZXRlZCA9IHRydWU7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29t
cGxldGVkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9u
U3VjY2VlZFdpdGhDb29raWVzKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRh
aW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdl
YktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2
aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0
aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCld
XTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0
aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4g
cmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2lt
cGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNw
b25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBIVFRQ
VmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJTZXQtQ29va2llIiA6IEAic2Vz
c2lvbmlkPTM4YWZlczdhOCwgcXdlcnR5PTIxOWZmd2VmOXcwZiwgaWQ9YTNmV2E7IiwgQCJMb2Nh
dGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRl
IGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNl
OnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5n
ZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigm
bmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJl
Y3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKKworICAgIG5hdmlnYXRpb25D
b21wbGV0ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiZG9j
dW1lbnQuY29va2llIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5nICpyZXN1bHQsIE5TRXJy
b3IgKikgeworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoImlkPWEzZldhOyBxd2VydHk9MjE5ZmZ3
ZWY5dzBmOyBzZXNzaW9uaWQ9MzhhZmVzN2E4IiwgW3Jlc3VsdCBVVEY4U3RyaW5nXSk7CisgICAg
ICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSB0cnVlOworICAgIH1dOworICAgIFV0aWw6OnJ1bigm
bmF2aWdhdGlvbkNvbXBsZXRlZCk7Cit9CisKKy8vIFRoZSByZWRpcmVjdGVkIFVSTCBoYXMgYSBk
aWZmZXJlbnQgZG9tYWluIHRoYW4gdGhlIHRlc3QgVVJMLgorVEVTVChTT0F1dGhvcml6YXRpb25S
ZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhSZWRpcmVjdGlvbkFuZENvb2tpZSkKK3sK
KyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0
ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0
cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25O
YXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6
YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIGF1dG8g
dGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tIik7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dGVzdFVSTF1dOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEhlcmUgd2Ug
Zm9yY2UgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uIHRvIGdvIHRvIHRoZSB3aXRoIHVz
ZXIgZ2VzdHVyZXMgcm91dGUuCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uID0gJyVAJyIsIChpZCl0ZXN0VVJMLnN0
cmluZygpXSBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVuKCZh
dXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgY2hlY2tBdXRo
b3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDApOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAg
IGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgIm51bGwiLCAwKTsKKyNlbmRpZgorCisg
ICAgUmV0YWluUHRyPE5TVVJMPiByZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRv
cHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1
c0NvZGU6MzAyIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIlNldC1D
b29raWUiIDogQCJzZXNzaW9uaWQ9MzhhZmVzN2E4OyIsIEAiTG9jYXRpb24iIDogW3JlZGlyZWN0
VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdB
dXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBo
dHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6
OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0
VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7CisKKyAgICBuYXZpZ2F0aW9uQ29t
cGxldGVkID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImRvY3Vt
ZW50LmNvb2tpZSIgY29tcGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqcmVzdWx0LCBOU0Vycm9y
ICopIHsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBbcmVzdWx0IFVURjhTdHJpbmddKTsK
KyAgICAgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IHRydWU7CisgICAgfV07CisgICAgVXRpbDo6
cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRp
cmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhEaWZmZXJlbnRPcmlnaW4pCit7CisgICAgcmVz
ZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVs
ZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJz
Omh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHRO
UyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVn
YXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIiIsIDAp
OworCisgICAgYXV0byByZWRpcmVjdFVSTCA9IFVSTChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1w
bGUuY29tIik7CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25z
ZSBhbGxvY10gaW5pdFdpdGhVUkw6cmVkaXJlY3RVUkwgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNp
b246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9jYXRpb24iIDogcmVkaXJlY3RVUkwu
c3RyaW5nKCkgfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlv
biBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRv
cHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmln
YXRpb25Db21wbGV0ZWQpOworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29s
dXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3Qs
IEludGVyY2VwdGlvblN1Y2NlZWRXaXRoV2FpdGluZ1Nlc3Npb24pCit7CisgICAgcmVzZXRTdGF0
ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpy
ZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1
dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxl
cjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBC
b2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBz
dWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rl
c3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBb
d2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJW
aWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgLy8gVGhlIHNlc3Npb24g
d2lsbCBiZSB3YWl0aW5nIHNpbmNlIHRoZSB3ZWIgdmlldyBpcyBpcyBub3QgaW50IHRoZSB3aW5k
b3cuCisgICAgW3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07Cisg
ICAgVXRpbDo6c2xlZXAoMC41KTsKKyAgICBFWFBFQ1RfRkFMU0UoYXV0aG9yaXphdGlvblBlcmZv
cm1lZCk7CisKKyAgICAvLyBTaG91bGQgYWN0aXZhdGUgdGhlIHNlc3Npb24uCisgICAgW3dlYlZp
ZXcgYWRkVG9UZXN0V2luZG93XTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3Jt
ZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAg
IFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0
TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBz
dGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJM
b2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVn
YXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3Bv
bnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRd
KS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1
bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVk
aXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1
dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhBY3RpdmVTZXNzaW9u
RGlkTW92ZVdpbmRvdykKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6
emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
Y2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJl
dF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9y
aXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRy
PE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
InNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07Cisg
ICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6
YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICAvLyBTaG91bGQgYmUgYSBubyBvcC4K
KyAgICBbd2ViVmlldyBhZGRUb1Rlc3RXaW5kb3ddOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBy
ZWRpcmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1w
bGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3Bv
bnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBW
ZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVj
dFVSTCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpn
QXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkg
aHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGls
OjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBuYXZp
Z2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKyNlbmRpZgorICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVSTC5nZXQoKS5hYnNv
bHV0ZVN0cmluZywgZmluYWxVUkwpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0
LCBJbnRlcmNlcHRpb25TdWNjZWVkVHdpY2UpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENs
YXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3Mo
KSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25X
aXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnBy
ZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKwor
ICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1
dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGF1dGhvcml6YXRpb25QZXJm
b3JtZWQgPSBmYWxzZTsKKyAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgICAgIFV0aWw6OnJ1bigmYXV0
aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMo
ZmFsc2UsICIiLCAwKTsKKworICAgICAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7Cisg
ICAgICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgICAgIGF1dG8gcmVzcG9u
c2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RV
UkwuZ2V0KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmll
bGRzOkB7IEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7Cisg
ICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0
ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29t
cGxldGVkKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG5hdmlnYXRpb25Db21wbGV0ZWQg
PSBmYWxzZTsKKyAgICAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNlbmRp
ZgorICAgICAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJp
bmcsIGZpbmFsVVJMKTsKKyAgICB9Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3Qs
IEludGVyY2VwdGlvblN1Y2NlZWRTdXBwcmVzc0FjdGl2ZVNlc3Npb24pCit7CisgICAgcmVzZXRT
dGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdh
dGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0
dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyNChQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5jZWxBdXRob3JpemF0aW9uKSwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuY2VsQXV0aG9yaXphdGlvbikpOworCisg
ICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBj
aGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7CisKKyAgICAvLyBTdXBwcmVz
cyB0aGUgbGFzdCBhY3RpdmUgc2Vzc2lvbi4KKyAgICBhdXRob3JpemF0aW9uUGVyZm9ybWVkID0g
ZmFsc2U7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uQ2FuY2Vs
bGVkKTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNr
QXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFJldGFpblB0cjxOU1VS
TD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxS
ZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBI
VFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVk
aXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRp
b246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdl
dCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAg
VXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
bmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNv
bXBsZXRlZCk7CisjZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCku
YWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRp
cmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFN1cHByZXNzV2FpdGluZ1Nlc3Npb24pCit7CisgICAg
cmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0
U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9u
V2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxl
ciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0
RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsK
KyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFk
ZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246
QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
ICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgLy8gVGhl
IHNlc3Npb24gd2lsbCBiZSB3YWl0aW5nIHNpbmNlIHRoZSB3ZWIgdmlldyBpcyBpcyBub3QgaW50
IHRoZSB3aW5kb3cuCisgICAgW3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdl
dCgpXV07CisgICAgVXRpbDo6c2xlZXAoMC41KTsKKyAgICBFWFBFQ1RfRkFMU0UoYXV0aG9yaXph
dGlvblBlcmZvcm1lZCk7CisKKyAgICAvLyBTdXBwcmVzcyB0aGUgbGFzdCB3YWl0aW5nIHNlc3Np
b24uCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6c2xlZXAoMC41KTsKKyAgICBFWFBFQ1RfRkFM
U0UoYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICAvLyBBY3RpdmF0ZSB0aGUgbGFzdCBz
ZXNzaW9uLgorICAgIFt3ZWJWaWV3IGFkZFRvVGVzdFdpbmRvd107CisgICAgVXRpbDo6cnVuKCZh
dXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZh
bHNlLCAiIiwgMCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246
QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1
dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRo
VVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIg
aGVhZGVyRmllbGRzOkB7IEAiTG9jYXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5n
XSB9XSk7CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENv
bXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0XSkuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNv
bXBsZXRlZCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSBm
YWxzZTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworI2VuZGlmCisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlZGlyZWN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVS
TCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2Nl
ZWRTQU1MKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3
aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJm
b3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8
SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3Rh
bmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3Mo
KSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9u
V2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+
IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxl
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICAvLyBBZGQgYSBodHRwIGJvZHkg
dG8gdGhlIHJlcXVlc3QgdG8gbWltaWMgYSBTQU1MIHJlcXVlc3QuCisgICAgYXV0byByZXF1ZXN0
ID0gYWRvcHROUyhbTlNNdXRhYmxlVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdl
dCgpXSk7CisgICAgW3JlcXVlc3Qgc2V0SFRUUEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdF0pLmdldCgpXTsKKyAgICBoYXZlSHR0cEJvZHkgPSB0cnVlOworCisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6cmVxdWVzdC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9u
UGVyZm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiIiwgMCk7
CisKKyAgICAvLyBQYXNzIGEgSFRUUCAyMDAgcmVzcG9uc2Ugd2l0aCBhIGh0bWwgdG8gbWltaWMg
YSBTQU1MIHJlc3BvbnNlLgorICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJM
UmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3RhdHVzQ29kZToyMDAg
SFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIFtnRGVsZWdh
dGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9u
c2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpzYW1sUmVzcG9uc2UgbGVuZ3RoOnN0cmxlbihzYW1sUmVzcG9uc2UpXSkuZ2V0KCld
OworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU0FNTCJdOworfQorCitURVNUKFNPQXV0
aG9yaXphdGlvblJlZGlyZWN0LCBBdXRob3JpemF0aW9uT3B0aW9ucykKK3sKKyAgICByZXNldFN0
YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJM
OnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3Jt
QXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6
bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0
ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIElu
c3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xh
c3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0
cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9u
V2l0aFVSTCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1M
U3RyaW5nOkAiIiBiYXNlVVJMOihOU1VSTCAqKVVSTChVUkwoKSwgImh0dHA6Ly93d3cud2Via2l0
Lm9yZyIpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAgIFt3ZWJW
aWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJsb2NhdGlvbiA9ICdodHRwOi8vd3d3LmV4YW1wbGUu
Y29tJyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRp
b25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImh0dHA6
Ly93d3cud2Via2l0Lm9yZyIsIDApOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0
LCBJbnRlcmNlcHRpb25EaWROb3RIYW5kbGVUd2ljZSkKK3sKKyAgICByZXNldFN0YXRlKCk7Cisg
ICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNl
Q29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWlu
dGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0
aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNl
bGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkp
OworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0
aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3Vy
ZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOwor
CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0
ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsK
KworICAgIC8vIFRlc3QgcGFzc2VzIGlmIG5vIGNyYXNoZXMuCisgICAgW2dEZWxlZ2F0ZSBhdXRo
b3JpemF0aW9uRGlkTm90SGFuZGxlOmdBdXRob3JpemF0aW9uXTsKKyAgICBbZ0RlbGVnYXRlIGF1
dGhvcml6YXRpb25EaWROb3RIYW5kbGU6Z0F1dGhvcml6YXRpb25dOworfQorCitURVNUKFNPQXV0
aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25Db21wbGV0ZVR3aWNlKQoreworICAgIHJl
c2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNP
QXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldp
dGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBl
cmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIg
c3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERl
bGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7Cisg
ICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVy
czpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6
YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7
CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxl
Z2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRp
b25QZXJmb3JtZWQpOworCisgICAgLy8gVGVzdCBwYXNzZXMgaWYgbm8gY3Jhc2hlcy4KKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IHJlZGlyZWN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5T
KFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwuZ2V0KCkgc3Rh
dHVzQ29kZTozMDIgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiTG9j
YXRpb24iIDogW3JlZGlyZWN0VVJMIGFic29sdXRlU3RyaW5nXSB9XSk7CisgICAgW2dEZWxlZ2F0
ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25z
ZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSku
Z2V0KCldOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRD
b21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKK30KKworLy8gRklYTUUoMTc1MjA0KTogRW5h
YmxlIHRoZSBpT1MgdGVzdHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmIFBMQVRGT1JNKE1B
QykKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRo
VUkpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0
RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVz
dFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1
bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRvIHZpZXdDb250cm9sbGVyID0g
YWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gdmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNaZXJvUmVjdF0pOworICAgIFt2aWV3Q29udHJvbGxlciBzZXRWaWV3OnZpZXcuZ2V0KCldOwor
CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIHByZXNlbnRWaWV3
Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlci5nZXQoKSB3aXRoQ29tcGxldGlvbjpeKEJPT0wgc3Vj
Y2VzcywgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIH1d
OworICAgIFV0aWw6OnJ1bigmdWlTaG93ZWQpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiByZWRp
cmVjdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUy
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNl
IGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6MzAyIEhUVFBWZXJz
aW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIkxvY2F0aW9uIiA6IFtyZWRpcmVjdFVS
TCBhYnNvbHV0ZVN0cmluZ10gfV0pOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0
aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0
cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKKyAgICBVdGlsOjpy
dW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAgIEVYUEVDVF9XS19TVFJFUShyZWRpcmVjdFVS
TC5nZXQoKS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworICAgIEVYUEVDVF9GQUxTRSh1aVNo
b3dlZCk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkNh
bmNlbFdpdGhVSSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxl
ciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIz
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5T
VVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNp
bXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKworICAgIGF1dG8gdmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB2aWV3ID0gYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU1plcm9SZWN0XSk7CisgICAgW3ZpZXdDb250cm9sbGVyIHNldFZpZXc6dmlldy5n
ZXQoKV07CisKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gcHJl
c2VudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyLmdldCgpIHdpdGhDb21wbGV0aW9uOl4o
Qk9PTCBzdWNjZXNzLCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7
CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZ1aVNob3dlZCk7CisKKyAgICBbZ0RlbGVnYXRlIGF1
dGhvcml6YXRpb25EaWRDYW5jZWw6Z0F1dGhvcml6YXRpb25dOworICAgIC8vIEZJWE1FOiBGaW5k
IGEgZGVsZWdhdGUgbWV0aG9kIHRoYXQgY2FuIGRldGVjdCBsb2FkIGNhbmNlbHMuCisgICAgVXRp
bDo6c2xlZXAoMC41KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIHdlYlZpZXcuZ2V0KCkuX2Nv
bW1pdHRlZFVSTC5hYnNvbHV0ZVN0cmluZyk7CisgICAgRVhQRUNUX0ZBTFNFKHVpU2hvd2VkKTsK
K30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uRXJyb3JXaXRo
VUkpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenps
ZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1B
dXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0
RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6Omdl
dFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVz
dFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1
bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisKKyAgICBhdXRvIHZpZXdDb250cm9sbGVyID0g
YWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gdmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNaZXJvUmVjdF0pOworICAgIFt2aWV3Q29udHJvbGxlciBzZXRWaWV3OnZpZXcuZ2V0KCldOwor
CisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIHByZXNlbnRWaWV3
Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlci5nZXQoKSB3aXRoQ29tcGxldGlvbjpeKEJPT0wgc3Vj
Y2VzcywgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIH1d
OworICAgIFV0aWw6OnJ1bigmdWlTaG93ZWQpOworCisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0
aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEVycm9yOmFkb3B0TlMoW1tOU0Vycm9y
IGFsbG9jXSBpbml0V2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29kZTowIHVzZXJJbmZv
Om5pbF0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworICAg
IEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7
CisgICAgRVhQRUNUX0ZBTFNFKHVpU2hvd2VkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25S
ZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFN1cHByZXNzQWN0aXZlU2Vzc2lvbldpdGhVSSkK
K3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEo
UEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxl
Z2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6
aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dp
enpsZXI0KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhbmNlbEF1
dGhvcml6YXRpb24pLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5jZWxBdXRob3Jp
emF0aW9uKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tU
ZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAg
Y29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5n
ZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJm
b3JtZWQpOworCisgICAgYXV0byB2aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBh
ZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdKTsKKyAgICBb
dmlld0NvbnRyb2xsZXIgc2V0Vmlldzp2aWV3LmdldCgpXTsKKworICAgIFtnRGVsZWdhdGUgYXV0
aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xsZXI6dmlld0NvbnRy
b2xsZXIuZ2V0KCkgd2l0aENvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikgewor
ICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJnVp
U2hvd2VkKTsKKworICAgIC8vIFN1cHByZXNzIHRoZSBsYXN0IGFjdGl2ZSBzZXNzaW9uLgorICAg
IGF1dGhvcml6YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGls
OjpydW4oJmF1dGhvcml6YXRpb25DYW5jZWxsZWQpOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXph
dGlvblBlcmZvcm1lZCk7CisgICAgRVhQRUNUX0ZBTFNFKHVpU2hvd2VkKTsKKworICAgIFJldGFp
blB0cjxOU1VSTD4gcmVkaXJlY3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tO
U0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXND
b2RlOjMwMiBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlv
biIgOiBbcmVkaXJlY3RVUkwgYWJzb2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1
dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJl
c3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQo
KV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKK30KKwor
VEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgU2hvd1VJVHdpY2UpCit7CisgICAgcmVzZXRT
dGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVS
TDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6
emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdh
dGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0
dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlv
bldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1s
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBl
cmZvcm1lZCk7CisKKyAgICBhdXRvIHZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gdmlldyA9
IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdF0pOworICAg
IFt2aWV3Q29udHJvbGxlciBzZXRWaWV3OnZpZXcuZ2V0KCldOworCisgICAgW2dEZWxlZ2F0ZSBh
dXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIHByZXNlbnRWaWV3Q29udHJvbGxlcjp2aWV3Q29u
dHJvbGxlci5nZXQoKSB3aXRoQ29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqKSB7
CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIH1dOworICAgIFV0aWw6OnJ1bigm
dWlTaG93ZWQpOworCisgICAgdWlTaG93ZWQgPSBmYWxzZTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhv
cml6YXRpb246Z0F1dGhvcml6YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9s
bGVyLmdldCgpIHdpdGhDb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcikg
eworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgICAgIEVYUEVDVF9FUShlcnJv
ci5jb2RlLCBrU09FcnJvckF1dGhvcml6YXRpb25QcmVzZW50YXRpb25GYWlsZWQpOworICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoZXJyb3IuZG9tYWluLCAiY29tLmFwcGxlLkFwcFNTTy5BdXRob3Jp
emF0aW9uRXJyb3IiKTsKKyAgICAgICAgdWlTaG93ZWQgPSB0cnVlOworICAgIH1dOworICAgIFV0
aWw6OnJ1bigmdWlTaG93ZWQpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitURVNU
KFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBOU05vdGlmaWNhdGlvbkNlbnRlcikKK3sKKyAgICBy
ZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25X
aXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5Q
ZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXRE
ZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOwor
ICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRl
cnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpA
Imh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0
aW9uUGVyZm9ybWVkKTsKKworICAgIGF1dG8gdmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbVGVz
dFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB2
aWV3ID0gYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0XSk7
CisgICAgeworICAgICAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyNChbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgY2xhc3NdLCBAc2VsZWN0b3IoYWRkT2JzZXJ2ZXJGb3JOYW1lOm9iamVj
dDpxdWV1ZTp1c2luZ0Jsb2NrOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUFkZE9i
c2VydmVyRm9yTmFtZSkpOworICAgICAgICBbdmlld0NvbnRyb2xsZXIgc2V0Vmlldzp2aWV3Lmdl
dCgpXTsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIHBy
ZXNlbnRWaWV3Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlci5nZXQoKSB3aXRoQ29tcGxldGlvbjpe
KEJPT0wgc3VjY2VzcywgTlNFcnJvciAqKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzdWNj
ZXNzKTsKKyAgICAgICAgfV07CisgICAgICAgIFV0aWw6OnJ1bigmdWlTaG93ZWQpOworICAgIH0K
KworICAgIGdOb3RpZmljYXRpb25DYWxsYmFjayhudWxscHRyKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
dWlTaG93ZWQpOworfQorI2VuZGlmCisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIE5vSW50
ZXJjZXB0aW9ucykKK3sKKyAgICByZXNldFN0YXRlKCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+
IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxl
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRl
LCB0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisK
KyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOnRlc3RVUkwuZ2V0
KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyAgICBuYXZpZ2F0
aW9uQ29tcGxldGVkID0gZmFsc2U7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IHNl
bmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsK
KyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAi
Y2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVu
KCZuZXdXaW5kb3dDcmVhdGVkKTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nLCBmaW5h
bFVSTCk7Cit9CisKKy8vIEZJWE1FKDE3MjYxNCk6IEVuYWJsZSB0aGUgZm9sbG93aW5nIHRlc3Qg
Zm9yIGlPUyBvbmNlIHRoZSBidWcgaXMgZml4ZWQuCisjaWYgUExBVEZPUk0oTUFDKQorVEVTVChT
T0F1dGhvcml6YXRpb25Qb3BVcCwgTm9JbnRlcmNlcHRpb25zU3ViRnJhbWUpCit7CisgICAgcmVz
ZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVs
ZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJz
Omh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBSZXRh
aW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdl
YktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIGlmcmFtZVRlc3RIdG1sID0gZ2VuZXJhdGVI
dG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29sdXRlU3RyaW5nKTsKKyAgICBh
dXRvIHRlc3RIdG1sID0gbWFrZVN0cmluZygiPGlmcmFtZSBzdHlsZT0nd2lkdGg6NDAwcHg7aGVp
Z2h0OjQwMHB4JyBzcmNkb2M9XCIiLCBpZnJhbWVUZXN0SHRtbCwgIlwiIC8+Iik7CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFz
ZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworCisgICAgLy8gVGhlIG5ldyB3aW5kb3cgd2lsbCBub3QgbmF2aWdhdGUgdG8gdGhlIHRlc3RV
UkwgYXMgdGhlIGlmcmFtZSBoYXMgdW5pcXVlIG9yaWdpbi4KKyAgICBbd2ViVmlldyBzZW5kQ2xp
Y2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisgICAg
VXRpbDo6cnVuKCZuZXdXaW5kb3dDcmVhdGVkKTsKKyAgICBFWFBFQ1RfRkFMU0UoYXV0aG9yaXph
dGlvblBlcmZvcm1lZCk7Cit9CisjZW5kaWYKKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwg
Tm9JbnRlcmNlcHRpb25zV2l0aG91dFVzZXJHZXN0dXJlKQoreworICAgIHJlc2V0U3RhdGUoKTsK
KyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9u
c2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisKKyAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBqYXZhU2NyaXB0Q2FuT3BlbldpbmRv
d3NBdXRvbWF0aWNhbGx5IGlzIE5PIG9uIGlPUywgYW5kIFlFUyBvbiBtYWNPUy4KKyAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMuamF2YVNjcmlwdENh
bk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSA9IFlFUzsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgX2V2YWx1YXRl
SmF2YVNjcmlwdFdpdGhvdXRVc2VyR2VzdHVyZTogQCJ3aW5kb3cub3BlbignaHR0cDovL3d3dy5l
eGFtcGxlLmNvbScpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgIFV0aWw6OnJ1bigmbmV3
V2luZG93Q3JlYXRlZCk7CisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQp
OworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRpb25FcnJvcikKK3sK
KyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJp
ZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0
ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRo
b3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0
cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0g
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRl
bnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwor
ICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0
ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOworCisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0g
YWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCks
IGRlbGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1s
IGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2lu
dDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9S
TShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29t
cGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTov
LyIsIDEpOworCisgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOworICAgIG5hdmln
YXRpb25Db21wbGV0ZWQgPSBmYWxzZTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1
dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoRXJyb3I6YWRvcHROUyhbW05TRXJyb3IgYWxsb2Nd
IGluaXRXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRvbWFpbiBjb2RlOjAgdXNlckluZm86bmlsXSku
Z2V0KCldOworICAgIFV0aWw6OnJ1bigmbmV3V2luZG93Q3JlYXRlZCk7CisgICAgVXRpbDo6cnVu
KCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEodGVzdFVSTC5nZXQo
KS5hYnNvbHV0ZVN0cmluZywgZmluYWxVUkwpOworICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0
aW9uUGVyZm9ybWVkKTsgLy8gRG9uJ3QgaW50ZXJjZXB0IHRoZSBmaXJzdCBuYXZpZ2F0aW9uIGlu
IHRoZSBuZXcgd2luZG93LgorfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNl
cHRpb25DYW5jZWwpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNh
blBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAg
SW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6
YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxO
U1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRl
c3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29s
dXRlU3RyaW5nKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigm
bmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZpZXcg
c2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFd
OworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDog
QCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpy
dW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlv
bnModHJ1ZSwgImZpbGU6Ly8iLCAxKTsKKworICAgIC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3IG5l
ZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdodCB0aGUgd2F5LgorICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb25EaWRDYW5jZWw6Z0F1dGhvcml6YXRp
b25dOworICAgIH0KKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4i
XTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9uU3VjY2VlZENs
b3NlQnlJdHNlbGYpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenps
ZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNh
blBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAg
SW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25D
bGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVy
MyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6
YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1Q
PihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxO
U1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3
LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJU
ZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQw
MCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsK
KyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBu
dW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFs
dWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2Vu
ZGlmCisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1
dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICBhdXRvIHJlc3Bv
bnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0
VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpu
aWxdKTsKKyAgICBhdXRvIHJlc29uc2VIdG1sQ1N0cmluZyA9IGdlbmVyYXRlSHRtbChuZXdXaW5k
b3dSZXNwb25zZVRlbXBsYXRlLCAid2luZG93LmNsb3NlKCk7IikudXRmOCgpOyAvLyBUaGUgcG9w
IHVwIGNsb3NlcyBpdHNlbGYuCisgICAgLy8gVGhlIHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8g
YmUgZGVzdHJveWVkIHJpZ2h0IHRoZSB3YXkuCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdp
dGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczpyZXNvbnNlSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNv
bnNlSHRtbENTdHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgfQorICAgIFt3ZWJWaWV3IHdh
aXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJX
aW5kb3dDbG9zZWQuIl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEludGVyY2Vw
dGlvblN1Y2NlZWRDbG9zZUJ5UGFyZW50KQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFz
c01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6
emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Io
YmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAg
ICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgp
LCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0
ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCksICIiLCAiZXZlbnQuc291cmNl
LmNsb3NlKCk7Iik7IC8vIFRoZSBwYXJlbnQgY2xvc2VzIHRoZSBwb3AgdXAuCisKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwor
ICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdh
dGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVS
TDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwor
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFr
ZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykK
KyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9u
SGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9y
bWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7
CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9j
XSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRUUC8x
LjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIHJlc29uc2VIdG1sQ1N0cmluZyA9IGdl
bmVyYXRlSHRtbChuZXdXaW5kb3dSZXNwb25zZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgIC8v
IFRoZSBzZWNyZXQgV0tXZWJWaWV3IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdodCB0aGUgd2F5
LgorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRp
b246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdl
dCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVzb25z
ZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSku
Z2V0KCldOworICAgIH0KKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhlbGxvLiJdOwor
ICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOworfQorCitURVNU
KFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRpb25TdWNjZWVkQ2xvc2VCeVdlYktpdCkK
K3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEo
UEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxl
Y3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxl
Z2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6
aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVn
aW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJM
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhF
eHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20i
KTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9wZW5lclRlbXBsYXRlLCB0ZXN0
VVJMLnN0cmluZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApXSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2Fk
SFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFV0aWw6OnJ1
bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3dlYlZp
ZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tz
OjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlw
dDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGls
OjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9w
dGlvbnModHJ1ZSwgImZpbGU6Ly8iLCAxKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5T
KFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29k
ZToyMDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmllbGRzOm5pbF0pOworICAgIGF1
dG8gcmVzb25zZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKG5ld1dpbmRvd1Jlc3BvbnNlVGVt
cGxhdGUsICIiKS51dGY4KCk7CisgICAgLy8gVGhlIHNlY3JldCBXS1dlYlZpZXcgbmVlZHMgdG8g
YmUgZGVzdHJveWVkIHJpZ2h0IHRoZSB3YXkuCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdp
dGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczpyZXNvbnNlSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNv
bnNlSHRtbENTdHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgfQorICAgIFt3ZWJWaWV3IHdh
aXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJX
aW5kb3dDbG9zZWQuIl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEludGVyY2Vw
dGlvblN1Y2NlZWRXaXRoT3RoZXJIdHRwU3RhdHVzQ29kZSkKK3sKKyAgICByZXNldFN0YXRlKCk7
CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3Bv
bnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQ
QUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCBy
ZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNl
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVS
TCkpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJk
aXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIFJldGFpblB0cjxOU1VS
TD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1w
bGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVtcGxh
dGUsIHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcpOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5n
ZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAs
IDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dlYlZp
ZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmls
XTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAg
Y2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAgLy8g
V2lsbCBmYWxsYmFjayB0byB3ZWIgcGF0aC4KKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFs
c2U7CisgICAgYXV0aG9yaXphdGlvblBlcmZvcm1lZCA9IGZhbHNlOworICAgIGF1dG8gcmVzcG9u
c2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RV
UkwuZ2V0KCkgc3RhdHVzQ29kZTo0MDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVhZGVyRmll
bGRzOm5pbF0pOworICAgIGF1dG8gcmVzb25zZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKG5l
d1dpbmRvd1Jlc3BvbnNlVGVtcGxhdGUsICIiKS51dGY4KCk7CisgICAgW2dEZWxlZ2F0ZSBhdXRo
b3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNw
b25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
OnJlc29uc2VIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0cmluZy5sZW5n
dGgoKV0pLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5ld1dpbmRvd0NyZWF0ZWQpOworICAgIFV0
aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RV
UkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcsIGZpbmFsVVJMKTsKKyAgICBFWFBFQ1RfRkFMU0UoYXV0
aG9yaXphdGlvblBlcmZvcm1lZCk7Cit9CisKKy8vIFNldHRpbmcgY29va2llIGlzIGVuc3VyZWQg
Ynkgb3RoZXIgdGVzdHMuIEhlcmUgaXMgdG8gY292ZXIgaWYgdGhlIHdob2xlIGF1dGhlbnRpY2F0
aW9uIGhhbmRzaGFrZSBjYW4gYmUgY29tcGxldGVkLgorVEVTVChTT0F1dGhvcml6YXRpb25Qb3BV
cCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhDb29raWUpCit7CisgICAgcmVzZXRTdGF0ZSgpOwor
ICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25z
ZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5Oiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwp
KTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RVUkwgPSBV
UkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9
IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFz
ZVVSTDpiYXNlVVJMLmdldCgpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQp
OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5T
TWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElP
UykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVy
Zm9ybWVkKTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwg
MSk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRU
UC8xLjEiIGhlYWRlckZpZWxkczpAeyBAIlNldC1Db29raWUiIDogQCJzZXNzaW9uaWQ9MzhhZmVz
N2E4OyJ9XSk7CisgICAgYXV0byByZXNvbnNlSHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0bWwobmV3
V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICAvLyBUaGUgc2VjcmV0IFdL
V2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmlnaHQgdGhlIHdheS4KKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0
aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTph
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnJlc29uc2VIdG1sQ1N0cmluZy5k
YXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgpXTsKKyAgICB9
CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJIZWxsby4iXTsKKyAgICBbd2ViVmlldyB3
YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4iXTsKK30KKworVEVTVChTT0F1dGhvcml6YXRp
b25Qb3BVcCwgSW50ZXJjZXB0aW9uU3VjY2VlZFR3aWNlKQoreworICAgIHJlc2V0U3RhdGUoKTsK
KyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9u
c2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJl
aW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VN
ZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBA
c2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTop
LCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJM
KSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0g
VVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwg
PSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJh
c2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVk
KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGF1dGhvcml6
YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIFt3ZWJW
aWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNr
czoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICAgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZh
U2NyaXB0OiBAImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAg
ICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgICAgICBjaGVja0F1
dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICAgICAgYXV0byBy
ZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6
dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVs
ZHM6bmlsXSk7CisgICAgICAgIGF1dG8gcmVzb25zZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1s
KG5ld1dpbmRvd1Jlc3BvbnNlVGVtcGxhdGUsICIiKS51dGY4KCk7CisgICAgICAgIC8vIFRoZSBz
ZWNyZXQgV0tXZWJWaWV3IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdodCB0aGUgd2F5LgorICAg
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXph
dGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2Uu
Z2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpyZXNv
bnNlSHRtbENTdHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNvbnNlSHRtbENTdHJpbmcubGVuZ3RoKCld
KS5nZXQoKV07CisgICAgICAgIH0KKyAgICAgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJI
ZWxsby4iXTsKKyAgICAgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJXaW5kb3dDbG9zZWQu
Il07CisgICAgfQorfQorCitURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRpb25T
dWNjZWVkU3VwcHJlc3NBY3RpdmVTZXNzaW9uKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBD
bGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2Rl
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9u
V2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0
U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RT
d2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0
b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWlu
dGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7Cisg
ICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjQoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuY2VsQXV0aG9yaXphdGlvbiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZUNhbmNlbEF1dGhvcml6YXRpb24pKTsKKworICAgIFJldGFpblB0cjxO
U1VSTD4gYmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3
LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJU
ZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQw
MCwgNDAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsK
KyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBu
dW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFs
dWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2Vu
ZGlmCisgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKKyAgICBjaGVja0F1
dGhvcml6YXRpb25PcHRpb25zKHRydWUsICJmaWxlOi8vIiwgMSk7CisKKyAgICAvLyBTdXBwcmVz
cyB0aGUgbGFzdCBhY3RpdmUgc2Vzc2lvbi4KKyAgICBhdXRvIG5ld1dlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQw
MCwgNDAwKSBjb25maWd1cmF0aW9uOndlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbl0pOworICAg
IGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcobmV3V2ViVmlldy5nZXQoKSwgZGVsZWdh
dGUuZ2V0KCkpOworCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFtuZXdX
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07Cisg
ICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworICAgIGF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW25ld1dlYlZpZXcgc2Vu
ZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOwor
I2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFtuZXdXZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDog
QCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpy
dW4oJmF1dGhvcml6YXRpb25DYW5jZWxsZWQpOworICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiZmlsZTov
LyIsIDEpOworCisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJuZXdXaW5kb3ciIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQg
cmVzdWx0LCBOU0Vycm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IGFkb3B0
TlMoW05TTnVsbCBudWxsXSkuZ2V0KCkpOworICAgICAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0g
dHJ1ZTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisg
ICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5p
dFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBo
ZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byByZXNvbnNlSHRtbENTdHJpbmcgPSBnZW5lcmF0
ZUh0bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICAvLyBUaGUg
c2VjcmV0IFdLV2ViVmlldyBuZWVkcyB0byBiZSBkZXN0cm95ZWQgcmlnaHQgdGhlIHdheS4KKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdB
dXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBo
dHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnJlc29uc2VIdG1s
Q1N0cmluZy5kYXRhKCkgbGVuZ3RoOnJlc29uc2VIdG1sQ1N0cmluZy5sZW5ndGgoKV0pLmdldCgp
XTsKKyAgICB9CisgICAgW25ld1dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJIZWxsby4iXTsKKyAg
ICBbbmV3V2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIldpbmRvd0Nsb3NlZC4iXTsKK30KKworVEVT
VChTT0F1dGhvcml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9uU3VjY2VlZE5ld1dpbmRvd05hdmln
YXRpb24pCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZv
cm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJ
TVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
U2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25X
aXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4g
YmFzZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUy
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXTsKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1w
bGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0
ZSwgdGVzdFVSTC5zdHJpbmcoKSwgbWFrZVN0cmluZygibmV3V2luZG93LmxvY2F0aW9uID0gJyIs
IGJhc2VVUkwuZ2V0KCkuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZywgIic7IikpOyAvLyBTdGFy
dHMgYSBuZXcgbmF2aWdhdGlvbiBvbiB0aGUgbmV3IHdpbmRvdy4KKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29u
ZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VV
UkwuZ2V0KCldOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQo
MjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3
ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVy
Om5pbF07CisjZW5kaWYKKyAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwor
ICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImZpbGU6Ly8iLCAxKTsKKworICAg
IGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRX
aXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToyMDAgSFRUUFZlcnNpb246QCJIVFRQLzEuMSIgaGVh
ZGVyRmllbGRzOm5pbF0pOworICAgIGF1dG8gcmVzb25zZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVI
dG1sKG5ld1dpbmRvd1Jlc3BvbnNlVGVtcGxhdGUsICIiKS51dGY4KCk7CisgICAgLy8gVGhlIHNl
Y3JldCBXS1dlYlZpZXcgbmVlZHMgdG8gYmUgZGVzdHJveWVkIHJpZ2h0IHRoZSB3YXkuCisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0
aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0
cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpyZXNvbnNlSHRtbENT
dHJpbmcuZGF0YSgpIGxlbmd0aDpyZXNvbnNlSHRtbENTdHJpbmcubGVuZ3RoKCldKS5nZXQoKV07
CisgICAgfQorICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07CisgICAgW3dl
YlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJXaW5kb3dDbG9zZWQuIl07Cit9CisKK1RFU1QoU09BdXRo
b3JpemF0aW9uUG9wVXAsIEF1dGhvcml6YXRpb25PcHRpb25zKQoreworICAgIHJlc2V0U3RhdGUo
KTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXph
dGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVz
cG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIy
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFu
Y2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygp
LCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9k
eTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRo
VVJMKSk7CisKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1w
bGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChvcGVuZXJUZW1wbGF0
ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAw
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworCisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJMKCksICJo
dHRwOi8vd3d3LndlYmtpdC5vcmciKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxl
dGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2lu
dDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQTEFURk9S
TShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUoKSIgY29t
cGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiaHR0cDov
L3d3dy53ZWJraXQub3JnIiwgMSk7Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uU3ViRnJhbWUs
IE5vSW50ZXJjZXB0aW9ucykKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgUmV0YWluUHRyPE5T
VVJMPiBiYXNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNp
bXBsZTIiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJ
LnJlc291cmNlcyJdOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJHZXRTZXNzaW9uQ29va2llIiB3aXRoRXh0ZW5z
aW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAg
ICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLmdl
dCgpLmFic29sdXRlU3RyaW5nKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2
aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0
aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmll
dyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFt3
ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiIl07Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uU3Vi
RnJhbWUsIE5vSW50ZXJjZXB0aW9uc05vbkFwcGxlRmlyc3RQYXJ0eU1haW5GcmFtZSkKK3sKKyAg
ICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpn
ZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVD
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihz
ZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkp
OworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3Jp
emF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhl
YWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRo
b3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChw
YXJlbnRUZW1wbGF0ZSwgVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLnN0cmlu
ZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJW
aWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
Zzp0ZXN0SHRtbCBiYXNlVVJMOihOU1VSTCAqKVVSTChVUkwoKSwgImh0dHA6Ly93d3cud2Via2l0
Lm9yZyIpXTsKKyAgICAvLyBUcnkgdG8gd2FpdCB1bnRpbCB0aGUgaWZyYW1lIGxvYWQgaXMgZmlu
aXNoZWQuCisgICAgVXRpbDo6c2xlZXAoMC41KTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qg
aW50ZXJjZXB0IHRoZSBpZnJhbWUuCisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJm
b3JtZWQpOworfQorCitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25F
cnJvcikKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6
emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5j
ZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCks
IEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVT
ZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6
Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIg
c3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVjdG9yKGlz
VVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
SXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNl
VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJHZXRTZXNzaW9uQ29va2llIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRl
c3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29s
dXRlU3RyaW5nKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFt3ZWJWaWV3IHdh
aXRGb3JNZXNzYWdlOkAibnVsbCJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09B
dXRob3JpemF0aW9uRGlkU3RhcnQiXTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZh
bHNlLCAiZmlsZTovLyIsIDIpOworCisgICAgW2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRo
b3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEVycm9yOmFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBp
bml0V2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29kZTowIHVzZXJJbmZvOm5pbF0pLmdl
dCgpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIm51bGwiXTsKKyAgICBbd2ViVmll
dyB3YWl0Rm9yTWVzc2FnZTpAIlNPQXV0aG9yaXphdGlvbkRpZENhbmNlbCJdOworICAgIFt3ZWJW
aWV3IHdhaXRGb3JNZXNzYWdlOkAiIl07CisgICAgLy8gVHJ5cyB0byB3YWl0IHVudGlsIHRoZSBp
ZnJhbWUgbG9hZCBpcyBmaW5pc2hlZC4KKyAgICBVdGlsOjpzbGVlcCgwLjUpOworICAgIC8vIE1h
a2Ugc3VyZSB3ZSBkb24ndCBsb2FkIHRoZSByZXF1ZXN0IG9mIHRoZSBpZnJhbWUgdG8gdGhlIG1h
aW4gZnJhbWUuCisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBmaW5hbFVSTCk7Cit9CisKK1RFU1Qo
U09BdXRob3JpemF0aW9uU3ViRnJhbWUsIEludGVyY2VwdGlvblN1Y2Nlc3MpCit7CisgICAgcmVz
ZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09B
dXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0
aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVy
Zm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBz
d2l6emxlcjIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVs
ZWdhdGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAg
ICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlv
bkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJz
Omh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkwpKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyNChbQUtBdXRo
b3JpemF0aW9uQ29udHJvbGxlciBjbGFzc10sIEBzZWxlY3Rvcihpc1VSTEZyb21BcHBsZU93bmVk
RG9tYWluOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUlzVVJMRnJvbUFwcGxlT3du
ZWREb21haW4pKTsKKworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cu
ZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRl
bXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIw
LCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0
aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRo
b3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBb
d2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOm5pbF07CisgICAgW3dlYlZp
ZXcgd2FpdEZvck1lc3NhZ2U6QCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIl07CisgICAgW3dlYlZp
ZXcgd2FpdEZvck1lc3NhZ2U6QCJTT0F1dGhvcml6YXRpb25EaWRTdGFydCJdOworICAgIGNoZWNr
QXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICJudWxsIiwgMik7CisKKyAgICBhdXRvIHJlc3Bv
bnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0
VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRUUC8xLjEiIGhlYWRlckZpZWxkczpu
aWxdKTsKKyAgICBhdXRvIGlmcmFtZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKGlmcmFtZVRl
bXBsYXRlLCAiIikudXRmOCgpOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9y
aXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJv
ZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczppZnJhbWVIdG1sQ1N0cmlu
Zy5kYXRhKCkgbGVuZ3RoOmlmcmFtZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCldOworICAg
IFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSJdOworICAg
IFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07Cit9CisKK1RFU1QoU09BdXRob3Jp
emF0aW9uU3ViRnJhbWUsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoT3RoZXJIdHRwU3RhdHVzQ29k
ZSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxl
cjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1
dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXRE
ZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0
U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhV
Ukw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
QmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dp
enpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVjdG9yKGlzVVJM
RnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlSXNV
UkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJM
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZTIiIHdpdGhF
eHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJHZXRTZXNzaW9uQ29va2llIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBhdXRvIHRlc3RI
dG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLmdldCgpLmFic29sdXRl
U3RyaW5nKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0
cmluZzp0ZXN0SHRtbCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOworICAgIFt3ZWJWaWV3IHdhaXRG
b3JNZXNzYWdlOkAibnVsbCJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09BdXRo
b3JpemF0aW9uRGlkU3RhcnQiXTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNl
LCAiZmlsZTovLyIsIDIpOworCisgICAgLy8gV2lsbCBmYWxsYmFjayB0byB3ZWIgcGF0aC4KKyAg
ICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0
V2l0aFVSTDp0ZXN0VVJMLmdldCgpIHN0YXR1c0NvZGU6NDAwIEhUVFBWZXJzaW9uOkAiSFRUUC8x
LjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIGlmcmFtZUh0bWxDU3RyaW5nID0gZ2Vu
ZXJhdGVIdG1sKGlmcmFtZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgIFtnRGVsZWdhdGUgYXV0
aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVz
cG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czppZnJhbWVIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOmlmcmFtZUh0bWxDU3RyaW5nLmxlbmd0
aCgpXSkuZ2V0KCldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAibnVsbCJdOworICAg
IFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09BdXRob3JpemF0aW9uRGlkQ2FuY2VsIl07Cisg
ICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCIiXTsKKyAgICAvLyBUcnlzIHRvIHdhaXQgdW50
aWwgdGhlIGlmcmFtZSBsb2FkIGlzIGZpbmlzaGVkLgorICAgIFV0aWw6OnNsZWVwKDAuNSk7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGxvYWQgdGhlIHJlcXVlc3Qgb2YgdGhlIGlmcmFtZSB0
byB0aGUgbWFpbiBmcmFtZS4KKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIGZpbmFsVVJMKTsKK30K
KworLy8gU2V0dGluZyBjb29raWUgaXMgZW5zdXJlZCBieSBvdGhlciB0ZXN0cy4gSGVyZSBpcyB0
byBjb3ZlciBpZiB0aGUgd2hvbGUgYXV0aGVudGljYXRpb24gaGFuZHNoYWtlIGNhbiBiZSBjb21w
bGV0ZWQuCitURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBJbnRlcmNlcHRpb25TdWNjZWVk
V2l0aENvb2tpZSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxl
ciBzd2l6emxlcjEoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2Fu
UGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNs
YXNzKCksIEBzZWxlY3RvcihzZXREZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3Zl
cnJpZGVTZXREZWxlZ2F0ZSkpOworICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIz
KFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXph
dGlvbldpdGhVUkw6aHR0cEhlYWRlcnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KG92ZXJyaWRlQmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dp
enpsZXIgc3dpenpsZXI0KFtBS0F1dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVj
dG9yKGlzVVJMRnJvbUFwcGxlT3duZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlSXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbikpOworCisgICAgYXV0byB0ZXN0VVJMID0g
VVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwg
PSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpKTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJh
c2VVUkw6bmlsXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAImh0dHA6Ly93d3cuZXhh
bXBsZS5jb20iXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIlNPQXV0aG9yaXphdGlv
bkRpZFN0YXJ0Il07CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIm51bGwi
LCAyKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNIVFRQVVJMUmVzcG9uc2Ug
YWxsb2NdIGluaXRXaXRoVVJMOnRlc3RVUkwgc3RhdHVzQ29kZToyMDAgSFRUUFZlcnNpb246QCJI
VFRQLzEuMSIgaGVhZGVyRmllbGRzOkB7IEAiU2V0LUNvb2tpZSIgOiBAInNlc3Npb25pZD0zOGFm
ZXM3YTg7In1dKTsKKyAgICBhdXRvIGlmcmFtZUh0bWxDU3RyaW5nID0gZ2VuZXJhdGVIdG1sKGlm
cmFtZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpn
QXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkg
aHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczppZnJhbWVIdG1s
Q1N0cmluZy5kYXRhKCkgbGVuZ3RoOmlmcmFtZUh0bWxDU3RyaW5nLmxlbmd0aCgpXSkuZ2V0KCld
OworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSJd
OworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07Cit9CisKK1RFU1QoU09B
dXRob3JpemF0aW9uU3ViRnJhbWUsIEludGVyY2VwdGlvblN1Y2Nlc3NUd2ljZSkKK3sKKyAgICBy
ZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcjEoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25X
aXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5Q
ZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihzZXRE
ZWxlZ2F0ZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVTZXREZWxlZ2F0ZSkpOwor
ICAgIEluc3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIzKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6aHR0cEhlYWRl
cnM6aHR0cEJvZHk6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQmVnaW5BdXRob3Jp
emF0aW9uV2l0aFVSTCkpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXI0KFtBS0F1
dGhvcml6YXRpb25Db250cm9sbGVyIGNsYXNzXSwgQHNlbGVjdG9yKGlzVVJMRnJvbUFwcGxlT3du
ZWREb21haW46KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlSXNVUkxGcm9tQXBwbGVP
d25lZERvbWFpbikpOworCisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3
dy5leGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50
VGVtcGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1
dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGF1dGhvcml6YXRpb25QZXJm
b3JtZWQgPSBmYWxzZTsKKyAgICAgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOworCisg
ICAgICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6bmlsXTsKKyAg
ICAgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIl07
CisgICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09BdXRob3JpemF0aW9uRGlkU3Rh
cnQiXTsKKyAgICAgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyhmYWxzZSwgIm51bGwiLCAy
KTsKKworICAgICAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNl
IGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAi
SFRUUC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICAgICAgYXV0byBpZnJhbWVIdG1sQ1N0
cmluZyA9IGdlbmVyYXRlSHRtbChpZnJhbWVUZW1wbGF0ZSwgIiIpLnV0ZjgoKTsKKyAgICAgICAg
W2dEZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhU
VFBSZXNwb25zZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0V2l0aEJ5dGVzOmlmcmFtZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6aWZyYW1lSHRt
bENTdHJpbmcubGVuZ3RoKCldKS5nZXQoKV07CisgICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNz
YWdlOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSJdOworICAgICAgICBbd2ViVmlldyB3YWl0Rm9y
TWVzc2FnZTpAIkhlbGxvLiJdOworICAgIH0KK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJG
cmFtZSwgQXV0aG9yaXphdGlvbk9wdGlvbnMpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENs
YXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3Mo
KSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6
KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25X
aXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRT
T0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnBy
ZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50
ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKwor
ICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsK
KyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJM
LnN0cmluZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisKKyAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOihOU1VSTCAqKVVSTChVUkwoKSwgImh0dHA6Ly93d3cu
YXBwbGUuY29tIildOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiaHR0cDovL3d3dy5l
eGFtcGxlLmNvbSJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiU09BdXRob3JpemF0
aW9uRGlkU3RhcnQiXTsKKyAgICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiaHR0
cDovL3d3dy5hcHBsZS5jb20iLCAyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQorCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>