<?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>199114</bug_id>
          
          <creation_ts>2019-06-21 12:28:55 -0700</creation_ts>
          <short_desc>WebPageProxy::loadData should accept ShouldOpenExternalURLsPolicy</short_desc>
          <delta_ts>2019-06-21 17:27:16 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1546943</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 12:28:55 -0700</bug_when>
    <thetext>WebPageProxy::loadData should accept ShouldOpenExternalURLsPolicy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546944</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 12:29:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/51671674&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546946</commentid>
    <comment_count>2</comment_count>
      <attachid>372640</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 12:41:46 -0700</bug_when>
    <thetext>Created attachment 372640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546950</commentid>
    <comment_count>3</comment_count>
      <attachid>372640</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-06-21 12:51:36 -0700</bug_when>
    <thetext>Comment on attachment 372640
Patch

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

&gt; Source/WebKit/ChangeLog:11
&gt; +        This patch teaches WebPageProxy::loadData to propagate ShouldOpenExternalURLsPolicy policy,
&gt; +        and then utilize it in RedirectSOAuthorizationSession. Therefore, navigations after successful
&gt; +        interceptions will be able to propagate this information from the last navigation.

What&apos;s the policy implemented here? From where does loadData propagate ShouldOpenExternalURLsPolicy? Or does it always just set it to Allow?

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1214
&gt; +    loadParameters.shouldOpenExternalURLsPolicy = (uint64_t)shouldOpenExternalURLsPolicy;

This should be static_cast.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:286
&gt; +    configureSOAuthorizationWebView(webView.get(), delegate.get(), true);

true/false as arguments to functions are not terribly readable. I&apos;d suggest using an enum, or putting the true value in a named local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546954</commentid>
    <comment_count>4</comment_count>
      <attachid>372640</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-21 13:04:40 -0700</bug_when>
    <thetext>Comment on attachment 372640
Patch

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

&gt;&gt; Source/WebKit/ChangeLog:11
&gt;&gt; +        interceptions will be able to propagate this information from the last navigation.
&gt; 
&gt; What&apos;s the policy implemented here? From where does loadData propagate ShouldOpenExternalURLsPolicy? Or does it always just set it to Allow?

I think the flow is as follows:
- a page load gets intercepted, this page load has an associated ShouldOpenExternalURLsPolicy.
- SOAuthorization intercepts the load, will do the SO process and will finish the navigation by using loadData.
- This loadData is a continuation of the intercepted page load and should have the same policy

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:92
&gt; +        pagePtr-&gt;loadData(IPC::DataReference(static_cast&lt;const uint8_t*&gt;(data.bytes), data.length), &quot;text/html&quot;_s, &quot;UTF-8&quot;_s, response.url().string(), nullptr, shouldOpenExternalURLsPolicy(navigationActionPtr-&gt;shouldOpenExternalSchemes()));

navigationAction stores the policy, should we instead just get it directly.
This will make sure we use exactly the same, be it ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes or ShouldOpenExternalURLsPolicy::ShouldAllow.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1214
&gt;&gt; +    loadParameters.shouldOpenExternalURLsPolicy = (uint64_t)shouldOpenExternalURLsPolicy;
&gt; 
&gt; This should be static_cast.

We could make loadParameters.shouldOpenExternalURLsPolicy a ShouldOpenExternalURLsPolicy and use the enum decoder/encoder.
That will remove the need for the two static_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546955</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-06-21 13:06:04 -0700</bug_when>
    <thetext>&gt; &gt; This should be static_cast.
&gt; 
&gt; We could make loadParameters.shouldOpenExternalURLsPolicy a
&gt; ShouldOpenExternalURLsPolicy and use the enum decoder/encoder.
&gt; That will remove the need for the two static_cast.

Sounds even better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546980</commentid>
    <comment_count>6</comment_count>
      <attachid>372640</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 14:02:14 -0700</bug_when>
    <thetext>Comment on attachment 372640
Patch

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

Thanks Geoff and Youenn for reviewing this patch.

&gt;&gt;&gt; Source/WebKit/ChangeLog:11
&gt;&gt;&gt; +        interceptions will be able to propagate this information from the last navigation.
&gt;&gt; 
&gt;&gt; What&apos;s the policy implemented here? From where does loadData propagate ShouldOpenExternalURLsPolicy? Or does it always just set it to Allow?
&gt; 
&gt; I think the flow is as follows:
&gt; - a page load gets intercepted, this page load has an associated ShouldOpenExternalURLsPolicy.
&gt; - SOAuthorization intercepts the load, will do the SO process and will finish the navigation by using loadData.
&gt; - This loadData is a continuation of the intercepted page load and should have the same policy

Thanks Youenn for explaining it for me. I should write it in a more comprehensive way.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:92
&gt;&gt; +        pagePtr-&gt;loadData(IPC::DataReference(static_cast&lt;const uint8_t*&gt;(data.bytes), data.length), &quot;text/html&quot;_s, &quot;UTF-8&quot;_s, response.url().string(), nullptr, shouldOpenExternalURLsPolicy(navigationActionPtr-&gt;shouldOpenExternalSchemes()));
&gt; 
&gt; navigationAction stores the policy, should we instead just get it directly.
&gt; This will make sure we use exactly the same, be it ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes or ShouldOpenExternalURLsPolicy::ShouldAllow.

We could definitely do that. I like it better!

&gt;&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:1214
&gt;&gt;&gt; +    loadParameters.shouldOpenExternalURLsPolicy = (uint64_t)shouldOpenExternalURLsPolicy;
&gt;&gt; 
&gt;&gt; This should be static_cast.
&gt; 
&gt; We could make loadParameters.shouldOpenExternalURLsPolicy a ShouldOpenExternalURLsPolicy and use the enum decoder/encoder.
&gt; That will remove the need for the two static_cast.

Sounds right.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:286
&gt;&gt; +    configureSOAuthorizationWebView(webView.get(), delegate.get(), true);
&gt; 
&gt; true/false as arguments to functions are not terribly readable. I&apos;d suggest using an enum, or putting the true value in a named local variable.

Fixed. Maybe one day we will have a header that collects all common enums for boolean. : )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546988</commentid>
    <comment_count>7</comment_count>
      <attachid>372649</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 14:14:12 -0700</bug_when>
    <thetext>Created attachment 372649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546994</commentid>
    <comment_count>8</comment_count>
      <attachid>372649</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-21 14:28:07 -0700</bug_when>
    <thetext>Comment on attachment 372649
Patch

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

&gt; Source/WebKit/Shared/LoadParameters.h:82
&gt; +template&lt;&gt; struct EnumTraits&lt;WebCore::ShouldOpenExternalURLsPolicy&gt; {

This might be best put next to ShouldOpenExternalURLsPolicy definition.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:59
&gt; +    auto* navigationActionPtr = navigationAction();

maybe: auto* navigationAction = this-&gt;navigationAction();

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:85
&gt;      if (response.httpStatusCode() == 200) {

Do we need that if given the above if checks?

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:1577
&gt; +    ShouldOpenExternalURLsPolicy externalURLsPolicy = static_cast&lt;ShouldOpenExternalURLsPolicy&gt;(loadParameters.shouldOpenExternalURLsPolicy);

No need for static_cast.
We could even remove externalURLsPolicy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547001</commentid>
    <comment_count>9</comment_count>
      <attachid>372649</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 14:43:23 -0700</bug_when>
    <thetext>Comment on attachment 372649
Patch

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

Thanks Youenn for r+ this patch.

&gt;&gt; Source/WebKit/Shared/LoadParameters.h:82
&gt;&gt; +template&lt;&gt; struct EnumTraits&lt;WebCore::ShouldOpenExternalURLsPolicy&gt; {
&gt; 
&gt; This might be best put next to ShouldOpenExternalURLsPolicy definition.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:59
&gt;&gt; +    auto* navigationActionPtr = navigationAction();
&gt; 
&gt; maybe: auto* navigationAction = this-&gt;navigationAction();

I don&apos;t know this this-&gt; trick. Cool. Fixed.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:61
&gt;      auto* pagePtr = page();

I fixed this one as well.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:85
&gt;&gt;      if (response.httpStatusCode() == 200) {
&gt; 
&gt; Do we need that if given the above if checks?

We do. It could be other response codes that we should ignore.

&gt;&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:1577
&gt;&gt; +    ShouldOpenExternalURLsPolicy externalURLsPolicy = static_cast&lt;ShouldOpenExternalURLsPolicy&gt;(loadParameters.shouldOpenExternalURLsPolicy);
&gt; 
&gt; No need for static_cast.
&gt; We could even remove externalURLsPolicy.

You are right!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547003</commentid>
    <comment_count>10</comment_count>
      <attachid>372649</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-21 14:46:46 -0700</bug_when>
    <thetext>Comment on attachment 372649
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:85
&gt;&gt;&gt;      if (response.httpStatusCode() == 200) {
&gt;&gt; 
&gt;&gt; Do we need that if given the above if checks?
&gt; 
&gt; We do. It could be other response codes that we should ignore.

But we do the following check above:
if ((response.httpStatusCode() != 302 &amp;&amp; response.httpStatusCode() != 200) || !pagePtr) {
   ...
   return;
}
And it does not seem we change response within this method.
Also, it seems completeInternal could take a const ResourceResponse&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547006</commentid>
    <comment_count>11</comment_count>
      <attachid>372649</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 14:54:44 -0700</bug_when>
    <thetext>Comment on attachment 372649
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm:85
&gt;&gt;&gt;&gt;      if (response.httpStatusCode() == 200) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Do we need that if given the above if checks?
&gt;&gt; 
&gt;&gt; We do. It could be other response codes that we should ignore.
&gt; 
&gt; But we do the following check above:
&gt; if ((response.httpStatusCode() != 302 &amp;&amp; response.httpStatusCode() != 200) || !pagePtr) {
&gt;    ...
&gt;    return;
&gt; }
&gt; And it does not seem we change response within this method.
&gt; Also, it seems completeInternal could take a const ResourceResponse&amp;

For sure, but then we will have to check it again to tell if it is a 200 or not. Therefore, I would prefer the current way.

completeInternal could definitely take a const ResourceResponse&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547018</commentid>
    <comment_count>12</comment_count>
      <attachid>372657</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 15:20:27 -0700</bug_when>
    <thetext>Created attachment 372657
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547026</commentid>
    <comment_count>13</comment_count>
      <attachid>372657</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-21 15:47:23 -0700</bug_when>
    <thetext>Comment on attachment 372657
Patch for landing

Clearing flags on attachment: 372657

Committed r246701: &lt;https://trac.webkit.org/changeset/246701&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547027</commentid>
    <comment_count>14</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-06-21 15:51:45 -0700</bug_when>
    <thetext>This seems to break API tests:

on mac: WKWebView.LoadAlternateHTMLStringFromProvisionalLoadError https://ews-build.webkit.org/#/builders/3/builds/3604

on iOS: ProcessSwap.ContentExtensionBlocksMainLoadThenReloadWithoutExtensions, WKWebView.LoadAlternateHTMLStringFromProvisionalLoadError

https://ews-build.webkit.org/#/builders/9/builds/3510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547037</commentid>
    <comment_count>15</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 16:45:59 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #14)
&gt; This seems to break API tests:
&gt; 
&gt; on mac: WKWebView.LoadAlternateHTMLStringFromProvisionalLoadError
&gt; https://ews-build.webkit.org/#/builders/3/builds/3604
&gt; 
&gt; on iOS:
&gt; ProcessSwap.ContentExtensionBlocksMainLoadThenReloadWithoutExtensions,
&gt; WKWebView.LoadAlternateHTMLStringFromProvisionalLoadError
&gt; 
&gt; https://ews-build.webkit.org/#/builders/9/builds/3510

I should add a default value for LoadParameters::shouldOpenExternalURLsPolicy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547046</commentid>
    <comment_count>16</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 17:27:11 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/246704/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372640</attachid>
            <date>2019-06-21 12:41:46 -0700</date>
            <delta_ts>2019-06-21 14:14:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199114-20190621124145.patch</filename>
            <type>text/plain</type>
            <size>36197</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ5ZTI2MWYwMjA4MDQ3Zjhi
YTc4NTdiMjFhMDhjMDQ3NmI2NjQ1NjIuLjA1MjhmN2M5M2FhYzc1ZDlhYjg2ZTJiZjg0M2FiYWJj
NmFlNmQ2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTktMDYtMjEgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJQYWdlUHJveHk6OmxvYWRE
YXRhIHNob3VsZCBhY2NlcHQgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MTE0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81MTY3MTY3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHRlYWNoZXMgV2ViUGFnZVByb3h5Ojpsb2FkRGF0
YSB0byBwcm9wYWdhdGUgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBwb2xpY3ksCisgICAg
ICAgIGFuZCB0aGVuIHV0aWxpemUgaXQgaW4gUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9u
LiBUaGVyZWZvcmUsIG5hdmlnYXRpb25zIGFmdGVyIHN1Y2Nlc3NmdWwKKyAgICAgICAgaW50ZXJj
ZXB0aW9ucyB3aWxsIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0
aGUgbGFzdCBuYXZpZ2F0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChXZWJL
aXQ6OnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpSZWRp
cmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OmxvYWREYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkRGF0YVdp
dGhOYXZpZ2F0aW9uU2hhcmVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpsb2FkRGF0YUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjps
b2FkRGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKwogMjAx
OS0wNi0xOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgdW51c2VkIG9yaWdpbnNXaXRoQ3JlZGVudGlhbHMgZnJvbSBXZWJzaXRlRGF0YQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGly
ZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KaW5k
ZXggZWU5YzAyOWI2ODJmOGE0Y2JjNWRhNDBhNmEzNzk1YWIxMmZmYzljNy4uNGE0ZDM0Y2VmZDIx
NDY0MDIwYzY3OGZjMzZlMjE5NWU3MmI5MmE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0zMiw2ICszMiwxMiBAQAog
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2lubGluZSBTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koYm9vbCBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5KQoreworICAgIHJldHVybiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5ID8gU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3dFeHRlcm5hbFNj
aGVtZXMgOiBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdzsKK30K
IAogUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6Y3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwg
Q2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKQEAgLTUzLDggKzU5LDEwIEBAIHZvaWQg
UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKCkKICAgICBpbnZv
a2VDYWxsYmFjayh0cnVlKTsKIH0KIAotdm9pZCBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNl
LCBOU0RhdGEgKmRhdGEpCit2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29t
cGxldGVJbnRlcm5hbChSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkK
IHsKKyAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOwor
ICAgIEFTU0VSVChuYXZpZ2F0aW9uQWN0aW9uUHRyKTsKICAgICBhdXRvKiBwYWdlUHRyID0gcGFn
ZSgpOwogICAgIGlmICgocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAzMDIgJiYgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDApIHx8ICFwYWdlUHRyKSB7CiAgICAgICAgIGZhbGxC
YWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKQEAgLTYzLDggKzcxLDYgQEAgdm9pZCBSZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYKICAgICBpbnZva2VDYWxsYmFjayh0cnVlKTsKICAgICBpZiAocmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSA9PSAzMDIpIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGF1dG8q
IG5hdmlnYXRpb25BY3Rpb25QdHIgPSBuYXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAgICAgIEFTU0VS
VChuYXZpZ2F0aW9uQWN0aW9uUHRyKTsKICAgICAgICAgLy8gTW9iaWxlU2FmYXJpIGhhcyBhIFdC
U1VSTFNwb29maW5nTWl0aWdhdG9yLCB3aGljaCB3aWxsIG5vdCBkaXNwbGF5IHRoZSBwcm92aXNp
b25hbCBVUkwgZm9yIG5hdmlnYXRpb25zIHdpdGhvdXQgdXNlciBnZXN0dXJlcy4KICAgICAgICAg
Ly8gRm9yIHNsb3cgbG9hZHMgdGhhdCBhcmUgaW5pdGlhdGVkIGZyb20gdGhlIE1vYmlsZVNhZmFy
aSBGYXZvcml0ZXMgc2NyZWVuLCB0aGUgYWZvcmVtZW50aW9uZWQgYmVoYXZpb3Igd2lsbCBjcmVh
dGUgYSBwZXJpb2QKICAgICAgICAgLy8gYWZ0ZXIgYXV0aGVudGljYXRpb24gY29tcGxldGlvbiB3
aGVyZSB0aGUgbmV3IHJlcXVlc3QgdG8gdGhlIGFwcGxpY2F0aW9uIHNpdGUgbG9hZHMgd2l0aCBh
IGJsYW5rIFVSTCBhbmQgYmxhbmsgcGFnZS4gVG8KQEAgLTczLDE3ICs3OSwxNyBAQCB2b2lkIFJl
ZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJgogICAgICAgICAvLyBzaG93IGFuIGVtcHR5IFVSTCBvciBhIGJsYW5r
IHBhZ2UuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIGEgcmVsZXZhbnQgVVJMIGJhciBhbmQgdXNlZnVs
IHBhZ2UgY29udGVudCBkdXJpbmcgdGhlIGxvYWQuCiAgICAgICAgIGlmICghbmF2aWdhdGlvbkFj
dGlvblB0ci0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgewogICAgICAgICAgICAgcGFnZVB0
ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24oKTsKLSAgICAgICAgICAgIGF1dG8gaHRtbCA9IG1ha2VTdHJpbmcoIjxzY3JpcHQ+
bG9jYXRpb24gPSAnIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmdldChXZWJDb3JlOjpI
VFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLCAiJzwvc2NyaXB0PiIpLnV0ZjgoKTsKKyAgICAgICAg
ICAgIGF1dG8gaHRtbCA9IG1ha2VTdHJpbmcoIjxzY3JpcHQ+bG9jYXRpb24gPSAnIiwgcmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkcygpLmdldChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLCAiJzwv
c2NyaXB0PiIpLnV0ZjgoKTsKICAgICAgICAgICAgIGF1dG8gZGF0YSA9IElQQzo6RGF0YVJlZmVy
ZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihodG1sLmRhdGEoKSksIGh0bWwu
bGVuZ3RoKCkpOwotICAgICAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRt
bCJfcywgIlVURi04Il9zLCBuYXZpZ2F0aW9uQWN0aW9uUHRyLT5yZXF1ZXN0KCkudXJsKCkpOwor
ICAgICAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCJfcywgIlVURi04
Il9zLCBuYXZpZ2F0aW9uQWN0aW9uUHRyLT5yZXF1ZXN0KCkudXJsKCksIG51bGxwdHIsIHNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kobmF2aWdhdGlvbkFjdGlvblB0ci0+c2hvdWxkT3BlbkV4
dGVybmFsU2NoZW1lcygpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRp
ZgotICAgICAgICBwYWdlUHRyLT5sb2FkUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qo
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmdldChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6
TG9jYXRpb24pKSk7CisgICAgICAgIHBhZ2VQdHItPmxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVz
dChyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZ2V0KEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlv
bikpKTsKICAgICB9CiAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjAwKSB7
CiAgICAgICAgIHBhZ2VQdHItPnNldFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7Ci0gICAgICAgIHBhZ2VQdHItPmxvYWREYXRhKElQ
Qzo6RGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyks
IGRhdGEubGVuZ3RoKSwgInRleHQvaHRtbCJfcywgIlVURi04Il9zLCByZXNwb25zZS51cmwoKS5z
dHJpbmcoKSk7CisgICAgICAgIHBhZ2VQdHItPmxvYWREYXRhKElQQzo6RGF0YVJlZmVyZW5jZShz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSwgInRl
eHQvaHRtbCJfcywgIlVURi04Il9zLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgbnVsbHB0ciwg
c2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeShuYXZpZ2F0aW9uQWN0aW9uUHRyLT5zaG91bGRP
cGVuRXh0ZXJuYWxTY2hlbWVzKCkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDEzMDJhODRlMTA3ZmE2ZDM4MDczMGRhMWI4NjkzOWZm
MjliZmMyZGMuLjEyNTQwMjQyMjVlODNiYTJkYjAzMDEyMWM3YzMxNGMxZWUyMWY5YzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTE3NSw3ICsxMTc1LDcg
QEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVVUkxTdHJpbmcsIGNvbnMKICAgICByZXR1cm4gbmF2aWdhdGlvbjsKIH0KIAot
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmlu
ZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRh
KQorUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJE
YXRhLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAibG9hZERhdGE6
IHdlYlBJRCA9ICVpLCBwYWdlSUQgPSAlIiBQUkl1NjQsIG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSwgbV9wYWdlSUQudG9VSW50NjQoKSk7CiAKQEAgLTExODgsMTEgKzExODgsMTEgQEAg
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGMKICAgICAgICAgbGF1bmNoUHJvY2Vzcyh7IH0pOwogCiAg
ICAgYXV0byBuYXZpZ2F0aW9uID0gbV9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUxvYWREYXRhTmF2
aWdhdGlvbihzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6U3Vic3RpdHV0ZURhdGE+KGRhdGEudmVjdG9y
KCksIE1JTUVUeXBlLCBlbmNvZGluZywgYmFzZVVSTCwgdXNlckRhdGEpKTsKLSAgICBsb2FkRGF0
YVdpdGhOYXZpZ2F0aW9uU2hhcmVkKG1fcHJvY2Vzcy5jb3B5UmVmKCksIG5hdmlnYXRpb24sIGRh
dGEsIE1JTUVUeXBlLCBlbmNvZGluZywgYmFzZVVSTCwgdXNlckRhdGEsIFNob3VsZFRyZWF0QXND
b250aW51aW5nTG9hZDo6Tm8pOworICAgIGxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQobV9w
cm9jZXNzLmNvcHlSZWYoKSwgbmF2aWdhdGlvbiwgZGF0YSwgTUlNRVR5cGUsIGVuY29kaW5nLCBi
YXNlVVJMLCB1c2VyRGF0YSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpu
dWxsb3B0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKICAgICByZXR1cm4gbmF2aWdh
dGlvbjsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFy
ZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBBUEk6Ok5hdmlnYXRpb24mIG5hdmln
YXRpb24sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1F
VHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCBzaG91bGRUcmVh
dEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0
ZVBvbGljaWVzKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFy
ZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBBUEk6Ok5hdmlnYXRpb24mIG5hdmln
YXRpb24sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1F
VHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCBzaG91bGRUcmVh
dEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0
ZVBvbGljaWVzLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3kpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAibG9h
ZERhdGFXaXRoTmF2aWdhdGlvbjogd2ViUElEID0gJWksIHBhZ2VJRCA9ICUiIFBSSXU2NCwgcHJv
Y2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgbV9wYWdlSUQudG9VSW50NjQoKSk7CiAKQEAgLTEy
MTEsNiArMTIxMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkRGF0YVdpdGhOYXZpZ2F0aW9u
U2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywKICAgICBsb2FkUGFyYW1ldGVy
cy5zaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQgPSBzaG91bGRUcmVhdEFzQ29udGludWluZ0xv
YWQgPT0gU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXM7CiAgICAgbG9hZFBhcmFtZXRl
cnMudXNlckRhdGEgPSBVc2VyRGF0YShwcm9jZXNzLT50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVz
KHVzZXJEYXRhKS5nZXQoKSk7CiAgICAgbG9hZFBhcmFtZXRlcnMud2Vic2l0ZVBvbGljaWVzID0g
V1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpOworICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgPSAodWludDY0X3Qpc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eTsKICAgICBhZGRQbGF0Zm9ybUxvYWRQYXJhbWV0ZXJzKGxvYWRQYXJhbWV0ZXJzKTsKIAogICAg
IHByb2Nlc3MtPmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwoKnRoaXMsIGJhc2VVUkwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA1ZGQ2MjNiNDczMmQwZDU1ZWQ1
NTM0MGQ5NjNlZTEwZTZhZmY5ODA4Li5kYzk3MDZjZWYzYzc0ZTA0NzNhYTAxZDJjZGVlNjg5OWJj
NGJiMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNTI4LDcg
KzUyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMoTG9h
ZFBhcmFtZXRlcnMmKTsKICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBsb2FkUmVxdWVzdChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeSA9IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFs
bG93RXh0ZXJuYWxTY2hlbWVzLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsKICAg
ICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBsb2FkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVVUkws
IGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEaXJlY3RvcnlVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0
YSA9IG51bGxwdHIpOwotICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IGxvYWREYXRhKGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmlu
ZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRh
ID0gbnVsbHB0cik7CisgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbG9hZERhdGEoY29uc3Qg
SVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5n
JiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEg
PSBudWxscHRyLCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gV2ViQ29y
ZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpOwogICAgIHZv
aWQgbG9hZEFsdGVybmF0ZUhUTUwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZywgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBVUkwmIHVucmVhY2hhYmxl
VVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsKICAgICB2b2lkIGxvYWRXZWJB
cmNoaXZlRGF0YShBUEk6OkRhdGEqLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsK
ICAgICB2b2lkIG5hdmlnYXRlVG9QREZMaW5rV2l0aFNpbXVsYXRlZENsaWNrKGNvbnN0IFN0cmlu
ZyYgdXJsLCBXZWJDb3JlOjpJbnRQb2ludCBkb2N1bWVudFBvaW50LCBXZWJDb3JlOjpJbnRQb2lu
dCBzY3JlZW5Qb2ludCk7CkBAIC0xNTEzLDcgKzE1MTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCB1aW50
NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1lU2Vj
dXJpdHlPcmlnaW4sIFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciwKICAgICAgICAgdWlu
dDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjYW5TaG93TUlNRVR5cGUsIGNvbnN0
IFN0cmluZyYgZG93bmxvYWRBdHRyaWJ1dGUsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVz
ZXJEYXRhJik7CiAgICAgdm9pZCBzdGFydFVSTFNjaGVtZVRhc2tTaGFyZWQoUmVmPFdlYlByb2Nl
c3NQcm94eT4mJiwgVVJMU2NoZW1lVGFza1BhcmFtZXRlcnMmJik7Ci0gICAgdm9pZCBsb2FkRGF0
YVdpdGhOYXZpZ2F0aW9uU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIEFQSTo6TmF2aWdh
dGlvbiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUs
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9wdGlv
bmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgbG9h
ZERhdGFXaXRoTmF2aWdhdGlvblNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBBUEk6Ok5h
dmlnYXRpb24mLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIE1JTUVU
eXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBP
cHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0LCBXZWJDb3JlOjpT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpOwogICAgIHZvaWQgbG9hZFJlcXVlc3RXaXRoTmF2
aWdhdGlvblNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBBUEk6Ok5hdmlnYXRpb24mLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVhdEFzQ29u
dGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgPSBXVEY6Om51bGxv
cHQpOwogICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbVNoYXJlZChSZWY8V2ViUHJvY2Vzc1By
b3h5PiYmLCBjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOwogICAgIHZv
aWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmNTaGFyZWQoUmVmPFdlYlByb2Nl
c3NQcm94eT4mJiwgdWludDY0X3QgZnJhbWVJRCwgYm9vbCBpc01haW5GcmFtZSwgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciwgdWlu
dDY0X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAxYzEwZWMxNWEwZTc1Zjhm
ZDZjY2IyMWI0NjU4MDFkMTczOTM4OGZiLi5jNmRlNWRlMDQ2MjU0N2NkMDM4YjBmOTNlODdhN2Q5
YzQ0NzQ3NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtMTU0Nyw3ICsxNTQ3LDcgQEAgdm9pZCBXZWJQYWdlOjpsb2FkUmVxdWVzdChMb2Fk
UGFyYW1ldGVycyYmIGxvYWRQYXJhbWV0ZXJzKQogICAgIEFTU0VSVCghbV9wZW5kaW5nV2Vic2l0
ZVBvbGljaWVzKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpsb2FkRGF0YUltcGwodWludDY0X3QgbmF2
aWdhdGlvbklELCBib29sIHNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vi
c2l0ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMsIFJlZjxTaGFyZWRCdWZmZXI+JiYg
c2hhcmVkQnVmZmVyLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nTmFtZSwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBVUkwmIHVucmVhY2hhYmxlVVJMLCBj
b25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCit2b2lkIFdlYlBhZ2U6OmxvYWREYXRhSW1wbCh1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIGJvb2wgc2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBPcHRp
b25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmIHdlYnNpdGVQb2xpY2llcywgUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBzaGFyZWRCdWZmZXIsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmlu
ZyYgZW5jb2RpbmdOYW1lLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IFVSTCYgdW5yZWFjaGFi
bGVVUkwsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KQogewogICAgIFNlbmRTdG9wUmVzcG9u
c2l2ZW5lc3NUaW1lciBzdG9wcGVyOwogCkBAIC0xNTYzLDcgKzE1NjMsNyBAQCB2b2lkIFdlYlBh
Z2U6OmxvYWREYXRhSW1wbCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGJvb2wgc2hvdWxkVHJlYXRB
c0NvbnRpbnVpbmdMbwogICAgIG1fbG9hZGVyQ2xpZW50LT53aWxsTG9hZERhdGFSZXF1ZXN0KCp0
aGlzLCByZXF1ZXN0LCBjb25zdF9jYXN0PFNoYXJlZEJ1ZmZlcio+KHN1YnN0aXR1dGVEYXRhLmNv
bnRlbnQoKSksIHN1YnN0aXR1dGVEYXRhLm1pbWVUeXBlKCksIHN1YnN0aXR1dGVEYXRhLnRleHRF
bmNvZGluZygpLCBzdWJzdGl0dXRlRGF0YS5mYWlsaW5nVVJMKCksIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgp
KTsKIAogICAgIC8vIEluaXRhdGUgdGhlIGxvYWQgaW4gV2ViQ29yZS4KLSAgICBGcmFtZUxvYWRS
ZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QoKm1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgcmVxdWVz
dCwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3csIHN1YnN0aXR1
dGVEYXRhKTsKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QoKm1fbWFpbkZy
YW1lLT5jb3JlRnJhbWUoKSwgcmVxdWVzdCwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSwg
c3Vic3RpdHV0ZURhdGEpOwogICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0U2hvdWxkVHJlYXRBc0Nv
bnRpbnVpbmdMb2FkKHNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCk7CiAgICAgbV9tYWluRnJh
bWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkp
OwogfQpAQCAtMTU3NCw3ICsxNTc0LDggQEAgdm9pZCBXZWJQYWdlOjpsb2FkRGF0YShMb2FkUGFy
YW1ldGVycyYmIGxvYWRQYXJhbWV0ZXJzKQogCiAgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihsb2FkUGFyYW1l
dGVycy5kYXRhLmRhdGEoKSksIGxvYWRQYXJhbWV0ZXJzLmRhdGEuc2l6ZSgpKTsKICAgICBVUkwg
YmFzZVVSTCA9IGxvYWRQYXJhbWV0ZXJzLmJhc2VVUkxTdHJpbmcuaXNFbXB0eSgpID8gV1RGOjpi
bGFua1VSTCgpIDogVVJMKFVSTCgpLCBsb2FkUGFyYW1ldGVycy5iYXNlVVJMU3RyaW5nKTsKLSAg
ICBsb2FkRGF0YUltcGwobG9hZFBhcmFtZXRlcnMubmF2aWdhdGlvbklELCBsb2FkUGFyYW1ldGVy
cy5zaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIFdURk1vdmUobG9hZFBhcmFtZXRlcnMud2Vi
c2l0ZVBvbGljaWVzKSwgV1RGTW92ZShzaGFyZWRCdWZmZXIpLCBsb2FkUGFyYW1ldGVycy5NSU1F
VHlwZSwgbG9hZFBhcmFtZXRlcnMuZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBVUkwoKSwgbG9hZFBh
cmFtZXRlcnMudXNlckRhdGEpOworICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgZXh0
ZXJuYWxVUkxzUG9saWN5ID0gc3RhdGljX2Nhc3Q8U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eT4obG9hZFBhcmFtZXRlcnMuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CisgICAgbG9h
ZERhdGFJbXBsKGxvYWRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JRCwgbG9hZFBhcmFtZXRlcnMuc2hv
dWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzLndlYnNpdGVQ
b2xpY2llcyksIFdURk1vdmUoc2hhcmVkQnVmZmVyKSwgbG9hZFBhcmFtZXRlcnMuTUlNRVR5cGUs
IGxvYWRQYXJhbWV0ZXJzLmVuY29kaW5nTmFtZSwgYmFzZVVSTCwgVVJMKCksIGxvYWRQYXJhbWV0
ZXJzLnVzZXJEYXRhLCBleHRlcm5hbFVSTHNQb2xpY3kpOwogfQogCiB2b2lkIFdlYlBhZ2U6Omxv
YWRBbHRlcm5hdGVIVE1MKExvYWRQYXJhbWV0ZXJzJiYgbG9hZFBhcmFtZXRlcnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMGJiYTk3ZGY4YjZkYjVm
Y2ZhMTExMjFkOWJkYzA2Yzg4Zjg2MzE1Yy4uOWQ3YjFmNWY5NDc2Zjk2NzBhYTAxZjk1YmM5NjFl
ZjlmNzdjMjViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aApAQCAtMTI4Niw3ICsxMjg2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBzb3VyY2VGb3JG
cmFtZShXZWJGcmFtZSopOwogCi0gICAgdm9pZCBsb2FkRGF0YUltcGwodWludDY0X3QgbmF2aWdh
dGlvbklELCBib29sIHNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vic2l0
ZVBvbGljaWVzRGF0YT4mJiwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgY29uc3QgU3Ry
aW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUsIGNvbnN0IFVSTCYgYmFz
ZVVSTCwgY29uc3QgVVJMJiBmYWlsaW5nVVJMLCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQg
bG9hZERhdGFJbXBsKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCBzaG91bGRUcmVhdEFzQ29u
dGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYsIFJlZjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmdOYW1lLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IFVSTCYgZmFpbGluZ1VSTCwg
Y29uc3QgVXNlckRhdGEmLCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0g
V2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpOwog
CiAgICAgLy8gQWN0aW9ucwogICAgIHZvaWQgdHJ5Q2xvc2UoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmODc2MDYxNTUxZGNmZGM3ZDg2ZDJl
NTUyNDYxZTgwMDRiYTBkNGZmLi5hYjIzYmVkZWYzMTlkNmU3YjVjN2U5MjdlMTBkMzU4OTljMzdl
NmE5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTktMDYtMjEgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxl
LmNvbT4KKworICAgICAgICBXZWJQYWdlUHJveHk6OmxvYWREYXRhIHNob3VsZCBhY2NlcHQgU2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MTE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTY3MTY3
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbToKKyAg
ICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBpbml0XSk6Cisg
ICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMTktMDYtMTkgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtld3MtYnVpbGRdIEFkZCBzdGVwIHRvIGFuYWx5emUgQ29tcGls
ZSBXZWJLaXQgZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbQppbmRleCA4Yzk0N2E1ZjE3
YTYyMjg2NzkxZWM5NzA5MTM4MTc1ZDA1YzYzMzBkLi5kMTkzY2RkZDRiNzA0ZDE2ZWIwMjVmZGFl
MjUwYWE5ZGRlMjgxYTA4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tCkBAIC0zMiw2ICszMiw3
IEBACiAjaW1wb3J0ICJJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0
L1dLTmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25Qcml2YXRl
Lmg+CiAjaW1wb3J0IDxwYWwvY29jb2EvQXBwU1NPU29mdExpbmsuaD4KQEAgLTEyMSw2ICsxMjIs
NyBAQCBzdGF0aWMgY29uc3QgY2hhciogc2FtbFJlc3BvbnNlID0KIAogQGludGVyZmFjZSBUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlLCBXS1VJRGVsZWdhdGU+CiBAcHJvcGVydHkgYm9vbCBpc0RlZmF1bHRQb2xpY3k7
CitAcHJvcGVydHkgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOwogLSAoaW5zdGFuY2V0
eXBlKWluaXQ7CiBAZW5kCiAKQEAgLTEyOCw4ICsxMzAsMTAgQEAgQGltcGxlbWVudGF0aW9uIFRl
c3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUKIAogLSAoaW5zdGFuY2V0eXBlKWlu
aXQKIHsKLSAgICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkKKyAgICBpZiAoc2VsZiA9IFtzdXBl
ciBpbml0XSkgewogICAgICAgICBzZWxmLmlzRGVmYXVsdFBvbGljeSA9IHRydWU7CisgICAgICAg
IHNlbGYuc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lcyA9IGZhbHNlOworICAgIH0KICAgICByZXR1
cm4gc2VsZjsKIH0KIApAQCAtMTQyLDYgKzE0Niw3IEBAIC0gKHZvaWQpd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZpZ2F0aW9uOihXS05hdmlnYXRpb24gKiluYXZpZ2F0
CiAKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRl
Y2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lv
bkhhbmRsZXIKIHsKKyAgICBFWFBFQ1RfRVEobmF2aWdhdGlvbkFjdGlvbi5fc2hvdWxkT3BlbkV4
dGVybmFsU2NoZW1lcywgc2VsZi5zaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzKTsKICAgICBpZiAo
c2VsZi5pc0RlZmF1bHRQb2xpY3kpIHsKICAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdh
dGlvbkFjdGlvblBvbGljeUFsbG93KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQyLDEwICsyNDcs
MTEgQEAgc3RhdGljIHZvaWQgcmVzZXRTdGF0ZSgpCiAgICAgZ05ld1dpbmRvdyA9IG51bGxwdHI7
CiB9CiAKLXN0YXRpYyB2b2lkIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcoVGVzdFdL
V2ViVmlldyAqd2ViVmlldywgVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSAq
ZGVsZWdhdGUpCitzdGF0aWMgdm9pZCBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KFRl
c3RXS1dlYlZpZXcgKndlYlZpZXcsIFRlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdh
dGUgKmRlbGVnYXRlLCBib29sIHNob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXMgPSBmYWxzZSkKIHsK
ICAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGVdOwogICAgIFt3ZWJW
aWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGVdOworICAgIGRlbGVnYXRlLnNob3VsZE9wZW5FeHRl
cm5hbFNjaGVtZXMgPSBzaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOwogfQogCiBzdGF0aWMgU3Ry
aW5nIGdlbmVyYXRlSHRtbChjb25zdCBjaGFyKiB0ZW1wbGF0ZUh0bWwsIGNvbnN0IFN0cmluZyYg
c3Vic3RpdHV0ZSwgY29uc3QgU3RyaW5nJiBvcHRpb25hbFN1YnN0aXR1dGUxID0gZW1wdHlTdHJp
bmcoKSwgY29uc3QgU3RyaW5nJiBvcHRpb25hbFN1YnN0aXR1dGUyID0gZW1wdHlTdHJpbmcoKSkK
QEAgLTI3Nyw3ICsyODMsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBOb0ludGVy
Y2VwdGlvbnMpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogCiAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJM
LmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKQEAgLTI5NCw3
ICszMDAsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25FcnJv
cikKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3
LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCld
XTsKICAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwpAQCAtMzEzLDcgKzMxOSw3
IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkRvTm90SGFuZGxl
KQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIFt3ZWJWaWV3
IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1d
OwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC0zMzYsNyArMzQy
LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uQ2FuY2VsKQog
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwog
ICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC0zNTksNyArMzY1LDcg
QEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uQ29tcGxldGVXaXRo
b3V0RGF0YSkKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0
aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwu
Z2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtMzgy
LDcgKzM4OCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblVu
ZXhwZWN0ZWRDb21wbGV0aW9uKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVl
KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1l
ZCk7CkBAIC00MDYsNyArNDEyLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50
ZXJjZXB0aW9uU3VjY2VlZDEpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUp
OwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVk
KTsKQEAgLTQzMyw3ICs0MzksNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRl
cmNlcHRpb25TdWNjZWVkMikKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7
CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9u
V2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09B
dXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgdHJ1ZSk7
CiAKICAgICAvLyBGb3JjZSBBcHAgTGlua3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRoYXQgaGFzIGEg
ZGlmZmVyZW50IGhvc3QgdGhhbiB0aGUgY3VycmVudCBvbmUgKGVtcHR5IGhvc3QpIGFuZCBTaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdy4KICAgICBhdXRvIHRlc3RVUkwg
PSBVUkwoVVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIpOwpAQCAtNDY3LDcgKzQ3Myw3
IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQzKQog
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIC8vIEZvcmNlIEFw
cCBMaW5rcyB3aXRoIGEgcmVxdWVzdC5VUkwgdGhhdCBoYXMgYSBkaWZmZXJlbnQgaG9zdCB0aGFu
IHRoZSBjdXJyZW50IG9uZSAoZW1wdHkgaG9zdCkgYW5kIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3k6OlNob3VsZEFsbG93LgogICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHBz
Oi8vd3d3LmV4YW1wbGUuY29tIik7CkBAIC01MDQsNyArNTEwLDcgQEAgVEVTVChTT0F1dGhvcml6
YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZDQpCiAgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKICAgICAvLyBBIHNlcGFyYXRlIGRlbGVnYXRlIHRoYXQgaW1wbGVt
ZW50cyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLgogICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQo
KSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogICAgIFtkZWxlZ2F0ZSBzZXRJ
c0RlZmF1bHRQb2xpY3k6ZmFsc2VdOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CkBAIC01MzMsNyArNTM5LDcg
QEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhP
dGhlckh0dHBTdGF0dXNDb2RlKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVl
KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1l
ZCk7CkBAIC01NTcsNyArNTYzLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50
ZXJjZXB0aW9uU3VjY2VlZFdpdGhDb29raWUpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNv
bmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0
KCksIHRydWUpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9u
UGVyZm9ybWVkKTsKQEAgLTU5Miw3ICs1OTgsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGly
ZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aENvb2tpZXMpCiAKICAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNP
QXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZp
Z3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkp
OworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCksIHRydWUpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRo
b3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTYyNiw3ICs2MzIsNyBAQCBURVNUKFNPQXV0aG9yaXph
dGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aFJlZGlyZWN0aW9uQW5kQ29va2ll
KQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIGF1dG8gdGVz
dFVSTCA9IFVSTChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tIik7CiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtNjY3LDcgKzY3Myw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3Qs
IEludGVyY2VwdGlvblN1Y2NlZWRXaXRoRGlmZmVyZW50T3JpZ2luKQogCiAgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rl
c3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCks
IGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigm
YXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC02OTEsOCArNjk3LDcgQEAgVEVTVChTT0F1dGhv
cml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhXYWl0aW5nU2Vzc2lvbikK
IAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7Ci0gICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdl
dCgpXTsKLSAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpLCB0cnVlKTsKIAogICAgIC8vIFRoZSBzZXNzaW9uIHdpbGwgYmUgd2FpdGluZyBzaW5jZSB0
aGUgd2ViIHZpZXcgaXMgaXMgbm90IGludCB0aGUgd2luZG93LgogICAgIFt3ZWJWaWV3IHJlbW92
ZUZyb21TdXBlcnZpZXddOwpAQCAtNzI3LDcgKzczMiw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9u
UmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRoQWN0aXZlU2Vzc2lvbkRpZE1vdmVXaW5k
b3cpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmll
dy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogCiAgICAgW3dlYlZp
ZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgp
XV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTc1OCw3ICs3
NjMsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVk
VHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2Vi
Vmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKICAgICAgICAgYXV0aG9yaXphdGlvblBlcmZvcm1l
ZCA9IGZhbHNlOwpAQCAtNzkxLDcgKzc5Niw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJl
Y3QsIEludGVyY2VwdGlvblN1Y2NlZWRTdXBwcmVzc0FjdGl2ZVNlc3Npb24pCiAKICAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwot
ICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdh
dGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5n
ZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6
cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTgyNiw4ICs4MzEsNyBAQCBURVNUKFNP
QXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkU3VwcHJlc3NXYWl0aW5n
U2Vzc2lvbikKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKLSAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIC8vIFRoZSBzZXNzaW9uIHdpbGwgYmUgd2FpdGlu
ZyBzaW5jZSB0aGUgd2ViIHZpZXcgaXMgaXMgbm90IGludCB0aGUgd2luZG93LgogICAgIFt3ZWJW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwpAQCAtODY3LDcgKzg3MSw3IEBAIFRFU1QoU09BdXRo
b3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRTQU1MKQogCiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIC8vIEFkZCBhIGh0dHAgYm9keSB0byB0
aGUgcmVxdWVzdCB0byBtaW1pYyBhIFNBTUwgcmVxdWVzdC4KICAgICBhdXRvIHJlcXVlc3QgPSBh
ZG9wdE5TKFtOU011dGFibGVVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCld
KTsKQEAgLTg5Nyw2ICs5MDEsOCBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBBdXRo
b3JpemF0aW9uT3B0aW9ucykKIAogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOkAiIiBiYXNl
VVJMOihOU1VSTCAqKVVSTChVUkwoKSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIpXTsKICAgICBV
dGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOworCisgICAgW2RlbGVnYXRlIHNldFNob3Vs
ZE9wZW5FeHRlcm5hbFNjaGVtZXM6dHJ1ZV07CiAgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OiBAImxvY2F0aW9uID0gJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nIiBjb21wbGV0aW9uSGFu
ZGxlcjpuaWxdOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CiAgICAg
Y2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAiaHR0cDovL3d3dy53ZWJraXQub3JnIiwg
MCk7CkBAIC05MTMsNyArOTE5LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50
ZXJjZXB0aW9uRGlkTm90SGFuZGxlVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNv
bmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0
KCksIHRydWUpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9u
UGVyZm9ybWVkKTsKQEAgLTkzNCw3ICs5NDAsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGly
ZWN0LCBJbnRlcmNlcHRpb25Db21wbGV0ZVR3aWNlKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpLCB0cnVlKTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXph
dGlvblBlcmZvcm1lZCk7CkBAIC05NTksNyArOTY1LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25S
ZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhVSSkKIAogICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09B
dXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmln
dXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7
CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxl
Z2F0ZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhv
cml6YXRpb25QZXJmb3JtZWQpOwpAQCAtOTkyLDcgKzk5OCw3IEBAIFRFU1QoU09BdXRob3JpemF0
aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkNhbmNlbFdpdGhVSSkKIAogICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0
U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29u
ZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtMTAyNCw3ICsxMDMwLDcgQEAgVEVTVChTT0F1dGhv
cml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uRXJyb3JXaXRoVUkpCiAKICAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAg
IGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUu
Z2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQo
KSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05T
VVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVu
KCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTEwNTYsNyArMTA2Miw3IEBAIFRFU1QoU09B
dXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRTdXBwcmVzc0FjdGl2ZVNl
c3Npb25XaXRoVUkpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIHRydWUpOwogCiAg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0
VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAg
LTEwOTUsNyArMTEwMSw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIFNob3dVSVR3
aWNlKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25X
ZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCB0cnVlKTsKIAogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQo
KV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC0xMTMyLDcg
KzExMzgsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBOU05vdGlmaWNhdGlvbkNl
bnRlcikKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJW
aWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9u
V2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0
KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtMTE2Nyw2
ICsxMTczLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgTm9JbnRlcmNlcHRpb25zKQog
ICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6dGVzdFVSTC5nZXQo
KV07CiAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKIAorICAgIFtkZWxlZ2F0
ZSBzZXRTaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOnRydWVdOwogICAgIG5hdmlnYXRpb25Db21w
bGV0ZWQgPSBmYWxzZTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgW3dlYlZpZXcgc2VuZENsaWNr
c0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOwpAQCAtMTI0
NCw2ICsxMjUxLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgSW50ZXJjZXB0aW9uRXJy
b3IpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJM
LmdldCgpXTsKICAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwogCisgICAgW2Rl
bGVnYXRlIHNldFNob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXM6dHJ1ZV07CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAw
KSBudW1iZXJPZkNsaWNrczoxXTsKICNlbGlmIFBMQVRGT1JNKElPUykKQEAgLTE0MjAsNiArMTQy
OCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRo
T3RoZXJIdHRwU3RhdHVzQ29kZSkKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRt
bCBiYXNlVVJMOmJhc2VVUkwuZ2V0KCldOwogICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBs
ZXRlZCk7CiAKKyAgICBbZGVsZWdhdGUgc2V0U2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lczp0cnVl
XTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgW3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNN
YWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9mQ2xpY2tzOjFdOwogI2VsaWYgUExBVEZPUk0oSU9T
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372649</attachid>
            <date>2019-06-21 14:14:12 -0700</date>
            <delta_ts>2019-06-21 14:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199114-20190621141411.patch</filename>
            <type>text/plain</type>
            <size>40548</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ5ZTI2MWYwMjA4MDQ3Zjhi
YTc4NTdiMjFhMDhjMDQ3NmI2NjQ1NjIuLjZjYmU4NjM3NjAwY2I1ZTgyMWU5MzA5ODZkNGNjMzNl
ZWYyMDAwMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTktMDYtMjEgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJQYWdlUHJveHk6OmxvYWRE
YXRhIHNob3VsZCBhY2NlcHQgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MTE0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81MTY3MTY3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHRlYWNoZXMgV2ViUGFnZVByb3h5Ojpsb2FkRGF0
YSB0byBhY2NlcHQgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBwb2xpY3ksCisgICAgICAg
IGFuZCB0aGVuIHV0aWxpemUgaXQgaW4gUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLiBU
aGVyZWZvcmUsIHRoZSByZXNwb25zZSBsb2FkZWQgYWZ0ZXIKKyAgICAgICAgc3VjY2Vzc2Z1bCBp
bnRlcmNlcHRpb25zIHdpbGwgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHNhbWUgcG9saWN5IGZy
b20gdGhlIGxhc3QgbmF2aWdhdGlvbgorICAgICAgICBhcyBpdCB3ZXJlIGNvbnRpbnVvdXMgbG9h
ZGluZy4KKworICAgICAgICAqIFNoYXJlZC9Mb2FkUGFyYW1ldGVycy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KToK
KyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0
ZUludGVybmFsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkRmlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9hZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmxvYWREYXRhSW1wbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oOgorCiAyMDE5LTA2LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgb3JpZ2luc1dpdGhDcmVkZW50aWFscyBmcm9tIFdl
YnNpdGVEYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Mb2FkUGFyYW1ldGVy
cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTG9hZFBhcmFtZXRlcnMuaAppbmRleCAxMDhiMTkx
NDM1NTdjZjVmM2M3OWRjMjVhMjYwOWRjMzkyMDRlZDJjLi5mZTIxZDM0NjBkOTNlNTU5ZTk3YjBj
NGE3YTM5YjEyMjdjNWUwYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Mb2Fk
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0xvYWRQYXJhbWV0ZXJzLmgK
QEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0IExvYWRQYXJhbWV0ZXJzIHsKIAogICAgIE9wdGlvbmFs
PFdlYnNpdGVQb2xpY2llc0RhdGE+IHdlYnNpdGVQb2xpY2llczsKIAotICAgIHVpbnQ2NF90IHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k7CisgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OwogICAgIGJvb2wgc2hv
dWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkIHsgZmFsc2UgfTsKICAgICBVc2VyRGF0YSB1c2VyRGF0
YTsKICAgICBXZWJDb3JlOjpMb2NrSGlzdG9yeSBsb2NrSGlzdG9yeSB7IFdlYkNvcmU6OkxvY2tI
aXN0b3J5OjpObyB9OwpAQCAtNzYsMyArNzYsMTYgQEAgc3RydWN0IExvYWRQYXJhbWV0ZXJzIHsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6
U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSwKKyAgICAgICAgV2ViQ29yZTo6U2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3csCisgICAgICAgIFdlYkNvcmU6OlNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFsbG93RXh0ZXJuYWxTY2hlbWVzLAor
ICAgICAgICBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxv
dworICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCmluZGV4IGNmYjAwODlhZGU0ZDQ5
YTc0ZGVmNDYxNjI3YTEwZjgwOGQ2NjFkY2YuLjM1NTQ0MzhmMzlmNTI1MGNmOGQ0NmNiZDQ4MDJm
MDUwYTZkZjYxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uQWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5h
dmlnYXRpb25BY3Rpb24uaApAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91
bGRPcGVuQXBwTGlua3MoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE9wZW5BcHBMaW5rcyAmJiBt
X25hdmlnYXRpb25BY3Rpb25EYXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPT0gV2Vi
Q29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3c7IH0KICAgICBi
b29sIHNob3VsZFBlcmZvcm1Eb3dubG9hZCgpIGNvbnN0IHsgcmV0dXJuICFtX25hdmlnYXRpb25B
Y3Rpb25EYXRhLmRvd25sb2FkQXR0cmlidXRlLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc1JlZGly
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5pc1JlZGlyZWN0OyB9
CisgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uRGF0YS5z
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OyB9CiAKICAgICBib29sIGlzUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VySW5pdGlhdGVkQWN0aW9uOyB9CiAgICAg
VXNlckluaXRpYXRlZEFjdGlvbiogdXNlckluaXRpYXRlZEFjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlckluaXRpYXRlZEFjdGlvbi5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9u
U2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KaW5kZXggZWU5YzAyOWI2ODJmOGE0
Y2JjNWRhNDBhNmEzNzk1YWIxMmZmYzljNy4uNDEwM2YyYTIxNzhlMzlhYjJkMmM4MDBmZWY3OTFi
NzU4ZWFkMDVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhv
cml6YXRpb25TZXNzaW9uLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogUmVmPFNPQXV0aG9yaXphdGlvblNlc3Npb24+IFJlZGlyZWN0U09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6Y3JlYXRlKFNPQXV0aG9yaXphdGlvbiAqc29BdXRob3JpemF0aW9uLCBS
ZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIFdlYlBhZ2VQcm94
eSYgcGFnZSwgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKQEAgLTUzLDggKzU0LDEw
IEBAIHZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKCkK
ICAgICBpbnZva2VDYWxsYmFjayh0cnVlKTsKIH0KIAotdm9pZCBSZWRpcmVjdFNPQXV0aG9yaXph
dGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
IHJlc3BvbnNlLCBOU0RhdGEgKmRhdGEpCit2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6Y29tcGxldGVJbnRlcm5hbChSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0
YSAqZGF0YSkKIHsKKyAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFj
dGlvbigpOworICAgIEFTU0VSVChuYXZpZ2F0aW9uQWN0aW9uUHRyKTsKICAgICBhdXRvKiBwYWdl
UHRyID0gcGFnZSgpOwogICAgIGlmICgocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAzMDIg
JiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDApIHx8ICFwYWdlUHRyKSB7CiAgICAg
ICAgIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKQEAgLTYzLDggKzY2LDYgQEAgdm9pZCBS
ZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYKICAgICBpbnZva2VDYWxsYmFjayh0cnVlKTsKICAgICBpZiAocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDIpIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAg
ICAgIGF1dG8qIG5hdmlnYXRpb25BY3Rpb25QdHIgPSBuYXZpZ2F0aW9uQWN0aW9uKCk7Ci0gICAg
ICAgIEFTU0VSVChuYXZpZ2F0aW9uQWN0aW9uUHRyKTsKICAgICAgICAgLy8gTW9iaWxlU2FmYXJp
IGhhcyBhIFdCU1VSTFNwb29maW5nTWl0aWdhdG9yLCB3aGljaCB3aWxsIG5vdCBkaXNwbGF5IHRo
ZSBwcm92aXNpb25hbCBVUkwgZm9yIG5hdmlnYXRpb25zIHdpdGhvdXQgdXNlciBnZXN0dXJlcy4K
ICAgICAgICAgLy8gRm9yIHNsb3cgbG9hZHMgdGhhdCBhcmUgaW5pdGlhdGVkIGZyb20gdGhlIE1v
YmlsZVNhZmFyaSBGYXZvcml0ZXMgc2NyZWVuLCB0aGUgYWZvcmVtZW50aW9uZWQgYmVoYXZpb3Ig
d2lsbCBjcmVhdGUgYSBwZXJpb2QKICAgICAgICAgLy8gYWZ0ZXIgYXV0aGVudGljYXRpb24gY29t
cGxldGlvbiB3aGVyZSB0aGUgbmV3IHJlcXVlc3QgdG8gdGhlIGFwcGxpY2F0aW9uIHNpdGUgbG9h
ZHMgd2l0aCBhIGJsYW5rIFVSTCBhbmQgYmxhbmsgcGFnZS4gVG8KQEAgLTczLDE3ICs3NCwxNyBA
QCB2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJgogICAgICAgICAvLyBzaG93IGFuIGVtcHR5IFVSTCBv
ciBhIGJsYW5rIHBhZ2UuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIGEgcmVsZXZhbnQgVVJMIGJhciBh
bmQgdXNlZnVsIHBhZ2UgY29udGVudCBkdXJpbmcgdGhlIGxvYWQuCiAgICAgICAgIGlmICghbmF2
aWdhdGlvbkFjdGlvblB0ci0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgewogICAgICAgICAg
ICAgcGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24oKTsKLSAgICAgICAgICAgIGF1dG8gaHRtbCA9IG1ha2VTdHJpbmco
IjxzY3JpcHQ+bG9jYXRpb24gPSAnIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmdldChX
ZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLCAiJzwvc2NyaXB0PiIpLnV0ZjgoKTsK
KyAgICAgICAgICAgIGF1dG8gaHRtbCA9IG1ha2VTdHJpbmcoIjxzY3JpcHQ+bG9jYXRpb24gPSAn
IiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmdldChIVFRQSGVhZGVyTmFtZTo6TG9jYXRp
b24pLCAiJzwvc2NyaXB0PiIpLnV0ZjgoKTsKICAgICAgICAgICAgIGF1dG8gZGF0YSA9IElQQzo6
RGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihodG1sLmRhdGEo
KSksIGh0bWwubGVuZ3RoKCkpOwotICAgICAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoZGF0YSwg
InRleHQvaHRtbCJfcywgIlVURi04Il9zLCBuYXZpZ2F0aW9uQWN0aW9uUHRyLT5yZXF1ZXN0KCku
dXJsKCkpOworICAgICAgICAgICAgcGFnZVB0ci0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCJf
cywgIlVURi04Il9zLCBuYXZpZ2F0aW9uQWN0aW9uUHRyLT5yZXF1ZXN0KCkudXJsKCksIG51bGxw
dHIsIG5hdmlnYXRpb25BY3Rpb25QdHItPnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBwYWdlUHRy
LT5sb2FkUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpLmdldChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pKSk7CisgICAg
ICAgIHBhZ2VQdHItPmxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChyZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuZ2V0KEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbikpKTsKICAgICB9CiAgICAg
aWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMjAwKSB7CiAgICAgICAgIHBhZ2VQdHIt
PnNldFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uKCk7Ci0gICAgICAgIHBhZ2VQdHItPmxvYWREYXRhKElQQzo6RGF0YVJlZmVyZW5jZShz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSwgInRl
eHQvaHRtbCJfcywgIlVURi04Il9zLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSk7CisgICAgICAg
IHBhZ2VQdHItPmxvYWREYXRhKElQQzo6RGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKSwgInRleHQvaHRtbCJfcywgIlVURi04
Il9zLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgbnVsbHB0ciwgbmF2aWdhdGlvbkFjdGlvblB0
ci0+c2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDEzMDJhODRlMTA3ZmE2ZDM4MDcz
MGRhMWI4NjkzOWZmMjliZmMyZGMuLjg2YjQwNDAwMzhiOTg4MGZkNjY0OWJiNWRhZmNjNDI5YTYz
NTRmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTEw
Nyw3ICsxMTA3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZXF1ZXN0V2l0aE5hdmlnYXRp
b25TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXMKICAgICBMb2FkUGFyYW1ldGVy
cyBsb2FkUGFyYW1ldGVyczsKICAgICBsb2FkUGFyYW1ldGVycy5uYXZpZ2F0aW9uSUQgPSBuYXZp
Z2F0aW9uLm5hdmlnYXRpb25JRCgpOwogICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSBXVEZN
b3ZlKHJlcXVlc3QpOwotICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kgPSAodWludDY0X3Qpc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTsKKyAgICBsb2Fk
UGFyYW1ldGVycy5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTsKICAgICBsb2FkUGFyYW1ldGVycy51c2VyRGF0YSA9IFVzZXJEYXRhKHBy
b2Nlc3MtPnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEpLmdldCgpKTsKICAgICBs
b2FkUGFyYW1ldGVycy5zaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQgPSBzaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQgPT0gU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXM7CiAgICAg
bG9hZFBhcmFtZXRlcnMud2Vic2l0ZVBvbGljaWVzID0gV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMp
OwpAQCAtMTE2Myw3ICsxMTYzLDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVBy
b3h5Ojpsb2FkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVVUkxTdHJpbmcsIGNvbnMKICAgICBMb2Fk
UGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKICAgICBsb2FkUGFyYW1ldGVycy5uYXZpZ2F0aW9u
SUQgPSBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKTsKICAgICBsb2FkUGFyYW1ldGVycy5yZXF1
ZXN0ID0gZmlsZVVSTDsKLSAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5ID0gKHVpbnQ2NF90KVNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5v
dEFsbG93OworICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kg
PSBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdzsKICAgICBsb2Fk
UGFyYW1ldGVycy51c2VyRGF0YSA9IFVzZXJEYXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKHJlc291cmNlRGlyZWN0b3J5UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZE9ubHksIGxvYWRQYXJhbWV0ZXJzLnNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGFkZFBs
YXRmb3JtTG9hZFBhcmFtZXRlcnMobG9hZFBhcmFtZXRlcnMpOwpAQCAtMTE3NSw3ICsxMTc1LDcg
QEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVVUkxTdHJpbmcsIGNvbnMKICAgICByZXR1cm4gbmF2aWdhdGlvbjsKIH0KIAot
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmlu
ZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRh
KQorUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJE
YXRhLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAibG9hZERhdGE6
IHdlYlBJRCA9ICVpLCBwYWdlSUQgPSAlIiBQUkl1NjQsIG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSwgbV9wYWdlSUQudG9VSW50NjQoKSk7CiAKQEAgLTExODgsMTEgKzExODgsMTEgQEAg
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGMKICAgICAgICAgbGF1bmNoUHJvY2Vzcyh7IH0pOwogCiAg
ICAgYXV0byBuYXZpZ2F0aW9uID0gbV9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUxvYWREYXRhTmF2
aWdhdGlvbihzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6U3Vic3RpdHV0ZURhdGE+KGRhdGEudmVjdG9y
KCksIE1JTUVUeXBlLCBlbmNvZGluZywgYmFzZVVSTCwgdXNlckRhdGEpKTsKLSAgICBsb2FkRGF0
YVdpdGhOYXZpZ2F0aW9uU2hhcmVkKG1fcHJvY2Vzcy5jb3B5UmVmKCksIG5hdmlnYXRpb24sIGRh
dGEsIE1JTUVUeXBlLCBlbmNvZGluZywgYmFzZVVSTCwgdXNlckRhdGEsIFNob3VsZFRyZWF0QXND
b250aW51aW5nTG9hZDo6Tm8pOworICAgIGxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQobV9w
cm9jZXNzLmNvcHlSZWYoKSwgbmF2aWdhdGlvbiwgZGF0YSwgTUlNRVR5cGUsIGVuY29kaW5nLCBi
YXNlVVJMLCB1c2VyRGF0YSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpu
dWxsb3B0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKICAgICByZXR1cm4gbmF2aWdh
dGlvbjsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFy
ZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBBUEk6Ok5hdmlnYXRpb24mIG5hdmln
YXRpb24sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1F
VHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCBzaG91bGRUcmVh
dEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0
ZVBvbGljaWVzKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFy
ZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBBUEk6Ok5hdmlnYXRpb24mIG5hdmln
YXRpb24sIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1F
VHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCBzaG91bGRUcmVh
dEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0
ZVBvbGljaWVzLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3kpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAibG9h
ZERhdGFXaXRoTmF2aWdhdGlvbjogd2ViUElEID0gJWksIHBhZ2VJRCA9ICUiIFBSSXU2NCwgcHJv
Y2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgbV9wYWdlSUQudG9VSW50NjQoKSk7CiAKQEAgLTEy
MTEsNiArMTIxMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkRGF0YVdpdGhOYXZpZ2F0aW9u
U2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywKICAgICBsb2FkUGFyYW1ldGVy
cy5zaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQgPSBzaG91bGRUcmVhdEFzQ29udGludWluZ0xv
YWQgPT0gU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpZZXM7CiAgICAgbG9hZFBhcmFtZXRl
cnMudXNlckRhdGEgPSBVc2VyRGF0YShwcm9jZXNzLT50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVz
KHVzZXJEYXRhKS5nZXQoKSk7CiAgICAgbG9hZFBhcmFtZXRlcnMud2Vic2l0ZVBvbGljaWVzID0g
V1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpOworICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgPSBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OwogICAgIGFk
ZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMobG9hZFBhcmFtZXRlcnMpOwogCiAgICAgcHJvY2Vzcy0+
YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqdGhpcywgYmFzZVVSTCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDVkZDYyM2I0NzMyZDBkNTVlZDU1MzQwZDk2M2Vl
MTBlNmFmZjk4MDguLmRjOTcwNmNlZjNjNzRlMDQ3M2FhMDFkMmNkZWU2ODk5YmM0YmIwMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01MjgsNyArNTI4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkUGxhdGZvcm1Mb2FkUGFyYW1ldGVycyhMb2FkUGFyYW1ldGVy
cyYpOwogICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IGxvYWRSZXF1ZXN0KFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0g
V2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3dFeHRlcm5h
bFNjaGVtZXMsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOwogICAgIFJlZlB0cjxB
UEk6Ok5hdmlnYXRpb24+IGxvYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVVSTCwgY29uc3QgU3Ry
aW5nJiByZXNvdXJjZURpcmVjdG9yeVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0
cik7Ci0gICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbG9hZERhdGEoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRy
KTsKKyAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5n
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIs
IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBXZWJDb3JlOjpTaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyk7CiAgICAgdm9pZCBsb2FkQWx0
ZXJuYXRlSFRNTChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IFVSTCYgdW5yZWFjaGFibGVVUkwsIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOwogICAgIHZvaWQgbG9hZFdlYkFyY2hpdmVEYXRh
KEFQSTo6RGF0YSosIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOwogICAgIHZvaWQg
bmF2aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2soY29uc3QgU3RyaW5nJiB1cmwsIFdl
YkNvcmU6OkludFBvaW50IGRvY3VtZW50UG9pbnQsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBv
aW50KTsKQEAgLTE1MTMsNyArMTUxMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlY2lkZVBvbGlj
eUZvclJlc3BvbnNlU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdp
biwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVyLAogICAgICAgICB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNhblNob3dNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBk
b3dubG9hZEF0dHJpYnV0ZSwgdWludDY0X3QgbGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEmKTsK
ICAgICB2b2lkIHN0YXJ0VVJMU2NoZW1lVGFza1NoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYm
LCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyYmKTsKLSAgICB2b2lkIGxvYWREYXRhV2l0aE5hdmln
YXRpb25TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgQVBJOjpOYXZpZ2F0aW9uJiwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRh
dGEsIFdlYkNvcmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vic2l0
ZVBvbGljaWVzRGF0YT4mJiA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBsb2FkRGF0YVdpdGhO
YXZpZ2F0aW9uU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIEFQSTo6TmF2aWdhdGlvbiYs
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0
IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVz
ZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdl
YnNpdGVQb2xpY2llc0RhdGE+JiYgPSBXVEY6Om51bGxvcHQsIFdlYkNvcmU6OlNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgPSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5
OjpTaG91bGROb3RBbGxvdyk7CiAgICAgdm9pZCBsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hh
cmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIEFQSTo6TmF2aWdhdGlvbiYsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LCBB
UEk6Ok9iamVjdCogdXNlckRhdGEsIFdlYkNvcmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9h
ZCwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiA9IFdURjo6bnVsbG9wdCk7CiAgICAg
dm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIGNv
bnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJik7CiAgICAgdm9pZCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luY1NoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYm
LCB1aW50NjRfdCBmcmFtZUlELCBib29sIGlzTWFpbkZyYW1lLCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmJiwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVyLCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDFjMTBlYzE1YTBlNzVmOGZkNmNjYjIxYjQ2
NTgwMWQxNzM5Mzg4ZmIuLmM2ZGU1ZGUwNDYyNTQ3Y2QwMzhiMGY5M2U4N2E3ZDljNDQ3NDc2NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0x
NTQ3LDcgKzE1NDcsNyBAQCB2b2lkIFdlYlBhZ2U6OmxvYWRSZXF1ZXN0KExvYWRQYXJhbWV0ZXJz
JiYgbG9hZFBhcmFtZXRlcnMpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdXZWJzaXRlUG9saWNpZXMp
OwogfQogCi12b2lkIFdlYlBhZ2U6OmxvYWREYXRhSW1wbCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQs
IGJvb2wgc2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBPcHRpb25hbDxXZWJzaXRlUG9saWNp
ZXNEYXRhPiYmIHdlYnNpdGVQb2xpY2llcywgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBzaGFyZWRCdWZm
ZXIsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmdOYW1lLCBj
b25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IFVSTCYgdW5yZWFjaGFibGVVUkwsIGNvbnN0IFVzZXJE
YXRhJiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZTo6bG9hZERhdGFJbXBsKHVpbnQ2NF90IG5hdmln
YXRpb25JRCwgYm9vbCBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNp
dGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzLCBSZWY8U2hhcmVkQnVmZmVyPiYmIHNo
YXJlZEJ1ZmZlciwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGlu
Z05hbWUsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgVVJMJiB1bnJlYWNoYWJsZVVSTCwgY29u
c3QgVXNlckRhdGEmIHVzZXJEYXRhLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpCiB7CiAgICAgU2VuZFN0b3BSZXNwb25zaXZlbmVzc1Rp
bWVyIHN0b3BwZXI7CiAKQEAgLTE1NjMsNyArMTU2Myw3IEBAIHZvaWQgV2ViUGFnZTo6bG9hZERh
dGFJbXBsKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCBzaG91bGRUcmVhdEFzQ29udGludWlu
Z0xvCiAgICAgbV9sb2FkZXJDbGllbnQtPndpbGxMb2FkRGF0YVJlcXVlc3QoKnRoaXMsIHJlcXVl
c3QsIGNvbnN0X2Nhc3Q8U2hhcmVkQnVmZmVyKj4oc3Vic3RpdHV0ZURhdGEuY29udGVudCgpKSwg
c3Vic3RpdHV0ZURhdGEubWltZVR5cGUoKSwgc3Vic3RpdHV0ZURhdGEudGV4dEVuY29kaW5nKCks
IHN1YnN0aXR1dGVEYXRhLmZhaWxpbmdVUkwoKSwgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJh
bnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogCiAgICAg
Ly8gSW5pdGF0ZSB0aGUgbG9hZCBpbiBXZWJDb3JlLgotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJh
bWVMb2FkUmVxdWVzdCgqbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLCByZXF1ZXN0LCBTaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgc3Vic3RpdHV0ZURhdGEpOwor
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCgqbV9tYWluRnJhbWUtPmNvcmVG
cmFtZSgpLCByZXF1ZXN0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LCBzdWJzdGl0dXRl
RGF0YSk7CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRTaG91bGRUcmVhdEFzQ29udGludWluZ0xv
YWQoc2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkKTsKICAgICBtX21haW5GcmFtZS0+Y29yZUZy
YW1lKCktPmxvYWRlcigpLmxvYWQoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSk7CiB9CkBAIC0x
NTc0LDcgKzE1NzQsOCBAQCB2b2lkIFdlYlBhZ2U6OmxvYWREYXRhKExvYWRQYXJhbWV0ZXJzJiYg
bG9hZFBhcmFtZXRlcnMpCiAKICAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGxvYWRQYXJhbWV0ZXJzLmRhdGEu
ZGF0YSgpKSwgbG9hZFBhcmFtZXRlcnMuZGF0YS5zaXplKCkpOwogICAgIFVSTCBiYXNlVVJMID0g
bG9hZFBhcmFtZXRlcnMuYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkgPyBXVEY6OmJsYW5rVVJMKCkg
OiBVUkwoVVJMKCksIGxvYWRQYXJhbWV0ZXJzLmJhc2VVUkxTdHJpbmcpOwotICAgIGxvYWREYXRh
SW1wbChsb2FkUGFyYW1ldGVycy5uYXZpZ2F0aW9uSUQsIGxvYWRQYXJhbWV0ZXJzLnNob3VsZFRy
ZWF0QXNDb250aW51aW5nTG9hZCwgV1RGTW92ZShsb2FkUGFyYW1ldGVycy53ZWJzaXRlUG9saWNp
ZXMpLCBXVEZNb3ZlKHNoYXJlZEJ1ZmZlciksIGxvYWRQYXJhbWV0ZXJzLk1JTUVUeXBlLCBsb2Fk
UGFyYW1ldGVycy5lbmNvZGluZ05hbWUsIGJhc2VVUkwsIFVSTCgpLCBsb2FkUGFyYW1ldGVycy51
c2VyRGF0YSk7CisgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBleHRlcm5hbFVSTHNQ
b2xpY3kgPSBzdGF0aWNfY2FzdDxTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5Pihsb2FkUGFy
YW1ldGVycy5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKKyAgICBsb2FkRGF0YUltcGwo
bG9hZFBhcmFtZXRlcnMubmF2aWdhdGlvbklELCBsb2FkUGFyYW1ldGVycy5zaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQsIFdURk1vdmUobG9hZFBhcmFtZXRlcnMud2Vic2l0ZVBvbGljaWVzKSwg
V1RGTW92ZShzaGFyZWRCdWZmZXIpLCBsb2FkUGFyYW1ldGVycy5NSU1FVHlwZSwgbG9hZFBhcmFt
ZXRlcnMuZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBVUkwoKSwgbG9hZFBhcmFtZXRlcnMudXNlckRh
dGEsIGV4dGVybmFsVVJMc1BvbGljeSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6bG9hZEFsdGVybmF0
ZUhUTUwoTG9hZFBhcmFtZXRlcnMmJiBsb2FkUGFyYW1ldGVycykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAwYmJhOTdkZjhiNmRiNWZjZmExMTEyMWQ5
YmRjMDZjODhmODYzMTVjLi45ZDdiMWY1Zjk0NzZmOTY3MGFhMDFmOTViYzk2MWVmOWY3N2MyNWJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMjg2
LDcgKzEyODYsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIHNvdXJjZUZvckZyYW1lKFdlYkZy
YW1lKik7CiAKLSAgICB2b2lkIGxvYWREYXRhSW1wbCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGJv
b2wgc2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNE
YXRhPiYmLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBTdHJpbmcmIE1JTUVU
eXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nTmFtZSwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25z
dCBVUkwmIGZhaWxpbmdVUkwsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBsb2FkRGF0YUlt
cGwodWludDY0X3QgbmF2aWdhdGlvbklELCBib29sIHNob3VsZFRyZWF0QXNDb250aW51aW5nTG9h
ZCwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZ05h
bWUsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgVVJMJiBmYWlsaW5nVVJMLCBjb25zdCBVc2Vy
RGF0YSYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBXZWJDb3JlOjpT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyk7CiAKICAgICAvLyBB
Y3Rpb25zCiAgICAgdm9pZCB0cnlDbG9zZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY4NzYwNjE1NTFkY2ZkYzdkODZkMmU1NTI0NjFlODAw
NGJhMGQ0ZmYuLmFiMjNiZWRlZjMxOWQ2ZTdiNWM3ZTkyN2UxMGQzNTg5OWMzN2U2YTkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxOS0wNi0yMSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYlBhZ2VQcm94eTo6bG9hZERhdGEgc2hvdWxkIGFjY2VwdCBTaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTkxMTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxNjcxNjc0PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tOgorICAgICAgICAoLVtU
ZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGluaXRdKToKKyAgICAgICAgKC1b
VGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAoY29uZmln
dXJlU09BdXRob3JpemF0aW9uV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAxOS0wNi0xOSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2V3cy1idWlsZF0gQWRkIHN0ZXAgdG8gYW5hbHl6ZSBDb21waWxlIFdlYktpdCBm
YWlsdXJlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXN0U09BdXRob3JpemF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tCmluZGV4IDhjOTQ3YTVmMTdhNjIyODY3OTFl
Yzk3MDkxMzgxNzVkMDVjNjMzMGQuLjQyMTk3ZTRlZjQ5YWM3YWJiMjlmMzZkN2IzY2I5MjBlYjc3
MjZiZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGVzdFNPQXV0aG9yaXphdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBv
cnQgIkluc3RhbmNlTWV0aG9kU3dpenpsZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0
aW9uQWN0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvblByaXZhdGUuaD4KICNpbXBv
cnQgPHBhbC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgpAQCAtMTIxLDYgKzEyMiw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiBzYW1sUmVzcG9uc2UgPQogCiBAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUs
IFdLVUlEZWxlZ2F0ZT4KIEBwcm9wZXJ0eSBib29sIGlzRGVmYXVsdFBvbGljeTsKK0Bwcm9wZXJ0
eSBib29sIHNob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXM7CiAtIChpbnN0YW5jZXR5cGUpaW5pdDsK
IEBlbmQKIApAQCAtMTI4LDggKzEzMCwxMCBAQCBAaW1wbGVtZW50YXRpb24gVGVzdFNPQXV0aG9y
aXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdAogewotICAg
IGlmIChzZWxmID0gW3N1cGVyIGluaXRdKQorICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7
CiAgICAgICAgIHNlbGYuaXNEZWZhdWx0UG9saWN5ID0gdHJ1ZTsKKyAgICAgICAgc2VsZi5zaG91
bGRPcGVuRXh0ZXJuYWxTY2hlbWVzID0gZmFsc2U7CisgICAgfQogICAgIHJldHVybiBzZWxmOwog
fQogCkBAIC0xNDIsNiArMTQ2LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IGRpZEZpbmlzaE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXQKIAogLSAodm9p
ZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5k
bGVyOih2b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgog
eworICAgIEVYUEVDVF9FUShuYXZpZ2F0aW9uQWN0aW9uLl9zaG91bGRPcGVuRXh0ZXJuYWxTY2hl
bWVzLCBzZWxmLnNob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXMpOwogICAgIGlmIChzZWxmLmlzRGVm
YXVsdFBvbGljeSkgewogICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9u
UG9saWN5QWxsb3cpOwogICAgICAgICByZXR1cm47CkBAIC0yNDIsMTAgKzI0NywxNiBAQCBzdGF0
aWMgdm9pZCByZXNldFN0YXRlKCkKICAgICBnTmV3V2luZG93ID0gbnVsbHB0cjsKIH0KIAotc3Rh
dGljIHZvaWQgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyhUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3LCBUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlICpkZWxlZ2F0ZSkK
K2VudW0gY2xhc3MgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeSA6IGJvb2wgeworICAgIEFsbG93
LAorICAgIERpc2FsbG93Cit9OworCitzdGF0aWMgdm9pZCBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KFRlc3RXS1dlYlZpZXcgKndlYlZpZXcsIFRlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgKmRlbGVnYXRlLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5IHBvbGlj
eSA9IE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkRpc2FsbG93KQogewogICAgIFt3ZWJWaWV3
IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZV07CiAgICAgW3dlYlZpZXcgc2V0VUlEZWxl
Z2F0ZTpkZWxlZ2F0ZV07CisgICAgZGVsZWdhdGUuc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lcyA9
IHBvbGljeSA9PSBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdzsKIH0KIAogc3RhdGlj
IFN0cmluZyBnZW5lcmF0ZUh0bWwoY29uc3QgY2hhciogdGVtcGxhdGVIdG1sLCBjb25zdCBTdHJp
bmcmIHN1YnN0aXR1dGUsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxTdWJzdGl0dXRlMSA9IGVtcHR5
U3RyaW5nKCksIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxTdWJzdGl0dXRlMiA9IGVtcHR5U3RyaW5n
KCkpCkBAIC0yNzcsNyArMjg4LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgTm9J
bnRlcmNlcHRpb25zKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhv
cml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJu
YWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4o
Jm5hdmlnYXRpb25Db21wbGV0ZWQpOwpAQCAtMjk0LDcgKzMwNSw3IEBAIFRFU1QoU09BdXRob3Jp
emF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkVycm9yKQogCiAgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVn
YXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0
KCldXTsKICAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwpAQCAtMzEzLDcgKzMy
NCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkRvTm90SGFu
ZGxlKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25X
ZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVz
UG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOwpAQCAtMzM2LDcgKzM0Nyw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9u
UmVkaXJlY3QsIEludGVyY2VwdGlvbkNhbmNlbCkKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3Jp
emF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09B
dXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAg
Y29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5n
ZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxsb3cpOwogCiAgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07
CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTM1OSw3ICszNzAs
NyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25Db21wbGV0ZVdp
dGhvdXREYXRhKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6
YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxT
Y2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1
dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtMzgyLDcgKzM5Myw3IEBAIFRFU1QoU09BdXRob3Jp
emF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblVuZXhwZWN0ZWRDb21wbGV0aW9uKQogCiAgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxv
dyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3Jt
ZWQpOwpAQCAtNDA2LDcgKzQxNyw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIElu
dGVyY2VwdGlvblN1Y2NlZWQxKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVu
RXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGls
OjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtNDMzLDcgKzQ0NCw3IEBAIFRFU1Qo
U09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQyKQogCiAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHRO
UyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
LSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVn
YXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcu
Z2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7
CiAKICAgICAvLyBGb3JjZSBBcHAgTGlua3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRoYXQgaGFzIGEg
ZGlmZmVyZW50IGhvc3QgdGhhbiB0aGUgY3VycmVudCBvbmUgKGVtcHR5IGhvc3QpIGFuZCBTaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdy4KICAgICBhdXRvIHRlc3RVUkwg
PSBVUkwoVVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIpOwpAQCAtNDY3LDcgKzQ3OCw3
IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQzKQog
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5
OjpBbGxvdyk7CiAKICAgICAvLyBGb3JjZSBBcHAgTGlua3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRo
YXQgaGFzIGEgZGlmZmVyZW50IGhvc3QgdGhhbiB0aGUgY3VycmVudCBvbmUgKGVtcHR5IGhvc3Qp
IGFuZCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdy4KICAgICBhdXRv
IHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIpOwpAQCAtNTA0
LDcgKzUxNSw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1
Y2NlZWQ0KQogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgLy8gQSBz
ZXBhcmF0ZSBkZWxlZ2F0ZSB0aGF0IGltcGxlbWVudHMgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbi4KICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRp
b25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhv
cml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
LCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAgICAgW2RlbGVnYXRlIHNldElz
RGVmYXVsdFBvbGljeTpmYWxzZV07CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKQEAgLTUzMyw3ICs1NDQsNyBA
QCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aE90
aGVySHR0cFN0YXR1c0NvZGUpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5F
eHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6
OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC01NTcsNyArNTY4LDcgQEAgVEVTVChT
T0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhDb29raWUpCiAK
ICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQo
KSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6
OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBl
cmZvcm1lZCk7CkBAIC01OTIsNyArNjAzLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVj
dCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhDb29raWVzKQogCiAgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVn
YXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0
KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtNjI2LDcg
KzYzNyw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2Nl
ZWRXaXRoUmVkaXJlY3Rpb25BbmRDb29raWUpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNv
bmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0
KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIGF1dG8gdGVzdFVS
TCA9IFVSTChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tIik7CiAjaWYgUExBVEZPUk0o
TUFDKQpAQCAtNjY3LDcgKzY3OCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIElu
dGVyY2VwdGlvblN1Y2NlZWRXaXRoRGlmZmVyZW50T3JpZ2luKQogCiAgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwu
Z2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtNjkx
LDggKzcwMiw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1
Y2NlZWRXaXRoV2FpdGluZ1Nlc3Npb24pCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIFt3ZWJWaWV3IHNldE5hdmln
YXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6
QWxsb3cpOwogCiAgICAgLy8gVGhlIHNlc3Npb24gd2lsbCBiZSB3YWl0aW5nIHNpbmNlIHRoZSB3
ZWIgdmlldyBpcyBpcyBub3QgaW50IHRoZSB3aW5kb3cuCiAgICAgW3dlYlZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CkBAIC03MjcsNyArNzM3LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRp
cmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhBY3RpdmVTZXNzaW9uRGlkTW92ZVdpbmRvdykK
IAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3Lmdl
dCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGlj
eTo6QWxsb3cpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9u
UGVyZm9ybWVkKTsKQEAgLTc1OCw3ICs3NjgsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGly
ZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9y
aXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAg
IGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUu
Z2V0KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgICAgIGF1dGhvcml6YXRpb25QZXJmb3JtZWQgPSBm
YWxzZTsKQEAgLTc5MSw3ICs4MDEsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJ
bnRlcmNlcHRpb25TdWNjZWVkU3VwcHJlc3NBY3RpdmVTZXNzaW9uKQogCiAgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rl
c3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCks
IGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RV
UkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAt
ODI2LDggKzgzNiw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlv
blN1Y2NlZWRTdXBwcmVzc1dhaXRpbmdTZXNzaW9uKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbd2ViVmlldyBz
ZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwotICAgIFt3ZWJWaWV3IHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQ
b2xpY3k6OkFsbG93KTsKIAogICAgIC8vIFRoZSBzZXNzaW9uIHdpbGwgYmUgd2FpdGluZyBzaW5j
ZSB0aGUgd2ViIHZpZXcgaXMgaXMgbm90IGludCB0aGUgd2luZG93LgogICAgIFt3ZWJWaWV3IHJl
bW92ZUZyb21TdXBlcnZpZXddOwpAQCAtODY3LDcgKzg3Niw3IEBAIFRFU1QoU09BdXRob3JpemF0
aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRTQU1MKQogCiAgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
KTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICAv
LyBBZGQgYSBodHRwIGJvZHkgdG8gdGhlIHJlcXVlc3QgdG8gbWltaWMgYSBTQU1MIHJlcXVlc3Qu
CiAgICAgYXV0byByZXF1ZXN0ID0gYWRvcHROUyhbTlNNdXRhYmxlVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDp0ZXN0VVJMLmdldCgpXSk7CkBAIC04OTcsNiArOTA2LDggQEAgVEVTVChTT0F1dGhv
cml6YXRpb25SZWRpcmVjdCwgQXV0aG9yaXphdGlvbk9wdGlvbnMpCiAKICAgICBbd2ViVmlldyBs
b2FkSFRNTFN0cmluZzpAIiIgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJMKCksICJodHRwOi8vd3d3
LndlYmtpdC5vcmciKV07CiAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKwor
ICAgIFtkZWxlZ2F0ZSBzZXRTaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOnRydWVdOwogICAgIFt3
ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJsb2NhdGlvbiA9ICdodHRwOi8vd3d3LmV4YW1w
bGUuY29tJyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOwogICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImh0
dHA6Ly93d3cud2Via2l0Lm9yZyIsIDApOwpAQCAtOTEzLDcgKzkyNCw3IEBAIFRFU1QoU09BdXRo
b3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkRpZE5vdEhhbmRsZVR3aWNlKQogCiAgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxv
dyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3Jt
ZWQpOwpAQCAtOTM0LDcgKzk0NSw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIElu
dGVyY2VwdGlvbkNvbXBsZXRlVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZp
Z3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCks
IE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAg
IFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC05NTksNyArOTcwLDcgQEAg
VEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhVSSkK
IAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3Lmdl
dCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmll
dyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGlj
eTo6QWxsb3cpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9u
UGVyZm9ybWVkKTsKQEAgLTk5Miw3ICsxMDAzLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRp
cmVjdCwgSW50ZXJjZXB0aW9uQ2FuY2VsV2l0aFVJKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCld
XTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtMTAyNCw3ICsx
MDM1LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uRXJyb3JX
aXRoVUkpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2Vi
Vmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNjaGVt
ZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9y
aXphdGlvblBlcmZvcm1lZCk7CkBAIC0xMDU2LDcgKzEwNjcsNyBAQCBURVNUKFNPQXV0aG9yaXph
dGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkU3VwcHJlc3NBY3RpdmVTZXNzaW9uV2l0
aFVJKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25X
ZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVz
UG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOwpAQCAtMTA5NSw3ICsxMTA2LDcgQEAgVEVTVChTT0F1dGhvcml6YXRp
b25SZWRpcmVjdCwgU2hvd1VJVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZp
Z3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCks
IE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAg
IFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC0xMTMyLDcgKzExNDMsNyBA
QCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBOU05vdGlmaWNhdGlvbkNlbnRlcikKIAog
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgp
LCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6
QWxsb3cpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVy
Zm9ybWVkKTsKQEAgLTExNjcsNiArMTE3OCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9wVXAs
IE5vSW50ZXJjZXB0aW9ucykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBi
YXNlVVJMOnRlc3RVUkwuZ2V0KCldOwogICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRl
ZCk7CiAKKyAgICBbZGVsZWdhdGUgc2V0U2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lczp0cnVlXTsK
ICAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IFt3ZWJWaWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJP
ZkNsaWNrczoxXTsKQEAgLTEyNDQsNiArMTI1Niw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9w
VXAsIEludGVyY2VwdGlvbkVycm9yKQogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RI
dG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CiAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29t
cGxldGVkKTsKIAorICAgIFtkZWxlZ2F0ZSBzZXRTaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOnRy
dWVdOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpO
U01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CiAjZWxpZiBQTEFURk9STShJ
T1MpCkBAIC0xNDIwLDYgKzE0MzMsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRl
cmNlcHRpb25TdWNjZWVkV2l0aE90aGVySHR0cFN0YXR1c0NvZGUpCiAgICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKICAgICBVdGlsOjpy
dW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwogCisgICAgW2RlbGVnYXRlIHNldFNob3VsZE9wZW5F
eHRlcm5hbFNjaGVtZXM6dHJ1ZV07CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJWaWV3IHNl
bmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsK
ICNlbGlmIFBMQVRGT1JNKElPUykK
</data>
<flag name="review"
          id="388461"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372657</attachid>
            <date>2019-06-21 15:20:27 -0700</date>
            <delta_ts>2019-06-21 15:47:23 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-199114-20190621152027.patch</filename>
            <type>text/plain</type>
            <size>54621</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlMjMxN2RmNmRhOWQw
NDQ3NGJjYzE5YmNhNmMxMGIzMmZiNDE5NC4uMmYxMzhjZGU0NGY2NjM1ZTU5NjZmODYwYWMyMWQ2
MDJlMmIwMDA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA2LTIxICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViUGFnZVByb3h5Ojps
b2FkRGF0YSBzaG91bGQgYWNjZXB0IFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTExNAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTE2NzE2NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5u
IEZhYmxldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IG5ldyB0ZXN0IGNvbnRlbnQgd2l0aGluIGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaDoKKyAg
ICAgICAgQWRkcyBhbiBFbnVtVHJhaXRzIGZvciBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5
LgorCiAyMDE5LTA2LTE5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIGlPUyAxMi4yIERyYXdpbmcgcG9ydHJhaXQgdmlkZW8gdG8gY2FudmFzIGlzIHNpZGV3YXlz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IDQ5ZTI2MWYwMjA4MDQ3ZjhiYTc4NTdiMjFhMDhjMDQ3NmI2NjQ1NjIuLmZh
ZjZiY2I2NjYyMDE1YWY4ODIyZWM3YjM4N2Y2NTc5YjJjYTM0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDkgQEAKKzIwMTktMDYtMjEgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWJQYWdlUHJveHk6OmxvYWREYXRhIHNob3VsZCBhY2NlcHQgU2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk5MTE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTY3MTY3ND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgIFRoaXMgcGF0Y2gg
dGVhY2hlcyBXZWJQYWdlUHJveHk6OmxvYWREYXRhIHRvIGFjY2VwdCBTaG91bGRPcGVuRXh0ZXJu
YWxVUkxzUG9saWN5IHBvbGljeSwKKyAgICAgICAgYW5kIHRoZW4gdXRpbGl6ZSBpdCBpbiBSZWRp
cmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uIFRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIGxvYWRl
ZCBhZnRlcgorICAgICAgICBzdWNjZXNzZnVsIGludGVyY2VwdGlvbnMgd2lsbCBiZSBhYmxlIHRv
IHByb3BhZ2F0ZSB0aGUgc2FtZSBwb2xpY3kgZnJvbSB0aGUgbGFzdCBuYXZpZ2F0aW9uCisgICAg
ICAgIGFzIGl0IHdlcmUgY29udGludW91cyBsb2FkaW5nLgorCisgICAgICAgIEJlc2lkZXMgdGhl
IGFib3ZlLCB0aGlzIHBhdGNoIGFsc28gZml4ZXMgc29tZSBtaW5vciBpc3N1ZXMuCisKKyAgICAg
ICAgKiBTaGFyZWQvTG9hZFBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3Rh
cnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjp3ZWJWaWV3RGlkTW92ZVRvV2luZG93KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246
OmNvbXBsZXRlSW50ZXJuYWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24u
bW06CisgICAgICAgIChXZWJLaXQ6OnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOgorICAg
ICAgICAoV2ViS2l0OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50
ZXJuYWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbToKKyAgICAgICAgKFdlYktpdDo6U09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlv
blNlc3Npb24ubW06CisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OlN1YkZy
YW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6bG9hZERhdGFUb0ZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwb3N0RGlk
Q2FuY2VsTWVzc2FnZVRvUGFyZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZp
Z2F0aW9uU2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkRmlsZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9hZERhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmxvYWREYXRhSW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorCiAyMDE5LTA2LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgb3JpZ2luc1dpdGhDcmVkZW50
aWFscyBmcm9tIFdlYnNpdGVEYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXJUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlw
ZXMuaAppbmRleCA1OTZhZDdkZjk4YjVjZTEyOTFlNjA2MTkwZGY5NGU5ZDcyMjRhYjI3Li43YTQ4
YmM2ODFmYTZiMWU4OWVjYTFiNjRkZDUwZWFiNDhiZTU5YTMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlclR5cGVzLmgKQEAgLTIxOSw0ICsyMTksMTMgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGcmFtZUxvYWRUeXBlPiB7CiAgICAgPjsKIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdl
YkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksCisgICAgICAgIFdlYkNvcmU6OlNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93LAorICAgICAgICBXZWJD
b3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvd0V4dGVybmFsU2No
ZW1lcywKKyAgICAgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hv
dWxkQWxsb3cKKyAgICA+OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Mb2FkUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvTG9hZFBhcmFtZXRlcnMuaAppbmRleCAxMDhiMTkxNDM1NTdjZjVmM2M3OWRjMjVhMjYwOWRj
MzkyMDRlZDJjLi4zM2EzYzkzNjczOTI4NzAyNDhiMmYyYWFmZWVmYzVlNjYyNjc4OWI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Mb2FkUGFyYW1ldGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0xvYWRQYXJhbWV0ZXJzLmgKQEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0
IExvYWRQYXJhbWV0ZXJzIHsKIAogICAgIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+IHdl
YnNpdGVQb2xpY2llczsKIAotICAgIHVpbnQ2NF90IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3k7CisgICAgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzUG9saWN5OwogICAgIGJvb2wgc2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2Fk
IHsgZmFsc2UgfTsKICAgICBVc2VyRGF0YSB1c2VyRGF0YTsKICAgICBXZWJDb3JlOjpMb2NrSGlz
dG9yeSBsb2NrSGlzdG9yeSB7IFdlYkNvcmU6OkxvY2tIaXN0b3J5OjpObyB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQWN0aW9uLmgKaW5kZXggY2Zi
MDA4OWFkZTRkNDlhNzRkZWY0NjE2MjdhMTBmODA4ZDY2MWRjZi4uMzU1NDQzOGYzOWY1MjUwY2Y4
ZDQ2Y2JkNDgwMmYwNTBhNmRmNjFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSU5hdmlnYXRpb25BY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJTmF2aWdhdGlvbkFjdGlvbi5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHNob3VsZE9wZW5BcHBMaW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT3BlbkFw
cExpbmtzICYmIG1fbmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeSA9PSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxv
dzsgfQogICAgIGJvb2wgc2hvdWxkUGVyZm9ybURvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gIW1f
bmF2aWdhdGlvbkFjdGlvbkRhdGEuZG93bmxvYWRBdHRyaWJ1dGUuaXNOdWxsKCk7IH0KICAgICBi
b29sIGlzUmVkaXJlY3QoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25BY3Rpb25EYXRhLmlz
UmVkaXJlY3Q7IH0KKyAgICBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25B
Y3Rpb25EYXRhLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k7IH0KIAogICAgIGJvb2wgaXNQ
cm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3VzZXJJbml0aWF0ZWRBY3Rp
b247IH0KICAgICBVc2VySW5pdGlhdGVkQWN0aW9uKiB1c2VySW5pdGlhdGVkQWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV91c2VySW5pdGlhdGVkQWN0aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNP
QXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KaW5kZXgg
NDIyNmJiZWNlNGY5NWMxMjE4NjU5MGFhZWZjMmNlMWQ5ZDA5OTk5Yi4uMjIwM2QxYTRkMTMzYjQy
YzI2MjZjNDQ3YjU5M2UzZTUyODFkYTk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNz
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9OYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtNDksMTIgKzQ5LDEyIEBA
IE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjp+TmF2aWdhdGlvblNPQXV0aG9yaXph
dGlvblNlc3Npb24oKQogCiB2b2lkIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpz
aG91bGRTdGFydEludGVybmFsKCkKIHsKLSAgICBhdXRvKiBwYWdlUHRyID0gcGFnZSgpOwotICAg
IEFTU0VSVChwYWdlUHRyKTsKKyAgICBhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIEFT
U0VSVChwYWdlKTsKICAgICBiZWZvcmVTdGFydCgpOwotICAgIGlmICghcGFnZVB0ci0+aXNJbldp
bmRvdygpKSB7CisgICAgaWYgKCFwYWdlLT5pc0luV2luZG93KCkpIHsKICAgICAgICAgc2V0U3Rh
dGUoU3RhdGU6OldhaXRpbmcpOwotICAgICAgICBwYWdlUHRyLT5hZGRPYnNlcnZlcigqdGhpcyk7
CisgICAgICAgIHBhZ2UtPmFkZE9ic2VydmVyKCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBzdGFydCgpOwpAQCAtNjIsMTEgKzYyLDExIEBAIHZvaWQgTmF2aWdhdGlvblNPQXV0
aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0SW50ZXJuYWwoKQogCiB2b2lkIE5hdmlnYXRp
b25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjp3ZWJWaWV3RGlkTW92ZVRvV2luZG93KCkKIHsKLSAg
ICBhdXRvKiBwYWdlUHRyID0gcGFnZSgpOwotICAgIGlmIChzdGF0ZSgpICE9IFN0YXRlOjpXYWl0
aW5nIHx8ICFwYWdlUHRyIHx8ICFwYWdlUHRyLT5pc0luV2luZG93KCkpCisgICAgYXV0byogcGFn
ZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoc3RhdGUoKSAhPSBTdGF0ZTo6V2FpdGluZyB8fCAh
cGFnZSB8fCAhcGFnZS0+aXNJbldpbmRvdygpKQogICAgICAgICByZXR1cm47CiAgICAgc3RhcnQo
KTsKLSAgICBwYWdlUHRyLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgcGFnZS0+cmVtb3Zl
T2JzZXJ2ZXIoKnRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0
aG9yaXphdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0
aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24uaAppbmRleCA4ZDRiYjcyZmU4
NTZjOTE4M2RlZWYxMTE1YWIxMzVmODNmOWJlYjc4Li5iNjY5NGZlOTA2ZWEwYjRmODJhNTQwNjYy
Y2M4NTUwYjJmZTFhNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5oCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzaG91
bGRTdGFydEludGVybmFsKCkgZmluYWw7CiAgICAgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVy
bmFsKCkgZmluYWw7CiAgICAgdm9pZCBhYm9ydEludGVybmFsKCkgZmluYWw7Ci0gICAgdm9pZCBj
b21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgTlNEYXRhICopIGZp
bmFsOworICAgIHZvaWQgY29tcGxldGVJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgTlNEYXRhICopIGZpbmFsOwogCiAgICAgdm9pZCBpbml0U2VjcmV0V2ViVmlldygp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5t
bQppbmRleCBlZjNlZTM5OWYxY2M4MDNkYjc5MWJhNWY5NmIyNjdiYmNhYTM3MjA0Li45OGEzMmJh
ZWQ2ZDkwYWRiZjJhOGViMmQ1YjI4NDc4YjhhOTgyNmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTEzMiw3ICsxMzIsNyBAQCB2
b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRlcm5hbCgpCiAgICAgW21f
c2VjcmV0V2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAid2luZG93LmNsb3NlKCkiIGNvbXBs
ZXRpb25IYW5kbGVyOm5pbF07CiB9CiAKLXZvaWQgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9u
Ojpjb21wbGV0ZUludGVybmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwg
TlNEYXRhICpkYXRhKQordm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRl
SW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIE5TRGF0
YSAqZGF0YSkKIHsKICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDAgfHwg
IXBhZ2UoKSkgewogICAgICAgICBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJl
Y3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKaW5kZXgg
N2Y4NDE5NzhmNGQyYWNkNTc4M2FlYjhjYmE4ZGIzOWYxNjE1YTgxMi4uM2JjYzUwZjA2NWY0MDNk
ZjkwMDQyYTVjY2NiZGY3ZWNmMGIzYWYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9S
ZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24uaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRl
OgogICAgIC8vIFNPQXV0aG9yaXphdGlvblNlc3Npb24KICAgICB2b2lkIGZhbGxCYWNrVG9XZWJQ
YXRoSW50ZXJuYWwoKSBmaW5hbDsKICAgICB2b2lkIGFib3J0SW50ZXJuYWwoKSBmaW5hbDsKLSAg
ICB2b2lkIGNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBOU0Rh
dGEgKikgZmluYWw7CisgICAgdm9pZCBjb21wbGV0ZUludGVybmFsKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBOU0RhdGEgKikgZmluYWw7CiAKICAgICAvLyBOYXZpZ2F0aW9uU09B
dXRob3JpemF0aW9uU2Vzc2lvbgogICAgIHZvaWQgYmVmb3JlU3RhcnQoKSBmaW5hbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRp
cmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCmlu
ZGV4IGVlOWMwMjliNjgyZjhhNGNiYzVkYTQwYTZhMzc5NWFiMTJmZmM5YzcuLjBmOGJmNDMyZDIz
MTk5OGFkZDdhZDA0MTkyMDVlM2NjNmMzYTM2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNl
c3Npb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtMzIsNiArMzIsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJlZjxTT0F1dGhvcml6YXRpb25TZXNzaW9u
PiBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShTT0F1dGhvcml6YXRpb24g
KnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9u
QWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIENhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CkBAIC01MywzNyArNTQsMzcgQEAgdm9pZCBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmFib3J0SW50ZXJuYWwoKQogICAgIGludm9rZUNhbGxiYWNrKHRydWUpOwogfQogCi12b2lk
IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkKK3ZvaWQgUmVkaXJl
Y3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBOU0RhdGEgKmRhdGEpCiB7Ci0gICAgYXV0byogcGFnZVB0ciA9
IHBhZ2UoKTsKLSAgICBpZiAoKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMzAyICYmIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjAwKSB8fCAhcGFnZVB0cikgeworICAgIGF1dG8q
IG5hdmlnYXRpb25BY3Rpb24gPSB0aGlzLT5uYXZpZ2F0aW9uQWN0aW9uKCk7CisgICAgQVNTRVJU
KG5hdmlnYXRpb25BY3Rpb24pOworICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAg
aWYgKChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDMwMiAmJiByZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpICE9IDIwMCkgfHwgIXBhZ2UpIHsKICAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJ
bnRlcm5hbCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGludm9rZUNhbGxiYWNrKHRy
dWUpOwogICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwMikgewogI2lmIFBM
QVRGT1JNKElPUykKLSAgICAgICAgYXV0byogbmF2aWdhdGlvbkFjdGlvblB0ciA9IG5hdmlnYXRp
b25BY3Rpb24oKTsKLSAgICAgICAgQVNTRVJUKG5hdmlnYXRpb25BY3Rpb25QdHIpOwogICAgICAg
ICAvLyBNb2JpbGVTYWZhcmkgaGFzIGEgV0JTVVJMU3Bvb2ZpbmdNaXRpZ2F0b3IsIHdoaWNoIHdp
bGwgbm90IGRpc3BsYXkgdGhlIHByb3Zpc2lvbmFsIFVSTCBmb3IgbmF2aWdhdGlvbnMgd2l0aG91
dCB1c2VyIGdlc3R1cmVzLgogICAgICAgICAvLyBGb3Igc2xvdyBsb2FkcyB0aGF0IGFyZSBpbml0
aWF0ZWQgZnJvbSB0aGUgTW9iaWxlU2FmYXJpIEZhdm9yaXRlcyBzY3JlZW4sIHRoZSBhZm9yZW1l
bnRpb25lZCBiZWhhdmlvciB3aWxsIGNyZWF0ZSBhIHBlcmlvZAogICAgICAgICAvLyBhZnRlciBh
dXRoZW50aWNhdGlvbiBjb21wbGV0aW9uIHdoZXJlIHRoZSBuZXcgcmVxdWVzdCB0byB0aGUgYXBw
bGljYXRpb24gc2l0ZSBsb2FkcyB3aXRoIGEgYmxhbmsgVVJMIGFuZCBibGFuayBwYWdlLiBUbwog
ICAgICAgICAvLyB3b3JrYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGxvYWQgYW4gaHRtbCBwYWdlIHRo
YXQgZG9lcyBhIGNsaWVudCBzaWRlIHJlZGlyZWN0aW9uIHRvIHRoZSBhcHBsaWNhdGlvbiBzaXRl
IG9uIGJlaGFsZiBvZiB0aGUKICAgICAgICAgLy8gcmVxdWVzdCBVUkwsIGluc3RlYWQgb2YgZGly
ZWN0bHkgbG9hZGluZyBhIG5ldyByZXF1ZXN0LiBUaGUgaHRtbCBwYWdlIHNob3VsZCBiZSBzdXBl
ciBmYXN0IHRvIGxvYWQgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdAogICAgICAgICAvLyBzaG93IGFu
IGVtcHR5IFVSTCBvciBhIGJsYW5rIHBhZ2UuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIGEgcmVsZXZh
bnQgVVJMIGJhciBhbmQgdXNlZnVsIHBhZ2UgY29udGVudCBkdXJpbmcgdGhlIGxvYWQuCi0gICAg
ICAgIGlmICghbmF2aWdhdGlvbkFjdGlvblB0ci0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkg
ewotICAgICAgICAgICAgcGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhvcml6YXRpb25J
bk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKLSAgICAgICAgICAgIGF1dG8gaHRtbCA9
IG1ha2VTdHJpbmcoIjxzY3JpcHQ+bG9jYXRpb24gPSAnIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpLmdldChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLCAiJzwvc2NyaXB0
PiIpLnV0ZjgoKTsKKyAgICAgICAgaWYgKCFuYXZpZ2F0aW9uQWN0aW9uLT5pc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpKSB7CisgICAgICAgICAgICBwYWdlLT5zZXRTaG91bGRTdXBwcmVzc1NPQXV0
aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigpOworICAgICAgICAgICAg
YXV0byBodG1sID0gbWFrZVN0cmluZygiPHNjcmlwdD5sb2NhdGlvbiA9ICciLCByZXNwb25zZS5o
dHRwSGVhZGVyRmllbGRzKCkuZ2V0KEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbiksICInPC9zY3Jp
cHQ+IikudXRmOCgpOwogICAgICAgICAgICAgYXV0byBkYXRhID0gSVBDOjpEYXRhUmVmZXJlbmNl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGh0bWwuZGF0YSgpKSwgaHRtbC5sZW5n
dGgoKSk7Ci0gICAgICAgICAgICBwYWdlUHRyLT5sb2FkRGF0YShkYXRhLCAidGV4dC9odG1sIl9z
LCAiVVRGLTgiX3MsIG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3QoKS51cmwoKSk7CisgICAg
ICAgICAgICBwYWdlLT5sb2FkRGF0YShkYXRhLCAidGV4dC9odG1sIl9zLCAiVVRGLTgiX3MsIG5h
dmlnYXRpb25BY3Rpb24tPnJlcXVlc3QoKS51cmwoKSwgbnVsbHB0ciwgbmF2aWdhdGlvbkFjdGlv
bi0+c2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSgpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHBhZ2VQdHItPmxvYWRSZXF1ZXN0KFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdChyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZ2V0KFdlYkNvcmU6
OkhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbikpKTsKKyAgICAgICAgcGFnZS0+bG9hZFJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5nZXQoSFRUUEhlYWRl
ck5hbWU6OkxvY2F0aW9uKSkpOwogICAgIH0KICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA9PSAyMDApIHsKLSAgICAgICAgcGFnZVB0ci0+c2V0U2hvdWxkU3VwcHJlc3NTT0F1dGhv
cml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKLSAgICAgICAgcGFnZVB0
ci0+bG9hZERhdGEoSVBDOjpEYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpLCAidGV4dC9odG1sIl9zLCAiVVRGLTgiX3MsIHJl
c3BvbnNlLnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgcGFnZS0+c2V0U2hvdWxkU3VwcHJlc3NT
T0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAgICAgICAg
cGFnZS0+bG9hZERhdGEoSVBDOjpEYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpLCAidGV4dC9odG1sIl9zLCAiVVRGLTgiX3Ms
IHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBudWxscHRyLCBuYXZpZ2F0aW9uQWN0aW9uLT5zaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlv
blNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLmgKaW5kZXggMWQxZGIyM2Q5ZmJkNTJmMTQ2ZjA0OGNm
OTg3ODkyYWY5YTgyZTQ4Zi4uYTY2MzY1YjJjYTRiMjk2M2M0YWU2MDFkODk0MzdkMTY5MWQwOGZi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCkBAIC05OCw3
ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNob3VsZFN0YXJ0SW50ZXJuYWwo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGFib3J0SW50ZXJuYWwoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbXBsZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBOU0RhdGEgKikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21wbGV0ZUludGVybmFsKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBOU0RhdGEgKikgPSAwOwogCiAgICAgdm9pZCBiZWNvbWVDb21wbGV0
ZWQoKTsKICAgICB2b2lkIGRpc21pc3NWaWV3Q29udHJvbGxlcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlv
blNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQppbmRleCA4M2JiNWM2Y2I2YTA5ZDcxMTQ5ZTc5
MjQ0ODc4NTQ3NmMyODM3MzkyLi40Njc4ZmUzZWE3ZDgyNWQxNGZkNmY3ZmI1MGZkNWMzYmNiNGEw
NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6
YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAt
MTU0LDcgKzE1NCw3IEBAIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGUoTlNI
VFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSwgTlNEYXRhICpkCiAgICAgLy8gU2V0IGNvb2tp
ZXMuCiAgICAgYXV0byBjb29raWVzID0gdG9Db29raWVWZWN0b3IoW05TSFRUUENvb2tpZSBjb29r
aWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOmh0dHBSZXNwb25zZS5hbGxIZWFkZXJGaWVsZHMg
Zm9yVVJMOnJlc3BvbnNlLnVybCgpXSk7CiAgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGNvbXBsZXRlSW50ZXJuYWwoV1RGTW92ZShyZXNwb25zZSksIGRhdGEpOworICAgICAg
ICBjb21wbGV0ZUludGVybmFsKHJlc3BvbnNlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29t
cGxldGUoTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSwgTlNEYXRhICpkCiAgICAgbV9w
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuY29va2llU3RvcmUoKS5zZXRDb29raWVzKGNvb2tpZXMs
IFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3Bv
bnNlKSwgZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhXSld
ICgpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB3ZWFrVGhpcy0+Y29tcGxldGVJbnRlcm5hbChXVEZNb3ZlKHJlc3BvbnNlKSwg
ZGF0YS5nZXQoKSk7CisgICAgICAgIHdlYWtUaGlzLT5jb21wbGV0ZUludGVybmFsKHJlc3BvbnNl
LCBkYXRhLmdldCgpKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vz
c2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCmluZGV4IDY4MWY1M2FiM2NmNmU3Mzc4MjBl
YjE0YjhhNmZlZmFiYTJmZjkwMjguLjdmN2IxZjlmZTVjY2U2MDRlNzYxMzFjNGVhMzk1ZGM5ZmEz
ZDc3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9y
aXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRp
b25TZXNzaW9uLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBTT0F1dGhvcml6
YXRpb25TZXNzaW9uCiAgICAgdm9pZCBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkgZmluYWw7
CiAgICAgdm9pZCBhYm9ydEludGVybmFsKCkgZmluYWw7Ci0gICAgdm9pZCBjb21wbGV0ZUludGVy
bmFsKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgTlNEYXRhICopIGZpbmFsOworICAgIHZv
aWQgY29tcGxldGVJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgTlNE
YXRhICopIGZpbmFsOwogCiAgICAgLy8gTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24K
ICAgICB2b2lkIGJlZm9yZVN0YXJ0KCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9u
L1N1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQppbmRleCBiZWFiYzUzYWRlYmUwOWI4
ZWM0NTcxNGI0MDE5N2UzZGE4MmQzMWExLi4wNjU2NjE0MzBmZWMxYzI3YzBiYzNkYjhiZDBkMDdi
OWVhZTlmMjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb24ubW0KQEAgLTU5LDE0ICs1OSwxNCBAQCB2b2lkIFN1YkZyYW1lU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpCiAgICAgcG9zdERp
ZENhbmNlbE1lc3NhZ2VUb1BhcmVudChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0
byogcGFnZVB0ciA9IHdlYWtUaGlzLT5wYWdlKCk7CisgICAgICAgIGF1dG8qIHBhZ2UgPSB3ZWFr
VGhpcy0+cGFnZSgpOwogICAgICAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gd2Vha1Ro
aXMtPm5hdmlnYXRpb25BY3Rpb24oKTsKLSAgICAgICAgaWYgKCFwYWdlUHRyIHx8ICFuYXZpZ2F0
aW9uQWN0aW9uUHRyKQorICAgICAgICBpZiAoIXBhZ2UgfHwgIW5hdmlnYXRpb25BY3Rpb25QdHIp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKGF1dG8qIHRhcmdldEZyYW1lID0g
bmF2aWdhdGlvbkFjdGlvblB0ci0+dGFyZ2V0RnJhbWUoKSkgewotICAgICAgICAgICAgaWYgKGF1
dG8qIGZyYW1lID0gcGFnZVB0ci0+cHJvY2VzcygpLndlYkZyYW1lKHRhcmdldEZyYW1lLT5oYW5k
bGUoKS5mcmFtZUlEKCkpKSB7Ci0gICAgICAgICAgICAgICAgcGFnZVB0ci0+c2V0U2hvdWxkU3Vw
cHJlc3NTT0F1dGhvcml6YXRpb25Jbk5leHROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKTsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IHBhZ2UtPnByb2Nlc3MoKS53ZWJGcmFtZSh0YXJn
ZXRGcmFtZS0+aGFuZGxlKCkuZnJhbWVJRCgpKSkgeworICAgICAgICAgICAgICAgIHBhZ2UtPnNl
dFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uKCk7CiAgICAgICAgICAgICAgICAgLy8gSXNzdWUgYSBuZXcgbG9hZCB0byB0aGUgb3JpZ2lu
YWwgVVJMIGFzIHRoZSBvcmlnaW5hbCBsb2FkIGlzIGFib3J0ZWQgYmVmb3JlIHN0YXJ0LgogICAg
ICAgICAgICAgICAgIGZyYW1lLT5sb2FkVVJMKG5hdmlnYXRpb25BY3Rpb25QdHItPnJlcXVlc3Qo
KS51cmwoKSk7CiAgICAgICAgICAgICB9CkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgU3ViRnJhbWVT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKCkKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBs
ZXRlSW50ZXJuYWwoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBOU0RhdGEg
KmRhdGEpCit2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRl
cm5hbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgTlNEYXRhICpk
YXRhKQogewogICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwMCkgewogICAg
ICAgICBmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCk7CkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2
b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQoKQogCiB2b2lk
IFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6bG9hZERhdGFUb0ZyYW1lKGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgVVJMJiBiYXNlVVJMKQogewotICAgIGF1dG8q
IHBhZ2VQdHIgPSBwYWdlKCk7CisgICAgYXV0byogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBh
dXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigpOwotICAgIGlmICgh
cGFnZVB0ciB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKKyAgICBpZiAoIXBhZ2UgfHwgIW5hdmln
YXRpb25BY3Rpb25QdHIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdXRvKiB0YXJnZXRG
cmFtZSA9IG5hdmlnYXRpb25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGZyYW1lID0gcGFnZVB0ci0+cHJvY2VzcygpLndlYkZyYW1lKHRhcmdldEZyYW1lLT5o
YW5kbGUoKS5mcmFtZUlEKCkpKSB7Ci0gICAgICAgICAgICBwYWdlUHRyLT5zZXRTaG91bGRTdXBw
cmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigpOworICAg
ICAgICBpZiAoYXV0byogZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUodGFyZ2V0RnJh
bWUtPmhhbmRsZSgpLmZyYW1lSUQoKSkpIHsKKyAgICAgICAgICAgIHBhZ2UtPnNldFNob3VsZFN1
cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCk7CiAg
ICAgICAgICAgICBmcmFtZS0+bG9hZERhdGEoZGF0YSwgInRleHQvaHRtbCIsICJVVEYtOCIsIGJh
c2VVUkwpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE4LDEzICsxMTgsMTMgQEAgdm9pZCBTdWJG
cmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmxvYWREYXRhVG9GcmFtZShjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGQKIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OnBv
c3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQog
ewotICAgIGF1dG8qIHBhZ2VQdHIgPSBwYWdlKCk7CisgICAgYXV0byogcGFnZSA9IHRoaXMtPnBh
Z2UoKTsKICAgICBhdXRvKiBuYXZpZ2F0aW9uQWN0aW9uUHRyID0gbmF2aWdhdGlvbkFjdGlvbigp
OwotICAgIGlmICghcGFnZVB0ciB8fCAhbmF2aWdhdGlvbkFjdGlvblB0cikKKyAgICBpZiAoIXBh
Z2UgfHwgIW5hdmlnYXRpb25BY3Rpb25QdHIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChh
dXRvKiB0YXJnZXRGcmFtZSA9IG5hdmlnYXRpb25BY3Rpb25QdHItPnRhcmdldEZyYW1lKCkpIHsK
LSAgICAgICAgcGFnZVB0ci0+cnVuSmF2YVNjcmlwdEluRnJhbWUodGFyZ2V0RnJhbWUtPmhhbmRs
ZSgpLmZyYW1lSUQoKSwgc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVu
dCwgZmFsc2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoQVBJOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWUqLCBib29sLCBjb25zdCBFeGNlcHRpb25EZXRhaWxzJiwgU2NyaXB0VmFsdWVD
YWxsYmFjazo6RXJyb3IpIHsKKyAgICAgICAgcGFnZS0+cnVuSmF2YVNjcmlwdEluRnJhbWUodGFy
Z2V0RnJhbWUtPmhhbmRsZSgpLmZyYW1lSUQoKSwgc29BdXRob3JpemF0aW9uUG9zdERpZENhbmNl
bE1lc3NhZ2VUb1BhcmVudCwgZmFsc2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAo
QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBib29sLCBjb25zdCBFeGNlcHRpb25EZXRhaWxz
JiwgU2NyaXB0VmFsdWVDYWxsYmFjazo6RXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKCk7
CiAgICAgICAgIH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCmluZGV4IDEzMDJhODRlMTA3ZmE2ZDM4MDczMGRhMWI4NjkzOWZmMjliZmMyZGMuLjg2YjQw
NDAwMzhiOTg4MGZkNjY0OWJiNWRhZmNjNDI5YTYzNTRmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTEwNyw3ICsxMTA3LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmxvYWRSZXF1ZXN0V2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94
eT4mJiBwcm9jZXMKICAgICBMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKICAgICBsb2Fk
UGFyYW1ldGVycy5uYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uLm5hdmlnYXRpb25JRCgpOwogICAg
IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpOwotICAgIGxvYWRQYXJh
bWV0ZXJzLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSAodWludDY0X3Qpc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeTsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRPcGVuRXh0ZXJu
YWxVUkxzUG9saWN5ID0gc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTsKICAgICBsb2FkUGFy
YW1ldGVycy51c2VyRGF0YSA9IFVzZXJEYXRhKHByb2Nlc3MtPnRyYW5zZm9ybU9iamVjdHNUb0hh
bmRsZXModXNlckRhdGEpLmdldCgpKTsKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQgPSBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQgPT0gU2hvdWxkVHJl
YXRBc0NvbnRpbnVpbmdMb2FkOjpZZXM7CiAgICAgbG9hZFBhcmFtZXRlcnMud2Vic2l0ZVBvbGlj
aWVzID0gV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpOwpAQCAtMTE2Myw3ICsxMTYzLDcgQEAgUmVm
UHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpsb2FkRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVVUkxTdHJpbmcsIGNvbnMKICAgICBMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsK
ICAgICBsb2FkUGFyYW1ldGVycy5uYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9u
SUQoKTsKICAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gZmlsZVVSTDsKLSAgICBsb2FkUGFy
YW1ldGVycy5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gKHVpbnQ2NF90KVNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93OworICAgIGxvYWRQYXJhbWV0ZXJz
LnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5OjpTaG91bGROb3RBbGxvdzsKICAgICBsb2FkUGFyYW1ldGVycy51c2VyRGF0YSA9IFVzZXJE
YXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSk7
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHJlc291cmNlRGlyZWN0b3J5UGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIGxvYWRQYXJhbWV0ZXJzLnNhbmRi
b3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGFkZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMobG9hZFBh
cmFtZXRlcnMpOwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4g
V2ViUGFnZVByb3h5Ojpsb2FkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVVUkxTdHJpbmcsIGNvbnMK
ICAgICByZXR1cm4gbmF2aWdhdGlvbjsKIH0KIAotUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2Vi
UGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0
IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQorUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4g
V2ViUGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNv
bnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmlu
ZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpCiB7CiAgICAgUkVMRUFTRV9MT0df
SUZfQUxMT1dFRChMb2FkaW5nLCAibG9hZERhdGE6IHdlYlBJRCA9ICVpLCBwYWdlSUQgPSAlIiBQ
Ukl1NjQsIG1fcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgbV9wYWdlSUQudG9VSW50NjQo
KSk7CiAKQEAgLTExODgsMTEgKzExODgsMTEgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2Vi
UGFnZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGMKICAg
ICAgICAgbGF1bmNoUHJvY2Vzcyh7IH0pOwogCiAgICAgYXV0byBuYXZpZ2F0aW9uID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPmNyZWF0ZUxvYWREYXRhTmF2aWdhdGlvbihzdGQ6Om1ha2VfdW5pcXVlPEFQ
STo6U3Vic3RpdHV0ZURhdGE+KGRhdGEudmVjdG9yKCksIE1JTUVUeXBlLCBlbmNvZGluZywgYmFz
ZVVSTCwgdXNlckRhdGEpKTsKLSAgICBsb2FkRGF0YVdpdGhOYXZpZ2F0aW9uU2hhcmVkKG1fcHJv
Y2Vzcy5jb3B5UmVmKCksIG5hdmlnYXRpb24sIGRhdGEsIE1JTUVUeXBlLCBlbmNvZGluZywgYmFz
ZVVSTCwgdXNlckRhdGEsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6Tm8pOworICAgIGxv
YWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgbmF2aWdhdGlv
biwgZGF0YSwgTUlNRVR5cGUsIGVuY29kaW5nLCBiYXNlVVJMLCB1c2VyRGF0YSwgU2hvdWxkVHJl
YXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpudWxsb3B0LCBzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5KTsKICAgICByZXR1cm4gbmF2aWdhdGlvbjsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBw
cm9jZXNzLCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIFNob3VsZFRy
ZWF0QXNDb250aW51aW5nTG9hZCBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFs
PFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzKQordm9pZCBXZWJQYWdlUHJv
eHk6OmxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBw
cm9jZXNzLCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIFNob3VsZFRy
ZWF0QXNDb250aW51aW5nTG9hZCBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFs
PFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzLCBTaG91bGRPcGVuRXh0ZXJu
YWxVUkxzUG9saWN5IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpCiB7CiAgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAibG9hZERhdGFXaXRoTmF2aWdhdGlvbjogd2ViUElE
ID0gJWksIHBhZ2VJRCA9ICUiIFBSSXU2NCwgcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwg
bV9wYWdlSUQudG9VSW50NjQoKSk7CiAKQEAgLTEyMTEsNiArMTIxMSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5Ojpsb2FkRGF0YVdpdGhOYXZpZ2F0aW9uU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYgcHJvY2VzcywKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRUcmVhdEFzQ29udGludWluZ0xv
YWQgPSBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQgPT0gU2hvdWxkVHJlYXRBc0NvbnRpbnVp
bmdMb2FkOjpZZXM7CiAgICAgbG9hZFBhcmFtZXRlcnMudXNlckRhdGEgPSBVc2VyRGF0YShwcm9j
ZXNzLT50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSk7CiAgICAgbG9h
ZFBhcmFtZXRlcnMud2Vic2l0ZVBvbGljaWVzID0gV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpOwor
ICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5OwogICAgIGFkZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMobG9h
ZFBhcmFtZXRlcnMpOwogCiAgICAgcHJvY2Vzcy0+YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgq
dGhpcywgYmFzZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4
IDVkZDYyM2I0NzMyZDBkNTVlZDU1MzQwZDk2M2VlMTBlNmFmZjk4MDguLmRjOTcwNmNlZjNjNzRl
MDQ3M2FhMDFkMmNkZWU2ODk5YmM0YmIwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCkBAIC01MjgsNyArNTI4LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGxhdGZv
cm1Mb2FkUGFyYW1ldGVycyhMb2FkUGFyYW1ldGVycyYpOwogICAgIFJlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IGxvYWRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeTo6U2hvdWxkQWxsb3dFeHRlcm5hbFNjaGVtZXMsIEFQSTo6T2JqZWN0KiB1c2Vy
RGF0YSA9IG51bGxwdHIpOwogICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IGxvYWRGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZVVSTCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURpcmVjdG9yeVVSTCwg
QVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7Ci0gICAgUmVmUHRyPEFQSTo6TmF2aWdh
dGlvbj4gbG9hZERhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiBN
SU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBB
UEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsKKyAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0
aW9uPiBsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIE1J
TUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEFQ
STo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3kgPSBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91
bGROb3RBbGxvdyk7CiAgICAgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNv
bnN0IFVSTCYgdW5yZWFjaGFibGVVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIp
OwogICAgIHZvaWQgbG9hZFdlYkFyY2hpdmVEYXRhKEFQSTo6RGF0YSosIEFQSTo6T2JqZWN0KiB1
c2VyRGF0YSA9IG51bGxwdHIpOwogICAgIHZvaWQgbmF2aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxh
dGVkQ2xpY2soY29uc3QgU3RyaW5nJiB1cmwsIFdlYkNvcmU6OkludFBvaW50IGRvY3VtZW50UG9p
bnQsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KTsKQEAgLTE1MTMsNyArMTUxMyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlU2hhcmVkKFJlZjxXZWJQ
cm9jZXNzUHJveHk+JiYsIHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVu
dGlmaWVyLAogICAgICAgICB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNh
blNob3dNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBkb3dubG9hZEF0dHJpYnV0ZSwgdWludDY0X3Qg
bGlzdGVuZXJJRCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIHN0YXJ0VVJMU2NoZW1lVGFz
a1NoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBVUkxTY2hlbWVUYXNrUGFyYW1ldGVycyYm
KTsKLSAgICB2b2lkIGxvYWREYXRhV2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiwgQVBJOjpOYXZpZ2F0aW9uJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29u
c3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5n
JiBiYXNlVVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIFdlYkNvcmU6OlNob3VsZFRyZWF0QXND
b250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4mJiA9IFdURjo6bnVs
bG9wdCk7CisgICAgdm9pZCBsb2FkRGF0YVdpdGhOYXZpZ2F0aW9uU2hhcmVkKFJlZjxXZWJQcm9j
ZXNzUHJveHk+JiYsIEFQSTo6TmF2aWdhdGlvbiYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYs
IGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0
cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhLCBXZWJDb3JlOjpTaG91bGRUcmVh
dEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYgPSBXVEY6
Om51bGxvcHQsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBXZWJDb3Jl
OjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyk7CiAgICAgdm9p
ZCBsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYs
IEFQSTo6TmF2aWdhdGlvbiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIFdlYkNv
cmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVz
RGF0YT4mJiA9IFdURjo6bnVsbG9wdCk7CiAgICAgdm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtU2hh
cmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRl
bUlkZW50aWZpZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYmKT4mJik7CiAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3lu
Y1NoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCB1aW50NjRfdCBmcmFtZUlELCBib29sIGlz
TWFpbkZyYW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgV2ViQ29yZTo6UG9saWN5
Q2hlY2tJZGVudGlmaWVyLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIE5hdmlnYXRpb25BY3Rpb25E
YXRhJiYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmlu
ZGV4IDFjMTBlYzE1YTBlNzVmOGZkNmNjYjIxYjQ2NTgwMWQxNzM5Mzg4ZmIuLjdmMGRlOGM4MmIw
ZDJlYTg0YzMyMjA5YWE0NTViMGVjNDc3MGVmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xNTMzLDggKzE1MzMsNyBAQCB2b2lkIFdlYlBh
Z2U6OmxvYWRSZXF1ZXN0KExvYWRQYXJhbWV0ZXJzJiYgbG9hZFBhcmFtZXRlcnMpCiAKICAgICAv
LyBJbml0YXRlIHRoZSBsb2FkIGluIFdlYkNvcmUuCiAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZUxvYWRSZXF1ZXN0IHsgKm1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgbG9hZFBhcmFtZXRlcnMu
cmVxdWVzdCwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsK
LSAgICBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IGV4dGVybmFsVVJMc1BvbGljeSA9IHN0
YXRpY19jYXN0PFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k+KGxvYWRQYXJhbWV0ZXJzLnNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwotICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0U2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeShleHRlcm5hbFVSTHNQb2xpY3kpOworICAgIGZyYW1l
TG9hZFJlcXVlc3Quc2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeShsb2FkUGFyYW1ldGVy
cy5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KTsKICAgICBmcmFtZUxvYWRSZXF1ZXN0LnNl
dFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZChsb2FkUGFyYW1ldGVycy5zaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQpOwogICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0TG9ja0hpc3RvcnkobG9h
ZFBhcmFtZXRlcnMubG9ja0hpc3RvcnkpOwogICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0bG9ja0Jh
Y2tGb3J3YXJkTGlzdChsb2FkUGFyYW1ldGVycy5sb2NrQmFja0ZvcndhcmRMaXN0KTsKQEAgLTE1
NDcsNyArMTU0Niw3IEBAIHZvaWQgV2ViUGFnZTo6bG9hZFJlcXVlc3QoTG9hZFBhcmFtZXRlcnMm
JiBsb2FkUGFyYW1ldGVycykKICAgICBBU1NFUlQoIW1fcGVuZGluZ1dlYnNpdGVQb2xpY2llcyk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6bG9hZERhdGFJbXBsKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwg
Ym9vbCBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2ll
c0RhdGE+JiYgd2Vic2l0ZVBvbGljaWVzLCBSZWY8U2hhcmVkQnVmZmVyPiYmIHNoYXJlZEJ1ZmZl
ciwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUsIGNv
bnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgVVJMJiB1bnJlYWNoYWJsZVVSTCwgY29uc3QgVXNlckRh
dGEmIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlOjpsb2FkRGF0YUltcGwodWludDY0X3QgbmF2aWdh
dGlvbklELCBib29sIHNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vic2l0
ZVBvbGljaWVzRGF0YT4mJiB3ZWJzaXRlUG9saWNpZXMsIFJlZjxTaGFyZWRCdWZmZXI+JiYgc2hh
cmVkQnVmZmVyLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5n
TmFtZSwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBVUkwmIHVucmVhY2hhYmxlVVJMLCBjb25z
dCBVc2VyRGF0YSYgdXNlckRhdGEsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeSkKIHsKICAgICBTZW5kU3RvcFJlc3BvbnNpdmVuZXNzVGlt
ZXIgc3RvcHBlcjsKIApAQCAtMTU2Myw3ICsxNTYyLDcgQEAgdm9pZCBXZWJQYWdlOjpsb2FkRGF0
YUltcGwodWludDY0X3QgbmF2aWdhdGlvbklELCBib29sIHNob3VsZFRyZWF0QXNDb250aW51aW5n
TG8KICAgICBtX2xvYWRlckNsaWVudC0+d2lsbExvYWREYXRhUmVxdWVzdCgqdGhpcywgcmVxdWVz
dCwgY29uc3RfY2FzdDxTaGFyZWRCdWZmZXIqPihzdWJzdGl0dXRlRGF0YS5jb250ZW50KCkpLCBz
dWJzdGl0dXRlRGF0YS5taW1lVHlwZSgpLCBzdWJzdGl0dXRlRGF0YS50ZXh0RW5jb2RpbmcoKSwg
c3Vic3RpdHV0ZURhdGEuZmFpbGluZ1VSTCgpLCBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFu
c2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAKICAgICAv
LyBJbml0YXRlIHRoZSBsb2FkIGluIFdlYkNvcmUuCi0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZUxvYWRSZXF1ZXN0KCptX21haW5GcmFtZS0+Y29yZUZyYW1lKCksIHJlcXVlc3QsIFNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93LCBzdWJzdGl0dXRlRGF0YSk7Cisg
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KCptX21haW5GcmFtZS0+Y29yZUZy
YW1lKCksIHJlcXVlc3QsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksIHN1YnN0aXR1dGVE
YXRhKTsKICAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9h
ZChzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQpOwogICAgIG1fbWFpbkZyYW1lLT5jb3JlRnJh
bWUoKS0+bG9hZGVyKCkubG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKIH0KQEAgLTE1
NzQsNyArMTU3Myw3IEBAIHZvaWQgV2ViUGFnZTo6bG9hZERhdGEoTG9hZFBhcmFtZXRlcnMmJiBs
b2FkUGFyYW1ldGVycykKIAogICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obG9hZFBhcmFtZXRlcnMuZGF0YS5k
YXRhKCkpLCBsb2FkUGFyYW1ldGVycy5kYXRhLnNpemUoKSk7CiAgICAgVVJMIGJhc2VVUkwgPSBs
b2FkUGFyYW1ldGVycy5iYXNlVVJMU3RyaW5nLmlzRW1wdHkoKSA/IFdURjo6YmxhbmtVUkwoKSA6
IFVSTChVUkwoKSwgbG9hZFBhcmFtZXRlcnMuYmFzZVVSTFN0cmluZyk7Ci0gICAgbG9hZERhdGFJ
bXBsKGxvYWRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JRCwgbG9hZFBhcmFtZXRlcnMuc2hvdWxkVHJl
YXRBc0NvbnRpbnVpbmdMb2FkLCBXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzLndlYnNpdGVQb2xpY2ll
cyksIFdURk1vdmUoc2hhcmVkQnVmZmVyKSwgbG9hZFBhcmFtZXRlcnMuTUlNRVR5cGUsIGxvYWRQ
YXJhbWV0ZXJzLmVuY29kaW5nTmFtZSwgYmFzZVVSTCwgVVJMKCksIGxvYWRQYXJhbWV0ZXJzLnVz
ZXJEYXRhKTsKKyAgICBsb2FkRGF0YUltcGwobG9hZFBhcmFtZXRlcnMubmF2aWdhdGlvbklELCBs
b2FkUGFyYW1ldGVycy5zaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIFdURk1vdmUobG9hZFBh
cmFtZXRlcnMud2Vic2l0ZVBvbGljaWVzKSwgV1RGTW92ZShzaGFyZWRCdWZmZXIpLCBsb2FkUGFy
YW1ldGVycy5NSU1FVHlwZSwgbG9hZFBhcmFtZXRlcnMuZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBV
UkwoKSwgbG9hZFBhcmFtZXRlcnMudXNlckRhdGEsIGxvYWRQYXJhbWV0ZXJzLnNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmxvYWRBbHRlcm5hdGVIVE1M
KExvYWRQYXJhbWV0ZXJzJiYgbG9hZFBhcmFtZXRlcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMGJiYTk3ZGY4YjZkYjVmY2ZhMTExMjFkOWJkYzA2
Yzg4Zjg2MzE1Yy4uOWQ3YjFmNWY5NDc2Zjk2NzBhYTAxZjk1YmM5NjFlZjlmNzdjMjViZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTI4Niw3ICsx
Mjg2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBzb3VyY2VGb3JGcmFtZShXZWJGcmFtZSop
OwogCi0gICAgdm9pZCBsb2FkRGF0YUltcGwodWludDY0X3QgbmF2aWdhdGlvbklELCBib29sIHNo
b3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vic2l0ZVBvbGljaWVzRGF0YT4m
JiwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwg
Y29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgVVJM
JiBmYWlsaW5nVVJMLCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQgbG9hZERhdGFJbXBsKHVp
bnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCBzaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQsIE9w
dGlvbmFsPFdlYnNpdGVQb2xpY2llc0RhdGE+JiYsIFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
JiYsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmdOYW1lLCBj
b25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IFVSTCYgZmFpbGluZ1VSTCwgY29uc3QgVXNlckRhdGEm
LCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gV2ViQ29yZTo6U2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpOwogCiAgICAgLy8gQWN0aW9u
cwogICAgIHZvaWQgdHJ5Q2xvc2UoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBmODc2MDYxNTUxZGNmZGM3ZDg2ZDJlNTUyNDYxZTgwMDRiYTBk
NGZmLi4zOTMxMmE5MWE0MmJlNDVjNGQ5NWJjYTMyNTY4MDc1N2RiOThhN2QzIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTktMDYtMjEgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZWJQYWdlUHJveHk6OmxvYWREYXRhIHNob3VsZCBhY2NlcHQgU2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk5MTE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTY3MTY3ND4KKworICAgICAgICBS
ZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tOgorICAgICAgICAoLVtUZXN0U09B
dXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGluaXRdKToKKyAgICAgICAgKC1bVGVzdFNP
QXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAoY29uZmlndXJlU09B
dXRob3JpemF0aW9uV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwog
MjAxOS0wNi0xOSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2V3cy1idWlsZF0gQWRkIHN0ZXAgdG8gYW5hbHl6ZSBDb21waWxlIFdlYktpdCBmYWlsdXJl
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0
U09BdXRob3JpemF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXN0U09BdXRob3JpemF0aW9uLm1tCmluZGV4IDhjOTQ3YTVmMTdhNjIyODY3OTFlYzk3MDkx
MzgxNzVkMDVjNjMzMGQuLjQyMTk3ZTRlZjQ5YWM3YWJiMjlmMzZkN2IzY2I5MjBlYjc3MjZiZTMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNP
QXV0aG9yaXphdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIklu
c3RhbmNlTWV0aG9kU3dpenpsZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uQWN0
aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPHBh
bC9jb2NvYS9BcHBTU09Tb2Z0TGluay5oPgpAQCAtMTIxLDYgKzEyMiw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBzYW1sUmVzcG9uc2UgPQogCiBAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25O
YXZpZ2F0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlE
ZWxlZ2F0ZT4KIEBwcm9wZXJ0eSBib29sIGlzRGVmYXVsdFBvbGljeTsKK0Bwcm9wZXJ0eSBib29s
IHNob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXM7CiAtIChpbnN0YW5jZXR5cGUpaW5pdDsKIEBlbmQK
IApAQCAtMTI4LDggKzEzMCwxMCBAQCBAaW1wbGVtZW50YXRpb24gVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdAogewotICAgIGlmIChz
ZWxmID0gW3N1cGVyIGluaXRdKQorICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CiAgICAg
ICAgIHNlbGYuaXNEZWZhdWx0UG9saWN5ID0gdHJ1ZTsKKyAgICAgICAgc2VsZi5zaG91bGRPcGVu
RXh0ZXJuYWxTY2hlbWVzID0gZmFsc2U7CisgICAgfQogICAgIHJldHVybiBzZWxmOwogfQogCkBA
IC0xNDIsNiArMTQ2LDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRp
ZEZpbmlzaE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXQKIAogLSAodm9pZCl3ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246
KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2
b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgogeworICAg
IEVYUEVDVF9FUShuYXZpZ2F0aW9uQWN0aW9uLl9zaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzLCBz
ZWxmLnNob3VsZE9wZW5FeHRlcm5hbFNjaGVtZXMpOwogICAgIGlmIChzZWxmLmlzRGVmYXVsdFBv
bGljeSkgewogICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5
QWxsb3cpOwogICAgICAgICByZXR1cm47CkBAIC0yNDIsMTAgKzI0NywxNiBAQCBzdGF0aWMgdm9p
ZCByZXNldFN0YXRlKCkKICAgICBnTmV3V2luZG93ID0gbnVsbHB0cjsKIH0KIAotc3RhdGljIHZv
aWQgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyhUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3
LCBUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlICpkZWxlZ2F0ZSkKK2VudW0g
Y2xhc3MgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeSA6IGJvb2wgeworICAgIEFsbG93LAorICAg
IERpc2FsbG93Cit9OworCitzdGF0aWMgdm9pZCBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KFRlc3RXS1dlYlZpZXcgKndlYlZpZXcsIFRlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgKmRlbGVnYXRlLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5IHBvbGljeSA9IE9w
ZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkRpc2FsbG93KQogewogICAgIFt3ZWJWaWV3IHNldE5h
dmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZV07CiAgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpk
ZWxlZ2F0ZV07CisgICAgZGVsZWdhdGUuc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lcyA9IHBvbGlj
eSA9PSBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdzsKIH0KIAogc3RhdGljIFN0cmlu
ZyBnZW5lcmF0ZUh0bWwoY29uc3QgY2hhciogdGVtcGxhdGVIdG1sLCBjb25zdCBTdHJpbmcmIHN1
YnN0aXR1dGUsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxTdWJzdGl0dXRlMSA9IGVtcHR5U3RyaW5n
KCksIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxTdWJzdGl0dXRlMiA9IGVtcHR5U3RyaW5nKCkpCkBA
IC0yNzcsNyArMjg4LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgTm9JbnRlcmNl
cHRpb25zKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdl
YlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hl
bWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJm5hdmln
YXRpb25Db21wbGV0ZWQpOwpAQCAtMjk0LDcgKzMwNSw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9u
UmVkaXJlY3QsIEludGVyY2VwdGlvbkVycm9yKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1
dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsK
ICAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25Db21wbGV0ZWQpOwpAQCAtMzEzLDcgKzMyNCw3IEBA
IFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkRvTm90SGFuZGxlKQog
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5
OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQpOwpAQCAtMzM2LDcgKzM0Nyw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJl
Y3QsIEludGVyY2VwdGlvbkNhbmNlbCkKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9u
TmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3Jp
emF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmln
dXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwg
T3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxsb3cpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJl
cXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAg
VXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTM1OSw3ICszNzAsNyBAQCBU
RVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25Db21wbGV0ZVdpdGhvdXRE
YXRhKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25X
ZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVz
UG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6
YXRpb25QZXJmb3JtZWQpOwpAQCAtMzgyLDcgKzM5Myw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9u
UmVkaXJlY3QsIEludGVyY2VwdGlvblVuZXhwZWN0ZWRDb21wbGV0aW9uKQogCiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAK
ICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRl
c3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpA
QCAtNDA2LDcgKzQxNyw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2Vw
dGlvblN1Y2NlZWQxKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhv
cml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJu
YWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4o
JmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtNDMzLDcgKzQ0NCw3IEBAIFRFU1QoU09BdXRo
b3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQyKQogCiAgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rl
c3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCks
IGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAg
ICAvLyBGb3JjZSBBcHAgTGlua3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRoYXQgaGFzIGEgZGlmZmVy
ZW50IGhvc3QgdGhhbiB0aGUgY3VycmVudCBvbmUgKGVtcHR5IGhvc3QpIGFuZCBTaG91bGRPcGVu
RXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdy4KICAgICBhdXRvIHRlc3RVUkwgPSBVUkwo
VVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIpOwpAQCAtNDY3LDcgKzQ3OCw3IEBAIFRF
U1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQzKQogCiAgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRl
bGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZp
ZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxv
dyk7CiAKICAgICAvLyBGb3JjZSBBcHAgTGlua3Mgd2l0aCBhIHJlcXVlc3QuVVJMIHRoYXQgaGFz
IGEgZGlmZmVyZW50IGhvc3QgdGhhbiB0aGUgY3VycmVudCBvbmUgKGVtcHR5IGhvc3QpIGFuZCBT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdy4KICAgICBhdXRvIHRlc3RV
UkwgPSBVUkwoVVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIpOwpAQCAtNTA0LDcgKzUx
NSw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWQ0
KQogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgLy8gQSBzZXBhcmF0
ZSBkZWxlZ2F0ZSB0aGF0IGltcGxlbWVudHMgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bi4KICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVu
RXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAgICAgW2RlbGVnYXRlIHNldElzRGVmYXVs
dFBvbGljeTpmYWxzZV07CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKQEAgLTUzMyw3ICs1NDQsNyBAQCBURVNU
KFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0aE90aGVySHR0
cFN0YXR1c0NvZGUpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5h
bFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigm
YXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC01NTcsNyArNTY4LDcgQEAgVEVTVChTT0F1dGhv
cml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhDb29raWUpCiAKICAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVs
ZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmll
dy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93
KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1l
ZCk7CkBAIC01OTIsNyArNjAzLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50
ZXJjZXB0aW9uU3VjY2VlZFdpdGhDb29raWVzKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6
YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1
dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBj
b25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdl
dCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsK
ICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtNjI2LDcgKzYzNyw3
IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRo
UmVkaXJlY3Rpb25BbmRDb29raWUpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3Vy
ZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9w
ZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIGF1dG8gdGVzdFVSTCA9IFVS
TChVUkwoKSwgImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tIik7CiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtNjY3LDcgKzY3OCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2Vw
dGlvblN1Y2NlZWRXaXRoRGlmZmVyZW50T3JpZ2luKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCld
XTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtNjkxLDggKzcw
Miw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRX
aXRoV2FpdGluZ1Nlc3Npb24pCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25E
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3
LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxsb3cp
OwogCiAgICAgLy8gVGhlIHNlc3Npb24gd2lsbCBiZSB3YWl0aW5nIHNpbmNlIHRoZSB3ZWIgdmll
dyBpcyBpcyBub3QgaW50IHRoZSB3aW5kb3cuCiAgICAgW3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVy
dmlld107CkBAIC03MjcsNyArNzM3LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwg
SW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhBY3RpdmVTZXNzaW9uRGlkTW92ZVdpbmRvdykKIAogICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJW
aWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxs
b3cpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9y
bWVkKTsKQEAgLTc1OCw3ICs3NjgsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJ
bnRlcmNlcHRpb25TdWNjZWVkVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9y
aXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZp
Z3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCks
IE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMjsgaSsrKSB7CiAgICAgICAgIGF1dGhvcml6YXRpb25QZXJmb3JtZWQgPSBmYWxzZTsK
QEAgLTc5MSw3ICs4MDEsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNl
cHRpb25TdWNjZWVkU3VwcHJlc3NBY3RpdmVTZXNzaW9uKQogCiAgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsK
KyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVn
YXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0
KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtODI2LDgg
KzgzNiw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2Nl
ZWRTdXBwcmVzc1dhaXRpbmdTZXNzaW9uKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRp
b25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbd2ViVmlldyBzZXROYXZp
Z2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwotICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xpY3k6
OkFsbG93KTsKIAogICAgIC8vIFRoZSBzZXNzaW9uIHdpbGwgYmUgd2FpdGluZyBzaW5jZSB0aGUg
d2ViIHZpZXcgaXMgaXMgbm90IGludCB0aGUgd2luZG93LgogICAgIFt3ZWJWaWV3IHJlbW92ZUZy
b21TdXBlcnZpZXddOwpAQCAtODY3LDcgKzg3Niw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVk
aXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRTQU1MKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhv
cml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVT
T0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICAvLyBBZGQg
YSBodHRwIGJvZHkgdG8gdGhlIHJlcXVlc3QgdG8gbWltaWMgYSBTQU1MIHJlcXVlc3QuCiAgICAg
YXV0byByZXF1ZXN0ID0gYWRvcHROUyhbTlNNdXRhYmxlVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp0ZXN0VVJMLmdldCgpXSk7CkBAIC04OTcsNiArOTA2LDggQEAgVEVTVChTT0F1dGhvcml6YXRp
b25SZWRpcmVjdCwgQXV0aG9yaXphdGlvbk9wdGlvbnMpCiAKICAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzpAIiIgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJMKCksICJodHRwOi8vd3d3LndlYmtp
dC5vcmciKV07CiAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworICAgIFtk
ZWxlZ2F0ZSBzZXRTaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOnRydWVdOwogICAgIFt3ZWJWaWV3
IGV2YWx1YXRlSmF2YVNjcmlwdDogQCJsb2NhdGlvbiA9ICdodHRwOi8vd3d3LmV4YW1wbGUuY29t
JyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQpOwogICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwgImh0dHA6Ly93
d3cud2Via2l0Lm9yZyIsIDApOwpAQCAtOTEzLDcgKzkyNCw3IEBAIFRFU1QoU09BdXRob3JpemF0
aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkRpZE5vdEhhbmRsZVR3aWNlKQogCiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAg
ICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRl
LmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAK
ICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRl
c3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpA
QCAtOTM0LDcgKzk0NSw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2Vw
dGlvbkNvbXBsZXRlVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5F
eHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6
OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC05NTksNyArOTcwLDcgQEAgVEVTVChT
T0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZFdpdGhVSSkKIAogICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBk
ZWxlZ2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJW
aWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxs
b3cpOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9y
bWVkKTsKQEAgLTk5Miw3ICsxMDAzLDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwg
SW50ZXJjZXB0aW9uQ2FuY2VsV2l0aFVJKQogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRp
b25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhv
cml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25m
aWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgp
LCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAg
ICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwpAQCAtMTAyNCw3ICsxMDM1LDcg
QEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uRXJyb3JXaXRoVUkp
CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwogICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5n
ZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZp
ZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNjaGVtZXNQb2xp
Y3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlv
blBlcmZvcm1lZCk7CkBAIC0xMDU2LDcgKzEwNjcsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJl
ZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkU3VwcHJlc3NBY3RpdmVTZXNzaW9uV2l0aFVJKQog
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKICAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKLSAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0
KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5
OjpBbGxvdyk7CiAKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKICAgICBVdGlsOjpydW4oJmF1dGhvcml6YXRpb25Q
ZXJmb3JtZWQpOwpAQCAtMTA5NSw3ICsxMTA2LDcgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRp
cmVjdCwgU2hvd1VJVHdpY2UpCiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0p
OwogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmln
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlv
bldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGNvbmZpZ3VyZVNP
QXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5F
eHRlcm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKIAogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQoKV1dOwogICAgIFV0aWw6
OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC0xMTMyLDcgKzExNDMsNyBAQCBURVNU
KFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBOU05vdGlmaWNhdGlvbkNlbnRlcikKIAogICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7
Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxl
Z2F0ZS5nZXQoKSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3
LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxsb3cp
OwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVk
KTsKQEAgLTExNjcsNiArMTE3OCw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIE5vSW50
ZXJjZXB0aW9ucykKICAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJM
OnRlc3RVUkwuZ2V0KCldOwogICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CiAK
KyAgICBbZGVsZWdhdGUgc2V0U2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lczp0cnVlXTsKICAgICBu
YXZpZ2F0aW9uQ29tcGxldGVkID0gZmFsc2U7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJW
aWV3IHNlbmRDbGlja3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNr
czoxXTsKQEAgLTEyNDQsNiArMTI1Niw3IEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIElu
dGVyY2VwdGlvbkVycm9yKQogICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJh
c2VVUkw6YmFzZVVSTC5nZXQoKV07CiAgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9uQ29tcGxldGVk
KTsKIAorICAgIFtkZWxlZ2F0ZSBzZXRTaG91bGRPcGVuRXh0ZXJuYWxTY2hlbWVzOnRydWVdOwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBbd2ViVmlldyBzZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQ
b2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CiAjZWxpZiBQTEFURk9STShJT1MpCkBA
IC0xNDIwLDYgKzE0MzMsNyBAQCBURVNUKFNPQXV0aG9yaXphdGlvblBvcFVwLCBJbnRlcmNlcHRp
b25TdWNjZWVkV2l0aE90aGVySHR0cFN0YXR1c0NvZGUpCiAgICAgW3dlYlZpZXcgbG9hZEhUTUxT
dHJpbmc6dGVzdEh0bWwgYmFzZVVSTDpiYXNlVVJMLmdldCgpXTsKICAgICBVdGlsOjpydW4oJm5h
dmlnYXRpb25Db21wbGV0ZWQpOwogCisgICAgW2RlbGVnYXRlIHNldFNob3VsZE9wZW5FeHRlcm5h
bFNjaGVtZXM6dHJ1ZV07CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFt3ZWJWaWV3IHNlbmRDbGlj
a3NBdFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsKICNlbGlm
IFBMQVRGT1JNKElPUykK
</data>

          </attachment>
      

    </bug>

</bugzilla>